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
Ldx
Po 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)
End
W 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.'
End
W 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.'
End
Dalszy ciąg za miesiąc...
Tomasz Bielak
Rafał Blelecki |