PISZEMY DEMOW tym artykule dołączymy do naszego dema następną procedurę - "DLIV.ASM" oraz tekst do płynących napisów. Procedura "DLIV.ASM" obsługuje przerwanie Display List i jest jedną z najobszerniejszych procedur dema.
Procedure Equ $9897
List_mem Equ %00000110
List_err Equ %00000101
Code_mem Equ %00010000
Code_dsk Equ %00100000
Chrctl Equ $D401
Colpf0 Equ $D016
Colpf1 Equ $D017
Colpf2 Equ $D018
Colpm0 Equ $D012
Colpm1 Equ $D013
Colpm2 Equ $D014
Colpm3 Equ $D015
Dliv Equ $0200
Dmactl Equ $D400
Hposp0 Equ $D000
Hposp1 Equ $D001
Hposp2 Equ $D002
Hposp3 Equ $D003
HScrol Equ $D404
Nmien Equ $D40E
Sizep1 Equ $D009
Sizep3 Equ $D00B
Wsync Equ $D40A
BHScrol Equ $0088
HHScrol Equ $0089
OHScrol Equ $008A
Opt List_err+Code_dsk
Org Procedure
Ldx <Przerw
Ldy >Przerw
Stx Dliv
Sty Dliv+1
Lda #$C0
Sta Nmien
Rts
Przerw Pha
Txa
Pha
Tya
Pha
Lda Licznik
Asl @
Tax
Lda Vect+$01,x
Pha
Lda Vect,x
Pha
Rts
Koniec Inc Licznik
Lda Licznik
Cmp #$05
Bne L1
Lda #$00
Sta Licznik
L1 Pla
Tay
Pla
Tax
Pla
Rti
Dliv_1 Lda #$3D
Sta Dmactl
Lda #$30
Sta Hposp0
Lda #$38
Sta Hposp1
Lda #$C0
Sta Hposp2
Lda #$C8
Sta Hposp3
Ldy #$00
Sty Sizep1
Sty Sizep3
Ldx #$06
L2 Sta Wsync
Dex
Bpl L2
Lda #$0C
Sta Hscrol
Ldx #$07
L3 Lda Tab_2,y
Sta Colpm0
Sta Colpm1
Sta Colpm2
Sta Colpm3
Iny
Sta Wsync
Lda Tab_2,y
Sta Colpm0
Sta Colpm1
Sta Colpm2
Sta Colpm3
Iny
Sta Wsync
Lda Tab_1,x
Sta Colpf0
Dex
Bpl L3
Lda #$06
Sta Chrctl
Lda #$00
Sta Colpm0
Sta Colpm2
Sta Colpf1
Sta Wsync
Sta Wsync
Ldx #$0D
Txa
L4 Stx Hscrol
Stx Wsync
Dex
Sec
Sbc #$02
Bpl L4
Lda #$02
Sta Chrctl
Inc Plr+$02
Lda Plr+$02
And #$03
Sta Plr+$02
Bne L8
Ldx #$00
L5 Lda Tab_2+1,x
Sta Tab_2,x
Inx
Cpx #$10
Bne L5
Lda Plr+$01
Bne L6
Inc Plr
Inc Plr
Lda Plr
And #$0E
Cmp #$0E
Bne L7
Inc Plr+$01
Jmp L7
L6 Dec Plr
Dec Plr
Lda Plr
And #$0F
Bne L7
Dec Plr+$01
Clc
Lda Plr
Adc #$10
Sta Plr
L7 Lda Plr
Sta Tab_2+$0F
L8 Jmp Koniec
Dliv_2 Lda HHScrol
Sta HScrol
Lda #$34
Sta Hposp0
Lda #$40
Sta Hposp1
Lda #$C4
Sta Hposp2
Lda #$A0
Sta Hposp3
Lda #$92
Sta Colpm1
Sta Colpm3
Lda #$03
Sta Sizep1
Sta Sizep3
Ldx #$06
L9 Lda Tab_3,x
Sta Colpf2
Lda Tab_1,x
Ora #$10
Sta Colpm0
Sta Colpm2
Sta Wsync
Dex
Bpl L9
Jmp Koniec
Dliv_3 Lda #$F2
Sta Colpf0
Lda #$36
Sta Colpf1
Lda #$3C
Sta Colpf2
Lda OHScrol
Sta HScrol
Jmp Koniec
Dliv_4 Lda HHScrol
Sta HScrol
Ldx #$00
Stx Colpf1
L10 Lda Tab_3,x
Sta Colpf2
Lda Tab_1,x
Ora #$10
Sta Colpm0
Sta Colpm2
Sta Wsync
Inx
Cpx #$08
Bne L10
Lda #$00
Sta Colpm0
Sta Colpm2
Jmp Koniec
Dliv_5 Sta Wsync
Lda BHScrol
Sta HScrol
Lda #$B4
Sta Colpf0
Lda #$B8
Sta Colpf1
Lda #$BC
Sta Colpf2
Lda #$3F
Sta Dmactl
Lda #$A0
Sta Hposp1
Lda #$0F
Sta Colpm1
Jmp Koniec
Licznik Dta B($00)
Plr Dta B($10),B($00),B($00)
Vect Dta A(Dliv_1-$01)
Dta A(Dliv_2-$01)
Dta A(Dliv_3-$01)
Dta A(Dliv_4-$01)
Dta A(Dliv_5-$01)
Tab_1 Dta B($4E),B($4C),B($4A)
Dta B($48),B($46),B($44)
Dta B($42),B($40)
Tab_2 Dta B($00),B($02),B($04)
Dta B($06),B($08),B($0A)
Dta B($0C),B($0E),B($0E)
Dta B($0C),B($0A),B($08)
Dta B($06),B($04),B($02)
Dta B($00)
Tab_3 Dta B($54),B($96),B($98)
Dta B($98),B($98),B($98)
Dta B($96),B($94)
End of file
W procedurze wykorzystywane są trzy zmienne: BHScrol, HHscrol i OHscroll. Każda z nich przechowuje wartość dla HScrol'a. BHScrol odpowiada za stan Hscrol'a największego płynącego napisu na dole ekranu. HHScrol pełni tę samą rolę dla dwóch napisów umieszczonych nad i pod obrazkiem. Natomiast OHScrol odpowiedzialny jest za pozycję poruszającego się obrazka. Wszystkie te zmienne umieszczone są w obszarze od $88 do $8A. Jest to obszar wykorzystywany przez QA. Mimo tego procedurę da się uruchomić spod asemblera. Niestety większość następnych procedur będzie możliwe do uruchomienia tylko po skompilowaniu ich na dysk. Aby można było zobaczyć efekt działania procedury, konieczne jest uprzednie uruchomienie procedury zamieszczonej w poprzednim artykule - "DLI.ASM".Procedura zaczyna się uaktywnieniem przerwania Dliv - ustawia wektor ($200) na etykietę Przerw. Ponieważ przerwanie Display List wywoływane jest kilkakrotnie na jednym ekranie i za każdym razem pełni inną funkcję, dlatego też główną częścią procedury przerwania jest wybór odpowiedniej podprocedury. Realizowane jest to przy pomocy licznika Licznik i tablicy skoków Vect. Przy każdym wywołaniu przerwania Licznik jest zwiększany, następnie według niego zostaje wybrany adres z tablicy do kolejnej podprocedury i podprocedura ta jest uruchamiana. Pierwsza uruchamiana podprocedura Dliv_1 ustawia odpowiednią szerokość ekranu i poziome pozycje dla obracających się znaczków Atari. Następnie opuszczane jest siedem linii ekranu i w kolejnej pętli z tablicy Tab_2 pobierane są wartości kolorów dla player'ów i z tablicy Tab_1 wartości kolorów dla napisu 'Tajemnice Atari". Druga linia z napisem 'Tajemnice Atari" jest lustrem poprzedniej, czyli musi być obrócona "do góry nogami". Realizowane jest to przy pomocy rejestru sprzętowego Chrctl ($D401) kontrolującego wygląd znaków, po czym zerowane są wartości kolorów dla player'ów oraz wykonywana jest pętla ustalająca kolory i pozycję drugiej linii napisu. Po wykonaniu tych czynności przywracany jest poprzedni stan rejestru Chrctl. Dalsza część podprocedury Dliv_1 przygotowuje tablicę kolorów player'ów Tab_2 przy pomocy trzybajtowej tablicy Plr. Jest to wykonywane co czwarty obieg przerwania (licznikiem jest ostatni bajt tablicy Plr). W takim wypadku przepisywana jest tablica Tab_2, a ostatni jej bajt określany jest na podstawie pierwszego bajtu tablicy Pjr. Natomiast drugi bajt tej tablicy kontroluje zwiększanie lub zmniejszanie pierwszego bajtu. Kolejna podprocedura - Dliv_2 ustawia HScrol'a dla płynącego napisu oraz zmienia stan kolorów i pozycji player'ów. Ostatnią czynnością tej procedury jest ustalenie kolorów pionowych scroll'i i poziomego płynącego napisu. Czynności te wykonywane są w pętli. Podprocedura Dliv_3 ustawia wartości dla kolorów i HScrol'a obrazka. Dliv_4 pełni podobną rolę jak podprocedura Dliv_2: ustala wartości kolorów dla poziomego płynącego napisu i napisów pionowych. Ostatnia podprocedura - Dliv_5 rozszerza ekran, ustawia wartości kolorów dla dużego płynącego napisu oraz pozycję i kolor jednego player'a, który będzie wykorzystywany jako wskaźnik głośności kanałów dźwiękowych. Każda podprocedura kończy się skokiem do etykiety Koniec, gdzie jest zwiększany Licznik. Poniżej zamieszczony został tekst do płynących napisów w formacie "Zgrywusa+". Dane należy przepisać, dołączyć "Zgrywusa+" i zapisać w formacie plikowym. Plik posiada własny nagłówek Dos'a i będzie ładowany pod adres $6E00. Jeśli Czytelnik nie ma ochoty wpisywać tego tekstu, a umie napisać własny pod dowolnym monitorem, to przydatna będzie informacja, że: Ponieważ zamieściliśmy już tekst do płynących napisów, dlatego też w następnym artykule zajmiemy się procedurami przesuwu. 1000 REM *--------------------------* 1001 REM * Piszemy demo 10 * 1002 REM * autorzy: Tomasz Bielak * 1003 REM * Rafal Bielecki * 1004 REM * (c) 1993 Tajemnice ATARI * 1005 REM *--------------------------* 1010 DATA ffff006eff7300000000002175 1020 DATA 746f727a790064656d6f6e7374 1030 DATA 7261636a6900706f7a64726177 1040 DATA 69616a41000000002136212c2f 1050 DATA 2e003425212d00000022292700 1060 DATA 262f2f3407610000002a212b35 1070 DATA 222100283533212b2100000034 1080 DATA 2f2d21333a21002c2925222923 1090 DATA 28210000002d21272e35332100 1100 DATA 6900696e6e796368007a003726 1110 DATA 2d280000002d29322127250033 1120 DATA 2f2634372132250000002f3532 1130 DATA 00152f26340000003021332b35 1140 DATA 242100000033232f3230292f00 1150 DATA 332f2634372132250000002d29 1160 DATA 2328212c210037292425322500 1170 DATA 00006f72617a007a616772616e 1180 DATA 69637a6e650067727570790070 1190 DATA 726f6772616d6973744f770000 1200 DATA 00213421322900222934002239 1210 DATA 342532003533253200232c3522 1220 DATA 0000002725322d212e00232821 1230 DATA 2f342923330000002829272800 1240 DATA 34252328003425212d0000002c 1250 DATA 2f3224002f26002421322b2e25 1260 DATA 33330000003025342532210033 1270 DATA 2122213428210000003a253030 1280 DATA 252c292e0027212d2533000000 1290 DATA 00337065636a616c6e6500706f 1300 DATA 7a64726f7769656e6961007072 1310 DATA 7a6573794c616d7900646c6100 1320 DATA 6e61737a796368006b6f6c6567 1330 DATA 4f77000000223a29212b210000 1340 DATA 00242f2d252c210000002d2132 1350 DATA 29212e21000000322f34210000 1360 DATA 0037352a210000006900696e6e 1370 DATA 7963680c006f006b744f727963 1380 DATA 68007a61706f6d6e69656c6953 1390 DATA 6d79000e0e0e00000000000000 1400 DATA 00000000000000000000008080 1410 DATA 80808080808080808080808080 1420 DATA 80808080808080808080808080 1430 DATA 80808080a4e5edefeef3f4f2e1 1440 DATA e3eac580fae1f0f2efe7f2e1ed 1450 DATA eff7e1ece99a80b4efede1f3fa 1460 DATA 80a2e9e5ece1eb80e980b2e1e6 1470 DATA e1cc80a2e9e5ece5e3ebe98e80 1480 DATA 80afe2f2e1fae5eb80f0efede9 1490 DATA c5e4faf980f3e3f2efecec87e1 1500 DATA ede980faeff3f4e1cc80eee1f2 1510 DATA f9f3eff7e1eef980f0f2faf980 1520 DATA f0efedefe3f980f0f2efe7f2e1 1530 DATA edf580e7f2e1e6e9e3faeee5e7 1540 DATA ef80a2ece1fae9eee780b0e1e4 1550 DATA e4ece5f380f0f2fae5fa80b2e1 1560 DATA e6e1cce180a2e9e5ece5e3ebe9 1570 DATA e5e7ef8e8080a4e1eee580e4ef 1580 DATA 80edf5faf9ebe980faeff3f4e1 1590 DATA ccf980f0f2fae5eee9e5f3e9ef 1600 DATA eee580fa80ebefedf0f5f4e5f2 1610 DATA e180a9a2ad80eee180a1b4a1b2 1620 DATA a980e4ef80f0f2efe7f2e1edf5 1630 DATA 80edf5faf9e3faeee5e7ef80a6 1640 DATA f5f4f5f2e580a3efedf0eff3e5 1650 DATA f280f0f2fae5fa80b4efede1f3 1660 DATA fae180a2e9e5ece1ebe18e80aa 1670 DATA e5f3f480f4ef80e4eff3f9c380 1680 DATA faeee1eef980f0eff3e9e1e4e1 1690 DATA e3faefed80a1ada9a780e980a9 1700 DATA a2ad87cff780f5f4f7cff280f0 1710 DATA efe480eee1faf7c18087a3f2e5 1720 DATA edefeee1878e8080a4e5edefee 1730 DATA f3f4f2e1e3eae180faeff3f4e1 1740 DATA cce180eee1f0e9f3e1eee180f7 1750 DATA 80e1f3e5ede2ece5f2fae58096 1760 DATA 95909280f0f2faf980f0efedef 1770 DATA e3f980b1a18e80808080808080 1780 DATA 80808080808080808080808080 1790 DATA 80808080808080808080808080 1800 DATA 80808000000014007369657270 1810 DATA 6e6961001119191200726f6b75 1820 DATA 007a616b6f4e637a796c69536d 1830 DATA 79007072616365006e6164006e 1840 DATA 61737a410064656d6f6e737472 1850 DATA 61636a410e0034790c00777974 1860 DATA 7277614c7900237a7974656c6e 1870 DATA 696b75000870727a656b6c6570 1880 DATA 797761637a75090c00646f7069 1890 DATA 65726f00746572617a0c006a61 1900 DATA 6b6f006a6564656e007a006e69 1910 DATA 657769656c7500646f74727761 1920 DATA 4c655300646f0075707261676e 1930 DATA 696f6e65676f0c007a61724f77 1940 DATA 6e6f0070727a657a006e617300 1950 DATA 6a616b00690070727a657a0023 1960 DATA 6965626965006b6f4e63610e0e 1970 DATA 0e00370064774f636800706f77 1980 DATA 795a737a7963680c00706f7a69 1990 DATA 6f6d796368007363726f6c6c07 2000 DATA 616368007a6e616a647a696573 2010 DATA 7a006b724f746b4100696e666f 2020 DATA 726d61636a4500646f7479637a 2030 DATA 416341006e61737a656a006465 2040 DATA 6d6f6e73747261636a690e002a 2050 DATA 655a656c69007a6e75647a6900 2060 DATA 23694500746100637a45534300 2070 DATA 64656d61006d6f5a65737a006e 2080 DATA 616369736e4143003328292634 2090 DATA 006162790070727a656a534300 2100 DATA 646f006e61737445706e656a00 2110 DATA 69007a6172617a656d006f7374 2120 DATA 61746e69656a00637a45536369 2130 DATA 0e003a616e696d00746f006a65 2140 DATA 646e616b0075637a796e69737a 2150 DATA 00706f637a656b616a006a6573 2160 DATA 7a637a6500636877696c450069 2170 DATA 0070727a65637a7974616a0074 2180 DATA 656e0074656b737400646f006b 2190 DATA 6f4e63610e000000 Tomasz Bielak
Rafał Bielecki |