diff --git a/lib/atari.hea b/lib/atari.hea new file mode 100644 index 0000000..9258fe5 --- /dev/null +++ b/lib/atari.hea @@ -0,0 +1,483 @@ +/* +scr48 = %00111111 ;screen 48b +scr40 = %00111110 ;screen 40b +scr32 = %00111101 ;screen 32b +*/ + +* --------------------------------------------------------------------------------------------- +* --- GTIA +* --------------------------------------------------------------------------------------------- +HPOSP0 = $D000 ; pozioma pozycja gracza 0 (Z) +HPOSP1 = $D001 ; pozioma pozycja gracza 1 (Z) +HPOSP2 = $D002 ; pozioma pozycja gracza 2 (Z) +HPOSP3 = $D003 ; pozioma pozycja gracza 3 (Z) +HPOSM0 = $D004 ; pozioma pozycja pocisku 0 (Z) +HPOSM1 = $D005 ; pozioma pozycja pocisku 1 (Z) +HPOSM2 = $D006 ; pozioma pozycja pocisku 2 (Z) +HPOSM3 = $D007 ; pozioma pozycja pocisku 3 (Z) +SIZEP0 = $D008 ; poziomy rozmiar gracza 0 (Z) +SIZEP1 = $D009 ; poziomy rozmiar gracza 1 (Z) +SIZEP2 = $D00A ; poziomy rozmiar gracza 2 (Z) +SIZEP3 = $D00B ; poziomy rozmiar gracza 3 (Z) +SIZEM = $D00C ; poziomy rozmiar pocisków (Z) +GRAFP0 = $D00D ; rejestr grafiki gracza 0 (Z) +GRAFP1 = $D00E ; rejestr grafiki gracza 1 (Z) +GRAFP2 = $D00F ; rejestr grafiki gracza 2 (Z) +GRAFP3 = $D010 ; rejestr grafiki gracza 3 (Z) +GRAFM = $D011 ; rejestr grafiki pocisków (Z) +COLPM0 = $D012 ; rejestr koloru gracza i pocisku 0 (Z) +COLPM1 = $D013 ; rejestr koloru gracza i pocisku 1 (Z) +COLPM2 = $D014 ; rejestr koloru gracza i pocisku 2 (Z) +COLPM3 = $D015 ; rejestr koloru gracza i pocisku 3 (Z) +COLPF0 = $D016 ; rejestr koloru pola gry 0 (Z) +COLPF1 = $D017 ; rejestr koloru pola gry 1 (Z) +COLPF2 = $D018 ; rejestr koloru pola gry 2 (Z) +COLPF3 = $D019 ; rejestr koloru pola gry 3 (Z) +COLBAK = $D01A ; rejestr koloru tła (Z) + +COLOR0 = colpf0 +COLOR1 = colpf1 +COLOR2 = colpf2 +COLOR3 = colpf3 + +KOLM0PF = $D000 ; kolizja pocisku 0 z polem gry (O) +KOLM1PF = $D001 ; kolizja pocisku 1 z polem gry (O) +KOLM2PF = $D002 ; kolizja pocisku 2 z polem gry (O) +KOLM3PF = $D003 ; kolizja pocisku 3 z polem gry (O) +KOLP0PF = $D004 ; kolizja gracza 0 z polem gry (O) +KOLP1PF = $D005 ; kolizja gracza 1 z polem gry (O) +KOLP2PF = $D006 ; kolizja gracza 2 z polem gry (O) +KOLP3PF = $D007 ; kolizja gracza 3 z polem gry (O) +KOLM0P = $D008 ; kolizja pocisku 0 z graczem (O) +KOLM1P = $D009 ; kolizja pocisku 1 z graczem (O) +KOLM2P = $D00A ; kolizja pocisku 2 z graczem (O) +KOLM3P = $D00B ; kolizja pocisku 3 z graczem (O) +KOLP0P = $D00C ; kolizja gracza 0 z innym graczem (O) +KOLP1P = $D00D ; kolizja gracza 1 z innym graczem (O) +KOLP2P = $D00E ; kolizja gracza 2 z innym graczem (O) +KOLP3P = $D00F ; kolizja gracza 3 z innym graczem (O) +TRIG0 = $D010 ; stan przycisku joysticka 0 (O) +TRIG1 = $D011 ; stan przycisku joysticka 1 (O) +TRIG3 = $D013 ; znacznik dołączenia cartridge-a (O) +PAL = $D014 ; znacznik systemu TV (O) + +GTICTL = $D01B ; rejestr kontroli układu GTIA +GTIACTL = gtictl + +VDELAY = $D01C ; licznik opóźnienia pionowego P/MG +PMCNTL = $D01D ; rejestr kontroli graczy i pocisków +HITCLR = $D01E ; rejestr kasowania rejestrów kolizji +CONSOL = $D01F ; rejestr stanu klawiszy konsoli Start (bit 0), Select (bit 1), Option (bit 2) + +* --------------------------------------------------------------------------------------------- +* --- POKEY +* --------------------------------------------------------------------------------------------- + +IRQENS = $0010 ; rejestr-cień IRQEN +IRQSTAT = $0011 ; rejestr-cień IRQST + +AUDF3 = $D204 ; częstotliwość pracy generatora 3 (Z) +AUDCTL = $D208 ; rejestr kontroli generatorów dźwięku (Z) +STIMER = $D209 ; rejestr zerowania liczników (Z) +KBCODE = $D209 ; kod ostatnio naciśniętego klawisza (O) +SKSTRES = $D20A ; rejestr statusu złącza szeregowego (Z) +RANDOM = $D20A ; rejestr liczby losowej (O) +SEROUT = $D20D ; szeregowy rejestr wyjściowy (Z) +SERIN = $D20D ; szeregowy rejestr wejściowy (O) +IRQEN = $D20E ; zezwolenie przerwań IRQ (Z) +IRQST = $D20E ; status przerwań IRQ (O) +SKCTL = $D20F ; rejestr kontroli złącza szeregowego (Z) +SKSTAT = $D20F ; rejestr statusu złącza szeregowego (O) + +* --------------------------------------------------------------------------------------------- +* --- PIA +* --------------------------------------------------------------------------------------------- +PORTA = $D300 ; port A układu PIA +PORTB = $D301 ; port B układu PIA +PACTL = $D302 ; rejestr kontroli portu A +PBCTL = $D303 ; rejestr kontroli portu B + +* --------------------------------------------------------------------------------------------- +* --- ANTIC +* --------------------------------------------------------------------------------------------- +DMACTL = $D400 ; rejestr kontroli dostępu do pamięci +CHRCTL = $D401 ; rejestr kontroli wyświetlania znaków +DLPTR = $D402 ; adres programu ANTIC-a +HSCROL = $D404 ; znacznik poziomego przesuwu obrazu +VSCROL = $D405 ; znacznik pionowego przesuwu obrazu +PMBASE = $D407 ; adres pamięci graczy i pocisków +CHBASE = $D409 ; adres zestawu znaków +WSYNC = $D40A ; znacznik oczekiwania na synchronizację poziomą +VCOUNT = $D40B ; licznik linii obrazu +LPENH = $D40C ; poziome położenie pióra świetlengo +LPENV = $D40D ; pionowe położenie pióra świetlnego +NMIEN = $D40E ; rejestr zezwoleń na przerwania NMI +NMIST = $D40F ; rejestr statusu przerwań NMI + +;------------------------------------- +;additional system variables +;------------------------------------- +COLPM0S = $02C0 ;- - rejestr-cień COLPM0 +COLPM1S = $02C1 ;- - rejestr-cień COLPM1 +COLPM2S = $02C2 ;- - rejestr-cień COLPM2 +COLPM3S = $02C3 ;- - rejestr-cień COLPM3 +COLPF0S = $02C4 ;- - rejestr-cień COLPF0 +COLPF1S = $02C5 ;- - rejestr-cień COLPF1 +COLPF2S = $02C6 ;- - rejestr-cień COLPF2 +COLPF3S = $02C7 ;- - rejestr-cień COLPF3 + +COLBAKS = $02C8 +GTICTLS = $026F ;- - rejestr-cień GTIACTL + +DMACTLS = $022F ;- - rejestr kontroli dostępu do pamięci - cień +DLPTRS = $0230 ;- - adres programu ANTIC-a - cień +CHBAS = $02F4 ;- - rejestr-cień CHBASE +KBCODES = $02FC ;- - rejestr-cień KBCODE + +SETVBV = $E45C +XITVBV = $E462 +SYSVBV = $E45F +RTCLOK = $0012 + +MEMTOP = $02E5 ;- - adres górnej granicy wolnej pamięci RAM +MEMLO = $02E7 ;- - adres dolnej granicy wolnej pamięci RAM + +JSTICK0 = $0278 ;- - położenie joysticka 0 +JSTICK1 = $0279 ;- JSTICK1 - położenie joysticka 1 +JSTICK2 = $027A ;- JSTICK2 - położenie joysticka 0 +JSTICK3 = $027B ;- JSTICK3 - położenie joysticka 1 +PTRIG0 = $027C ;- PTRIG0 - przycisk potencjometru 0 +PTRIG1 = $027D ;- PTRIG1 - przycisk potencjometru 1 +TRIG0S = $0284 ;- TRIG0S - przycisk joysticka 0, rejestr-cień TRIG0 +TRIG1S = $0285 ;- TRIG1S - przycisk joysticka 1, rejestr-cień TRIG1 +TRIG2S = $0286 ;- TRIG2S - rejestr-cień TRIG0 +TRIG3S = $0287 ;- TRIG3S - rejestr-cień TRIG1 + + +/* +Rejestry OS w pamięci RAM + + $08 - WARMST - znacznik gorącego startu + $0E - APPMHI - najwyższy adres RAM zajęty przez program + $10 - IRQENS - rejestr-cień IRQEN + $11 - IRQSTAT - rejestr-cień IRQST + $12 - RTCLOK - zegar czasu rzeczywistego + $15 - BUFADR - adres bufora dla operacji dyskowych + $17 - ICCOMT - rejestr przejściowy kodu operacji I/O + $20 - ZIOCB - zerostronicowy blok kontroli I/O + $20 - ICHIDZ - indeks wpisu urządzenia w HATABS + $21 - ICDNOZ - numer urządzenia + $22 - ICCOMZ - kod operacji wejścia/wyjścia + $23 - ICSTZ - status operacji wejścia/wyjścia + $24 - ICBAZ - adres bufora danych dla operacji I/O + $26 - ICPTZ - adres procedury obsługi dla operacji + $28 - ICBLZ - długość bufora danych dla operacji I/O + $2A - ICAX1Z - rejestr pomocniczy ZIOCB + $2B - ICAX2Z - rejestr pomocniczy ZIOCB + $2C - ICAX3Z - rejestr pomocniczy ZIOCB + $2D - ICAX4Z - rejestr pomocniczy ZIOCB + $2E - ICAX5Z - rejestr pomocniczy ZIOCB + $2F - ICAX6Z - rejestr pomocniczy ZIOCB + $30 - STATUS - status aktualnej operacji SIO + $31 - CHKSUM - suma kontrolna dla operacji SIO + $32 - BUFR - adres bufora danych dla SIO + $34 - BUFEN - adres końca bufora danych dla SIO + $36 - LTEMP - pomocniczy wektor odczytu listy liniowej + $38 - BUFRFL - znacznik zapełnienia bufora SIO + $39 - RECVND - znacznik końca odczytu + $3A - XMTDON - znacznik końca transmisji + $3B - CHKSNT - znacznik nadania sumy kontrolnej + $3C - NOCKSM - znacznik braku sumy kontrolnej + $3D - BPTR - licznik bufora magnetofonu + $3E - GAPTYP - znacznik długości przerwy między blokami + $3F - FEOF - znacznik końca zbioru + $40 - FREQ - licznik dźwięku przy otwarciu magnetofonu + $41 - IOSNDEN - znacznik dźwięku przy transmisji + $42 - CRITIC - znacznik krytycznych czasowo operacji I/O + $4A - ZCHAIN - rejestr następstwa listy liniowej + $4C - DSTAT - status klawiatury i ekranu + $50 - TEMP - pomocniczy rejestr przejściowy + $51 - HOLD1 - pomocniczy rejestr przejściowy + $52 - LMARGIN - lewy margines obrazu + $53 - RMARGIN - prawy margines obrazu + $54 - ROWCRS - pionowa pozycja kursora + $55 - COLCRS - pozioma pozycja kursora + $57 - DINDEX - numer trybu graficznego OS + $58 - SAVMSC - adres pamięci obrazu + $5A - OLDROW - poprzednia pionowa pozycja kursora + $5B - OLDCOL - poprzednia pozioma pozycja kursora + $5D - OLDCHR - poprzedni znak na ekranie + $5E - OLDADR - poprzedni adres znaku na ekranie + $60 - FKDEFP - wektor tabeli definicji klawiszy F1-F4 + $62 - PALNTS - wskaźnik systemu TV + $63 - LOGCOL - adres kursora w wierszu logicznym + $64 - ADRESS - rejestr adresowy dla procedur edytora + $66 - MLTTMP - pomocniczy rejestr przejściowy + $68 - SAVADR - pomocniczy rejestr adresowy + $6A - RAMTOP - liczba stron pamięci RAM + $6B - BUFCNT - licznik bufora edytora + $6C - BUFSTR - adres bufora dla edytora + $6E - BITMSK - maska bitowa do wyświetlenia znaku + $6F - SHFAMT - liczba przesunięć punktu + $70 - ROWAC - aktualny wiersz przy rysowaniu + $72 - COLAC - aktualna kolumna przy rysowaniu + $74 - ENDPT - znacznik końca rysowanej linii + $76 - DELTAR - przyrost pionowej pozycji kursora + $77 - DELTAC - przyrost poziomej pozycji kursora + $79 - KEYDEFP - wektor tabeli definicji klawiszy + $7B - SWPFLG - znacznik kursora w trybach z oknem + $7C - HOLDCH - przechowywanie wartości znaku + $7D - INSDAT - rejestr pomocniczy edytora + $7E - COUNTR - licznik pamięci obrazu dla DOSCR i DRAW +$0100 - STACK - stos mikroprocesora 6502 +$0200 - DLIV - wektor przerwania programu ANTIC-a +$0210 - VTIMR1 - wektor przerwania licznika 1 POKEY-a +$0212 - VTIMR2 - wektor przerwania licznika 2 POKEY-a +$0214 - VTIMR4 - wektor przerwania licznika 4 POKEY-a +$0218 - TIMCNT1 - pierwszy licznik systemu +$0226 - TIMVEC1 - wektor przerwania licznika TIMCNT1 +$022A - TIMFLG3 - znacznik wyzerowania licznika TIMCNT3 +$022F - DMACTLS - rejestr-cień DMACTL +$0230 - DLPTRS - rejestr-cień DLPTR +$0232 - SKCTLS - rejestr-cień SKCTL +$0233 - LCOUNT - licznik odczytu dla nowego urządzenia +$0234 - LPENHS - rejestr-cień LPENH +$0235 - LPENVS - rejestr-cień LPENV +$023A - CDEVIC - kod urządzenia dla SIO +$023B - CCMND - kod operacji dla SIO +$023C - CAUX1 - pierwszy bajt pomocniczy dla SIO +$023D - CAUX2 - drugi bajt pomocniczy dla SIO +$023E - TEMP - tymczasowy rejestr odpowiedzi urządzenia +$023F - ERRFLG - znacznik błędu operacji SIO +$0244 - COLDST - znacznik zimnego startu systemu +$0245 - RECLEN - długość rekordu z nowego urządzenia +$0246 - DSKTIM - wartość Timeout dla stacji dysków +$0247 - PDVMSK - maska obecności nowych urządzeń +$0248 - PDVRS - rejestr-cień PDVREG +$024A - RELADR - adres procedury przemieszczalnej +$024C - PPTMPA - rejestr przechowania zawartości akumulatora +$024D - PPTMPX - rejestr przechowania zawartości rejestru X +$026B - CHSPTR - wektor nieużywanego zestawu znaków +$026C - VSFLAG - znacznik przesuwu pionowego obrazu +$026E - FINE - znacznik delikatnego przesuwu obrazu +$026F - GTICTLS - rejestr-cień GTIACTL +$0270 - PADDL0 - rejestr-cień POT0 +$0278 - JSTICK0 - położenie joysticka 0 +$0279 - JSTICK1 - położenie joysticka 1 +$027A - JSTICK2 - położenie joysticka 0 +$027B - JSTICK3 - położenie joysticka 1 +$027C - PTRIG0 - przycisk potencjometru 0 +$027D - PTRIG1 - przycisk potencjometru 1 +$0284 - TRIG0S - przycisk joysticka 0, rejestr-cień TRIG0 +$0285 - TRIG1S - przycisk joysticka 1, rejestr-cień TRIG1 +$0286 - TRIG2S - rejestr-cień TRIG0 +$0287 - TRIG3S - rejestr-cień TRIG1 +$0288 - HIBYTE - indeks operacji nowego urządzenia +$0289 - WMODE - znacznik sposobu dostępu do magnetofonu +$028A - BLIM - długość bufora magnetofonu +$028E - NEWADR - adres procedury nowego urządzenia +$0290 - TXTROW - wiersz kursora w oknie tekstowym +$0291 - TXTCOL - kolumna kursora w oknie tekstowym +$0293 - TINDEX - tryb graficzny OS w oknie tekstowym +$0294 - TXTMSC - adres pamięci okna tekstowego +$029C - CRETRY - liczba powtórzeń rozkazu operacji +$029D - HOLD3 - pomocniczy rejestr przejściowy +$029E - SUBTMP - pomocniczy rejestr przejściowy +$02A0 - DMASK - maska punktów obrazu +$02A2 - ESCFLG - znacznik klawisza ESC +$02A3 - TABMAP - mapa pozycji tabulacji +$02B2 - LOGMAP - mapa linii logicznych +$02B6 - INVFLG - znacznik klawisza inverse video +$02B7 - FILFLG - znacznik wypełniania obrazu +$02B8 - TMPROW - tymczasowy rejestr pozycji kursora +$02B9 - TMPCOL - tymczasowy rejestr pozycji kursora +$02BB - SCRFLG - znacznik przesuwu obrazu +$02BC - HOLD4 - pomocniczy rejestr przejściowy +$02BD - DRETRY - liczba powtórzeń wywołań urządzenia +$02BE - SHFLOK - znacznik klawiszy SHIFT i CONTROL +$02BF - BOTSCR - liczba wierszy tekstu +$02C0 - COLPM0S - rejestr-cień COLPM0 +$02C1 - COLPM1S - rejestr-cień COLPM1 +$02C2 - COLPM2S - rejestr-cień COLPM2 +$02C3 - COLPM3S - rejestr-cień COLPM3 +$02C4 - COLPF0S - rejestr-cień COLPF0 +$02C5 - COLPF1S - rejestr-cień COLPF1 ;gr.8 letters +$02C6 - COLPF2S - rejestr-cień COLPF2 ;gr.8 background +$02C7 - COLPF3S - rejestr-cień COLPF3 +$02C8 - COLBAKS - rejestr-cień COLBAK +$02C9 - RUNADR - adres procedury nowego urządzenia +$02CB - HIUSED - adres końcowy procedury nowego urządzenia +$02CF - GBYTEA - adres procedury nowego urządzenia +$02D1 - LOADAD - adres wczytywania z nowego urządzenia +$02D3 - ZLOADA - pomocniczy rejestr adresu wczytywania +$02D5 - DSCTLN - długość sektora dyskowego +$02DB - NOCLIK - znacznik dźwięku klawiatury +$02DE - PBPNT - licznik bufora drukarki +$02DF - PBUFSZ - długość bufora drukarki +$02E5 - MEMTOP - adres górnej granicy wolnej pamięci RAM +$02E7 - MEMLO - adres dolnej granicy wolnej pamięci RAM +$02E9 - HNDLOD - znacznik relokowalnej procedury obsługi I/O +$02EA - DVSTAT - dodatkowy rejestr statusu urządzenia +$02EC - DVTMOT - dodatkowy rejestr Timeout urządzenia +$02ED - REVNUM - numer wersji nowego urządzenia +$02EE - CBAUD - prędkość transmisji z magnetofonu +$02F0 - CRSINH - znacznik widoczności kursora +$02F3 - CHACT - rejestr-cień CHRCTL +$02F4 - CHBAS - rejestr-cień CHBASE +$02F5 - NEWROW - nowa pozycja pionowa kursora +$02F6 - NEWCOL - nowa pozycja pozioma kursora +$02F8 - ROWINC - zmiana pionowej pozycji kursora +$02F9 - COLINC - zmiana poziomej pozycji kursora +$02FA - CHAR - kod wewnętrzny znaku +$02FB - ATACHR - kod ATASCII znaku +$02FC - KBCODES - rejestr-cień KBCODE +$02FD - FILDAT - numer koloru dla wypełniania +$02FE - DSPFLG - znacznik wyświetlania znaków kontrolnych +$02FF - SSFLAG - znacznik start/stop dla przesuwu obrazu +$0300 - DDEVIC - kod identyfikacyjny urządzenia +$0301 - DUNIT - numer identyfikacyjny urządzenia +$0302 - DCMND - bajt rozkazu dla urządzenia +$0303 - DSTATS - status urządzenia +$0304 - DBUFA - adres bufora danych +$0306 - DTIMLO - wartość Timeout dla urządzenia +$0308 - DBYT - długość bufora danych +$030A - DAUX1 - rejestr pomocniczy dla operacji I/O +$030B - DAUX2 - rejestr pomocniczy dla operacji I/O +$030C - INTIM1 - rejestr czasu przy odczycie z magnetofonu +$030F - CASFLG - znacznik operacji z magnetofonem +$0310 - INTIM2 - rejestr czasu przy odczycie z magnetofonu +$0312 - TEMP1 - pomocniczy rejestr przejściowy +$0313 - TEMP2 - pomocniczy rejestr przejściowy +$0314 - PTIMOT - wartość Timeout dla drukarki +$0315 - TEMP3 - pomocniczy rejestr przejściowy +$0316 - SAVIO - rejestr przejściowy dla operacji SIO +$0317 - TIMFLG - znacznik upłynięcia czasu Timeout +$0318 - STACKP - rejestr wskaźnika stosu dla SIO +$0319 - TSTAT - przejściowy rejestr statusu SIO +$031A - HATABS - tabela wektorów procedur obsługi +$0340 - IOCB0 - blok kontroli I/O numer 0 +$0350 - IOCB1 - blok kontroli I/O numer 1 +$0360 - IOCB2 - blok kontroli I/O numer 2 +$0370 - IOCB3 - blok kontroli I/O numer 3 +$0380 - IOCB4 - blok kontroli I/O numer 4 +$0390 - IOCB5 - blok kontroli I/O numer 5 +$03A0 - IOCB6 - blok kontroli I/O numer 6 +$03B0 - IOCB7 - blok kontroli I/O numer 7 +$0340 - ICCHID - indeks wpisu urządzenia w HATABS +$0341 - ICDNO - numer urządzenia +$0342 - ICCMD - kod rozkazu operacji I/O +$0343 - ICSTAT - status operacji I/O +$0344 - ICBUFA - adres bufora danych dla operacji I/O +$0346 - ICPUTB - adres procedury przesyłania danych +$0348 - ICBUFL - długość bufora danych dla operacji I/O +$034A - ICAX1 - rejestr pomocniczy dla operacji I/O +$034B - ICAX2 - rejestr pomocniczy dla operacji I/O +$034C - ICAX3 - rejestr pomocniczy dla operacji I/O +$034D - ICAX4 - rejestr pomocniczy dla operacji I/O +$034E - ICAX5 - rejestr pomocniczy dla operacji I/O +$034F - ICAX6 - rejestr pomocniczy dla operacji I/O +$03C0 - PRNBUF - bufor drukarki +$03E8 - SUPERF - znacznik stosowany przy odczycie klawiatury +$03E9 - CKEY - znacznik klawisza START przy zimnym starcie +$03EC - DERRF - znacznik błędu przy otwieraniu edytora +$03FB - CHLINK - rejestr elementów listy liniowej +$03FD - CSCB - bajty kontroli szybkości magnetofonu +$03FF - CRCB - bajt długości rekordu magnetofonowego +$0400 - CASBUF - bufor magnetofonu +$047F - CASBEN - koniec bufora magnetofonu +$D000 - HPOSP0 - pozioma pozycja gracza 0 (Z) +$D000 - KOLM0PF - kolizja pocisku 0 z polem gry (O) +$D001 - HPOSP1 - pozioma pozycja gracza 1 (Z) +$D001 - KOLM1PF - kolizja pocisku 1 z polem gry (O) +$D002 - HPOSP2 - pozioma pozycja gracza 2 (Z) +$D002 - KOLM2PF - kolizja pocisku 2 z polem gry (O) +$D003 - HPOSP3 - pozioma pozycja gracza 3 (Z) +$D003 - KOLM3PF - kolizja pocisku 3 z polem gry (O) +$D004 - HPOSM0 - pozioma pozycja pocisku 0 (Z) +$D004 - KOLP0PF - kolizja gracza 0 z polem gry (O) +$D005 - HPOSM1 - pozioma pozycja pocisku 1 (Z) +$D005 - KOLP1PF - kolizja gracza 1 z polem gry (O) +$D006 - HPOSM2 - pozioma pozycja pocisku 2 (Z) +$D006 - KOLP2PF - kolizja gracza 2 z polem gry (O) +$D007 - HPOSM3 - pozioma pozycja pocisku 3 (Z) +$D007 - KOLP3PF - kolizja gracza 3 z polem gry (O) +$D008 - SIZEP0 - poziomy rozmiar gracza 0 (Z) +$D008 - KOLM0P - kolizja pocisku 0 z graczem (O) +$D009 - SIZEP1 - poziomy rozmiar gracza 1 (Z) +$D009 - KOLM1P - kolizja pocisku 1 z graczem (O) +$D00A - SIZEP2 - poziomy rozmiar gracza 2 (Z) +$D00A - KOLM2P - kolizja pocisku 2 z graczem (O) +$D00B - SIZEP3 - poziomy rozmiar gracza 3 (Z) +$D00B - KOLM3P - kolizja pocisku 3 z graczem (O) +$D00C - SIZEM - poziomy rozmiar pocisków (Z) +$D00C - KOLP0P - kolizja gracza 0 z innym graczem (O) +$D00D - GRAFP0 - rejestr grafiki gracza 0 (Z) +$D00D - KOLP1P - kolizja gracza 1 z innym graczem (O) +$D00E - GRAFP1 - rejestr grafiki gracza 1 (Z) +$D00E - KOLP2P - kolizja gracza 2 z innym graczem (O) +$D00F - GRAFP2 - rejestr grafiki gracza 2 (Z) +$D00F - KOLP3P - kolizja gracza 3 z innym graczem (O) +$D010 - GRAFP3 - rejestr grafiki gracza 3 (Z) +$D010 - TRIG0 - stan przycisku joysticka 0 (O) +$D011 - GRAFM - rejestr grafiki pocisków (Z) +$D011 - TRIG1 - stan przycisku joysticka 1 (O) +$D012 - COLPM0 - rejestr koloru gracza i pocisku 0 (Z) +$D013 - COLPM1 - rejestr koloru gracza i pocisku 1 (Z) +$D013 - TRIG3 - znacznik dołączenia cartridge'a (O) +$D014 - COLPM2 - rejestr koloru gracza i pocisku 2 (Z) +$D014 - PAL - znacznik systemu TV (O) +$D015 - COLPM3 - rejestr koloru gracza i pocisku 3 (Z) +$D016 - COLPF0 - rejestr koloru pola gry 0 (Z) +$D017 - COLPF1 - rejestr koloru pola gry 1 (Z) +$D018 - COLPF2 - rejestr koloru pola gry 2 (Z) +$D019 - COLPF3 - rejestr koloru pola gry 3 (Z) +$D01A - COLBAK - rejestr koloru tła (Z) +$D01B - GTIACTL - rejestr kontroli układu GTIA +$D01C - VDELAY - licznik opóźnienia pionowego P/MG +$D01D - PMCNTL - rejestr kontroli graczy i pocisków +$D01E - HITCLR - rejestr kasowania rejestrów kolizji +$D01F - CONSOL - rejestr stanu klawiszy konsoli +$D1FF - PDVREG - rejestr wyboru nowego urządzenia +$D200 - AUDF1 - częstotliwość pracy generatora 1 (Z) +$D200 - POT0 - rejestr położenia potencjometru 0 (O) +$D201 - AUDC1 - rejestr kontroli dźwięku generatora 1 (Z) +$D201 - POT1 - rejestr położenia potencjometru 1 (O) +$D202 - AUDF2 - częstotliwość pracy generatora 2 (Z) +$D202 - POT2 - rejestr położenia potencjometru 2 (O) +$D203 - AUDC2 - rejestr kontroli dźwięku generatora 2 (Z) +$D203 - POT3 - rejestr położenia potencjometru 3 (O) +$D204 - AUDF3 - częstotliwość pracy generatora 3 (Z) +$D205 - AUDC3 - rejestr kontroli dźwięku generatora 3 (Z) +$D206 - AUDF4 - częstotliwość pracy generatora 4 (Z) +$D207 - AUDC4 - rejestr kontroli dźwięku generatora 4 (Z) +$D208 - AUDCTL - rejestr kontroli generatorów dźwięku (Z) +$D208 - POTST - status odczytu potencjometrów (O) +$D209 - STIMER - rejestr zerowania liczników (Z) +$D209 - KBCODE - kod ostatnio naciśniętego klawisza (O) +$D20A - SKSTRES - reset statusu złącza szeregowego (Z) +$D20A - RANDOM - rejestr liczby losowej (O) +$D20B - POTG0 - znacznik przetwornika analogowo-cyfrowego (Z) +$D20D - SEROUT - szeregowy rejestr wyjściowy (Z) +$D20D - SERIN - szeregowy rejestr wejściowy (O) +$D20E - IRQEN - zezwolenia przerwań IRQ (Z) +$D20E - IRQST - status przerwań IRQ (O) +$D20F - SKCTL - rejestr kontroli złącza szeregowego (Z) +$D20F - SKSTAT - rejestr statusu złącza szeregowego (O) +$D300 - PORTA - port A układu PIA +$D301 - PORTB - port B układu PIA +$D302 - PACTL - rejestr kontroli portu A +$D303 - PBCTL - rejestr kontroli portu B +$D400 - DMACTL - rejestr kontroli dostępu do pamięci +$D401 - CHRCTL - rejestr kontroli wyświetlania znaków +$D402 - DLPTR - adres programu ANTIC-a +$D404 - HSCROL - znacznik poziomego przesuwu obrazu +$D405 - VSCROL - znacznik pionowego przesuwu obrazu +$D407 - PMBASE - adres pamięci graczy i pocisków +$D409 - CHBASE - adres zestawu znaków +$D40A - WSYNC - znacznik oczekiwania na synchronizację poziomą +$D40B - VCOUNT - licznik linii obrazu +$D40C - LPENH - poziome położenie pióra świetlengo +$D40D - LPENV - pionowe położenie pióra świetlnego +$D40E - NMIEN - rejestr zezwoleń na przerwania NMI +$D40F - NMIST - rejestr statusu przerwań NMI +*/ diff --git a/lib/macro.hea b/lib/macro.hea new file mode 100644 index 0000000..aed4482 --- /dev/null +++ b/lib/macro.hea @@ -0,0 +1,140 @@ +;------------------------------------- + .MACRO ROLW + ROL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO ASLW + ASL :1 + ROL :1+1 + .ENDM +;------------------------------------- + .MACRO RORW + ROR :1+1 + ROR :1 + .ENDM +;------------------------------------- + .MACRO LSRW + LSR :1+1 + ROR :1 + .ENDM + +;------------------------------------- + .MACRO VMAIN +; VMAIN #WORD,interrupt.vector +; interrupt.vector: +; 0 - VIMIRQ +; 1 - TIMCNT1 +; 2 - TIMCNT2 +; 3 - TIMCNT3 +; 4 - TIMCNT4 +; 5 - TIMCNT5 +; 6 - VVBLKI +; 7 - VVBLKD +; 8 - TIMVEC1 +; 9 - TIMVEC2 +; Initialises Vertical Blank Interrupts +; (works only with system interrupts ON) + LDY # <:1 + LDX # >:1 + LDA #:2 + JSR SETVBV + .ENDM +;------------------------------------- + .MACRO VDLI +; VDLI #WORD +; Initialises Display List Interrupts + LDY # <:1 + LDX # >:1 + LDA #$C0 + STY $0200 + STX $0201 + STA NMIEN + .ENDM +;------------------------------------- + .MACRO halt +?stop + /* + lda RANDOM + and #$05 + sta COLBAK + */ + jmp ?stop + .ENDM +;------------------------------------- + .MACRO KEY +; KEY +; waits for releasing and pressing "any key" + PHA +?CK1 LDA SKSTAT + AND #$04 + BEQ ?CK1 +?CK LDA SKSTAT + AND #$04 + BNE ?CK + PLA + .ENDM +;------------------------------------- + .MACRO WAIT +; WAIT +; waits one frame (1/50 s(PAL) or 1/60s(NTSC)) + LDA VCOUNT + STA WSYNC + STA WSYNC + STA WSYNC +?WA CMP VCOUNT + BNE ?WA + .ENDM +;------------------------------------- + .macro negw + ; negate the given word (0-a) +;------------------------------------- + sec + lda #$00 + sbc :1 + sta :1 + lda #$00 + sbc :1+1 + sta :1+1 + .endm +;------------------------------------- + .macro randomize + ;usage: randomize floor ceiling + ;returns (in A) a random .byte between "floor" and "ceiling" +?rand + lda random + cmp #:1 ;floor + bcc ?rand + cmp #:2+1 ;ceiling + bcs ?rand + .endm +;------------------------------------- + .macro phx + txa + pha + .endm +;------------------------------------- + .macro phy + tya + pha + .endm +;------------------------------------- + .macro plx + pla + tax + .endm +;------------------------------------- + .macro ply + pla + tay + .endm +;------------------------------------- + .macro pause + ;waits :1 number (byte) of frames + ldx #:1 +?PAUSELOOP + wait + dex + bne ?PAUSELOOP + .ENDM + diff --git a/program.asm b/program.asm index 092983f..7f9b409 100644 --- a/program.asm +++ b/program.asm @@ -76,8 +76,8 @@ margin=48 ;mountain drawing Y variable margin display=$1010 ;kill dos with the casette recorder! MaxPlayers = 6 - icl '../lib/atari.hea' - icl '../lib/macro.hea' + icl 'lib/atari.hea' + icl 'lib/macro.hea' ;Game loading address ORG $3010 ;two hex thousands for screen @@ -1141,4 +1141,4 @@ TheEnd .endif - run START \ No newline at end of file + run START