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