Działa poprawnie: Peek(liczba) Peek(zmienna) Peek(zmienna+liczba) Peek(zmienna+zmienna)
ale jak zrobię coś takiego: Peek(zmienna-liczba)
to nie działa. Robi wtedy tak samo jak by było Peek(zmienna+liczba).
Konkretnie zmienna to jest u mnie word - adres znaku gdzieś tam na ekranie i chcę pobrać znak który jest o jedno miejsce w lewo lub w prawo. W prawo działa dobrze, a w lewo nie chce działać.
Fragment kodu "w prawo" (tmpw to jest zmienna word zawierająca interesujący mnie adres znaku na ekranie; j to zmienna byte): j:=Peek(tmpw+1);
W pliku lst dostajemy: mwy TMPW :bp2 ldy #$01 lda (:bp2),y sta J
Fragment kodu "w lewo": j:=Peek(tmpw-1);
I to co się wygenerowało w pliku lst: mwy TMPW :bp2 ldy #$01 lda (:bp2),y sta J
Czyli to samo - wychodzi na to że obojętnie czy zrobię tmpw+1 czy tmpw-1 to dla kompilatora jest takie samo działanie.
Czy to błąd kompilatora, czy ja powinienem o coś dodatkowo zadbać?
Dziękuję @tebe. Faktycznie aktualizacja kompilatora naprawiła problem:-) Wcześniej jeszcze zauważyłem podobny kłopot jak się dodawało liczbę większą niż 256, ale to już też nieaktualne, zapewne był to ten sam problem który został poprawiony. Teraz jest super:-)
@wojtas76: nic nie testuję, piszę grę, był kiedyś wątek o niej "Dude Story" (znajdziesz na forum) - tam było takie tech demo bardzo jeszcze proste w stosunku do tego co mam już w tej chwili. Jeszcze w tym roku planuję opublikować demo grywalne zawierające fragment gotowej gry, a w przyszłym roku mam nadzieję na ukończenie całości. Sporo z tym roboty, bo gra ma być duuuuuża:-)
jak ktos ma dyzur, ja mam pytanie odnosnie mad pascala , wlasciwie do pascala, czy da sie zrobic zeby readkey nie przerywal dzialania programu, tylko program dzialal dalej, ana readkey byl listener. Podobnie jak na joystick.
bardziej chyba RTCLOCK, bo irq to systemowe jest. Chodzi o odpalanie w grze okreslonych eventow w okreslonych interwałach - na apryklad co 3 sekundy, 1 sekundę. w open pascalu jest Time := Round(Timer / 1573032 * 86400), a Timer jest chyba zmienną globalną. ->link<-
Ja sobie robię zmienną typu byte i w przerwaniu vbl po prostu ją zwiększam, robię tam też warunek, że np. jak jest 5 to ma być 0. W ten sposób mam licznik do iluś tam. Takich zmiennych można zrobić sobie kilka jeżeli potrzebujemy zliczanie do nieskorelowanych ze sobą wartości (np. do 3, do 4, do 5, do 7 itp.). Dodatkową zaletą takich liczników jest to, że można w oparciu o nie sobie np. niektóre rzeczy wykonywać w określonych ramkach, np. można sobie założyć cykl pięciu ramek i w każdej robić coś innego, dzięki czemu zyskujemy miejsce na mnóstwo rzeczy, które mogą się dziać jednocześnie. W taki sposób robię np. w jednej ramce poruszanie gracza, w innej poruszanie przeciwników, a w jeszcze innej sprawdzanie kolizji. Jeżeli licznik tego typu ma służyć do czegoś innego, np. do odmierzania czasu jakiegoś dłuższego, to tak samo można to zrobić, tylko trzeba sobie te zmienne odpowiednio matematycznie przeliczać. Przerwanie vbl w PAL wywoływane jest co 1/50 sekundy, więc jak policzymy do 50 to mamy odmierzoną sekundę.
Bardzo dziekuje za pomoc. Error moze byc nieco mylacy bez odpowiedniego "obycia", w druga strone, jak tablica jest za dluga to kompilator pisze to bezposrednio. Ale jak dluzej sie zastanowic to wiadomo o co chodzi.