Tajemnice ATARI

PISZEMY DEMO


    W 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:

  • tekst dla pionowych płynących napisów umieszczony jest w pamięci od $6E00 do $6FFF,
  • tekst dla małych poziomych napisów - od $7000 do $71FF,
  • tekst dla dużego napisu i do trzeciej części dema - od $7200 do $73FF.

        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



  • Powrót na start | Powrót do spisu treści | Powrót na stronę główną

    Pixel 2002