dzelo3 Opublikowano 8 Lutego 2012 Udostępnij Opublikowano 8 Lutego 2012 witam, mam duży problem, a mało czasu... potrzebuję wysterować 4 złącza na gnieździe LPT znalazłem kilka materiałów w internecie, jednak jestem zbyt zielony aby je wykorzystać... najlepiej prosiłbym o gotowe rozwiązanie... ;/ w grę wchodzi tylko GameMaker... wiem, że o wiele prosze, ale mam naprawdę mało czasu na wykonanie tego... znalezione materiały : http://gmc.yoyogames.com/index.php?showtopic=360653 http://gmc.yoyogames.com/?showtopic=165308 - od Tymona linki do bibliotek : IO - http://www.geekhideout.com/iodll.shtml Inpout32 - http://logix4u.net/component/content/artic...dows-982000ntxp Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 8 Lutego 2012 Udostępnij Opublikowano 8 Lutego 2012 Przeportowałem Ci IO. https://gmclan.org/up152_3_io.html Nie wiem czy działa bezbłędnie. Testuj. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dzelo3 Opublikowano 9 Lutego 2012 Autor Udostępnij Opublikowano 9 Lutego 2012 emm... zaimportowałem skrypt do gm8.0 ... na start wyskakuje błąd : ___________________________________________ ERROR in action number 1 of Create Event for object object0: Error defining an external function. wtedy ignoruje to 16 razy (tyle ile dll ma funkcji) po czym wyskakuje message 'blad' czyli nie chce sie wczytac dll... co jest źle ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 9 Lutego 2012 Udostępnij Opublikowano 9 Lutego 2012 Wypakowałeś DLLa? EDIT Już wiem o co cho. Przekompiluję DLLa później. EDIT 2 https://gmclan.org/up152_3_iogm.html Ale obawiam się, że nie będzie to działać na nowszych systemach. Generalnie z tego co czytałem w ogóle jest to problematyczne na nowszych systemach. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dzelo3 Opublikowano 9 Lutego 2012 Autor Udostępnij Opublikowano 9 Lutego 2012 mam windows XP sp3 dll ładuje się poprawnie, jednak funkcja io_is_driver_installed() wywala -1 czyli chyba coś jest nie tak... nie jestem też pewien czy dobrze adresuje port... przy jakichś demkach pisanych w delphi wyszło na to że moje gniazdo to LPT1 (378-37F) więc zapisuje np. io_set_port_bit('378-37F',8) ale nie działa(raczej) przynajmniej jak bróbowałem wszystkie czyścić i wszystkie ustawiać... mam do gniazda podpięte 4 diody które przy demkach z delphi działały ale z gm nie chcą działać... załączam plik gmk w którym uruchamiam wszystko. dziwnie to działa... jak wyczyszcze i ustawie, to bity 32 i 128 mają wartość -1 a reszta nic... https://gmclan.org/up6064_4_io_dll_gmk.html Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 9 Lutego 2012 Udostępnij Opublikowano 9 Lutego 2012 378-37F to zakres adresów w hexach. A io_is_driver_installed zwraca co ma zwracać - musisz sprawdzić na stronie z której to pochodzi o co chodzi. IsDriverInstalled Returns non-zero if io.dll is installed and functioning. The primary purpose of this function is to ensure that the kernel mode driver for NT/2000/XP has been installed and is accessible. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dzelo3 Opublikowano 9 Lutego 2012 Autor Udostępnij Opublikowano 9 Lutego 2012 ok czyli 'driver' dziala tak ?... a jaki adres mam podać w takim razie ? sprawdzac wszystkie po kolei z tego zakresu zapisane w hex tak ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 9 Lutego 2012 Udostępnij Opublikowano 9 Lutego 2012 378 to pierwszy port LPT 1, 37F to jego ostatni. Przeleć od początku do końca co się dzieje na portach to się dowiesz. Ja nie znam się na LPT. EDIT 8 portów na dane i w sumie by się zgadzało. http://pl.wikipedia.org/wiki/IEEE_1284 Hint. Adresy portów podajesz jako liczbę, nie jako tekst. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dzelo3 Opublikowano 9 Lutego 2012 Autor Udostępnij Opublikowano 9 Lutego 2012 wychodzi na to że jest to 378, gdyż w przykładzie napisanym w delphi z kolei do zlportio.sys tak jest i działa... ale mi to za cholere nie chce wyjść, próbuje jako word, jako bit, i nic nie reaguje... tu jest kod z delphi na 90% działający z tym , że do innego sterownika: interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, Zlportio, StdCtrls, ExtCtrls; type TForm1 = class(TForm) Label1: TLabel; Timer1: TTimer; Label2: TLabel; procedure FormCreate(Sender: TObject); procedure Timer1Timer(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; const LPTdata=$378; implementation {$R *.dfm} procedure TForm1.FormCreate(Sender: TObject); begin if ZLIOStarted then Label1.Caption := 'Sterownik załadowany poprawnie.' else Label1.Caption := 'Nie można załadować sterownika.'; portwriteb(LPTdata,$10); // wpisanie wartosci 00010000 (bin) end; procedure TForm1.Timer1Timer(Sender: TObject); var b:byte; begin b:=portreadb(LPTdata); // czytamy bieżącą wartość b:=b shl 1; // przesuwamy w lewo o jeden if b=0 then b:=$10; // warunek przekroczenia zakresu portwriteb(LPTdata,b); // wpisujemy nową wartość Label2.Caption:=IntToStr(b); // kontrolnie wypisujemy liczbę end; end. napisałbyś coś z tego, gotowe do odpalenia i działające ? ;/ wtedy już dam sobie rade i zostawie cię w spokoju ;P Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 9 Lutego 2012 Udostępnij Opublikowano 9 Lutego 2012 W zasadzie to: GML io_port_out( $378, $10 );Powinno robić to samo co:portwriteb($378,$10); Jeśli to nie działa to może coś z IO jest nie tak - tak jak mówiłem, Windowsy zbytnio się w to mieszają. Ostatecznie napiszę coś innego, ale będziesz musiał to Ty testować, ja nie mam jak. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dzelo3 Opublikowano 9 Lutego 2012 Autor Udostępnij Opublikowano 9 Lutego 2012 ok działa, jestem wniebowzięty :D teraz tylko czemu to ma być $10 ? i jaki styk jaką będzie miał wartość ? myślałem że to będzie 1,2,4,8,16,32,64,128... a tutaj nagle 10. czy może to jest w systemie binarnym ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 9 Lutego 2012 Udostępnij Opublikowano 9 Lutego 2012 Dziesiętne 1, 2, 4, 8, 16, 32, 64, 128 to kolejno 1, 10, 100, 1000, 10000, 100000, 1000000 w binarnym, zaś heksadecymalne $10 to 16 w dziesiętnym czyli 10000 w binarnym. $378 to pierwszy port, $379 drugi, $37A trzeci... $37F ósmy. Każdy port jest 8 bitowy, czyli używasz io_port_out do manipulacją bitów portu. io_port_word_out nadpisze dwa porty, io_port_dword_out cztery - zaczynając od wskazanego. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dzelo3 Opublikowano 9 Lutego 2012 Autor Udostępnij Opublikowano 9 Lutego 2012 ok czyli wszystkie w heksadecymalnym to 1,2,4,8,10,20,40,80 ? :) Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 9 Lutego 2012 Udostępnij Opublikowano 9 Lutego 2012 Tak, dokładnie. :) Jak chcesz wszystkie bity na 1 to masz 255 = $FF = 11111111b. Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dzelo3 Opublikowano 9 Lutego 2012 Autor Udostępnij Opublikowano 9 Lutego 2012 dzięki wielkie za pomoc, teraz mogę dokończyć mój program do sterowania reflektorami w rytm muzyki ^^ może wrzucę do gotowych gier i aplikacji jak skończę ;] Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
dzelo3 Opublikowano 9 Lutego 2012 Autor Udostępnij Opublikowano 9 Lutego 2012 a jakiś prosty wzór do GM na konwertowanie z decimal na hexadecimal ? Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
kt1117 Opublikowano 13 Lutego 2012 Udostępnij Opublikowano 13 Lutego 2012 GML y=argument0 w=0; while(y/8>1) { w*=10 w+=y%8 } return w Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Tymon Opublikowano 13 Lutego 2012 Udostępnij Opublikowano 13 Lutego 2012 Nie oktadecymalne tylko hexadecymalne. GML (dectohex) var _dec, _hex, _r; _dec = floor( argument0 ); _hex = ''; while( _dec != 0 ) { _r = _dec & 15; if( _r > 9 ) { _hex = chr( _r + 55 ) + _hex; } else { _hex += chr( _r + 48 ) + _hex; } _dec = _dec >> 4; } return _hex; Odnośnik do komentarza Udostępnij na innych stronach Więcej opcji udostępniania...
Rekomendowane odpowiedzi
Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto
Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.
Zarejestruj nowe konto
Załóż nowe konto. To bardzo proste!
Zarejestruj sięZaloguj się
Posiadasz już konto? Zaloguj się poniżej.
Zaloguj się