6 StronaStrzałkaStrzałka jest zrealizowana w technice P/MG. Zazwyczaj pociąga to za sobą przeznaczenie 2K pamięci na dane, ale szczęśliwie potrzebny był tylko jeden duszek tak, że dało się wykorzystać do tego 6 stronę. Przy ustawieniu adresu pamięci duszków na $0000, na stronę 6 wypada duszek nr 2. Pozostałe duszki są ustawiane poza ekranem tak, że ich nie widać - wyglądałyby nieciekawie, gdyż ich dane są pobierane z pamięci zajętej przez zmienne OS'u i program BASIC'a. Wszystkie radosne efekty są dostępne dzięki pięciu relokowalnym procedurom maszynowym, zapisanym w zmiennych łańcuchowych BASICa. Są one wywoływane poprzez X=USR(ADR(S...S)). Pierwszą z nich jest SINIT$, która spełnia funkcje przygotowawcze - zeruje 6 stronę. Inicjuje grafikę P/M, ustawia pozycję początkową strzałki w lewym górnym rogu ekranu. Jej wywołanie jest konieczne również każdorazowo po instrukcji GRAPHICS, gdyż niszczy ona rejestry P/MG powodując pojawienie się śmieci na ekranie. Następną procedurą jest SMOVE$. Wyświetla ona na ekranie kursor w postaci strzałki i przesuwa go zgodnie z ruchami pierwszego joysticka. Wraca do BASICa po naciśnięciu guzika na joysticku, a strzałka zatrzymuje się. Chcąc teraz odczytać jej położenie, najwygodniej będzie się posłużyć procedurami SPOSX$ i SPOSY$. Zwracają one jako rezultat funkcji USR(...) odpowiednio pozycję poziomą i pionową strzałki, przeliczoną odpowiednio dla aktualnego trybu graficznego. Współrzędne są podawane tak, jak w instrukcji POSITION, czyli od zera. Po obsłużeniu tego, co nam przekazał użytkownik naciskając guzik, wywołujemy znowu SMOVE$ i wszystko powtarza się od początku. Gdyby kogoś denerwowało, że strzałka pozostaje nieruchomo na ekranie pomiędzy dwoma wywołaniami SMOVES, niech po wywołaniu SMOVES umieści instrukcję POKE 54250,0. Spowoduje to zniknięcie strzałki do momentu ponownego wywołania SMOVE$, a SPOSX$ oraz SPOSY$ będą działać normalnie. Na zakończenie programu należy wywołać SENDS, która wyłączy PM/G i zmaże strzałkę z ekranu. Wojciech Palacz
|