Ready/Run

Takie sobie archiwum listingów ze starych magazynów komputerowych


Sprite'y, ramka i Basic
  • Język programu: Commodore Basic
  • Platforma: Commodore C64
  • Kod zamieszczono w Bajtek 11/1988
  • Autor listingu: Jacek Czok
  • Listing nadesłał: Faust

Stan listingu:

4
Listing gotowy - uruchamia się na emulatorze lub realnej maszynie zgodny z listingiem zamieszczonym w periodyku

Ciekawe efekty graficzne, jakie pozwala nam uzyskać układ kontrolera wizji C-64, stały się ostatnio domeną grup młodych ludzi zajmujących się tworzeniem tzw. „demosów”, rozpowszechnianych poprzez duże sieci komputerowe.


Co ciekawsze efekty wizualne osiągane w tych programikach biją niejednokrotnie na gtowę duże i rozbudowane programy wytwórni-rekinów takich jak Electronic Arts czy Access. Zobaczymy więc jak wygląda taki program od kuchni...
Sprite'y wyświetlane na ramce są jednym z przykładów wykorzystania przerwań graficznych, W normalnych warunkach pozycję sprite'a możemy określić dowolnie, jednakże, jeśli znajdzie się on na ramce, nie będzie on na ekranie widoczny. Dzięki przerwaniom graficznym ekran można rozszerzyć, co ilustruje program 1. W procedurze RAST2 ekran jest rozszerzany do 25 wierszy. W momencie wyświetlania 25 wiersza generowane jest przerwanie graficzne i wykonywana jest procedura RAST1 zwężająca ekran do 24 wierszy. W ten sposób układ graficzny nie jest w stanie odnaleźć końca ekranu (którym jest normalnie właśnie 25 wiersz; jeśli tylko kolory samej ramki i tła nie są jednakowe, to z pewnością zauważysz wyraźne rozszerzenie się ekranu).
Dużo trudniejszą, ale nie niemożliwą sprawą jest rozszerzenie poziome ekranu. Wymaga to zmiany liczby kolumn z 40 na 39 w każdej linii, którą chcemy mieć rozszerzoną. W tak rozszerzonym obszarze mogą znajdować się jedynie sprite'y- Ekran możemy teraz wykorzystać w dowolny sposób — wyświetlając dowolny tekst czy np. czas. >
W programie 2 chciałbym zaprezentować Czytelnikom nieco inny sposób wykorzystania sprite'ów na ramce — wyświetla on zamiast tekstu numer aktualnie wykonywanej linii Basic. Pomimo korzystania ze sprite'ów program przez cały czas „pamięta” ich właściwe pozycje; w naszym programie w BASIC możemy więc korzystać ze sprite'ów, zmieniać tryby graficzne, kolory, itp., i nie będzie to przeszkadzało głównej funkcji wyświetlania numeru linii na ramce. Numer aktualnie wykonywanej linii programu znajduje się w wektorze S39/S3A. Ponieważ BASIC jest na tyle szybki, że czasem numer linii jest nie do odczytania, rozszerzyłem w swoim programie działanie klawisza CTRL — jego wciśnięcie powoduje zatrzymanie wykonywania programu (napisanego w BASIC). Program 2 wykorzystuje pamięć od adresu SC000 do SC6FF oraz komórki SFD, SFF i SFF.


Od redakcji: Powyższy program (nr 2) stanowi najlepszy przykład, że można połączyć przyjemne z pożytecznym — program ten to po prostu dodatkowe i efektownie wykonane polecenie TRACE... Przy okazji chcielibyśmy sprostować błąd jaki wkradł się z naszej winy do artykułu tego samego autora w numerze specjalnym BAJTKA TYLKO O COMMODORE — przerwania graficzne można zablokować poprzez polecenie LDA #$FF, a nie jak podaliśmy przez LDA S7F (artykuł „Przerwania graficzne”, str. 13). Serdecznie przepraszamy. Wydruk wersji maszynowej programu 1 został sporządzony za pomocą programu Commodore Macroassembler Development System.