Files
scorch_src/program.lst
T
2022-01-23 20:50:48 -05:00

1100 lines
48 KiB
Plaintext

mads 2.1.3
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/program.asm
1 ; @com.wudsn.ide.asm.mainsourcefile=program.asm
2 ;Atari 8-bit Scorched Earth source code
3 ;---------------------------------------------------
4 ;by Tomasz 'pecus' Pecko and Pawel 'pirx' Kalinowski
5 ;Warsaw 2000,2001,2002,2003,2009,2012,2013
6 ;you can contact us at pecus@poczta.fm or pirx@91.pl
7 ;home page of this project is http://pecus.pigwa.net/pliki/Atari/scorch/
8
9 ;this source code was compiled under OMC65 crossassembler
10 ;and on 2012-06-21 translated to mads
11 ;
12 ;game source code is split into 5+1 parts:
13 ;program.asm is the main game code (with many assorted routines)
14 ;grafproc.asm - graphics routines like line or circle
15 ;textproc.asm - text routines like list of weapons and shop
16 ;variables.asm - all non-zero page variables and constans
17 ;display.asm - display lists and text screen definitions
18 ;ai.asm - artificial stupidity of the computer players
19
20 ;we were trying to use as much macros and pseudoops as possible
21 ;they are defined in atari.hea and macro.hea files together with many
22 ;atari constans. This way it shoud be relatively easy to
23 ;port this code to e.g. C64
24 ;
25 ;After those N years of working on this piece of code
26 ;we are sure it would be much wiser to write it in C or
27 ;Action!, but on the other hand it is so much fun to type 150 chars
28 ;where you want to have y=ax+b :)
29 ;
30 ;originally most variables were in Polish, comments were sparse
31 ;but we wanted to release this piece of code to public
32 ;and due to being always short of time (to finish the game)
33 ;we decided it must go in 'English' to let other people work on it
34
35 .zpvar xdraw .word = $80 ;variable X for plot
36 .zpvar ydraw .word;variable Y for plot (like in Atari Basic - Y=0 in upper right corner of the screen)
37 .zpvar xbyte .word
38
39 .zpvar ybyte .word
40 .zpvar CharCode .byte
41 .zpvar fontind .word
42 .zpvar tanknr .byte
43 .zpvar TankSequencePointer .byte
44 .zpvar oldplot .word
45 .zpvar xc .word
46 .zpvar temp .word ;temporary word for the most embeded loops only
47 .zpvar temp2 .word;same as above
48 .zpvar tempXROLLER .word;same as above for XROLLER routine
49 ;(used also in result display routine)
50 .zpvar xtempDRAW .word ;same as above for XDRAW routine
51 .zpvar ytempDRAW .word ;same as above for XDRAW routine
52 ;--------------temps used in circle routine
53 .zpvar xi .word ;X (word) in draw routine
54 .zpvar fx .byte ;circle drawing variables
55 .zpvar yi .word ;Y (word) in draw routine
56 .zpvar fy .byte
57 .zpvar xk .word
58 .zpvar fs .byte
59 .zpvar yc .byte ;ycircle - temporary for circle
60 .zpvar dx .word
61 .zpvar tempor2 .byte
62 .zpvar dy .word
63 .zpvar tempor3 .word
64 .zpvar dd .word
65 .zpvar di .word
66 .zpvar dp .word
67 .zpvar modify .word
68 .zpvar weaponPointer .word
69
70 ;-------------------------------
71 ;constants
72 = 0096 FlyDelay = 150
73 = 00C8 screenheight = 200
74 = 0028 screenBytes = 40
75 = 0140 screenwidth = screenBytes*8
76 = 0030 margin = 48 ;mountain drawing Y variable margin
77 = 1010 display = $1010 ;kill dos with the casette recorder!
78 = 0006 MaxPlayers = 6
79
80 icl 'lib/atari.hea'
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/lib/atari.hea
1 .enum @dmactl
2 = 0000 blank = %00
3 = 0001 narrow = %01
4 = 0002 standard= %10
5 = 0003 wide = %11
6 = 0004 missiles= %100
7 = 0008 players = %1000
8 = 0010 lineX1 = %10000
9 = 0000 lineX2 = %00000
10 = 0020 dma = %100000
11 .ende
12
13 = 003F scr48 = @dmactl(wide|dma|players|missiles|lineX1) ;screen 48b
14 = 003E scr40 = @dmactl(standard|dma|players|missiles|lineX1) ;screen 40b
15 = 003D scr32 = @dmactl(narrow|dma|players|missiles|lineX1) ;screen 32b
16
17 .enum @pmcntl
18 = 0001 missiles= %1
19 = 0002 players = %10
20 = 0004 trigs = %100
21 .ende
22
23 .enum @gtictl
24 = 0000 prior0 = %0
25 = 0001 prior1 = %1
26 = 0002 prior2 = %10
27 = 0004 prior4 = %100
28 = 0008 prior8 = %1000
29 = 0010 ply5 = %10000 ; Fifth Player Enable
30 = 0020 mlc = %100000 ; Multiple Color Player Enable
31 = 0040 mode9 = %01000000
32 = 0080 mode10 = %10000000
33 = 00C0 mode11 = %11000000
34 .ende
35
36
37 * ---------------------------------------------------------------------------------------------
38 * --- GTIA
39 * ---------------------------------------------------------------------------------------------
40 = D000 HPOSP0 = $D000 ; pozioma pozycja gracza 0 (Z)
41 = D001 HPOSP1 = $D001 ; pozioma pozycja gracza 1 (Z)
42 = D002 HPOSP2 = $D002 ; pozioma pozycja gracza 2 (Z)
43 = D003 HPOSP3 = $D003 ; pozioma pozycja gracza 3 (Z)
44 = D004 HPOSM0 = $D004 ; pozioma pozycja pocisku 0 (Z)
45 = D005 HPOSM1 = $D005 ; pozioma pozycja pocisku 1 (Z)
46 = D006 HPOSM2 = $D006 ; pozioma pozycja pocisku 2 (Z)
47 = D007 HPOSM3 = $D007 ; pozioma pozycja pocisku 3 (Z)
48 = D008 SIZEP0 = $D008 ; poziomy rozmiar gracza 0 (Z)
49 = D009 SIZEP1 = $D009 ; poziomy rozmiar gracza 1 (Z)
50 = D00A SIZEP2 = $D00A ; poziomy rozmiar gracza 2 (Z)
51 = D00B SIZEP3 = $D00B ; poziomy rozmiar gracza 3 (Z)
52 = D00C SIZEM = $D00C ; poziomy rozmiar pociskw (Z)
53 = D00D GRAFP0 = $D00D ; rejestr grafiki gracza 0 (Z)
54 = D00E GRAFP1 = $D00E ; rejestr grafiki gracza 1 (Z)
55 = D00F GRAFP2 = $D00F ; rejestr grafiki gracza 2 (Z)
56 = D010 GRAFP3 = $D010 ; rejestr grafiki gracza 3 (Z)
57 = D011 GRAFM = $D011 ; rejestr grafiki pociskw (Z)
58 = D012 COLPM0 = $D012 ; rejestr koloru gracza i pocisku 0 (Z)
59 = D013 COLPM1 = $D013 ; rejestr koloru gracza i pocisku 1 (Z)
60 = D014 COLPM2 = $D014 ; rejestr koloru gracza i pocisku 2 (Z)
61 = D015 COLPM3 = $D015 ; rejestr koloru gracza i pocisku 3 (Z)
62 = D016 COLPF0 = $D016 ; rejestr koloru pola gry 0 (Z)
63 = D017 COLPF1 = $D017 ; rejestr koloru pola gry 1 (Z)
64 = D018 COLPF2 = $D018 ; rejestr koloru pola gry 2 (Z)
65 = D019 COLPF3 = $D019 ; rejestr koloru pola gry 3 (Z)
66 = D01A COLBAK = $D01A ; rejestr koloru ta (Z)
67
68 = D016 COLOR0 = colpf0
69 = D017 COLOR1 = colpf1
70 = D018 COLOR2 = colpf2
71 = D019 COLOR3 = colpf3
72
73 = D000 KOLM0PF = $D000 ; kolizja pocisku 0 z polem gry (O)
74 = D001 KOLM1PF = $D001 ; kolizja pocisku 1 z polem gry (O)
75 = D002 KOLM2PF = $D002 ; kolizja pocisku 2 z polem gry (O)
76 = D003 KOLM3PF = $D003 ; kolizja pocisku 3 z polem gry (O)
77 = D004 KOLP0PF = $D004 ; kolizja gracza 0 z polem gry (O)
78 = D005 KOLP1PF = $D005 ; kolizja gracza 1 z polem gry (O)
79 = D006 KOLP2PF = $D006 ; kolizja gracza 2 z polem gry (O)
80 = D007 KOLP3PF = $D007 ; kolizja gracza 3 z polem gry (O)
81 = D008 KOLM0P = $D008 ; kolizja pocisku 0 z graczem (O)
82 = D009 KOLM1P = $D009 ; kolizja pocisku 1 z graczem (O)
83 = D00A KOLM2P = $D00A ; kolizja pocisku 2 z graczem (O)
84 = D00B KOLM3P = $D00B ; kolizja pocisku 3 z graczem (O)
85 = D00C KOLP0P = $D00C ; kolizja gracza 0 z innym graczem (O)
86 = D00D KOLP1P = $D00D ; kolizja gracza 1 z innym graczem (O)
87 = D00E KOLP2P = $D00E ; kolizja gracza 2 z innym graczem (O)
88 = D00F KOLP3P = $D00F ; kolizja gracza 3 z innym graczem (O)
89 = D010 TRIG0 = $D010 ; stan przycisku joysticka 0 (O)
90 = D011 TRIG1 = $D011 ; stan przycisku joysticka 1 (O)
91 = D013 TRIG3 = $D013 ; znacznik doczenia cartridge-a (O)
92 = D014 PAL = $D014 ; znacznik systemu TV (O)
93
94 = D01B GTICTL = $D01B ; rejestr kontroli ukadu GTIA
95 = D01B GTIACTL = gtictl
96
97 = D01C VDELAY = $D01C ; licznik opnienia pionowego P/MG
98 = D01D PMCNTL = $D01D ; rejestr kontroli graczy i pociskw
99 = D01E HITCLR = $D01E ; rejestr kasowania rejestrw kolizji
100 = D01F CONSOL = $D01F ; rejestr stanu klawiszy konsoli Start (bit 0), Select (bit 1), Option (bit 2)
101
102 * ---------------------------------------------------------------------------------------------
103 * --- POKEY
104 * ---------------------------------------------------------------------------------------------
105
106 = 0010 IRQENS = $0010 ; rejestr-cie IRQEN
107 = 0011 IRQSTAT = $0011 ; rejestr-cie IRQST
108
109 = D204 AUDF3 = $D204 ; czstotliwo pracy generatora 3 (Z)
110 = D208 AUDCTL = $D208 ; rejestr kontroli generatorw dwiku (Z)
111 = D209 STIMER = $D209 ; rejestr zerowania licznikw (Z)
112 = D209 KBCODE = $D209 ; kod ostatnio nacinitego klawisza (O)
113 = D20A SKSTRES = $D20A ; rejestr statusu zcza szeregowego (Z)
114 = D20A RANDOM = $D20A ; rejestr liczby losowej (O)
115 = D20D SEROUT = $D20D ; szeregowy rejestr wyjciowy (Z)
116 = D20D SERIN = $D20D ; szeregowy rejestr wejciowy (O)
117 = D20E IRQEN = $D20E ; zezwolenie przerwa IRQ (Z)
118 = D20E IRQST = $D20E ; status przerwa IRQ (O)
119 = D20F SKCTL = $D20F ; rejestr kontroli zcza szeregowego (Z)
120 = D20F SKSTAT = $D20F ; rejestr statusu zcza szeregowego (O)
121
122 * ---------------------------------------------------------------------------------------------
123 * --- PIA
124 * ---------------------------------------------------------------------------------------------
125 = D300 PORTA = $D300 ; port A ukadu PIA
126 = D301 PORTB = $D301 ; port B ukadu PIA
127 = D302 PACTL = $D302 ; rejestr kontroli portu A
128 = D303 PBCTL = $D303 ; rejestr kontroli portu B
129
130 * ---------------------------------------------------------------------------------------------
131 * --- ANTIC
132 * ---------------------------------------------------------------------------------------------
133 = D400 DMACTL = $D400 ; rejestr kontroli dostpu do pamici
134 = D401 CHRCTL = $D401 ; rejestr kontroli wywietlania znakw
135 = D402 DLPTR = $D402 ; adres programu ANTIC-a
136 = D404 HSCROL = $D404 ; znacznik poziomego przesuwu obrazu
137 = D405 VSCROL = $D405 ; znacznik pionowego przesuwu obrazu
138 = D407 PMBASE = $D407 ; adres pamici graczy i pociskw
139 = D409 CHBASE = $D409 ; adres zestawu znakw
140 = D40A WSYNC = $D40A ; znacznik oczekiwania na synchronizacj poziom
141 = D40B VCOUNT = $D40B ; licznik linii obrazu
142 = D40C LPENH = $D40C ; poziome pooenie pira wietlengo
143 = D40D LPENV = $D40D ; pionowe pooenie pira wietlnego
144 = D40E NMIEN = $D40E ; rejestr zezwole na przerwania NMI
145 = D40F NMIST = $D40F ; rejestr statusu przerwa NMI
146
147 ;-------------------------------------
148 ;additional system variables
149 ;-------------------------------------
150 = 02C0 COLPM0S = $02C0 ;- - rejestr-cie COLPM0
151 = 02C1 COLPM1S = $02C1 ;- - rejestr-cie COLPM1
152 = 02C2 COLPM2S = $02C2 ;- - rejestr-cie COLPM2
153 = 02C3 COLPM3S = $02C3 ;- - rejestr-cie COLPM3
154 = 02C4 COLPF0S = $02C4 ;- - rejestr-cie COLPF0
155 = 02C5 COLPF1S = $02C5 ;- - rejestr-cie COLPF1
156 = 02C6 COLPF2S = $02C6 ;- - rejestr-cie COLPF2
157 = 02C7 COLPF3S = $02C7 ;- - rejestr-cie COLPF3
158
159 = 02C8 COLBAKS = $02C8
160 = 026F GTICTLS = $026F ;- - rejestr-cie GTIACTL
161
162 = 022F DMACTLS = $022F ;- - rejestr kontroli dostpu do pamici - cie
163 = 0230 DLPTRS = $0230 ;- - adres programu ANTIC-a - cie
164 = 02F4 CHBAS = $02F4 ;- - rejestr-cie CHBASE
165 = 02FC KBCODES = $02FC ;- - rejestr-cie KBCODE
166
167 = E45C SETVBV = $E45C
168 = E462 XITVBV = $E462
169 = E45F SYSVBV = $E45F
170 = 0012 RTCLOK = $0012
171
172 = 02E5 MEMTOP = $02E5 ;- - adres grnej granicy wolnej pamici RAM
173 = 02E7 MEMLO = $02E7 ;- - adres dolnej granicy wolnej pamici RAM
174
175 = 0278 JSTICK0 = $0278 ;- - pooenie joysticka 0
176 = 0279 JSTICK1 = $0279 ;- JSTICK1 - pooenie joysticka 1
177 = 027A JSTICK2 = $027A ;- JSTICK2 - pooenie joysticka 0
178 = 027B JSTICK3 = $027B ;- JSTICK3 - pooenie joysticka 1
179 = 027C PTRIG0 = $027C ;- PTRIG0 - przycisk potencjometru 0
180 = 027D PTRIG1 = $027D ;- PTRIG1 - przycisk potencjometru 1
181 = 0284 TRIG0S = $0284 ;- TRIG0S - przycisk joysticka 0, rejestr-cie TRIG0
182 = 0285 TRIG1S = $0285 ;- TRIG1S - przycisk joysticka 1, rejestr-cie TRIG1
183 = 0286 TRIG2S = $0286 ;- TRIG2S - rejestr-cie TRIG0
184 = 0287 TRIG3S = $0287 ;- TRIG3S - rejestr-cie TRIG1
185
186
187 /*
188 Rejestry OS w pamici RAM
189
190 $08 - WARMST - znacznik gorcego startu
191 $0E - APPMHI - najwyszy adres RAM zajty przez program
192 $10 - IRQENS - rejestr-cie IRQEN
193 $11 - IRQSTAT - rejestr-cie IRQST
194 $12 - RTCLOK - zegar czasu rzeczywistego
195 $15 - BUFADR - adres bufora dla operacji dyskowych
196 $17 - ICCOMT - rejestr przejciowy kodu operacji I/O
197 $20 - ZIOCB - zerostronicowy blok kontroli I/O
198 $20 - ICHIDZ - indeks wpisu urzdzenia w HATABS
199 $21 - ICDNOZ - numer urzdzenia
200 $22 - ICCOMZ - kod operacji wejcia/wyjcia
201 $23 - ICSTZ - status operacji wejcia/wyjcia
202 $24 - ICBAZ - adres bufora danych dla operacji I/O
203 $26 - ICPTZ - adres procedury obsugi dla operacji
204 $28 - ICBLZ - dugo bufora danych dla operacji I/O
205 $2A - ICAX1Z - rejestr pomocniczy ZIOCB
206 $2B - ICAX2Z - rejestr pomocniczy ZIOCB
207 $2C - ICAX3Z - rejestr pomocniczy ZIOCB
208 $2D - ICAX4Z - rejestr pomocniczy ZIOCB
209 $2E - ICAX5Z - rejestr pomocniczy ZIOCB
210 $2F - ICAX6Z - rejestr pomocniczy ZIOCB
211 $30 - STATUS - status aktualnej operacji SIO
212 $31 - CHKSUM - suma kontrolna dla operacji SIO
213 $32 - BUFR - adres bufora danych dla SIO
214 $34 - BUFEN - adres koca bufora danych dla SIO
215 $36 - LTEMP - pomocniczy wektor odczytu listy liniowej
216 $38 - BUFRFL - znacznik zapenienia bufora SIO
217 $39 - RECVND - znacznik koca odczytu
218 $3A - XMTDON - znacznik koca transmisji
219 $3B - CHKSNT - znacznik nadania sumy kontrolnej
220 $3C - NOCKSM - znacznik braku sumy kontrolnej
221 $3D - BPTR - licznik bufora magnetofonu
222 $3E - GAPTYP - znacznik dugoci przerwy midzy blokami
223 $3F - FEOF - znacznik koca zbioru
224 $40 - FREQ - licznik dwiku przy otwarciu magnetofonu
225 $41 - IOSNDEN - znacznik dwiku przy transmisji
226 $42 - CRITIC - znacznik krytycznych czasowo operacji I/O
227 $4A - ZCHAIN - rejestr nastpstwa listy liniowej
228 $4C - DSTAT - status klawiatury i ekranu
229 $50 - TEMP - pomocniczy rejestr przejciowy
230 $51 - HOLD1 - pomocniczy rejestr przejciowy
231 $52 - LMARGIN - lewy margines obrazu
232 $53 - RMARGIN - prawy margines obrazu
233 $54 - ROWCRS - pionowa pozycja kursora
234 $55 - COLCRS - pozioma pozycja kursora
235 $57 - DINDEX - numer trybu graficznego OS
236 $58 - SAVMSC - adres pamici obrazu
237 $5A - OLDROW - poprzednia pionowa pozycja kursora
238 $5B - OLDCOL - poprzednia pozioma pozycja kursora
239 $5D - OLDCHR - poprzedni znak na ekranie
240 $5E - OLDADR - poprzedni adres znaku na ekranie
241 $60 - FKDEFP - wektor tabeli definicji klawiszy F1-F4
242 $62 - PALNTS - wskanik systemu TV
243 $63 - LOGCOL - adres kursora w wierszu logicznym
244 $64 - ADRESS - rejestr adresowy dla procedur edytora
245 $66 - MLTTMP - pomocniczy rejestr przejciowy
246 $68 - SAVADR - pomocniczy rejestr adresowy
247 $6A - RAMTOP - liczba stron pamici RAM
248 $6B - BUFCNT - licznik bufora edytora
249 $6C - BUFSTR - adres bufora dla edytora
250 $6E - BITMSK - maska bitowa do wywietlenia znaku
251 $6F - SHFAMT - liczba przesuni punktu
252 $70 - ROWAC - aktualny wiersz przy rysowaniu
253 $72 - COLAC - aktualna kolumna przy rysowaniu
254 $74 - ENDPT - znacznik koca rysowanej linii
255 $76 - DELTAR - przyrost pionowej pozycji kursora
256 $77 - DELTAC - przyrost poziomej pozycji kursora
257 $79 - KEYDEFP - wektor tabeli definicji klawiszy
258 $7B - SWPFLG - znacznik kursora w trybach z oknem
259 $7C - HOLDCH - przechowywanie wartoci znaku
260 $7D - INSDAT - rejestr pomocniczy edytora
261 $7E - COUNTR - licznik pamici obrazu dla DOSCR i DRAW
262 $0100 - STACK - stos mikroprocesora 6502
263 $0200 - DLIV - wektor przerwania programu ANTIC-a
264 $0210 - VTIMR1 - wektor przerwania licznika 1 POKEY-a
265 $0212 - VTIMR2 - wektor przerwania licznika 2 POKEY-a
266 $0214 - VTIMR4 - wektor przerwania licznika 4 POKEY-a
267 $0218 - TIMCNT1 - pierwszy licznik systemu
268 $0226 - TIMVEC1 - wektor przerwania licznika TIMCNT1
269 $022A - TIMFLG3 - znacznik wyzerowania licznika TIMCNT3
270 $022F - DMACTLS - rejestr-cie DMACTL
271 $0230 - DLPTRS - rejestr-cie DLPTR
272 $0232 - SKCTLS - rejestr-cie SKCTL
273 $0233 - LCOUNT - licznik odczytu dla nowego urzdzenia
274 $0234 - LPENHS - rejestr-cie LPENH
275 $0235 - LPENVS - rejestr-cie LPENV
276 $023A - CDEVIC - kod urzdzenia dla SIO
277 $023B - CCMND - kod operacji dla SIO
278 $023C - CAUX1 - pierwszy bajt pomocniczy dla SIO
279 $023D - CAUX2 - drugi bajt pomocniczy dla SIO
280 $023E - TEMP - tymczasowy rejestr odpowiedzi urzdzenia
281 $023F - ERRFLG - znacznik bdu operacji SIO
282 $0244 - COLDST - znacznik zimnego startu systemu
283 $0245 - RECLEN - dugo rekordu z nowego urzdzenia
284 $0246 - DSKTIM - warto Timeout dla stacji dyskw
285 $0247 - PDVMSK - maska obecnoci nowych urzdze
286 $0248 - PDVRS - rejestr-cie PDVREG
287 $024A - RELADR - adres procedury przemieszczalnej
288 $024C - PPTMPA - rejestr przechowania zawartoci akumulatora
289 $024D - PPTMPX - rejestr przechowania zawartoci rejestru X
290 $026B - CHSPTR - wektor nieuywanego zestawu znakw
291 $026C - VSFLAG - znacznik przesuwu pionowego obrazu
292 $026E - FINE - znacznik delikatnego przesuwu obrazu
293 $026F - GTICTLS - rejestr-cie GTIACTL
294 $0270 - PADDL0 - rejestr-cie POT0
295 $0278 - JSTICK0 - pooenie joysticka 0
296 $0279 - JSTICK1 - pooenie joysticka 1
297 $027A - JSTICK2 - pooenie joysticka 0
298 $027B - JSTICK3 - pooenie joysticka 1
299 $027C - PTRIG0 - przycisk potencjometru 0
300 $027D - PTRIG1 - przycisk potencjometru 1
301 $0284 - TRIG0S - przycisk joysticka 0, rejestr-cie TRIG0
302 $0285 - TRIG1S - przycisk joysticka 1, rejestr-cie TRIG1
303 $0286 - TRIG2S - rejestr-cie TRIG0
304 $0287 - TRIG3S - rejestr-cie TRIG1
305 $0288 - HIBYTE - indeks operacji nowego urzdzenia
306 $0289 - WMODE - znacznik sposobu dostpu do magnetofonu
307 $028A - BLIM - dugo bufora magnetofonu
308 $028E - NEWADR - adres procedury nowego urzdzenia
309 $0290 - TXTROW - wiersz kursora w oknie tekstowym
310 $0291 - TXTCOL - kolumna kursora w oknie tekstowym
311 $0293 - TINDEX - tryb graficzny OS w oknie tekstowym
312 $0294 - TXTMSC - adres pamici okna tekstowego
313 $029C - CRETRY - liczba powtrze rozkazu operacji
314 $029D - HOLD3 - pomocniczy rejestr przejciowy
315 $029E - SUBTMP - pomocniczy rejestr przejciowy
316 $02A0 - DMASK - maska punktw obrazu
317 $02A2 - ESCFLG - znacznik klawisza ESC
318 $02A3 - TABMAP - mapa pozycji tabulacji
319 $02B2 - LOGMAP - mapa linii logicznych
320 $02B6 - INVFLG - znacznik klawisza inverse video
321 $02B7 - FILFLG - znacznik wypeniania obrazu
322 $02B8 - TMPROW - tymczasowy rejestr pozycji kursora
323 $02B9 - TMPCOL - tymczasowy rejestr pozycji kursora
324 $02BB - SCRFLG - znacznik przesuwu obrazu
325 $02BC - HOLD4 - pomocniczy rejestr przejciowy
326 $02BD - DRETRY - liczba powtrze wywoa urzdzenia
327 $02BE - SHFLOK - znacznik klawiszy SHIFT i CONTROL
328 $02BF - BOTSCR - liczba wierszy tekstu
329 $02C0 - COLPM0S - rejestr-cie COLPM0
330 $02C1 - COLPM1S - rejestr-cie COLPM1
331 $02C2 - COLPM2S - rejestr-cie COLPM2
332 $02C3 - COLPM3S - rejestr-cie COLPM3
333 $02C4 - COLPF0S - rejestr-cie COLPF0
334 $02C5 - COLPF1S - rejestr-cie COLPF1 ;gr.8 letters
335 $02C6 - COLPF2S - rejestr-cie COLPF2 ;gr.8 background
336 $02C7 - COLPF3S - rejestr-cie COLPF3
337 $02C8 - COLBAKS - rejestr-cie COLBAK
338 $02C9 - RUNADR - adres procedury nowego urzdzenia
339 $02CB - HIUSED - adres kocowy procedury nowego urzdzenia
340 $02CF - GBYTEA - adres procedury nowego urzdzenia
341 $02D1 - LOADAD - adres wczytywania z nowego urzdzenia
342 $02D3 - ZLOADA - pomocniczy rejestr adresu wczytywania
343 $02D5 - DSCTLN - dugo sektora dyskowego
344 $02DB - NOCLIK - znacznik dwiku klawiatury
345 $02DE - PBPNT - licznik bufora drukarki
346 $02DF - PBUFSZ - dugo bufora drukarki
347 $02E5 - MEMTOP - adres grnej granicy wolnej pamici RAM
348 $02E7 - MEMLO - adres dolnej granicy wolnej pamici RAM
349 $02E9 - HNDLOD - znacznik relokowalnej procedury obsugi I/O
350 $02EA - DVSTAT - dodatkowy rejestr statusu urzdzenia
351 $02EC - DVTMOT - dodatkowy rejestr Timeout urzdzenia
352 $02ED - REVNUM - numer wersji nowego urzdzenia
353 $02EE - CBAUD - prdko transmisji z magnetofonu
354 $02F0 - CRSINH - znacznik widocznoci kursora
355 $02F3 - CHACT - rejestr-cie CHRCTL
356 $02F4 - CHBAS - rejestr-cie CHBASE
357 $02F5 - NEWROW - nowa pozycja pionowa kursora
358 $02F6 - NEWCOL - nowa pozycja pozioma kursora
359 $02F8 - ROWINC - zmiana pionowej pozycji kursora
360 $02F9 - COLINC - zmiana poziomej pozycji kursora
361 $02FA - CHAR - kod wewntrzny znaku
362 $02FB - ATACHR - kod ATASCII znaku
363 $02FC - KBCODES - rejestr-cie KBCODE
364 $02FD - FILDAT - numer koloru dla wypeniania
365 $02FE - DSPFLG - znacznik wywietlania znakw kontrolnych
366 $02FF - SSFLAG - znacznik start/stop dla przesuwu obrazu
367 $0300 - DDEVIC - kod identyfikacyjny urzdzenia
368 $0301 - DUNIT - numer identyfikacyjny urzdzenia
369 $0302 - DCMND - bajt rozkazu dla urzdzenia
370 $0303 - DSTATS - status urzdzenia
371 $0304 - DBUFA - adres bufora danych
372 $0306 - DTIMLO - warto Timeout dla urzdzenia
373 $0308 - DBYT - dugo bufora danych
374 $030A - DAUX1 - rejestr pomocniczy dla operacji I/O
375 $030B - DAUX2 - rejestr pomocniczy dla operacji I/O
376 $030C - INTIM1 - rejestr czasu przy odczycie z magnetofonu
377 $030F - CASFLG - znacznik operacji z magnetofonem
378 $0310 - INTIM2 - rejestr czasu przy odczycie z magnetofonu
379 $0312 - TEMP1 - pomocniczy rejestr przejciowy
380 $0313 - TEMP2 - pomocniczy rejestr przejciowy
381 $0314 - PTIMOT - warto Timeout dla drukarki
382 $0315 - TEMP3 - pomocniczy rejestr przejciowy
383 $0316 - SAVIO - rejestr przejciowy dla operacji SIO
384 $0317 - TIMFLG - znacznik upynicia czasu Timeout
385 $0318 - STACKP - rejestr wskanika stosu dla SIO
386 $0319 - TSTAT - przejciowy rejestr statusu SIO
387 $031A - HATABS - tabela wektorw procedur obsugi
388 $0340 - IOCB0 - blok kontroli I/O numer 0
389 $0350 - IOCB1 - blok kontroli I/O numer 1
390 $0360 - IOCB2 - blok kontroli I/O numer 2
391 $0370 - IOCB3 - blok kontroli I/O numer 3
392 $0380 - IOCB4 - blok kontroli I/O numer 4
393 $0390 - IOCB5 - blok kontroli I/O numer 5
394 $03A0 - IOCB6 - blok kontroli I/O numer 6
395 $03B0 - IOCB7 - blok kontroli I/O numer 7
396 $0340 - ICCHID - indeks wpisu urzdzenia w HATABS
397 $0341 - ICDNO - numer urzdzenia
398 $0342 - ICCMD - kod rozkazu operacji I/O
399 $0343 - ICSTAT - status operacji I/O
400 $0344 - ICBUFA - adres bufora danych dla operacji I/O
401 $0346 - ICPUTB - adres procedury przesyania danych
402 $0348 - ICBUFL - dugo bufora danych dla operacji I/O
403 $034A - ICAX1 - rejestr pomocniczy dla operacji I/O
404 $034B - ICAX2 - rejestr pomocniczy dla operacji I/O
405 $034C - ICAX3 - rejestr pomocniczy dla operacji I/O
406 $034D - ICAX4 - rejestr pomocniczy dla operacji I/O
407 $034E - ICAX5 - rejestr pomocniczy dla operacji I/O
408 $034F - ICAX6 - rejestr pomocniczy dla operacji I/O
409 $03C0 - PRNBUF - bufor drukarki
410 $03E8 - SUPERF - znacznik stosowany przy odczycie klawiatury
411 $03E9 - CKEY - znacznik klawisza START przy zimnym starcie
412 $03EC - DERRF - znacznik bdu przy otwieraniu edytora
413 $03FB - CHLINK - rejestr elementw listy liniowej
414 $03FD - CSCB - bajty kontroli szybkoci magnetofonu
415 $03FF - CRCB - bajt dugoci rekordu magnetofonowego
416 $0400 - CASBUF - bufor magnetofonu
417 $047F - CASBEN - koniec bufora magnetofonu
418 $D000 - HPOSP0 - pozioma pozycja gracza 0 (Z)
419 $D000 - KOLM0PF - kolizja pocisku 0 z polem gry (O)
420 $D001 - HPOSP1 - pozioma pozycja gracza 1 (Z)
421 $D001 - KOLM1PF - kolizja pocisku 1 z polem gry (O)
422 $D002 - HPOSP2 - pozioma pozycja gracza 2 (Z)
423 $D002 - KOLM2PF - kolizja pocisku 2 z polem gry (O)
424 $D003 - HPOSP3 - pozioma pozycja gracza 3 (Z)
425 $D003 - KOLM3PF - kolizja pocisku 3 z polem gry (O)
426 $D004 - HPOSM0 - pozioma pozycja pocisku 0 (Z)
427 $D004 - KOLP0PF - kolizja gracza 0 z polem gry (O)
428 $D005 - HPOSM1 - pozioma pozycja pocisku 1 (Z)
429 $D005 - KOLP1PF - kolizja gracza 1 z polem gry (O)
430 $D006 - HPOSM2 - pozioma pozycja pocisku 2 (Z)
431 $D006 - KOLP2PF - kolizja gracza 2 z polem gry (O)
432 $D007 - HPOSM3 - pozioma pozycja pocisku 3 (Z)
433 $D007 - KOLP3PF - kolizja gracza 3 z polem gry (O)
434 $D008 - SIZEP0 - poziomy rozmiar gracza 0 (Z)
435 $D008 - KOLM0P - kolizja pocisku 0 z graczem (O)
436 $D009 - SIZEP1 - poziomy rozmiar gracza 1 (Z)
437 $D009 - KOLM1P - kolizja pocisku 1 z graczem (O)
438 $D00A - SIZEP2 - poziomy rozmiar gracza 2 (Z)
439 $D00A - KOLM2P - kolizja pocisku 2 z graczem (O)
440 $D00B - SIZEP3 - poziomy rozmiar gracza 3 (Z)
441 $D00B - KOLM3P - kolizja pocisku 3 z graczem (O)
442 $D00C - SIZEM - poziomy rozmiar pociskw (Z)
443 $D00C - KOLP0P - kolizja gracza 0 z innym graczem (O)
444 $D00D - GRAFP0 - rejestr grafiki gracza 0 (Z)
445 $D00D - KOLP1P - kolizja gracza 1 z innym graczem (O)
446 $D00E - GRAFP1 - rejestr grafiki gracza 1 (Z)
447 $D00E - KOLP2P - kolizja gracza 2 z innym graczem (O)
448 $D00F - GRAFP2 - rejestr grafiki gracza 2 (Z)
449 $D00F - KOLP3P - kolizja gracza 3 z innym graczem (O)
450 $D010 - GRAFP3 - rejestr grafiki gracza 3 (Z)
451 $D010 - TRIG0 - stan przycisku joysticka 0 (O)
452 $D011 - GRAFM - rejestr grafiki pociskw (Z)
453 $D011 - TRIG1 - stan przycisku joysticka 1 (O)
454 $D012 - COLPM0 - rejestr koloru gracza i pocisku 0 (Z)
455 $D013 - COLPM1 - rejestr koloru gracza i pocisku 1 (Z)
456 $D013 - TRIG3 - znacznik doczenia cartridge'a (O)
457 $D014 - COLPM2 - rejestr koloru gracza i pocisku 2 (Z)
458 $D014 - PAL - znacznik systemu TV (O)
459 $D015 - COLPM3 - rejestr koloru gracza i pocisku 3 (Z)
460 $D016 - COLPF0 - rejestr koloru pola gry 0 (Z)
461 $D017 - COLPF1 - rejestr koloru pola gry 1 (Z)
462 $D018 - COLPF2 - rejestr koloru pola gry 2 (Z)
463 $D019 - COLPF3 - rejestr koloru pola gry 3 (Z)
464 $D01A - COLBAK - rejestr koloru ta (Z)
465 $D01B - GTIACTL - rejestr kontroli ukadu GTIA
466 $D01C - VDELAY - licznik opnienia pionowego P/MG
467 $D01D - PMCNTL - rejestr kontroli graczy i pociskw
468 $D01E - HITCLR - rejestr kasowania rejestrw kolizji
469 $D01F - CONSOL - rejestr stanu klawiszy konsoli
470 $D1FF - PDVREG - rejestr wyboru nowego urzdzenia
471 $D200 - AUDF1 - czstotliwo pracy generatora 1 (Z)
472 $D200 - POT0 - rejestr pooenia potencjometru 0 (O)
473 $D201 - AUDC1 - rejestr kontroli dwiku generatora 1 (Z)
474 $D201 - POT1 - rejestr pooenia potencjometru 1 (O)
475 $D202 - AUDF2 - czstotliwo pracy generatora 2 (Z)
476 $D202 - POT2 - rejestr pooenia potencjometru 2 (O)
477 $D203 - AUDC2 - rejestr kontroli dwiku generatora 2 (Z)
478 $D203 - POT3 - rejestr pooenia potencjometru 3 (O)
479 $D204 - AUDF3 - czstotliwo pracy generatora 3 (Z)
480 $D205 - AUDC3 - rejestr kontroli dwiku generatora 3 (Z)
481 $D206 - AUDF4 - czstotliwo pracy generatora 4 (Z)
482 $D207 - AUDC4 - rejestr kontroli dwiku generatora 4 (Z)
483 $D208 - AUDCTL - rejestr kontroli generatorw dwiku (Z)
484 $D208 - POTST - status odczytu potencjometrw (O)
485 $D209 - STIMER - rejestr zerowania licznikw (Z)
486 $D209 - KBCODE - kod ostatnio nacinitego klawisza (O)
487 $D20A - SKSTRES - reset statusu zcza szeregowego (Z)
488 $D20A - RANDOM - rejestr liczby losowej (O)
489 $D20B - POTG0 - znacznik przetwornika analogowo-cyfrowego (Z)
490 $D20D - SEROUT - szeregowy rejestr wyjciowy (Z)
491 $D20D - SERIN - szeregowy rejestr wejciowy (O)
492 $D20E - IRQEN - zezwolenia przerwa IRQ (Z)
493 $D20E - IRQST - status przerwa IRQ (O)
494 $D20F - SKCTL - rejestr kontroli zcza szeregowego (Z)
495 $D20F - SKSTAT - rejestr statusu zcza szeregowego (O)
496 $D300 - PORTA - port A ukadu PIA
497 $D301 - PORTB - port B ukadu PIA
498 $D302 - PACTL - rejestr kontroli portu A
499 $D303 - PBCTL - rejestr kontroli portu B
500 $D400 - DMACTL - rejestr kontroli dostpu do pamici
501 $D401 - CHRCTL - rejestr kontroli wywietlania znakw
502 $D402 - DLPTR - adres programu ANTIC-a
503 $D404 - HSCROL - znacznik poziomego przesuwu obrazu
504 $D405 - VSCROL - znacznik pionowego przesuwu obrazu
505 $D407 - PMBASE - adres pamici graczy i pociskw
506 $D409 - CHBASE - adres zestawu znakw
507 $D40A - WSYNC - znacznik oczekiwania na synchronizacj poziom
508 $D40B - VCOUNT - licznik linii obrazu
509 $D40C - LPENH - poziome pooenie pira wietlengo
510 $D40D - LPENV - pionowe pooenie pira wietlnego
511 $D40E - NMIEN - rejestr zezwole na przerwania NMI
512 $D40F - NMIST - rejestr statusu przerwa NMI
513 */
513
513 = 0080 XDRAW
513 = 0082 YDRAW
513 = 0084 XBYTE
513 = 0086 YBYTE
513 = 0088 CHARCODE
513 = 0089 FONTIND
513 = 008B TANKNR
513 = 008C TANKSEQUENCEPOINTER
513 = 008D OLDPLOT
513 = 008F XC
513 = 0091 TEMP
513 = 0093 TEMP2
513 = 0095 TEMPXROLLER
513 = 0097 XTEMPDRAW
513 = 0099 YTEMPDRAW
513 = 009B XI
513 = 009D FX
513 = 009E YI
513 = 00A0 FY
513 = 00A1 XK
513 = 00A3 FS
513 = 00A4 YC
513 = 00A5 DX
513 = 00A7 TEMPOR2
513 = 00A8 DY
513 = 00AA TEMPOR3
513 = 00AC DD
513 = 00AE DI
513 = 00B0 DP
513 = 00B2 MODIFY
513 = 00B4 WEAPONPOINTER
81 icl 'lib/macro.hea'
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/lib/macro.hea
1 ;-------------------------------------
2 .MACRO ROLW
3 ROL :1
4 ROL :1+1
5 .ENDM
6 ;-------------------------------------
7 .MACRO ASLW
8 ASL :1
9 ROL :1+1
10 .ENDM
11 ;-------------------------------------
12 .MACRO RORW
13 ROR :1+1
14 ROR :1
15 .ENDM
16 ;-------------------------------------
17 .MACRO LSRW
18 LSR :1+1
19 ROR :1
20 .ENDM
21
22 ;-------------------------------------
23 .MACRO VMAIN
24 ; VMAIN #WORD,interrupt.vector
25 ; interrupt.vector:
26 ; 0 - VIMIRQ
27 ; 1 - TIMCNT1
28 ; 2 - TIMCNT2
29 ; 3 - TIMCNT3
30 ; 4 - TIMCNT4
31 ; 5 - TIMCNT5
32 ; 6 - VVBLKI
33 ; 7 - VVBLKD
34 ; 8 - TIMVEC1
35 ; 9 - TIMVEC2
36 ; Initialises Vertical Blank Interrupts
37 ; (works only with system interrupts ON)
38 LDY # <:1
39 LDX # >:1
40 LDA #:2
41 JSR SETVBV
42 .ENDM
43 ;-------------------------------------
44 .MACRO VDLI
45 ; VDLI #WORD
46 ; Initialises Display List Interrupts
47 LDY # <:1
48 LDX # >:1
49 LDA #$C0
50 STY $0200
51 STX $0201
52 STA NMIEN
53 .ENDM
54 ;-------------------------------------
55 .MACRO halt
56 ?stop
57 /*
58 lda RANDOM
59 and #$05
60 sta COLBAK
61 */
62 jmp ?stop
63 .ENDM
64 ;-------------------------------------
65 .MACRO KEY
66 ; KEY
67 ; waits for releasing and pressing "any key"
68 PHA
69 ?CK1 LDA SKSTAT
70 AND #$04
71 BEQ ?CK1
72 ?CK LDA SKSTAT
73 AND #$04
74 BNE ?CK
75 PLA
76 .ENDM
77 ;-------------------------------------
78 .MACRO WAIT
79 ; WAIT
80 ; waits one frame (1/50 s(PAL) or 1/60s(NTSC))
81 LDA VCOUNT
82 STA WSYNC
83 STA WSYNC
84 STA WSYNC
85 ?WA CMP VCOUNT
86 BNE ?WA
87 .ENDM
88 ;-------------------------------------
89 .macro negw
90 ; negate the given word (0-a)
91 ;-------------------------------------
92 sec
93 lda #$00
94 sbc :1
95 sta :1
96 lda #$00
97 sbc :1+1
98 sta :1+1
99 .endm
100 ;-------------------------------------
101 .macro randomize
102 ;usage: randomize floor ceiling
103 ;returns (in A) a random .byte between "floor" and "ceiling"
104 ?rand
105 lda random
106 cmp #:1 ;floor
107 bcc ?rand
108 cmp #:2+1 ;ceiling
109 bcs ?rand
110 .endm
111 ;-------------------------------------
112 .macro phx
113 txa
114 pha
115 .endm
116 ;-------------------------------------
117 .macro phy
118 tya
119 pha
120 .endm
121 ;-------------------------------------
122 .macro plx
123 pla
124 tax
125 .endm
126 ;-------------------------------------
127 .macro ply
128 pla
129 tay
130 .endm
131 ;-------------------------------------
132 .macro pause
133 ;waits :1 number (byte) of frames
134 ldx #:1
135 ?PAUSELOOP
136 wait
137 dex
138 bne ?PAUSELOOP
139 .ENDM
140
82
83 icl 'artwork/HIMARS14.asm'
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm
1 /***************************************/
2 /* Use MADS http://mads.atari8.info/ */
3 /* Mode: DLI (char mode) */
4 /***************************************/
5
6 ;icl "HIMARS14.h"
7 ;ICL '../lib/atari.hea'
8
9 org $f0
10
11 = 00F0 fcnt .ds 2
12 = 00F2 fadr .ds 2
13 = 00F4 fhlp .ds 2
14 = 00F6 cloc .ds 1
15 = 00F7 regA .ds 1
16 = 00F8 regX .ds 1
17 = 00F9 regY .ds 1
18
19 = 0028 WIDTH = 40
20 = 001E HEIGHT = 30
21
22 ; --- BASIC switch OFF
23 org $2000\ mva #$ff portb\ rts\ ini $2000
23 ORG $2000
23 FFFF> 2000-2005> A9 FF + MVA #$FF PORTB
23 2005 60 RTS
23 02E2-02E3> 00 20 INI $2000
24
25 ; --- MAIN PROGRAM
26 org $2000
27 2000-2482> F0 ant dta $F0
28 2001 42 23 20 02 02 02 + dta $42,a(scr),$02,$02,$02,$02,$02,$02,$02,$02,$02,$82,$02,$02,$02,$02,$82
29 2013 02 02 02 82 82 82 + dta $02,$02,$02,$82,$82,$82,$02,$82,$02,$02,$02,$82,$70
30 2020 41 00 20 dta $41,a(ant)
31
32 2023 00 00 00 00 00 00 + scr ins "HIMARS14.scr"
33
34 = 2483 .ds 2*40
35
36 24D3 .ALIGN $0400
37 2800-396E> 00 00 00 00 + fnt ins "HIMARS14.fnt"
38
39 ift USESPRITES
40 .ALIGN $0800
41 pmg .ds $0300
42 ift FADECHR = 0
43 SPRITES
44 els
45 .ds $500
46 eif
47 eif
48
49 3800 main
50 ; --- init PMG
51
52 ift USESPRITES
53 mva >pmg pmbase ;missiles and players data address
54 mva #$03 pmcntl ;enable players and missiles
55 eif
56
57 3800 A5 14 C5 14 F0 FC lda:cmp:req $14 ;wait 1 frame
58
59 3806 78 sei ;stop IRQ interrupts
60 3807 A9 00 8D 0E D4 mva #$00 nmien ;stop NMI interrupts
61 380C 8D 00 D4 sta dmactl
62 380F A9 FE 8D 01 D3 mva #$fe portb ;switch off ROM to get 16k more ram
63
64 3814 A9 E1 8D FA FF A9 + mwa #NMI $fffa ;new NMI handler
65
66 381E A9 C0 8D 0E D4 mva #$c0 nmien ;switch on NMI+DLI again
67
68 ift CHANGES ;if label CHANGES defined
69
70 3823 AD 10 D0 _lp lda trig0 ; FIRE #0
71 3826 F0 13 beq stop
72
73 3828 AD 11 D0 lda trig1 ; FIRE #1
74 382B F0 0E beq stop
75
76 382D AD 1F D0 lda consol ; START
77 3830 29 01 and #1
78 3832 F0 07 beq stop
79
80 3834 AD 0F D2 lda skctl
81 3837 29 04 and #$04
82 3839 D0 E8 bne _lp ;wait to press any key; here you can put any own routine
83
84 els
85
86 null jmp DLI.dli1 ;CPU is busy here, so no more routines allowed
87
88 eif
89
90
91 383B stop
92 383B A9 00 8D 1D D0 mva #$00 pmcntl ;PMG disabled
93 3840 AA tax
94 3841 9D 00 D0 E8 D0 FA sta:rne hposp0,x+
95
96 3847 A9 FF 8D 01 D3 mva #$ff portb ;ROM switch on
97 384C A9 40 8D 0E D4 mva #$40 nmien ;only NMI interrupts, DLI disabled
98 3851 58 cli ;IRQ enabled
99
100 3852 60 rts ;return to ... DOS
101
102 ; --- DLI PROGRAM
103
104 3853 .local DLI
105
106 = 3853 ?old_dli = *
107
108 ift !CHANGES
109
110 dli1 lda trig0 ; FIRE #0
111 beq stop
112
113 lda trig1 ; FIRE #1
114 beq stop
115
116 lda consol ; START
117 and #1
118 beq stop
119
120 lda skctl
121 and #$04
122 beq stop
123
124 lda vcount
125 cmp #$02
126 bne dli1
127
128 :3 sta wsync
129
130 DLINEW dli10
131
132 eif
133
134 3853 dli_start
135
136 3853 dli10
137 3853 85 F7 sta regA
138
139 3855 A9 04 c4 lda #$04
140 3857 8D 0A D4 sta wsync ;line=8
141 385A 8D 16 D0 sta color0
142 385D 8D 1B D0 sta gtictl
143 3860 DLINEW DLI.dli2 1 0 0
Macro: DLINEW [Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm]
1 3860 A9 68 8D E7 38 mva <DLI.DLI2 NMI.dliv
7 3865 A5 F7 lda regA
18 3867 40 rti
20 = 3868 .def ?old_dli = *
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm
144
145 3868 dli2
146 3868 85 F7 sta regA
147 386A A9 2C lda >fnt+$400*$01
148 386C 8D 0A D4 sta wsync ;line=96
149 386F 8D 09 D4 sta chbase
150 3872 DLINEW dli3 1 0 0
Macro: DLINEW [Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm]
1 3872 A9 7A 8D E7 38 mva <DLI3 NMI.dliv
7 3877 A5 F7 lda regA
18 3879 40 rti
20 = 387A .def ?old_dli = *
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm
151
152 387A dli3
153 387A 85 F7 sta regA
154 387C A9 30 lda >fnt+$400*$02
155 387E 8D 0A D4 sta wsync ;line=136
156 3881 8D 09 D4 sta chbase
157 3884 DLINEW dli4 1 0 0
Macro: DLINEW [Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm]
1 3884 A9 8C 8D E7 38 mva <DLI4 NMI.dliv
7 3889 A5 F7 lda regA
18 388B 40 rti
20 = 388C .def ?old_dli = *
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm
158
159 388C dli4
160 388C 85 F7 sta regA
161 388E A9 2C lda >fnt+$400*$01
162 3890 8D 0A D4 sta wsync ;line=168
163 3893 8D 09 D4 sta chbase
164 3896 DLINEW dli5 1 0 0
Macro: DLINEW [Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm]
1 3896 A9 9E 8D E7 38 mva <DLI5 NMI.dliv
7 389B A5 F7 lda regA
18 389D 40 rti
20 = 389E .def ?old_dli = *
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm
165
166 389E dli5
167 389E 85 F7 sta regA
168 38A0 A9 30 lda >fnt+$400*$02
169 38A2 8D 0A D4 sta wsync ;line=176
170 38A5 8D 09 D4 sta chbase
171 38A8 DLINEW dli6 1 0 0
Macro: DLINEW [Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm]
1 38A8 A9 B0 8D E7 38 mva <DLI6 NMI.dliv
7 38AD A5 F7 lda regA
18 38AF 40 rti
20 = 38B0 .def ?old_dli = *
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm
172
173 38B0 dli6
174 38B0 85 F7 sta regA
175 38B2 A9 34 lda >fnt+$400*$03
176 38B4 8D 0A D4 sta wsync ;line=184
177 38B7 8D 09 D4 sta chbase
178 38BA DLINEW dli7 1 0 0
Macro: DLINEW [Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm]
1 38BA A9 C2 8D E7 38 mva <DLI7 NMI.dliv
7 38BF A5 F7 lda regA
18 38C1 40 rti
20 = 38C2 .def ?old_dli = *
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm
179
180 38C2 dli7
181 38C2 85 F7 sta regA
182 38C4 A9 28 lda >fnt+$400*$00
183 38C6 8D 0A D4 sta wsync ;line=200
184 38C9 8D 09 D4 sta chbase
185 38CC DLINEW dli11 1 0 0
Macro: DLINEW [Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm]
1 38CC A9 D4 8D E7 38 mva <DLI11 NMI.dliv
7 38D1 A5 F7 lda regA
18 38D3 40 rti
20 = 38D4 .def ?old_dli = *
Source: /home/pkalinowski/Seafile/atari/projects/scorch_src/artwork/HIMARS14.asm
186
187 38D4 dli11
188 38D4 85 F7 sta regA
189
190 38D6 A9 01 lda #$01
191 38D8 8D 0A D4 sta wsync ;line=232
192 38DB 8D 1B D0 sta gtictl
193
194 38DE A5 F7 lda regA
195 38E0 40 rti
196
197 .endl
198
199 ; ---
200
201 = 0001 CHANGES = 1
202 = 0000 FADECHR = 0
203
204 = 007F SCHR = 127
205
206 ; ---
207
208 38E1 .proc NMI
209
210 38E1 2C 0F D4 bit nmist
211 38E4 10 03 bpl VBL
212
213 38E6 4C 53 38 jmp DLI.dli_start
214 = 38E7 dliv equ *-2
215
216 38E9 VBL
217 38E9 85 F7 sta regA
218 38EB 86 F8 stx regX
219 38ED 84 F9 sty regY
220
221 38EF 8D 0F D4 sta nmist ;reset NMI flag
222
223 38F2 A9 00 8D 02 D4 A9 + mwa #ant dlptr ;ANTIC address program
224
225 38FC A9 32 8D 00 D4 mva #@dmactl(standard|dma|lineX1) dmactl ;set new screen width
226
227 3901 E6 F6 inc cloc ;little timer
228
229 ; Initial values
230
231 3903 A9 28 lda >fnt+$400*$00
232 3905 8D 09 D4 sta chbase
233 3908 A9 00 c0 lda #$00
234 390A 8D 1A D0 sta colbak
235 390D A9 02 lda #$02
236 390F 8D 01 D4 sta chrctl
237 3912 A9 01 lda #$01
238 3914 8D 1B D0 sta gtictl
239 3917 A9 0C c1 lda #$0C
240 3919 8D 17 D0 sta color1
241 391C A9 02 c2 lda #$02
242 391E 8D 18 D0 sta color2
243 3921 A9 0E c3 lda #$0E
244 3923 8D 19 D0 sta color3
245 3926 A9 00 x0 lda #$00
246 3928 8D 00 D0 sta hposp0
247 392B 8D 01 D0 sta hposp1
248 392E 8D 02 D0 sta hposp2
249 3931 8D 03 D0 sta hposp3
250 3934 8D 04 D0 sta hposm0
251 3937 8D 05 D0 sta hposm1
252 393A 8D 06 D0 sta hposm2
253 393D 8D 07 D0 sta hposm3
254 3940 8D 08 D0 sta sizep0
255 3943 8D 09 D0 sta sizep1
256 3946 8D 0A D0 sta sizep2
257 3949 8D 0B D0 sta sizep3
258 394C 8D 0C D0 sta sizem
259 394F 8D 12 D0 sta colpm0
260 3952 8D 13 D0 sta colpm1
261 3955 8D 14 D0 sta colpm2
262 3958 8D 15 D0 sta colpm3
263 395B 8D 16 D0 sta color0
264
265 395E A9 53 8D E7 38 A9 + mwa #DLI.dli_start dliv ;set the first address of DLI interrupt
266
267 ;this area is for yours routines
268
269 3968 quit
270 3968 A5 F7 lda regA
271 396A A6 F8 ldx regX
272 396C A4 F9 ldy regY
273 396E 40 rti
274
275 .endp
276
277 ; ---
278 02E2-02E3> 00 38 ini main
279 ; ---
280