Piszemy DEMOZamiast wstępuCo już umiemy ?Co to jest demo?Display ListRozkazy ANTIC-aRozkazy tworzące puste linie mają cztery młodsze bity skasowane. Bity 4-6 zawierają liczbę tworzonych pustych linii, zmniejszoną o jeden. Oto pełna lista rozkazów tworzących puste linie: jedna pusta linia - $00 dwie puste linie - $10 trzy puste linie - $20 cztery puste linie - $30 pięć pustych linii - $40 sześć pustych linii - $50 siedem pustych linii - $60 osiem pustych linii - $70 Następną wyróżnioną przez nas grupą rozkazów są rozkazy tworzące linie trybów graficznych lub tekstowych. Poniższa tabela zawiera zestawienie wszystkich tych trybów:
Wykorzystując to, co wiemy, ułóżmy pierwszy program dla ANTIC'a, wyświetlający na ekranie dziewięć linii w trybie $02 ANTIC'a: Program Equ $8800 List_mem Equ %00000110 List_err Equ %00000101 Code_mem Equ %00010000 Code_dsk Equ %00100000 Dlptrs Equ $0230 Kbcodes Equ $02FC Opt List_err+Code_mem Org Program Lda Dlptrs+1 Pha Lda Dlptrs Pha LdxPo uruchomieniu programu wektor DLPTRS odkładany jest na stos. Następnie ustawiamy go tak, aby wskazywał na nasz program ANTIC"a, zaczynający się od etykiety DLIST. Podczas gdy komputer oczekuje na naciśnięcie klawisza (procedura klawisz) widoczny jest efekt działania programu. Po naciśnięciu klawisza przywracany jest stary wektor DLPTRS. Zgodnie z oczekiwaniami na ekranie pojawiło się dziewięć linii trybu $02 ANTIC'a. Oprócz nich zostały wyświetlone również inne, zupełnie przypadkowe linie obrazu, ponieważ program ANTIC'a nie został poprawnie zakończony. Aby to zrealizować musimy poznać jeszcze dwa rozkazy, rozkazy skoków: Teraz jesteśmy w stanie zlikwidować przypadkowe linie, umieszczając na końcu programu ANTIC'a rozkaz JVB. Część programu zawierająca Display List ma postać: Dlist Dta B($02),B($02),B($02) Dta B($02),B($02),B($02) Dta B($02),B($02),B($02) Dta B($41),A(Dlist) EndW ten sposób otrzymaliśmy dziewięć linii trybu $02 ANTIC'a. Linie te zawierają przypadkowe znaki. Dzieje się tak dlatego, że nie poinformowaliśmy ANTIC'a skąd ma pobierać dane do wyświetlania. Tak więc, musimy się zapoznać z kolejnym pojęciem LMS (Load Memory Scan). Zmodyfikujmy poprzedni program tak, aby ANTIC pobierał dane z wyznaczonego przez nas obszaru pamięci. Program po modyfikacji, od etykiety DList, wygląda następująco: DList Dta B($42),A(Text) Dta B($02),B($02) Dta B($02),B($02),B($02) Dta B($02),B($02),B($02) Dta B($41),A(Dlist) Org $A000 Text Dta D'Tajemnice Atari.' EndW pierwszym rozkazie programu ANTIC'a ustawiony został szósty bit (czyli do $02 dodaliśmy $40), a następujący po nim wektor wskazuje na wybrany przez nas obszar pamięci. Z obszaru tego ANTIC będzie pobierał dane wyświetlane na ekran przy pomocy licznika pamięci obrazu. Licznik ten jest automatycznie zwiększany przez ANTIC. Przy tej operacji brane jest pod uwagę tylko 12 najmłodszych bitów licznika, co ogranicza zakres jego działania do czterech kilobajtów. W praktyce oznacza to, że jeśli dane obrazu zajmują więcej niż 4 kilobajty, to po przekroczeniu granicy czterokilobajtowego bloku kolejne dane będą pobierane od początku tego bloku. W naszym przykładzie licznik pamięci ekranu ustawiony jest na tekst rozpoczynający się od etykiety Text. Po uruchomieniu programu tekst ten ukaże się na ekranie. Zwróćmy uwagę na to, że napis "Tajemnice Atari" zapisany jest w pamięci w kodzie IOCODE. Na koniec pierwszego artykułu podajemy jeszcze jedną proponowaną przez nas modyfikację. Ponieważ linie wyświetlane są od samej góry ekranu i mogą być niewidoczne na niektórych monitorach, to należałoby obniżyć wyświetlany ekran. W tym celu umieśćmy trzy rozkazy $70 (tworzące w sumie 24 puste linie). Każdy program ANTIC'a tworzony przez system operacyjny rozpoczyna się tymi rozkazami. Oto zmodyfikowany fragment naszego programu: DList B($70),B($70),B($70) Dta B($42),A(Text) Dta B($02),B($02) Dta B($02),B($02),B($02) Dta B($02),B($02),B($02) Dta B($41),A(Dlist) Org $A000 Text Dta D'Tajemnice Atari.' EndDalszy ciąg za miesiąc... Tomasz Bielak
Rafał Blelecki |