Files
no_internet/ni.lst
T
2018-06-20 00:33:55 +02:00

1600 lines
63 KiB
Plaintext

mads 2.0.6 build 58 (28 Jan 17)
Source: C:\jac\wudsn\Workspace\no_internet\ni.asm
1 ; @com.wudsn.ide.asm.mainsourcefile=ni.asm
2 icl 'atari.asm'
Source: C:\jac\wudsn\Workspace\no_internet\atari.asm
1 /*
2 scr48 = %00111111 ;screen 48b
3 scr40 = %00111110 ;screen 40b
4 scr32 = %00111101 ;screen 32b
5 */
5
6
7 * ---------------------------------------------------------------------------------------------
8 * --- GTIA
9 * ---------------------------------------------------------------------------------------------
10 = D000 HPOSP0 = $D000 ; pozioma pozycja gracza 0 (Z)
11 = D001 HPOSP1 = $D001 ; pozioma pozycja gracza 1 (Z)
12 = D002 HPOSP2 = $D002 ; pozioma pozycja gracza 2 (Z)
13 = D003 HPOSP3 = $D003 ; pozioma pozycja gracza 3 (Z)
14 = D004 HPOSM0 = $D004 ; pozioma pozycja pocisku 0 (Z)
15 = D005 HPOSM1 = $D005 ; pozioma pozycja pocisku 1 (Z)
16 = D006 HPOSM2 = $D006 ; pozioma pozycja pocisku 2 (Z)
17 = D007 HPOSM3 = $D007 ; pozioma pozycja pocisku 3 (Z)
18 = D008 SIZEP0 = $D008 ; poziomy rozmiar gracza 0 (Z)
19 = D009 SIZEP1 = $D009 ; poziomy rozmiar gracza 1 (Z)
20 = D00A SIZEP2 = $D00A ; poziomy rozmiar gracza 2 (Z)
21 = D00B SIZEP3 = $D00B ; poziomy rozmiar gracza 3 (Z)
22 = D00C SIZEM = $D00C ; poziomy rozmiar pocisków (Z)
23 = D00D GRAFP0 = $D00D ; rejestr grafiki gracza 0 (Z)
24 = D00E GRAFP1 = $D00E ; rejestr grafiki gracza 1 (Z)
25 = D00F GRAFP2 = $D00F ; rejestr grafiki gracza 2 (Z)
26 = D010 GRAFP3 = $D010 ; rejestr grafiki gracza 3 (Z)
27 = D011 GRAFM = $D011 ; rejestr grafiki pocisków (Z)
28 = D012 COLPM0 = $D012 ; rejestr koloru gracza i pocisku 0 (Z)
29 = D013 COLPM1 = $D013 ; rejestr koloru gracza i pocisku 1 (Z)
30 = D014 COLPM2 = $D014 ; rejestr koloru gracza i pocisku 2 (Z)
31 = D015 COLPM3 = $D015 ; rejestr koloru gracza i pocisku 3 (Z)
32 = D016 COLPF0 = $D016 ; rejestr koloru pola gry 0 (Z)
33 = D017 COLPF1 = $D017 ; rejestr koloru pola gry 1 (Z)
34 = D018 COLPF2 = $D018 ; rejestr koloru pola gry 2 (Z)
35 = D019 COLPF3 = $D019 ; rejestr koloru pola gry 3 (Z)
36 = D01A COLBAK = $D01A ; rejestr koloru t³a (Z)
37
38 = D016 COLOR0 = colpf0
39 = D017 COLOR1 = colpf1
40 = D018 COLOR2 = colpf2
41 = D019 COLOR3 = colpf3
42
43 = D000 KOLM0PF = $D000 ; kolizja pocisku 0 z polem gry (O)
44 = D001 KOLM1PF = $D001 ; kolizja pocisku 1 z polem gry (O)
45 = D002 KOLM2PF = $D002 ; kolizja pocisku 2 z polem gry (O)
46 = D003 KOLM3PF = $D003 ; kolizja pocisku 3 z polem gry (O)
47 = D004 KOLP0PF = $D004 ; kolizja gracza 0 z polem gry (O)
48 = D005 KOLP1PF = $D005 ; kolizja gracza 1 z polem gry (O)
49 = D006 KOLP2PF = $D006 ; kolizja gracza 2 z polem gry (O)
50 = D007 KOLP3PF = $D007 ; kolizja gracza 3 z polem gry (O)
51 = D008 KOLM0P = $D008 ; kolizja pocisku 0 z graczem (O)
52 = D009 KOLM1P = $D009 ; kolizja pocisku 1 z graczem (O)
53 = D00A KOLM2P = $D00A ; kolizja pocisku 2 z graczem (O)
54 = D00B KOLM3P = $D00B ; kolizja pocisku 3 z graczem (O)
55 = D00C KOLP0P = $D00C ; kolizja gracza 0 z innym graczem (O)
56 = D00D KOLP1P = $D00D ; kolizja gracza 1 z innym graczem (O)
57 = D00E KOLP2P = $D00E ; kolizja gracza 2 z innym graczem (O)
58 = D00F KOLP3P = $D00F ; kolizja gracza 3 z innym graczem (O)
59 = D010 TRIG0 = $D010 ; stan przycisku joysticka 0 (O)
60 = D011 TRIG1 = $D011 ; stan przycisku joysticka 1 (O)
61 = D013 TRIG3 = $D013 ; znacznik do³¹czenia cartridge-a (O)
62 = D014 PAL = $D014 ; znacznik systemu TV (O)
63
64 = D01B GTICTL = $D01B ; rejestr kontroli uk³adu GTIA
65 = D01B GTIACTL = gtictl
66
67 = D01C VDELAY = $D01C ; licznik opóŸnienia pionowego P/MG
68 = D01D PMCNTL = $D01D ; rejestr kontroli graczy i pocisków
69 = D01E HITCLR = $D01E ; rejestr kasowania rejestrów kolizji
70 = D01F CONSOL = $D01F ; rejestr stanu klawiszy konsoli Start (bit 0), Select (bit 1), Option (bit 2)
71
72 * ---------------------------------------------------------------------------------------------
73 * --- POKEY
74 * ---------------------------------------------------------------------------------------------
75
76 = 0010 IRQENS = $0010 ; rejestr-cieñ IRQEN
77 = 0011 IRQSTAT = $0011 ; rejestr-cieñ IRQST
78
79 = D204 AUDF3 = $D204 ; czêstotliwoœæ pracy generatora 3 (Z)
80 = D208 AUDCTL = $D208 ; rejestr kontroli generatorów dŸwiêku (Z)
81 = D209 STIMER = $D209 ; rejestr zerowania liczników (Z)
82 = D209 KBCODE = $D209 ; kod ostatnio naciœniêtego klawisza (O)
83 = D20A SKSTRES = $D20A ; rejestr statusu z³¹cza szeregowego (Z)
84 = D20A RANDOM = $D20A ; rejestr liczby losowej (O)
85 = D20D SEROUT = $D20D ; szeregowy rejestr wyjœciowy (Z)
86 = D20D SERIN = $D20D ; szeregowy rejestr wejœciowy (O)
87 = D20E IRQEN = $D20E ; zezwolenie przerwañ IRQ (Z)
88 = D20E IRQST = $D20E ; status przerwañ IRQ (O)
89 = D20F SKCTL = $D20F ; rejestr kontroli z³¹cza szeregowego (Z)
90 = D20F SKSTAT = $D20F ; rejestr statusu z³¹cza szeregowego (O)
91
92 * ---------------------------------------------------------------------------------------------
93 * --- PIA
94 * ---------------------------------------------------------------------------------------------
95 = D300 PORTA = $D300 ; port A uk³adu PIA
96 = D301 PORTB = $D301 ; port B uk³adu PIA
97 = D302 PACTL = $D302 ; rejestr kontroli portu A
98 = D303 PBCTL = $D303 ; rejestr kontroli portu B
99
100 * ---------------------------------------------------------------------------------------------
101 * --- ANTIC
102 * ---------------------------------------------------------------------------------------------
103 = D400 DMACTL = $D400 ; rejestr kontroli dostêpu do pamiêci
104 = D401 CHRCTL = $D401 ; rejestr kontroli wyœwietlania znaków
105 = D402 DLPTR = $D402 ; adres programu ANTIC-a
106 = D404 HSCROL = $D404 ; znacznik poziomego przesuwu obrazu
107 = D405 VSCROL = $D405 ; znacznik pionowego przesuwu obrazu
108 = D407 PMBASE = $D407 ; adres pamiêci graczy i pocisków
109 = D409 CHBASE = $D409 ; adres zestawu znaków
110 = D40A WSYNC = $D40A ; znacznik oczekiwania na synchronizacjê poziom¹
111 = D40B VCOUNT = $D40B ; licznik linii obrazu
112 = D40C LPENH = $D40C ; poziome po³o¿enie pióra œwietlengo
113 = D40D LPENV = $D40D ; pionowe po³o¿enie pióra œwietlnego
114 = D40E NMIEN = $D40E ; rejestr zezwoleñ na przerwania NMI
115 = D40F NMIST = $D40F ; rejestr statusu przerwañ NMI
116
117 ;-------------------------------------
118 ;additional system variables
119 ;-------------------------------------
120 = 02C0 COLPM0S = $02C0 ;- - rejestr-cieñ COLPM0
121 = 02C1 COLPM1S = $02C1 ;- - rejestr-cieñ COLPM1
122 = 02C2 COLPM2S = $02C2 ;- - rejestr-cieñ COLPM2
123 = 02C3 COLPM3S = $02C3 ;- - rejestr-cieñ COLPM3
124 = 02C4 COLPF0S = $02C4 ;- - rejestr-cieñ COLPF0
125 = 02C5 COLPF1S = $02C5 ;- - rejestr-cieñ COLPF1
126 = 02C6 COLPF2S = $02C6 ;- - rejestr-cieñ COLPF2
127 = 02C7 COLPF3S = $02C7 ;- - rejestr-cieñ COLPF3
128
129 = 02C8 COLBAKS = $02C8
130 = 026F GTICTLS = $026F ;- - rejestr-cieñ GTIACTL
131
132 = 022F DMACTLS = $022F ;- - rejestr kontroli dostêpu do pamiêci - cieñ
133 = 0230 DLPTRS = $0230 ;- - adres programu ANTIC-a - cieñ
134 = 02F4 CHBAS = $02F4 ;- - rejestr-cieñ CHBASE
135 = 02FC KBCODES = $02FC ;- - rejestr-cieñ KBCODE
136
137 = E45C SETVBV = $E45C
138 = E462 XITVBV = $E462
139 = E45F SYSVBV = $E45F
140 = 0012 RTCLOK = $0012
141
142 = 02E5 MEMTOP = $02E5 ;- - adres górnej granicy wolnej pamiêci RAM
143 = 02E7 MEMLO = $02E7 ;- - adres dolnej granicy wolnej pamiêci RAM
144
145 = 0278 JSTICK0 = $0278 ;- - po³o¿enie joysticka 0
146 = 0279 JSTICK1 = $0279 ;- JSTICK1 - po³o¿enie joysticka 1
147 = 027A JSTICK2 = $027A ;- JSTICK2 - po³o¿enie joysticka 0
148 = 027B JSTICK3 = $027B ;- JSTICK3 - po³o¿enie joysticka 1
149 = 027C PTRIG0 = $027C ;- PTRIG0 - przycisk potencjometru 0
150 = 027D PTRIG1 = $027D ;- PTRIG1 - przycisk potencjometru 1
151 = 0284 TRIG0S = $0284 ;- TRIG0S - przycisk joysticka 0, rejestr-cieñ TRIG0
152 = 0285 TRIG1S = $0285 ;- TRIG1S - przycisk joysticka 1, rejestr-cieñ TRIG1
153 = 0286 TRIG2S = $0286 ;- TRIG2S - rejestr-cieñ TRIG0
154 = 0287 TRIG3S = $0287 ;- TRIG3S - rejestr-cieñ TRIG1
155
156
157 /*
158 Rejestry OS w pamiêci RAM
159
160 $08 - WARMST - znacznik gor¹cego startu
161 $0E - APPMHI - najwy¿szy adres RAM zajêty przez program
162 $10 - IRQENS - rejestr-cieñ IRQEN
163 $11 - IRQSTAT - rejestr-cieñ IRQST
164 $12 - RTCLOK - zegar czasu rzeczywistego
165 $15 - BUFADR - adres bufora dla operacji dyskowych
166 $17 - ICCOMT - rejestr przejœciowy kodu operacji I/O
167 $20 - ZIOCB - zerostronicowy blok kontroli I/O
168 $20 - ICHIDZ - indeks wpisu urz¹dzenia w HATABS
169 $21 - ICDNOZ - numer urz¹dzenia
170 $22 - ICCOMZ - kod operacji wejœcia/wyjœcia
171 $23 - ICSTZ - status operacji wejœcia/wyjœcia
172 $24 - ICBAZ - adres bufora danych dla operacji I/O
173 $26 - ICPTZ - adres procedury obs³ugi dla operacji
174 $28 - ICBLZ - d³ugoœæ bufora danych dla operacji I/O
175 $2A - ICAX1Z - rejestr pomocniczy ZIOCB
176 $2B - ICAX2Z - rejestr pomocniczy ZIOCB
177 $2C - ICAX3Z - rejestr pomocniczy ZIOCB
178 $2D - ICAX4Z - rejestr pomocniczy ZIOCB
179 $2E - ICAX5Z - rejestr pomocniczy ZIOCB
180 $2F - ICAX6Z - rejestr pomocniczy ZIOCB
181 $30 - STATUS - status aktualnej operacji SIO
182 $31 - CHKSUM - suma kontrolna dla operacji SIO
183 $32 - BUFR - adres bufora danych dla SIO
184 $34 - BUFEN - adres koñca bufora danych dla SIO
185 $36 - LTEMP - pomocniczy wektor odczytu listy liniowej
186 $38 - BUFRFL - znacznik zape³nienia bufora SIO
187 $39 - RECVND - znacznik koñca odczytu
188 $3A - XMTDON - znacznik koñca transmisji
189 $3B - CHKSNT - znacznik nadania sumy kontrolnej
190 $3C - NOCKSM - znacznik braku sumy kontrolnej
191 $3D - BPTR - licznik bufora magnetofonu
192 $3E - GAPTYP - znacznik d³ugoœci przerwy miêdzy blokami
193 $3F - FEOF - znacznik koñca zbioru
194 $40 - FREQ - licznik dŸwiêku przy otwarciu magnetofonu
195 $41 - IOSNDEN - znacznik dŸwiêku przy transmisji
196 $42 - CRITIC - znacznik krytycznych czasowo operacji I/O
197 $4A - ZCHAIN - rejestr nastêpstwa listy liniowej
198 $4C - DSTAT - status klawiatury i ekranu
199 $50 - TEMP - pomocniczy rejestr przejœciowy
200 $51 - HOLD1 - pomocniczy rejestr przejœciowy
201 $52 - LMARGIN - lewy margines obrazu
202 $53 - RMARGIN - prawy margines obrazu
203 $54 - ROWCRS - pionowa pozycja kursora
204 $55 - COLCRS - pozioma pozycja kursora
205 $57 - DINDEX - numer trybu graficznego OS
206 $58 - SAVMSC - adres pamiêci obrazu
207 $5A - OLDROW - poprzednia pionowa pozycja kursora
208 $5B - OLDCOL - poprzednia pozioma pozycja kursora
209 $5D - OLDCHR - poprzedni znak na ekranie
210 $5E - OLDADR - poprzedni adres znaku na ekranie
211 $60 - FKDEFP - wektor tabeli definicji klawiszy F1-F4
212 $62 - PALNTS - wskaŸnik systemu TV
213 $63 - LOGCOL - adres kursora w wierszu logicznym
214 $64 - ADRESS - rejestr adresowy dla procedur edytora
215 $66 - MLTTMP - pomocniczy rejestr przejœciowy
216 $68 - SAVADR - pomocniczy rejestr adresowy
217 $6A - RAMTOP - liczba stron pamiêci RAM
218 $6B - BUFCNT - licznik bufora edytora
219 $6C - BUFSTR - adres bufora dla edytora
220 $6E - BITMSK - maska bitowa do wyœwietlenia znaku
221 $6F - SHFAMT - liczba przesuniêæ punktu
222 $70 - ROWAC - aktualny wiersz przy rysowaniu
223 $72 - COLAC - aktualna kolumna przy rysowaniu
224 $74 - ENDPT - znacznik koñca rysowanej linii
225 $76 - DELTAR - przyrost pionowej pozycji kursora
226 $77 - DELTAC - przyrost poziomej pozycji kursora
227 $79 - KEYDEFP - wektor tabeli definicji klawiszy
228 $7B - SWPFLG - znacznik kursora w trybach z oknem
229 $7C - HOLDCH - przechowywanie wartoœci znaku
230 $7D - INSDAT - rejestr pomocniczy edytora
231 $7E - COUNTR - licznik pamiêci obrazu dla DOSCR i DRAW
232 $0100 - STACK - stos mikroprocesora 6502
233 $0200 - DLIV - wektor przerwania programu ANTIC-a
234 $0210 - VTIMR1 - wektor przerwania licznika 1 POKEY-a
235 $0212 - VTIMR2 - wektor przerwania licznika 2 POKEY-a
236 $0214 - VTIMR4 - wektor przerwania licznika 4 POKEY-a
237 $0218 - TIMCNT1 - pierwszy licznik systemu
238 $0226 - TIMVEC1 - wektor przerwania licznika TIMCNT1
239 $022A - TIMFLG3 - znacznik wyzerowania licznika TIMCNT3
240 $022F - DMACTLS - rejestr-cieñ DMACTL
241 $0230 - DLPTRS - rejestr-cieñ DLPTR
242 $0232 - SKCTLS - rejestr-cieñ SKCTL
243 $0233 - LCOUNT - licznik odczytu dla nowego urz¹dzenia
244 $0234 - LPENHS - rejestr-cieñ LPENH
245 $0235 - LPENVS - rejestr-cieñ LPENV
246 $023A - CDEVIC - kod urz¹dzenia dla SIO
247 $023B - CCMND - kod operacji dla SIO
248 $023C - CAUX1 - pierwszy bajt pomocniczy dla SIO
249 $023D - CAUX2 - drugi bajt pomocniczy dla SIO
250 $023E - TEMP - tymczasowy rejestr odpowiedzi urz¹dzenia
251 $023F - ERRFLG - znacznik b³êdu operacji SIO
252 $0244 - COLDST - znacznik zimnego startu systemu
253 $0245 - RECLEN - d³ugoœæ rekordu z nowego urz¹dzenia
254 $0246 - DSKTIM - wartoœæ Timeout dla stacji dysków
255 $0247 - PDVMSK - maska obecnoœci nowych urz¹dzeñ
256 $0248 - PDVRS - rejestr-cieñ PDVREG
257 $024A - RELADR - adres procedury przemieszczalnej
258 $024C - PPTMPA - rejestr przechowania zawartoœci akumulatora
259 $024D - PPTMPX - rejestr przechowania zawartoœci rejestru X
260 $026B - CHSPTR - wektor nieu¿ywanego zestawu znaków
261 $026C - VSFLAG - znacznik przesuwu pionowego obrazu
262 $026E - FINE - znacznik delikatnego przesuwu obrazu
263 $026F - GTICTLS - rejestr-cieñ GTIACTL
264 $0270 - PADDL0 - rejestr-cieñ POT0
265 $0278 - JSTICK0 - po³o¿enie joysticka 0
266 $0279 - JSTICK1 - po³o¿enie joysticka 1
267 $027A - JSTICK2 - po³o¿enie joysticka 0
268 $027B - JSTICK3 - po³o¿enie joysticka 1
269 $027C - PTRIG0 - przycisk potencjometru 0
270 $027D - PTRIG1 - przycisk potencjometru 1
271 $0284 - TRIG0S - przycisk joysticka 0, rejestr-cieñ TRIG0
272 $0285 - TRIG1S - przycisk joysticka 1, rejestr-cieñ TRIG1
273 $0286 - TRIG2S - rejestr-cieñ TRIG0
274 $0287 - TRIG3S - rejestr-cieñ TRIG1
275 $0288 - HIBYTE - indeks operacji nowego urz¹dzenia
276 $0289 - WMODE - znacznik sposobu dostêpu do magnetofonu
277 $028A - BLIM - d³ugoœæ bufora magnetofonu
278 $028E - NEWADR - adres procedury nowego urz¹dzenia
279 $0290 - TXTROW - wiersz kursora w oknie tekstowym
280 $0291 - TXTCOL - kolumna kursora w oknie tekstowym
281 $0293 - TINDEX - tryb graficzny OS w oknie tekstowym
282 $0294 - TXTMSC - adres pamiêci okna tekstowego
283 $029C - CRETRY - liczba powtórzeñ rozkazu operacji
284 $029D - HOLD3 - pomocniczy rejestr przejœciowy
285 $029E - SUBTMP - pomocniczy rejestr przejœciowy
286 $02A0 - DMASK - maska punktów obrazu
287 $02A2 - ESCFLG - znacznik klawisza ESC
288 $02A3 - TABMAP - mapa pozycji tabulacji
289 $02B2 - LOGMAP - mapa linii logicznych
290 $02B6 - INVFLG - znacznik klawisza inverse video
291 $02B7 - FILFLG - znacznik wype³niania obrazu
292 $02B8 - TMPROW - tymczasowy rejestr pozycji kursora
293 $02B9 - TMPCOL - tymczasowy rejestr pozycji kursora
294 $02BB - SCRFLG - znacznik przesuwu obrazu
295 $02BC - HOLD4 - pomocniczy rejestr przejœciowy
296 $02BD - DRETRY - liczba powtórzeñ wywo³añ urz¹dzenia
297 $02BE - SHFLOK - znacznik klawiszy SHIFT i CONTROL
298 $02BF - BOTSCR - liczba wierszy tekstu
299 $02C0 - COLPM0S - rejestr-cieñ COLPM0
300 $02C1 - COLPM1S - rejestr-cieñ COLPM1
301 $02C2 - COLPM2S - rejestr-cieñ COLPM2
302 $02C3 - COLPM3S - rejestr-cieñ COLPM3
303 $02C4 - COLPF0S - rejestr-cieñ COLPF0
304 $02C5 - COLPF1S - rejestr-cieñ COLPF1 ;gr.8 letters
305 $02C6 - COLPF2S - rejestr-cieñ COLPF2 ;gr.8 background
306 $02C7 - COLPF3S - rejestr-cieñ COLPF3
307 $02C8 - COLBAKS - rejestr-cieñ COLBAK
308 $02C9 - RUNADR - adres procedury nowego urz¹dzenia
309 $02CB - HIUSED - adres koñcowy procedury nowego urz¹dzenia
310 $02CF - GBYTEA - adres procedury nowego urz¹dzenia
311 $02D1 - LOADAD - adres wczytywania z nowego urz¹dzenia
312 $02D3 - ZLOADA - pomocniczy rejestr adresu wczytywania
313 $02D5 - DSCTLN - d³ugoœæ sektora dyskowego
314 $02DB - NOCLIK - znacznik dŸwiêku klawiatury
315 $02DE - PBPNT - licznik bufora drukarki
316 $02DF - PBUFSZ - d³ugoœæ bufora drukarki
317 $02E5 - MEMTOP - adres górnej granicy wolnej pamiêci RAM
318 $02E7 - MEMLO - adres dolnej granicy wolnej pamiêci RAM
319 $02E9 - HNDLOD - znacznik relokowalnej procedury obs³ugi I/O
320 $02EA - DVSTAT - dodatkowy rejestr statusu urz¹dzenia
321 $02EC - DVTMOT - dodatkowy rejestr Timeout urz¹dzenia
322 $02ED - REVNUM - numer wersji nowego urz¹dzenia
323 $02EE - CBAUD - prêdkoœæ transmisji z magnetofonu
324 $02F0 - CRSINH - znacznik widocznoœci kursora
325 $02F3 - CHACT - rejestr-cieñ CHRCTL
326 $02F4 - CHBAS - rejestr-cieñ CHBASE
327 $02F5 - NEWROW - nowa pozycja pionowa kursora
328 $02F6 - NEWCOL - nowa pozycja pozioma kursora
329 $02F8 - ROWINC - zmiana pionowej pozycji kursora
330 $02F9 - COLINC - zmiana poziomej pozycji kursora
331 $02FA - CHAR - kod wewnêtrzny znaku
332 $02FB - ATACHR - kod ATASCII znaku
333 $02FC - KBCODES - rejestr-cieñ KBCODE
334 $02FD - FILDAT - numer koloru dla wype³niania
335 $02FE - DSPFLG - znacznik wyœwietlania znaków kontrolnych
336 $02FF - SSFLAG - znacznik start/stop dla przesuwu obrazu
337 $0300 - DDEVIC - kod identyfikacyjny urz¹dzenia
338 $0301 - DUNIT - numer identyfikacyjny urz¹dzenia
339 $0302 - DCMND - bajt rozkazu dla urz¹dzenia
340 $0303 - DSTATS - status urz¹dzenia
341 $0304 - DBUFA - adres bufora danych
342 $0306 - DTIMLO - wartoœæ Timeout dla urz¹dzenia
343 $0308 - DBYT - d³ugoœæ bufora danych
344 $030A - DAUX1 - rejestr pomocniczy dla operacji I/O
345 $030B - DAUX2 - rejestr pomocniczy dla operacji I/O
346 $030C - INTIM1 - rejestr czasu przy odczycie z magnetofonu
347 $030F - CASFLG - znacznik operacji z magnetofonem
348 $0310 - INTIM2 - rejestr czasu przy odczycie z magnetofonu
349 $0312 - TEMP1 - pomocniczy rejestr przejœciowy
350 $0313 - TEMP2 - pomocniczy rejestr przejœciowy
351 $0314 - PTIMOT - wartoϾ Timeout dla drukarki
352 $0315 - TEMP3 - pomocniczy rejestr przejœciowy
353 $0316 - SAVIO - rejestr przejœciowy dla operacji SIO
354 $0317 - TIMFLG - znacznik up³yniêcia czasu Timeout
355 $0318 - STACKP - rejestr wskaŸnika stosu dla SIO
356 $0319 - TSTAT - przejœciowy rejestr statusu SIO
357 $031A - HATABS - tabela wektorów procedur obs³ugi
358 $0340 - IOCB0 - blok kontroli I/O numer 0
359 $0350 - IOCB1 - blok kontroli I/O numer 1
360 $0360 - IOCB2 - blok kontroli I/O numer 2
361 $0370 - IOCB3 - blok kontroli I/O numer 3
362 $0380 - IOCB4 - blok kontroli I/O numer 4
363 $0390 - IOCB5 - blok kontroli I/O numer 5
364 $03A0 - IOCB6 - blok kontroli I/O numer 6
365 $03B0 - IOCB7 - blok kontroli I/O numer 7
366 $0340 - ICCHID - indeks wpisu urz¹dzenia w HATABS
367 $0341 - ICDNO - numer urz¹dzenia
368 $0342 - ICCMD - kod rozkazu operacji I/O
369 $0343 - ICSTAT - status operacji I/O
370 $0344 - ICBUFA - adres bufora danych dla operacji I/O
371 $0346 - ICPUTB - adres procedury przesy³ania danych
372 $0348 - ICBUFL - d³ugoœæ bufora danych dla operacji I/O
373 $034A - ICAX1 - rejestr pomocniczy dla operacji I/O
374 $034B - ICAX2 - rejestr pomocniczy dla operacji I/O
375 $034C - ICAX3 - rejestr pomocniczy dla operacji I/O
376 $034D - ICAX4 - rejestr pomocniczy dla operacji I/O
377 $034E - ICAX5 - rejestr pomocniczy dla operacji I/O
378 $034F - ICAX6 - rejestr pomocniczy dla operacji I/O
379 $03C0 - PRNBUF - bufor drukarki
380 $03E8 - SUPERF - znacznik stosowany przy odczycie klawiatury
381 $03E9 - CKEY - znacznik klawisza START przy zimnym starcie
382 $03EC - DERRF - znacznik b³êdu przy otwieraniu edytora
383 $03FB - CHLINK - rejestr elementów listy liniowej
384 $03FD - CSCB - bajty kontroli szybkoœci magnetofonu
385 $03FF - CRCB - bajt d³ugoœci rekordu magnetofonowego
386 $0400 - CASBUF - bufor magnetofonu
387 $047F - CASBEN - koniec bufora magnetofonu
388 $D000 - HPOSP0 - pozioma pozycja gracza 0 (Z)
389 $D000 - KOLM0PF - kolizja pocisku 0 z polem gry (O)
390 $D001 - HPOSP1 - pozioma pozycja gracza 1 (Z)
391 $D001 - KOLM1PF - kolizja pocisku 1 z polem gry (O)
392 $D002 - HPOSP2 - pozioma pozycja gracza 2 (Z)
393 $D002 - KOLM2PF - kolizja pocisku 2 z polem gry (O)
394 $D003 - HPOSP3 - pozioma pozycja gracza 3 (Z)
395 $D003 - KOLM3PF - kolizja pocisku 3 z polem gry (O)
396 $D004 - HPOSM0 - pozioma pozycja pocisku 0 (Z)
397 $D004 - KOLP0PF - kolizja gracza 0 z polem gry (O)
398 $D005 - HPOSM1 - pozioma pozycja pocisku 1 (Z)
399 $D005 - KOLP1PF - kolizja gracza 1 z polem gry (O)
400 $D006 - HPOSM2 - pozioma pozycja pocisku 2 (Z)
401 $D006 - KOLP2PF - kolizja gracza 2 z polem gry (O)
402 $D007 - HPOSM3 - pozioma pozycja pocisku 3 (Z)
403 $D007 - KOLP3PF - kolizja gracza 3 z polem gry (O)
404 $D008 - SIZEP0 - poziomy rozmiar gracza 0 (Z)
405 $D008 - KOLM0P - kolizja pocisku 0 z graczem (O)
406 $D009 - SIZEP1 - poziomy rozmiar gracza 1 (Z)
407 $D009 - KOLM1P - kolizja pocisku 1 z graczem (O)
408 $D00A - SIZEP2 - poziomy rozmiar gracza 2 (Z)
409 $D00A - KOLM2P - kolizja pocisku 2 z graczem (O)
410 $D00B - SIZEP3 - poziomy rozmiar gracza 3 (Z)
411 $D00B - KOLM3P - kolizja pocisku 3 z graczem (O)
412 $D00C - SIZEM - poziomy rozmiar pocisków (Z)
413 $D00C - KOLP0P - kolizja gracza 0 z innym graczem (O)
414 $D00D - GRAFP0 - rejestr grafiki gracza 0 (Z)
415 $D00D - KOLP1P - kolizja gracza 1 z innym graczem (O)
416 $D00E - GRAFP1 - rejestr grafiki gracza 1 (Z)
417 $D00E - KOLP2P - kolizja gracza 2 z innym graczem (O)
418 $D00F - GRAFP2 - rejestr grafiki gracza 2 (Z)
419 $D00F - KOLP3P - kolizja gracza 3 z innym graczem (O)
420 $D010 - GRAFP3 - rejestr grafiki gracza 3 (Z)
421 $D010 - TRIG0 - stan przycisku joysticka 0 (O)
422 $D011 - GRAFM - rejestr grafiki pocisków (Z)
423 $D011 - TRIG1 - stan przycisku joysticka 1 (O)
424 $D012 - COLPM0 - rejestr koloru gracza i pocisku 0 (Z)
425 $D013 - COLPM1 - rejestr koloru gracza i pocisku 1 (Z)
426 $D013 - TRIG3 - znacznik do³¹czenia cartridge'a (O)
427 $D014 - COLPM2 - rejestr koloru gracza i pocisku 2 (Z)
428 $D014 - PAL - znacznik systemu TV (O)
429 $D015 - COLPM3 - rejestr koloru gracza i pocisku 3 (Z)
430 $D016 - COLPF0 - rejestr koloru pola gry 0 (Z)
431 $D017 - COLPF1 - rejestr koloru pola gry 1 (Z)
432 $D018 - COLPF2 - rejestr koloru pola gry 2 (Z)
433 $D019 - COLPF3 - rejestr koloru pola gry 3 (Z)
434 $D01A - COLBAK - rejestr koloru t³a (Z)
435 $D01B - GTIACTL - rejestr kontroli uk³adu GTIA
436 $D01C - VDELAY - licznik opóŸnienia pionowego P/MG
437 $D01D - PMCNTL - rejestr kontroli graczy i pocisków
438 $D01E - HITCLR - rejestr kasowania rejestrów kolizji
439 $D01F - CONSOL - rejestr stanu klawiszy konsoli
440 $D1FF - PDVREG - rejestr wyboru nowego urz¹dzenia
441 $D200 - AUDF1 - czêstotliwoœæ pracy generatora 1 (Z)
442 $D200 - POT0 - rejestr po³o¿enia potencjometru 0 (O)
443 $D201 - AUDC1 - rejestr kontroli dŸwiêku generatora 1 (Z)
444 $D201 - POT1 - rejestr po³o¿enia potencjometru 1 (O)
445 $D202 - AUDF2 - czêstotliwoœæ pracy generatora 2 (Z)
446 $D202 - POT2 - rejestr po³o¿enia potencjometru 2 (O)
447 $D203 - AUDC2 - rejestr kontroli dŸwiêku generatora 2 (Z)
448 $D203 - POT3 - rejestr po³o¿enia potencjometru 3 (O)
449 $D204 - AUDF3 - czêstotliwoœæ pracy generatora 3 (Z)
450 $D205 - AUDC3 - rejestr kontroli dŸwiêku generatora 3 (Z)
451 $D206 - AUDF4 - czêstotliwoœæ pracy generatora 4 (Z)
452 $D207 - AUDC4 - rejestr kontroli dŸwiêku generatora 4 (Z)
453 $D208 - AUDCTL - rejestr kontroli generatorów dŸwiêku (Z)
454 $D208 - POTST - status odczytu potencjometrów (O)
455 $D209 - STIMER - rejestr zerowania liczników (Z)
456 $D209 - KBCODE - kod ostatnio naciœniêtego klawisza (O)
457 $D20A - SKSTRES - reset statusu z³¹cza szeregowego (Z)
458 $D20A - RANDOM - rejestr liczby losowej (O)
459 $D20B - POTG0 - znacznik przetwornika analogowo-cyfrowego (Z)
460 $D20D - SEROUT - szeregowy rejestr wyjœciowy (Z)
461 $D20D - SERIN - szeregowy rejestr wejœciowy (O)
462 $D20E - IRQEN - zezwolenia przerwañ IRQ (Z)
463 $D20E - IRQST - status przerwañ IRQ (O)
464 $D20F - SKCTL - rejestr kontroli z³¹cza szeregowego (Z)
465 $D20F - SKSTAT - rejestr statusu z³¹cza szeregowego (O)
466 $D300 - PORTA - port A uk³adu PIA
467 $D301 - PORTB - port B uk³adu PIA
468 $D302 - PACTL - rejestr kontroli portu A
469 $D303 - PBCTL - rejestr kontroli portu B
470 $D400 - DMACTL - rejestr kontroli dostêpu do pamiêci
471 $D401 - CHRCTL - rejestr kontroli wyœwietlania znaków
472 $D402 - DLPTR - adres programu ANTIC-a
473 $D404 - HSCROL - znacznik poziomego przesuwu obrazu
474 $D405 - VSCROL - znacznik pionowego przesuwu obrazu
475 $D407 - PMBASE - adres pamiêci graczy i pocisków
476 $D409 - CHBASE - adres zestawu znaków
477 $D40A - WSYNC - znacznik oczekiwania na synchronizacjê poziom¹
478 $D40B - VCOUNT - licznik linii obrazu
479 $D40C - LPENH - poziome po³o¿enie pióra œwietlengo
480 $D40D - LPENV - pionowe po³o¿enie pióra œwietlnego
481 $D40E - NMIEN - rejestr zezwoleñ na przerwania NMI
482 $D40F - NMIST - rejestr statusu przerwañ NMI
483 */
483
3 icl 'macro.asm'
Source: C:\jac\wudsn\Workspace\no_internet\macro.asm
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 ; Initialises Vertical Blank Interrupts
24 ; (works only with system interrupts ON)
25
26 ; VMAIN #WORD interrupt.vector
27 ; interrupt.vector:
28 ; 0 - VIMIRQ
29 ; 1 - TIMCNT1
30 ; 2 - TIMCNT2
31 ; 3 - TIMCNT3
32 ; 4 - TIMCNT4
33 ; 5 - TIMCNT5
34 ; 6 - VVBLKI
35 ; 7 - VVBLKD
36 ; 8 - TIMVEC1
37 ; 9 - TIMVEC2
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 .if :1
58 lda RANDOM
59 and #:1
60 sta COLBAK
61 .endif
62 jmp ?stop
63 .ENDM
64 ;-------------------------------------
65 .MACRO KEY
66 ; KEY
67 ; waits for releasing and pressing "any key"
68 ; with OS on autorepeat works
69 PHA
70 ?CK1 LDA SKSTAT
71 AND #$04
72 BEQ ?CK1
73 ?CK LDA SKSTAT
74 AND #$04
75 BNE ?CK
76 PLA
77 .ENDM
78 ;-------------------------------------
79 .MACRO WAIT ;waits one frame (1/50 s(PAL) or 1/60s(NTSC))
80 ;uses: A
81 LDA VCOUNT
82 STA WSYNC
83 STA WSYNC
84 STA WSYNC
85 @ CMP VCOUNT
86 BNE @-
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 ;returns (in A) a random .byte between "floor" (incl) and "ceiling" (excl)
102 ;usage: randomize floor ceiling AND
103 ;uses: A
104
105 ?rand
106 lda random
107 .if :3
108 and #:3
109 .endif
110 cmp #:1 ;floor
111 bcc ?rand
112 cmp #:2+1 ;ceiling
113 bcs ?rand
114 .endm
115 ;-------------------------------------
116 .macro phx
117 txa
118 pha
119 .endm
120 ;-------------------------------------
121 .macro phy
122 tya
123 pha
124 .endm
125 ;-------------------------------------
126 .macro plx
127 pla
128 tax
129 .endm
130 ;-------------------------------------
131 .macro ply
132 pla
133 tay
134 .endm
135 ;-------------------------------------
136 .macro pause ;waits :1 number (byte) of frames
137 ;uses: AX
138 .if :1 > 0
139 ldx #:1
140 loop wait
141 dex
142 bne loop
143 .else
144 wait
145 .endif
146 .ENDM
147
4
5 .zpvar tmp, tmp0, tmp1, tmp2, tmp3 .word
6 = 0080 sw = $80 ;physical screen width in bytes (distance between beginnings of consecutive lines)
7 = 0040 sw_log = $40 ;logical screen width
8 = 0080 sh = 128 ;screen height in lines
9 = 4000 screen = $4000
10 = 9000 pmgraph = $9000
11 = 0080 TMP
11 = 0082 TMP0
11 = 0084 TMP1
11 = 0086 TMP2
11 = 0088 TMP3
11 org $2000
12 dl
13 FFFF> 2000-2253> 70 70 + .byte $70,$70,$70
14 2003 dl_addrs ;start of lines
15 .REPT sh
16 .BYTE $5F
17 .WORD SCREEN+#*SW
18 .ENDR
18 .ENDR
Source: REPT
16 2003 5F .BYTE $5F
16 2004 00 40 .WORD SCREEN+#*SW
16 2006 5F .BYTE $5F
16 2007 80 40 .WORD SCREEN+#*SW
16 2009 5F .BYTE $5F
16 200A 00 41 .WORD SCREEN+#*SW
16 200C 5F .BYTE $5F
16 200D 80 41 .WORD SCREEN+#*SW
16 200F 5F .BYTE $5F
16 2010 00 42 .WORD SCREEN+#*SW
16 2012 5F .BYTE $5F
16 2013 80 42 .WORD SCREEN+#*SW
16 2015 5F .BYTE $5F
16 2016 00 43 .WORD SCREEN+#*SW
16 2018 5F .BYTE $5F
16 2019 80 43 .WORD SCREEN+#*SW
16 201B 5F .BYTE $5F
16 201C 00 44 .WORD SCREEN+#*SW
16 201E 5F .BYTE $5F
16 201F 80 44 .WORD SCREEN+#*SW
16 2021 5F .BYTE $5F
16 2022 00 45 .WORD SCREEN+#*SW
16 2024 5F .BYTE $5F
16 2025 80 45 .WORD SCREEN+#*SW
16 2027 5F .BYTE $5F
16 2028 00 46 .WORD SCREEN+#*SW
16 202A 5F .BYTE $5F
16 202B 80 46 .WORD SCREEN+#*SW
16 202D 5F .BYTE $5F
16 202E 00 47 .WORD SCREEN+#*SW
16 2030 5F .BYTE $5F
16 2031 80 47 .WORD SCREEN+#*SW
16 2033 5F .BYTE $5F
16 2034 00 48 .WORD SCREEN+#*SW
16 2036 5F .BYTE $5F
16 2037 80 48 .WORD SCREEN+#*SW
16 2039 5F .BYTE $5F
16 203A 00 49 .WORD SCREEN+#*SW
16 203C 5F .BYTE $5F
16 203D 80 49 .WORD SCREEN+#*SW
16 203F 5F .BYTE $5F
16 2040 00 4A .WORD SCREEN+#*SW
16 2042 5F .BYTE $5F
16 2043 80 4A .WORD SCREEN+#*SW
16 2045 5F .BYTE $5F
16 2046 00 4B .WORD SCREEN+#*SW
16 2048 5F .BYTE $5F
16 2049 80 4B .WORD SCREEN+#*SW
16 204B 5F .BYTE $5F
16 204C 00 4C .WORD SCREEN+#*SW
16 204E 5F .BYTE $5F
16 204F 80 4C .WORD SCREEN+#*SW
16 2051 5F .BYTE $5F
16 2052 00 4D .WORD SCREEN+#*SW
16 2054 5F .BYTE $5F
16 2055 80 4D .WORD SCREEN+#*SW
16 2057 5F .BYTE $5F
16 2058 00 4E .WORD SCREEN+#*SW
16 205A 5F .BYTE $5F
16 205B 80 4E .WORD SCREEN+#*SW
16 205D 5F .BYTE $5F
16 205E 00 4F .WORD SCREEN+#*SW
16 2060 5F .BYTE $5F
16 2061 80 4F .WORD SCREEN+#*SW
16 2063 5F .BYTE $5F
16 2064 00 50 .WORD SCREEN+#*SW
16 2066 5F .BYTE $5F
16 2067 80 50 .WORD SCREEN+#*SW
16 2069 5F .BYTE $5F
16 206A 00 51 .WORD SCREEN+#*SW
16 206C 5F .BYTE $5F
16 206D 80 51 .WORD SCREEN+#*SW
16 206F 5F .BYTE $5F
16 2070 00 52 .WORD SCREEN+#*SW
16 2072 5F .BYTE $5F
16 2073 80 52 .WORD SCREEN+#*SW
16 2075 5F .BYTE $5F
16 2076 00 53 .WORD SCREEN+#*SW
16 2078 5F .BYTE $5F
16 2079 80 53 .WORD SCREEN+#*SW
16 207B 5F .BYTE $5F
16 207C 00 54 .WORD SCREEN+#*SW
16 207E 5F .BYTE $5F
16 207F 80 54 .WORD SCREEN+#*SW
16 2081 5F .BYTE $5F
16 2082 00 55 .WORD SCREEN+#*SW
16 2084 5F .BYTE $5F
16 2085 80 55 .WORD SCREEN+#*SW
16 2087 5F .BYTE $5F
16 2088 00 56 .WORD SCREEN+#*SW
16 208A 5F .BYTE $5F
16 208B 80 56 .WORD SCREEN+#*SW
16 208D 5F .BYTE $5F
16 208E 00 57 .WORD SCREEN+#*SW
16 2090 5F .BYTE $5F
16 2091 80 57 .WORD SCREEN+#*SW
16 2093 5F .BYTE $5F
16 2094 00 58 .WORD SCREEN+#*SW
16 2096 5F .BYTE $5F
16 2097 80 58 .WORD SCREEN+#*SW
16 2099 5F .BYTE $5F
16 209A 00 59 .WORD SCREEN+#*SW
16 209C 5F .BYTE $5F
16 209D 80 59 .WORD SCREEN+#*SW
16 209F 5F .BYTE $5F
16 20A0 00 5A .WORD SCREEN+#*SW
16 20A2 5F .BYTE $5F
16 20A3 80 5A .WORD SCREEN+#*SW
16 20A5 5F .BYTE $5F
16 20A6 00 5B .WORD SCREEN+#*SW
16 20A8 5F .BYTE $5F
16 20A9 80 5B .WORD SCREEN+#*SW
16 20AB 5F .BYTE $5F
16 20AC 00 5C .WORD SCREEN+#*SW
16 20AE 5F .BYTE $5F
16 20AF 80 5C .WORD SCREEN+#*SW
16 20B1 5F .BYTE $5F
16 20B2 00 5D .WORD SCREEN+#*SW
16 20B4 5F .BYTE $5F
16 20B5 80 5D .WORD SCREEN+#*SW
16 20B7 5F .BYTE $5F
16 20B8 00 5E .WORD SCREEN+#*SW
16 20BA 5F .BYTE $5F
16 20BB 80 5E .WORD SCREEN+#*SW
16 20BD 5F .BYTE $5F
16 20BE 00 5F .WORD SCREEN+#*SW
16 20C0 5F .BYTE $5F
16 20C1 80 5F .WORD SCREEN+#*SW
16 20C3 5F .BYTE $5F
16 20C4 00 60 .WORD SCREEN+#*SW
16 20C6 5F .BYTE $5F
16 20C7 80 60 .WORD SCREEN+#*SW
16 20C9 5F .BYTE $5F
16 20CA 00 61 .WORD SCREEN+#*SW
16 20CC 5F .BYTE $5F
16 20CD 80 61 .WORD SCREEN+#*SW
16 20CF 5F .BYTE $5F
16 20D0 00 62 .WORD SCREEN+#*SW
16 20D2 5F .BYTE $5F
16 20D3 80 62 .WORD SCREEN+#*SW
16 20D5 5F .BYTE $5F
16 20D6 00 63 .WORD SCREEN+#*SW
16 20D8 5F .BYTE $5F
16 20D9 80 63 .WORD SCREEN+#*SW
16 20DB 5F .BYTE $5F
16 20DC 00 64 .WORD SCREEN+#*SW
16 20DE 5F .BYTE $5F
16 20DF 80 64 .WORD SCREEN+#*SW
16 20E1 5F .BYTE $5F
16 20E2 00 65 .WORD SCREEN+#*SW
16 20E4 5F .BYTE $5F
16 20E5 80 65 .WORD SCREEN+#*SW
16 20E7 5F .BYTE $5F
16 20E8 00 66 .WORD SCREEN+#*SW
16 20EA 5F .BYTE $5F
16 20EB 80 66 .WORD SCREEN+#*SW
16 20ED 5F .BYTE $5F
16 20EE 00 67 .WORD SCREEN+#*SW
16 20F0 5F .BYTE $5F
16 20F1 80 67 .WORD SCREEN+#*SW
16 20F3 5F .BYTE $5F
16 20F4 00 68 .WORD SCREEN+#*SW
16 20F6 5F .BYTE $5F
16 20F7 80 68 .WORD SCREEN+#*SW
16 20F9 5F .BYTE $5F
16 20FA 00 69 .WORD SCREEN+#*SW
16 20FC 5F .BYTE $5F
16 20FD 80 69 .WORD SCREEN+#*SW
16 20FF 5F .BYTE $5F
16 2100 00 6A .WORD SCREEN+#*SW
16 2102 5F .BYTE $5F
16 2103 80 6A .WORD SCREEN+#*SW
16 2105 5F .BYTE $5F
16 2106 00 6B .WORD SCREEN+#*SW
16 2108 5F .BYTE $5F
16 2109 80 6B .WORD SCREEN+#*SW
16 210B 5F .BYTE $5F
16 210C 00 6C .WORD SCREEN+#*SW
16 210E 5F .BYTE $5F
16 210F 80 6C .WORD SCREEN+#*SW
16 2111 5F .BYTE $5F
16 2112 00 6D .WORD SCREEN+#*SW
16 2114 5F .BYTE $5F
16 2115 80 6D .WORD SCREEN+#*SW
16 2117 5F .BYTE $5F
16 2118 00 6E .WORD SCREEN+#*SW
16 211A 5F .BYTE $5F
16 211B 80 6E .WORD SCREEN+#*SW
16 211D 5F .BYTE $5F
16 211E 00 6F .WORD SCREEN+#*SW
16 2120 5F .BYTE $5F
16 2121 80 6F .WORD SCREEN+#*SW
16 2123 5F .BYTE $5F
16 2124 00 70 .WORD SCREEN+#*SW
16 2126 5F .BYTE $5F
16 2127 80 70 .WORD SCREEN+#*SW
16 2129 5F .BYTE $5F
16 212A 00 71 .WORD SCREEN+#*SW
16 212C 5F .BYTE $5F
16 212D 80 71 .WORD SCREEN+#*SW
16 212F 5F .BYTE $5F
16 2130 00 72 .WORD SCREEN+#*SW
16 2132 5F .BYTE $5F
16 2133 80 72 .WORD SCREEN+#*SW
16 2135 5F .BYTE $5F
16 2136 00 73 .WORD SCREEN+#*SW
16 2138 5F .BYTE $5F
16 2139 80 73 .WORD SCREEN+#*SW
16 213B 5F .BYTE $5F
16 213C 00 74 .WORD SCREEN+#*SW
16 213E 5F .BYTE $5F
16 213F 80 74 .WORD SCREEN+#*SW
16 2141 5F .BYTE $5F
16 2142 00 75 .WORD SCREEN+#*SW
16 2144 5F .BYTE $5F
16 2145 80 75 .WORD SCREEN+#*SW
16 2147 5F .BYTE $5F
16 2148 00 76 .WORD SCREEN+#*SW
16 214A 5F .BYTE $5F
16 214B 80 76 .WORD SCREEN+#*SW
16 214D 5F .BYTE $5F
16 214E 00 77 .WORD SCREEN+#*SW
16 2150 5F .BYTE $5F
16 2151 80 77 .WORD SCREEN+#*SW
16 2153 5F .BYTE $5F
16 2154 00 78 .WORD SCREEN+#*SW
16 2156 5F .BYTE $5F
16 2157 80 78 .WORD SCREEN+#*SW
16 2159 5F .BYTE $5F
16 215A 00 79 .WORD SCREEN+#*SW
16 215C 5F .BYTE $5F
16 215D 80 79 .WORD SCREEN+#*SW
16 215F 5F .BYTE $5F
16 2160 00 7A .WORD SCREEN+#*SW
16 2162 5F .BYTE $5F
16 2163 80 7A .WORD SCREEN+#*SW
16 2165 5F .BYTE $5F
16 2166 00 7B .WORD SCREEN+#*SW
16 2168 5F .BYTE $5F
16 2169 80 7B .WORD SCREEN+#*SW
16 216B 5F .BYTE $5F
16 216C 00 7C .WORD SCREEN+#*SW
16 216E 5F .BYTE $5F
16 216F 80 7C .WORD SCREEN+#*SW
16 2171 5F .BYTE $5F
16 2172 00 7D .WORD SCREEN+#*SW
16 2174 5F .BYTE $5F
16 2175 80 7D .WORD SCREEN+#*SW
16 2177 5F .BYTE $5F
16 2178 00 7E .WORD SCREEN+#*SW
16 217A 5F .BYTE $5F
16 217B 80 7E .WORD SCREEN+#*SW
16 217D 5F .BYTE $5F
16 217E 00 7F .WORD SCREEN+#*SW
16 2180 5F .BYTE $5F
16 2181 80 7F .WORD SCREEN+#*SW
Source: C:\jac\wudsn\Workspace\no_internet\ni.asm
19 2183 41 .byte $41
20 2184 00 20 .word DL
21 2186 start
22 2186 A9 23 8D 2F 02 mva #%00100011 DMACTLS
23 218B A9 00 8D 30 02 A9 + mwa #dl DLPTRS
24 2195 A9 0C 8D 6D 25 mva #12 move_scr.hscr_state ;hscroll initialisation
25 219A 8D 04 D4 sta HSCROL
26
27 219D A9 00 8D C5 02 mva #0 COLPF1S
28 21A2 A9 0F 8D C8 02 mva #$0F COLBAKS
29 21A7 A9 0F 8D C6 02 mva #$0f COLPF2S
30
31 21AC 20 55 22 jsr dl_addr_init
32 21AF 20 34 24 jsr sprites_init
33 21B2 pause 1
Macro: PAUSE [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm]
3 21B2 A2 01 ldx #1
4 21B4 loop wait
Macro: WAIT [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm]
2 21B4 AD 0B D4 LDA VCOUNT
3 21B7 8D 0A D4 STA WSYNC
4 21BA 8D 0A D4 STA WSYNC
5 21BD 8D 0A D4 STA WSYNC
6 21C0 CD 0B D4 @ CMP VCOUNT
7 21C3 D0 FB BNE @-
Source: C:\jac\wudsn\Workspace\no_internet\ni.asm
5 21C5 CA dex
6 21C6 D0 EC bne loop
Source: C:\jac\wudsn\Workspace\no_internet\ni.asm
34 21C8 20 C3 23 jsr ground_init
35
36 21CB A2 14 ldx #20
37 21CD A0 00 ldy #0
38 21CF 20 E4 23 jsr cactus
39 21D2 A2 1E ldx #30
40 21D4 A0 01 ldy #1
41 21D6 20 E4 23 jsr cactus
42 21D9 A2 28 ldx #40
43 21DB A0 02 ldy #2
44 21DD 20 E4 23 jsr cactus
45
46 21E0 A2 00 xx ldx #0 ; anim phaze
47 21E2 A0 36 yy ldy #54
48 21E4 20 6C 24 jsr dino_pm
49 21E7 EE E1 21 AD E1 21 inc:lda xx+1
50 21ED C9 03 cmp #3
51 21EF D0 05 sne
52 21F1 A9 00 8D E1 21 mva #0 xx+1
53 21F6 key
Macro: KEY [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm]
4 21F6 48 PHA
5 21F7 AD 0F D2 ?CK1 LDA SKSTAT
6 21FA 29 04 AND #$04
7 21FC F0 F9 BEQ ?CK1
8 21FE AD 0F D2 ?CK LDA SKSTAT
9 2201 29 04 AND #$04
10 2203 D0 F9 BNE ?CK
11 2205 68 PLA
Source: C:\jac\wudsn\Workspace\no_internet\ni.asm
54 2206 20 51 25 jsr move_scr
55 2209 4C E0 21 jmp xx
56
57
58 220C llp
59 220C A9 00 8D 54 22 mva #0 ntmp
60 2211 lp
61 2211 AE 54 22 ldx ntmp
62 2214 A0 62 ldy #98
63 2216 20 8C 22 jsr dino
64 2219 key
Macro: KEY [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm]
4 2219 48 PHA
5 221A AD 0F D2 ?CK1 LDA SKSTAT
6 221D 29 04 AND #$04
7 221F F0 F9 BEQ ?CK1
8 2221 AD 0F D2 ?CK LDA SKSTAT
9 2224 29 04 AND #$04
10 2226 D0 F9 BNE ?CK
11 2228 68 PLA
Source: C:\jac\wudsn\Workspace\no_internet\ni.asm
65 2229 20 0F 23 jsr dino_clear
66 222C key
Macro: KEY [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm]
4 222C 48 PHA
5 222D AD 0F D2 ?CK1 LDA SKSTAT
6 2230 29 04 AND #$04
7 2232 F0 F9 BEQ ?CK1
8 2234 AD 0F D2 ?CK LDA SKSTAT
9 2237 29 04 AND #$04
10 2239 D0 F9 BNE ?CK
11 223B 68 PLA
Source: C:\jac\wudsn\Workspace\no_internet\ni.asm
67 223C EE 54 22 AD 54 22 inc:lda ntmp
68 2242 C9 03 cmp #3
69 2244 D0 CB bne lp
70 2246 4C 0C 22 jmp llp
71
72
73 2249 halt 03
Macro: HALT [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm]
1 2249 ?stop
3 2249 AD 0A D2 lda RANDOM
4 224C 29 03 and #03
5 224E 8D 1A D0 sta COLBAK
7 2251 4C 49 22 jmp ?stop
Source: C:\jac\wudsn\Workspace\no_internet\ni.asm
74
75 02E0-02E1> 86 21 run start
76 2254-2B18> 00 ntmp .by 0
77
78 2255 icl 'procs.asm'
Source: C:\jac\wudsn\Workspace\no_internet\procs.asm
1 ; @com.wudsn.ide.asm.mainsourcefile=ni.asm
2
3 2255 .proc dl_addr_init ;sets initial values for DL addressess
4 ;uses AXY, tmp0, tmp1
5 = 0082 _dl = tmp0
6 = 0084 _scr = tmp1
7
8 2255 A9 04 85 82 A9 20 + mwa #dl_addrs+1 _dl
9 225D A9 00 85 84 A9 40 + mwa #screen _scr
10
11 2265 A2 80 ldx #sh
12 2267 A0 00 @ ldy #0
13 2269 A5 84 lda _scr
14 226B 91 82 sta (_dl),y
15 226D A5 85 lda _scr+1
16 226F C8 iny
17 2270 91 82 sta (_dl),y
18 2272 18 A5 82 69 03 85 + adw _dl #3
19 227D 18 A5 84 69 80 85 + adw _scr #sw
20 2288 CA dex
21 2289 D0 DC bne @-
22 228B 60 rts
23 .endp
24
25 228C .proc dino ; dino to the screen
26 ; uses: AXY tmp0 tmp1 tmp2 tmp3
27 ; Y - ypos in lines
28 ; X - dino phase (0,1,..)
29
30 = 0080 _dino = tmp ; _underscore means pointer here and else
31 = 0084 _mask = tmp1 ; local vars for reusing zero page variables
32 = 0086 _scr = tmp2
33 = 0088 _back = tmp3
34 228C 8C 72 27 sty dino_save_y ;save for clearing
35 ; get line address offset
36 228F B9 A9 27 lda scr_addrs_l,y
37 2292 85 86 sta _scr
38 2294 B9 29 28 lda scr_addrs_h,y
39 2297 85 87 sta _scr+1
40 ; add x position (hardcoded, dino does not move)
41 2299 18 A5 86 69 0A 85 + adw _scr #10
42 ;was: mwa #screen+10+96*sw scr_ ;10 = xpos, 96 == ypos on the screen
43
44 22A4 BD 1E 27 lda dino_tab_l,x
45 22A7 85 80 sta _dino
46 22A9 BD 21 27 lda dino_tab_h,x
47 22AC 85 81 sta _dino+1
48
49 22AE BD 24 27 lda dino_mask_tab_l,x
50 22B1 85 84 sta _mask
51 22B3 BD 27 27 lda dino_mask_tab_h,x
52 22B6 85 85 sta _mask+1
53
54 22B8 A9 D6 85 84 A9 26 + mwa #dino_mask2 _mask
55 22C0 A9 2A 85 88 A9 27 + mwa #dino_back _back
56 22C8 A2 18 ldx #24
57 22CA loop1
58 22CA A0 00 ldy #0
59 22CC dn1
60 22CC B1 86 lda (_scr),y ; get screen contents
61 22CE 91 88 sta (_back),y ; save background for sprite removal
62 22D0 B1 84 lda (_mask),y ; mask
63 22D2 49 FF eor #$ff ; inverse, 'cause mads does not inverse OK with '*'
64 22D4 31 86 and (_scr),y ; get screen contents
65 22D6 11 80 ora (_dino),y
66 22D8 91 86 sta (_scr),y
67 22DA C8 iny
68 22DB C0 03 cpy #3
69 22DD D0 ED bne dn1
70 22DF 18 A5 80 69 03 85 + adw _dino #3
71 22EA 18 A5 84 69 03 85 + adw _mask #3
72 22F5 18 A5 88 69 03 85 + adw _back #3
73 2300 18 A5 86 69 80 85 + adw _scr #sw
74 230B CA dex
75 230C D0 BC bne loop1
76 230E 60 rts
77 .endp
78 ;----------
79 230F .proc dino_clear ; remove old dino
80 ; uses: AXY tmp2 tmp3
81 = 0086 _scr = tmp2
82 = 0088 _back = tmp3
83 230F AC 72 27 ldy dino_save_y ;ypos
84 ; get line address offset
85 2312 B9 A9 27 lda scr_addrs_l,y
86 2315 85 86 sta _scr
87 2317 B9 29 28 lda scr_addrs_h,y
88 231A 85 87 sta _scr+1
89 ; add x position (hardcoded, dino does not move)
90 231C 18 A5 86 69 0A 85 + adw _scr #10
91 ;mwa #screen+10+96*sw scr_ ;10 = xpos, 96 == ypos on the screen
92
93 2327 A9 2A 85 88 A9 27 + mwa #dino_back _back
94 232F A2 18 ldx #24
95 2331 loop1
96 2331 A0 00 ldy #0
97 2333 dn1
98 2333 B1 88 lda (_back),y ; give back background for sprite removal
99 2335 91 86 sta (_scr),y
100 2337 C8 iny
101 2338 C0 03 cpy #3
102 233A D0 F7 bne dn1
103 233C 18 A5 88 69 03 85 + adw _back #3
104 2347 18 A5 86 69 80 85 + adw _scr #sw
105 2352 CA dex
106 2353 D0 DC bne loop1
107 2355 60 rts
108 .endp
109 ;----------
110 2356 .proc ground ; ground breaking, i.e. drawing
111 ; uses: AXY tmp1 tmp2
112 ; X: x on screen in words (2 bytes)
113 ; Y: ground tile number (0 - plain ground)
114 = 0084 _gnd = tmp1
115 = 0086 _scr = tmp2
116
117 2356 B9 A3 27 lda gnd_tab_l,y
118 2359 85 84 sta _gnd
119 235B B9 A6 27 lda gnd_tab_h,y
120 235E 85 85 sta _gnd+1
121 2360 A9 00 85 86 A9 78 + mwa #screen+112*sw _scr ;112 is ypos of ground level
122 2368 8A txa
123 2369 0A asl ;add X to xpos on screen
124 236A 18 clc
125 236B 65 86 adc _scr
126 236D 85 86 sta _scr
127 236F 90 02 scc
128 2371 E6 87 inc _scr+1
129
130 2373 A2 08 ldx #8 ; tile height in bytes
131 2375 loop1
132 2375 A0 00 ldy #0
133 2377 @
134 2377 B1 84 lda (_gnd),y
135 2379 91 86 sta (_scr),y
136 237B C8 iny
137 237C C0 02 cpy #2 ; tile width in bytes
138 237E D0 F7 bne @-
139 2380 18 A5 84 69 02 85 + adw _gnd #2
140 238B 18 A5 86 69 80 85 + adw _scr #sw ;next screen line
141 2396 CA dex
142 2397 D0 DC bne loop1
143 ; add some debris below
144
145 2399 A2 06 ldx #6 ; debris height
146 239B loop2
147 239B A0 01 ldy #1
148 239D @
149 239D AD 0A D2 lda RANDOM
150 23A0 2D 0A D2 2D 0A D2 + :5 AND RANDOM
151 23AF 91 86 sta (_scr),y
152 23B1 88 dey
153 23B2 10 E9 bpl @-
154 23B4 18 A5 86 69 80 85 + adw _scr #sw ;next screen line
155 23BF CA dex
156 23C0 10 D9 bpl loop2
157
158 23C2 60 rts
159 .endp
160 23C3 .proc ground_init ;draws first 48 segments of a ground
161 23C3 A9 00 85 80 mva #0 tmp
162 23C7 ground_loop
163 23C7 A5 80 lda tmp
164 23C9 AA tax
165 23CA randomize 0 2 3
Macro: RANDOMIZE [Source: C:\jac\wudsn\Workspace\no_internet\macro.asm]
4 23CA ?rand
5 23CA AD 0A D2 lda random
7 23CD 29 03 and #3
9 23CF C9 00 cmp #0 ;floor
10 23D1 90 F7 bcc ?rand
11 23D3 C9 03 cmp #2+1 ;ceiling
12 23D5 B0 F3 bcs ?rand
Source: C:\jac\wudsn\Workspace\no_internet\procs.asm
166 23D7 A8 tay
167 23D8 20 56 23 jsr ground
168 23DB E6 80 inc tmp
169 23DD A5 80 lda tmp
170 23DF C9 18 cmp #24 ; screen width in wide mode /2
171 23E1 D0 E4 bne ground_loop
172 23E3 60 rts
173 .endp
174 ;----------
175 23E4 .proc cactus ; drawing cactii
176 ; uses: AXY tmp1 tmp2
177 ; X: x on screen in bytes
178 ; Y: cactus number
179 ; draws from bottom up, utilising the fact that .bmp is saved this way
180 ; updt.: was not able to load .bmp files for unknown reason, so the pics are flipped with WUDSN script
181
182 = 0084 _cact = tmp1
183 = 0086 _scr = tmp2
184
185 23E4 B9 13 2B lda cact_tab_l,y
186 23E7 85 84 sta _cact
187 23E9 B9 16 2B lda cact_tab_h,y
188 23EC 85 85 sta _cact+1
189 23EE A9 00 85 86 A9 7D + mwa #screen+122*sw _scr ;112 is ypos of bottom of the cactii
190 23F6 8A txa
191 23F7 18 clc
192 23F8 65 86 adc _scr
193 23FA 85 86 sta _scr
194 23FC 90 02 bcc no_inc
195 23FE E6 87 inc _scr+1
196 2400 no_inc
197
198
199 2400 B9 0D 2B lda cact_widths,y
200 2403 8D 33 24 sta cact_w ; width in bytes
201
202 2406 B9 10 2B lda cact_heights,y
203 2409 AA tax
204 240A loop
205 240A A0 00 ldy #0
206 240C @
207 240C B1 86 lda (_scr),y
208 240E 11 84 ora (_cact),y
209 2410 91 86 sta (_scr),y
210 2412 C8 iny
211 2413 CC 33 24 cpy cact_w
212 2416 D0 F4 bne @-
213 ;adw _cact cact_w ;!!!DOES NOT WORK :(((((
214 2418 18 clc
215 2419 AD 33 24 lda cact_w
216 241C 65 84 adc _cact
217 241E 85 84 sta _cact
218 2420 90 02 scc
219 2422 E6 85 inc _cact+1
220
221 2424 38 A5 86 E9 80 85 + sbw _scr #sw
222 242F CA dex
223 2430 D0 D8 bne loop
224 2432 60 rts
225 2433 00 cact_w .by 0
226 .endp
227 ;----------
228
229 2434 .proc sprites_init
230 ;setting up P/M graphics
231 2434 A9 90 lda #>pmgraph
232 2436 8D 07 D4 sta pmbase
233 2439 AD 2F 02 lda dmactls
234 243C 09 0C ora #%00001100 ; Players and Missiles single lined
235 243E 8D 2F 02 sta dmactls
236 2441 A9 03 lda #$03 ; P/M on
237 2443 8D 1D D0 sta pmcntl
238 2446 A9 00 lda #$00
239 2448 8D 0C D0 sta sizem ; there will be only M0, double width
240 244B 8D 08 D0 sta sizep0 ; P0-P3 widths
241 244E 8D 09 D0 sta sizep0+1
242 2451 8D 0A D0 sta sizep0+2
243 2454 8D 0B D0 sta sizep0+3
244 2457 A9 11 lda #$11 ; P/M priorities (bit 4 joins missiles), bit 0 - players on top
245 2459 8D 6F 02 sta gtictls
246 /*
247 ; temporary colours of sprites
248 mva #$52 COLPM0
249 mva #$34 COLPM1
250 mva #$76 COLPM2
251 mva #$90 COLPM3
252 mva #$B0 COLPF3S
253 */
253
254 = 002A dx = 42
255 245C A9 2A 8D 00 D0 mva #dx HPOSP0
256 2461 A9 32 8D 01 D0 mva #dx+8 HPOSP1
257 2466 A9 3A 8D 02 D0 MVA #dx+8*2 HPOSP2
258
259 246B 60 rts
260 .endp
261
262 246C .proc dino_pm
263 ; uses: AXY tmp tmp1 tmp2 tmp3
264 ; X: dino animation phase
265 ; Y: Y position of dino
266
267 = 0084 _dino = tmp1 ; _underscore means pointer here and else
268 = 0086 _dino_sav = tmp2 ; local vars for reusing zero page variables
269 = 0088 _spr = tmp3
270 ;tmp = tmp
271
272 246C AD 1B 25 8D 1C 25 mva dino_save_pm_y dino_save_pm_y_prev
273 2472 8C 1B 25 sty dino_save_pm_y ;save for clearing
274
275
276 2475 BD 1E 27 lda dino_tab_l,x
277 ;sta _dino
278 2478 85 86 sta _dino_sav
279 247A BD 21 27 lda dino_tab_h,x
280 ;sta _dino+1
281 247D 85 87 sta _dino_sav+1
282
283
284 247F A9 00 8D 1A 25 mva #0 counter
285
286 2484 loop0
287 ; sprite address calc
288 2484 A9 00 85 88 A9 92 + mwa #(pmgraph+$200) _spr ;1st sprite starts at PMBASE + $200
289 ;counter *$80
290 248C A9 80 85 80 A9 FF + mwa #-$80 tmp ;so first add gives "0"
291 2494 AC 1A 25 ldy counter
292 2497 @
293 2497 18 A5 80 69 80 85 + adw tmp #$80 ;tmp = counter*$80 - calc addr of the sprite to put gfx
294 24A2 88 dey
295 24A3 10 F2 bpl @-
296
297 24A5 18 A5 88 65 80 85 + adw _spr tmp
298 24B2 A5 88 85 80 A5 89 + mwa _spr tmp ; save address - it will be used in clearing and then drawing
299
300 24BA AD 1C 25 lda dino_save_pm_y_prev ;clearing old sprite, same way as drawing a new one
301 24BD 18 clc ;add ypos to the sprite address
302 24BE 65 88 adc _spr
303 24C0 85 88 sta _spr
304 ;scc
305 ;inc _spr+1 ;not necessary, sprites are not crossing pages
306
307 24C2 A0 00 ldy #0 ;delete old sprite here
308 24C4 98 tya
309 24C5 A2 18 ldx #24 ;dino height
310 24C7 @
311 24C7 91 88 sta (_spr),y
312 24C9 C8 iny
313 24CA CA dex
314 24CB D0 FA bne @-
315
316
317
318 ;--------------------------
319 24CD A5 80 85 88 A5 81 + mwa tmp _spr
320 24D5 AD 1B 25 lda dino_save_pm_y ;drawing sprite at a new position
321 24D8 18 clc ;add ypos to the sprite address
322 24D9 65 88 adc _spr
323 24DB 85 88 sta _spr
324 ;scc
325 ;inc _spr+1 ;not necessary, sprites are not crossing pages
326
327
328 24DD 18 clc ;beginning of the next column of dino to the sprite
329 24DE A5 86 lda _dino_sav ;0- first column, 1 - 2nd, 2 - 3rd
330 24E0 6D 1A 25 adc counter
331 24E3 85 84 sta _dino
332 ;bcc @+ ;needs to be removed as both bytes must be copied
333 24E5 A5 87 lda _dino_sav+1 ;original address
334 24E7 69 00 adc #0
335 24E9 85 85 sta _dino+1
336 ;@
337
338 24EB A0 00 ldy #0
339
340 24ED A2 18 ldx #24 ;dino height
341 24EF @
342 24EF B1 84 lda (_dino),y
343 24F1 91 88 sta (_spr),y
344 24F3 18 A5 84 69 03 85 + adw _dino #3 ;+3 ==> next line in dino
345 24FE 18 A5 88 69 01 85 + adw _spr #1
346 2509 CA dex
347 250A D0 E3 bne @-
348
349
350
351 250C EE 1A 25 AD 1A 25 inc:lda counter
352 2512 C9 03 cmp #3
353 2514 F0 03 4C 84 24 jne loop0
354
355
356
357 2519 60 rts
358 251A 00 counter .by 0
359 251B 00 dino_save_pm_y .by 0
360 251C 00 dino_save_pm_y_prev .by 0
361
362 .endp
363
364 251D .proc move_dl ;screen window one byte right
365 ;uses: AXY
366
367 251D EE 50 25 AD 50 25 inc:lda x_scr_offset
368 2523 C9 41 cmp #sw_log+1 ; is it end of the logical 2 screens?
369 2525 D0 08 bne @+
370 ;start anew
371 2527 A9 00 8D 50 25 mva #0 x_scr_offset
372 252C 20 55 22 jsr dl_addr_init
373 252F @
374 252F A9 04 8D 3C 25 A9 + mwa #dl_addrs+1 incr+1 ;self mod
375 2539 A2 80 ldx #sh
376 253B EE FF FF incr inc $ffff
377 253E 18 AD 3C 25 69 03 + adw incr+1 #3
378 254C CA dex
379 254D D0 EC bne incr
380 254F 60 rts
381 .endp
382 2550 00 x_scr_offset .by 0 ;where is the beginning of the screen
383
384 2551 .proc move_scr ;screen window one step (1/4 th of byte) right
385 ;uses: AXY
386 2551 CE 6D 25 AD 6D 25 dec:lda hscr_state
387 2557 8D 04 D4 sta HSCROL
388 255A C9 04 cmp #4
389 255C D0 0E bne @+
390 255E A9 0C 8D 6D 25 mva #12 hscr_state
391 2563 8D 04 D4 sta HSCROL
392 2566 20 1D 25 jsr move_dl
393 2569 20 1D 25 jsr move_dl
394 256C @
395 256C 60 rts
396 256D 00 hscr_state .by 0
397 .endp
79 256E icl 'artwork.asm'
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
1 ; @com.wudsn.ide.asm.mainsourcefile=ni.asm
2 ;-------------------------------------------------------------
3 ;24x24 pix = 3x3 chars (3x24 bytes)
4 .rept 3, #
5 DINO:1
6 INS 'art/dino:1.data'
7 .ENDR
7 .endr
Source: REPT
5 256E DINO0
5 256E 00 00 00 00 03 FC + INS 'art/dino0.data'
5 25B6 DINO1
5 25B6 00 00 00 00 03 FC + INS 'art/dino1.data'
5 25FE DINO2
5 25FE 00 00 00 00 03 FC + INS 'art/dino2.data'
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
8
9 .rept 3, #
10 DINO_MASK:1
11 INS 'art/dino_mask:1.data'
12 .ENDR
12 .endr
Source: REPT
10 2646 DINO_MASK0
10 2646 FF F8 01 FF F0 00 + INS 'art/dino_mask0.data'
10 268E DINO_MASK1
10 268E FF F8 01 FF F0 00 + INS 'art/dino_mask1.data'
10 26D6 DINO_MASK2
10 26D6 00 07 FE 00 0F FF + INS 'art/dino_mask2.data'
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
13
14 271E dino_tab_l
15 .rept 3, #
16 .BY <DINO:1
17 .ENDR
17 .endr
Source: REPT
16 271E 6E .BY <DINO0
16 271F B6 .BY <DINO1
16 2720 FE .BY <DINO2
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
18 2721 dino_tab_h
19 .rept 3, #
20 .BY >DINO:1
21 .ENDR
21 .endr
Source: REPT
20 2721 25 .BY >DINO0
20 2722 25 .BY >DINO1
20 2723 25 .BY >DINO2
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
22
23 2724 dino_mask_tab_l
24 .rept 3, #
25 .BY <DINO_MASK:1
26 .ENDR
26 .endr
Source: REPT
25 2724 46 .BY <DINO_MASK0
25 2725 8E .BY <DINO_MASK1
25 2726 D6 .BY <DINO_MASK2
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
27 2727 dino_mask_tab_h
28 .rept 3, #
29 .BY >DINO_MASK:1
30 .ENDR
30 .endr
Source: REPT
29 2727 26 .BY >DINO_MASK0
29 2728 26 .BY >DINO_MASK1
29 2729 26 .BY >DINO_MASK2
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
31
32 272A dino_back ; background save for dino sprite
33 272A 00 00 00 00 00 00 + :3*24 .by 0
34 2772 00 dino_save_y .by 0
35
36 ;------------------------------
37 ; ground pictures, 8x16 px = 2x1 chars (2x8 bytes)
38 .rept 3, #
39 GND_:1
40 INS 'art/gnd_:1.data'
41 .ENDR
41 .endr
Source: REPT
39 2773 GND_0
39 2773 00 00 00 00 00 00 + INS 'art/gnd_0.data'
39 2783 GND_1
39 2783 03 F0 06 18 1C 0C + INS 'art/gnd_1.data'
39 2793 GND_2
39 2793 00 00 00 00 00 00 + INS 'art/gnd_2.data'
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
42 27A3 gnd_tab_l
43 .rept 3, #
44 .BY <GND_:1
45 .ENDR
45 .endr
Source: REPT
44 27A3 73 .BY <GND_0
44 27A4 83 .BY <GND_1
44 27A5 93 .BY <GND_2
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
46 27A6 gnd_tab_h
47 .rept 3, #
48 .BY >GND_:1
49 .ENDR
49 .endr
Source: REPT
48 27A6 27 .BY >GND_0
48 27A7 27 .BY >GND_1
48 27A8 27 .BY >GND_2
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
50 27A9 scr_addrs_l
51 27A9 00 80 00 80 00 80 + :sh .by <(screen+#*sw)
52 2829 scr_addrs_h
53 2829 40 40 41 41 42 42 + :sh .by >(screen+#*sw)
54 ;------------------------------
55 ; cacti pictures, height and width variable
56 ; cactX.data is flipped vertically
57 = 0003 cacti = 3
58
59 .rept cacti, #
60 CACT:1
61 INS 'art/cact:1.data'
62 .ENDR
62 .endr
Source: REPT
60 28A9 CACT0
60 28A9 00 00 00 00 03 E0 + INS 'art/cact0.data'
60 2935 CACT1
60 2935 00 00 00 00 00 7F + INS 'art/cact1.data'
60 29F5 CACT2
60 29F5 00 00 00 00 00 00 + INS 'art/cact2.data'
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
63
64 2B0D cact_widths ; widths of cactii in bytes
65 2B0D 04 04 08 .by 4, 4, 8
66 2B10 cact_heights ; heights of cactii in lines
67 2B10 23 30 23 .by 35,48,35
68 2B13 cact_tab_l
69 .rept cacti, #
70 .BY <CACT:1
71 .ENDR
71 .endr
Source: REPT
70 2B13 A9 .BY <CACT0
70 2B14 35 .BY <CACT1
70 2B15 F5 .BY <CACT2
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
72 2B16 cact_tab_h
73 .rept cacti, #
74 .BY >CACT:1
75 .ENDR
75 .endr
Source: REPT
74 2B16 28 .BY >CACT0
74 2B17 29 .BY >CACT1
74 2B18 29 .BY >CACT2
Source: C:\jac\wudsn\Workspace\no_internet\artwork.asm
76