From 94412126eab25a8654ee047d2ca36066c950504b Mon Sep 17 00:00:00 2001 From: Pecusx Date: Tue, 26 Nov 2024 20:28:43 +0100 Subject: [PATCH] Score - first attemp --- averybreakout.asm | 126 +++++++- averybreakout.xex | Bin 0 -> 4880 bytes lib/5200MACRO.ASM | 161 +++++++++++ lib/5200SYS.ASM | 272 +++++++++++++++++ lib/ATARISYS.ASM | 724 ++++++++++++++++++++++++++++++++++++++++++++++ lib/MACRO.ASM | 182 ++++++++++++ 6 files changed, 1456 insertions(+), 9 deletions(-) create mode 100644 averybreakout.xex create mode 100644 lib/5200MACRO.ASM create mode 100644 lib/5200SYS.ASM create mode 100644 lib/ATARISYS.ASM create mode 100644 lib/MACRO.ASM diff --git a/averybreakout.asm b/averybreakout.asm index 8b3108e..896658c 100644 --- a/averybreakout.asm +++ b/averybreakout.asm @@ -4,12 +4,12 @@ ;あめでと ;--------------------------------------------------- - icl '../lib/atari.hea' - icl '../lib/macro.hea' + icl 'lib/atarisys.asm' + icl 'lib/macro.asm' display=$a000 screenWidth = 80 ;in pixels -maxLines = 57 ; number of lines on the screen (must be odd) +maxLines = 55 ; number of lines on the screen (must be odd) spawnProbability = (256*1/5) margin = 2 ; top and bottom screen safety margin racquetPosMin = $2 ; min position of the paddle moved by the user @@ -37,7 +37,9 @@ maxBrickLines = 14 ; maximum number of lines of bricks to be eradicated org $2000 ;--------------------------------------------------- dl - .by $80+$20 + .by $80+$20 + dta $42,a(statusBuffer) + .by $80 dta $4f+$20,a(display) ;VSCROLL :((maxlines-1)/2) dta a($2f8f) @@ -53,6 +55,12 @@ racquetDisp .byte $80, $80, $80, $80, $80 :36 .byte $0 +;-------------------------------------------------- +statusBuffer + dta d" Lives: 5 HS: 000000 Score: 000000 " +score=statusBuffer+33 +HiScore=statusBuffer+17 +Lives=statusBuffer+8 ;-------------------------------------------------- vint ;------------JOY------------- @@ -488,6 +496,7 @@ dX_gr_dY__dX_dYpos negw dX bounceDone + jsr ScoreUp ;spawn the new bally ; if there is still an empty slot for a new ball somewhere... ;lda RANDOM @@ -602,7 +611,7 @@ endOfBallzLoop jpl flight - pause 0;all balls + ; pause 0;all balls lda eXistenZstackPtr cmp #maxBalls @@ -712,6 +721,104 @@ clearDeadLoop bpl clearDeadLoop rts +;-------------------------------------------------- +.proc ScoreUp +;-------------------------------------------------- + inc score+5 + lda score+5 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+5 + inc score+4 + lda score+4 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+4 + inc score+3 + lda score+3 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+3 + inc score+2 + lda score+2 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+2 + inc score+1 + lda score+1 + cmp #"9"+1 ; 9+1 character code + bne ScoreReady + lda #"0" ; 0 character code + sta score+1 + inc score +ScoreReady + rts +.endp +;-------------------------------------------------- +.proc ScoreClear +;-------------------------------------------------- + lda #"0" + ldx #4 +@ sta score,x + dex + bpl @- + rts +.endp +;-------------------------------------------------- +.proc HiScoreR +; It checks if the score is greater than hiscore. +; If yes - rewrites the score to hiscore. +;-------------------------------------------------- + lda HiScore + cmp score + bcc higher1 + bne lower + lda HiScore+1 + cmp score+1 + bcc higher2 + bne lower + lda HiScore+2 + cmp score+2 + bcc higher3 + bne lower + lda HiScore+3 + cmp score+3 + bcc higher4 + bne lower + lda HiScore+4 + cmp score+4 + bcc higher5 + bne lower + lda HiScore+5 + cmp score+5 + bcc higher6 +lower + rts +higher1 + lda score + sta HiScore +higher2 + lda score+1 + sta HiScore+1 +higher3 + lda score+2 + sta HiScore+2 +higher4 + lda score+3 + sta HiScore+3 +higher5 + lda score+4 + sta HiScore+4 +higher6 + lda score+5 + sta HiScore+5 + rts +.endp + ;-------------------------------------------------- clearScreen ;-------------------------------------------------- @@ -744,7 +851,7 @@ noColourReset cycleCloop lda colourCycleTab,y ;sta COLPM1,y - sta COLPM1S,y + sta PCOLR1,y dey bpl cycleCloop @@ -795,13 +902,14 @@ brickColourTab initialize ;-------------------------------------------------- - mva #$00 COLPM0S ; = $02C0 ;- - rejestr-cień COLPM0 + mva #$00 PCOLR0 ; = $02C0 ;- - rejestr-cień COLPM0 jsr cycleColoursReset mva #$7C COLBAKS mva #0 dliCount + jsr ScoreClear jsr clearscreen jsr drawBricks @@ -899,8 +1007,8 @@ eXistenZstackFill mva #screenWidth/2 racquetPos vmain vint,7 lda #$80 ;+GTIACTLBITS - sta GTIACTL - sta GTICTLS + sta GRACTL + sta GPRIOR mva #1 colour diff --git a/averybreakout.xex b/averybreakout.xex new file mode 100644 index 0000000000000000000000000000000000000000..92d68a8bfddecaba248f6ebb983eeb4a83ceb9cd GIT binary patch literal 4880 zcmeHJUuYaf7@ylqlWVBWSx~RR+KI`g+2kN`gBlTSjIp-iT2o(IM9SLc#DhXZi&DXd zz01wza_Kai7~3Rt;d;5b++4eoyh#2nRQZe{u zx!=L;e1CSnZ-4Wf;g**XcGkz6PGj{5iuct1m*1Ps_!WfFnxWcQQ?@tof&W-3ddyC) zsxL+E9KfhQbmXXi)jp5D8ITIB^(i{<)SNRBIv}}n*3MDqLWDBfz~8t*TReegx*c;I zK(rAv+9Ek%0C)m*^rFnDRASFA$sCa({s>(+=R0_v3`7P~L$r7<=ipB8#)^w+skIOp zN)57sMm#3+L!=ukVyfFjUd!pbU2e8l6V;rnCPA~IhJ?&BHKfCwuOgjhvqYk1S|VNM zhH4Ts56GT?BU@w%9O(z-jM*d;&D&uL3gtVm1nM%@c&TJ!} zFd{iJWBo6EU)9_1VXD8As4VD@lAwo${9Po(I{Y!x!8)?S=%WoB-RL4+FvduXJ9F+A zv^~aF3n+8?>Yj$Q?W2zaNw=JCXyjsWw8#@!50A|dd0neu-N~NIgMM$gCj)IFuaB4C zzvlC>X7I04oum^=MM)G&1;M>X%XM(qz1w!Tq*EPtKPMGtLCIll9_uG3q>?S)!dI~q z(o$AkazZiRXHVw>OIyBL36x}Axd62HoMvaRsCzeyxhpP4HTQk3`QFO4x>_7;k3Z_p zCEe@%`%AExxSF_1-UC+q*NXW43Kq^ftR2aorKSnLH)^x!02Z05w^y^EK3B~`dP5EC z(9hHu#b3LN__E$CS?eIFSptVXUj@?*)%G+krMi>dEZD2Dj^4fpt-v}VpGDzS)&=P- z25(;Ku5CGrTWU3PH#PC%G&ZJf z^I0&b@!}LVrfjnk%qhG$iH%9yd;-i#yf}f43EOmmIe{0)vBKSn0(~6MxPMcOG@c#D zTD?_ga6CJKwOXsv$l%#Ytkqag8t3rr6xOy`n~d{#b{cEtmdh~ktckU)iZPC9+FqM- zyCBWjUC?uOYxKO`FEyYP%IGMrqq90n=xA6+NgXjArF1l+qx6FHqY^Ki;NoCHjJkh; z+a!E53?gt@1>8Zx5K4%HUkDKTG%XqMB29@#Qlv~YhDDkbjf6;t#ghq9 z*(ekgx{5d4c_5DH1p)6B`A76JoLMr2zpTKuA|{natsworUZAz$rgZ|x^cf*unkeHJ zP9Wi=L!cYy_zZ25xtH#ed4#sgyq4~h6UYO*7HHF7mEi&kAiYKQz$FBZy)xWG;MgxO z%okc$5-0}h1(kuuKw+RS&@reOGz*8@ykn|#`m=Gc~{+jHErF-JKF~?EVvt#=;(L<5Wo6xK$hbx zIGaOa1;aTcb6_h-bUH0R99Swr4#8QluCU03+_RcTjCme%xVBcGIKAkRRa ufjk3w2J#H#8OSs6KVsnMp#tc(?Rakd&>j!IbNKKvd$LB%3qJ@imi-BlAo;BT literal 0 HcmV?d00001 diff --git a/lib/5200MACRO.ASM b/lib/5200MACRO.ASM new file mode 100644 index 0000000..7747352 --- /dev/null +++ b/lib/5200MACRO.ASM @@ -0,0 +1,161 @@ +;------------------------------------- + .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) +;---------- +; on 5200 it sets up deferred VBL ONLY for now + sei + lda #$00 ;Disable all interruptes + sta nmien + sta irqen + +@ lda vcount + bne @- + mwa #:1 VVBLKD + mva #$40 nmien + ;Enable IRQ interrupts + sta pokmsk + sta irqen + cli + + .ENDM +;------------------------------------- + .MACRO VDLI +; VDLI #WORD +; Initialises Display List Interrupts + mwa #:1 VDSLST + mva #$C0 NMIEN + .ENDM +;------------------------------------- + .MACRO halt +?stop + lda RANDOM + and #$05 + sta COLBAK + jmp ?stop + .ENDM +;------------------------------------- + .MACRO KEY +; KEY +; waits for releasing and pressing "any key" + + .ENDM +;------------------------------------- + .MACRO WAIT +; WAIT +; waits one frame (1/50 s(PAL) or 1/60s(NTSC)) +?ze LDA VCOUNT + cmp #16 ; if line<16 then wait for line>15 (long VBI protection) + bcc ?ze + sbc #10 ; last lines correction +?wa cmp VCOUNT + bcc ?wa +?wf cmp VCOUNT + bcs ?wf + .ENDM +;------------------------------------- + .macro waitRTC + lda RTCLOK+1 +?wa cmp RTCLOK+1 + beq ?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" + .if :2 < :1 + .error "floor higher than ceiling" + .endif +?rand + lda random + cmp #:2+1-:1 ;ceiling + bcs ?rand + .if %1>0 ; if floor = 0 - no add offset + adc #:1 + .endif + .endm +;------------------------------------- + .macro phx + txa + pha + .endm +;------------------------------------- + .macro phy + tya + pha + .endm +;------------------------------------- + .macro plx + pla + tax + .endm +;------------------------------------- + .macro ply + pla + tay + .endm +;------------------------------------- + .macro txy + txa + tay + .endm +;------------------------------------- + .macro tyx + tya + tax + .endm +;------------------------------------- + .macro pause + ;waits :1 number (byte) of frames + ldx #:1 +?PAUSELOOP + wait + dex + bne ?PAUSELOOP + .ENDM + diff --git a/lib/5200SYS.ASM b/lib/5200SYS.ASM new file mode 100644 index 0000000..0ad696b --- /dev/null +++ b/lib/5200SYS.ASM @@ -0,0 +1,272 @@ +;**************************************************************************** +;* ATARI 5200 CONSOLE * +;* SYSTEM EQUATES * +;**************************************************************************** +; based on https://web.archive.org/web/20200831200348/http://www.atarimuseum.com/videogames/consoles/5200/conv_to_5200.html +; +; OS VARIABLES FOR 5200 +; +; PAGE 0 +POKMSK = $00 ;pokmsk at $00 on Atari 5200 instead of $10 on Atari XL +RTCLOK = $01 ;Actually $01/$02 +CRITIC = $03 +ATRACT = $04 ;attact at $04 on Atari 5200 instead of $4D on Atari XL +DLPTRS = $05 ;DLPTRS at $05/$06 on Atari 5200 instead of $230 on Atari XL +DMACTLS = $07 ;DMACTLS at $07 on Atari 5200 instead of $22f on Atari XL +SSKCTL = skctl ;There is no shadow on Atari 5200 +PCOLR0 EQU $08 ;P0 COLOR +PCOLR1 EQU $09 ;P1 COLOR +PCOLR2 EQU $0a ;P2 COLOR +PCOLR3 EQU $0b ;P3 COLOR +COLOR0 EQU $0c ;COLOR 0 +COLOR1 EQU $0d +COLOR2 EQU $0e +COLOR3 EQU $0f +COLOR4 EQU $10 +COLBAKS EQU COLOR4 +PADDL0 EQU $11 +PADDL1 EQU $12 +PADDL2 EQU $13 +PADDL3 EQU $14 +PADDL4 EQU $15 +PADDL5 EQU $16 +PADDL6 EQU $17 +PADDL7 EQU $18 +STICK0 = $19 ;There is no stick0 but we will make the analog stick look like a digital one and store it here +STRIG0 = $1a ;There is no strig0 but we will make this the shadow of the TRIG0 ($c010) of GTIA +chbas = $1b ;There is no CHBAS but we will make this the shadow of the CHBASE +CONSOL = $1c ;There are no console keys on Atari 5200, so we replace console h/w reads with a new shadow based on the keypad keys +consol_reset = $07;The constant value representing that no consol key is pressed +kbcode = $1d ;There is no keyboard on the Atari 5200, so replace kbcode h/w reads with a byte variable read based on the keypad keys + +; PAGE 2 +VIMIRQ EQU $0200 ;IMMED IRQ VECTOR +VVBLKI EQU $0202 ;IMM VBLK NMI VECTOR +VVBLKD EQU $0204 ;DEF VBLK NMI VECTOR +VDSLST EQU $0206 ;DSP LIST NMI VECTOR +VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR +VKEYCNT EQU $020A ;Keypad routine continuation vector +BRKKY EQU $023C ;BREAK KEY VECTOR +VBREAK EQU $020E ;BRK INST IRQ VECTOR +VSERIN EQU $0210 ;POKEY INPUT RDY IRQ +VSEROR EQU $0212 ;POKEY OUTPUT RDY +VSEROC EQU $0214 ;POKEY OUTPUT DONE +VTIMR1 EQU $0216 ;POKEY TIMER 1 IRQ +VTIMR2 EQU $0218 ;POKEY TIMER 2 IRQ +VTIMR4 EQU $021A ;POKEY TIMER 4 IRQ + + +ROM_SETTINGS = $bfe8 ; game ROM info start (24 bytes total, 20b title, 2b year, 2b start vector) + +; HARDWARE REGISTERS + +; --------------------------------------------------------------------------- +POKEY EQU $EB00 +; --------------------------------------------------------------------------- +; +; READ +; +POT0 EQU POKEY+$00 +POT1 EQU POKEY+$01 +POT2 EQU POKEY+$02 +POT3 EQU POKEY+$03 +POT4 EQU POKEY+$04 +POT5 EQU POKEY+$05 +POT6 EQU POKEY+$06 +POT7 EQU POKEY+$07 +ALLPOT EQU POKEY+$08 +KBCODE_5200 EQU POKEY+$09 +RANDOM EQU POKEY+$0a +POTGO EQU POKEY+$0b +SERIN EQU POKEY+$0d +IRQST EQU POKEY+$0e +SKSTAT EQU POKEY+$0f +; +; WRITE +; +AUDF1 EQU POKEY+$00 +AUDC1 EQU POKEY+$01 +AUDF2 EQU POKEY+$02 +AUDC2 EQU POKEY+$03 +AUDF3 EQU POKEY+$04 +AUDC3 EQU POKEY+$05 +AUDF4 EQU POKEY+$06 +AUDC4 EQU POKEY+$07 +AUDCTL EQU POKEY+$08 +STIMER EQU POKEY+$09 +SKRES EQU POKEY+$0a +SEROUT EQU POKEY+$0d +IRQEN EQU POKEY+$0e +SKCTL EQU POKEY+$0f +; +; +; +; --------------------------------------------------------------------------- +GTIA EQU $C000 +; --------------------------------------------------------------------------- +; +; WRITE +; +HPOSP0 EQU GTIA+$00 +HPOSP1 EQU GTIA+$01 +HPOSP2 EQU GTIA+$02 +HPOSP3 EQU GTIA+$03 +HPOSM0 EQU GTIA+$04 +HPOSM1 EQU GTIA+$05 +HPOSM2 EQU GTIA+$06 +HPOSM3 EQU GTIA+$07 +SIZEP0 EQU GTIA+$08 +SIZEP1 EQU GTIA+$09 +SIZEP2 EQU GTIA+$0a +SIZEP3 EQU GTIA+$0b +SIZEM EQU GTIA+$0c +GRAFP0 EQU GTIA+$0d +GRAFP1 EQU GTIA+$0e +GRAFP2 EQU GTIA+$0f +GRAFP3 EQU GTIA+$10 +GRAFM EQU GTIA+$11 +COLPM0 EQU GTIA+$12 +COLPM1 EQU GTIA+$13 +COLPM2 EQU GTIA+$14 +COLPM3 EQU GTIA+$15 +COLPF0 EQU GTIA+$16 +COLPF1 EQU GTIA+$17 +COLPF2 EQU GTIA+$18 +COLPF3 EQU GTIA+$19 +COLBAK EQU GTIA+$1a +PRIOR EQU GTIA+$1b +GPRIOR = PRIOR ; no PRIOR shadow (GPRIOR) +VDELAY EQU GTIA+$1c +GRACTL EQU GTIA+$1d +HITCLR EQU GTIA+$1e +CONSOL5200 EQU GTIA+$1f ; no CONSOL in 5200 +; +; READ +; +M0PF EQU GTIA+$00 +M1PF EQU GTIA+$01 +M2PF EQU GTIA+$02 +M3PF EQU GTIA+$03 +P0PF EQU GTIA+$04 +P1PF EQU GTIA+$05 +P2PF EQU GTIA+$06 +P3PF EQU GTIA+$07 +M0PL EQU GTIA+$08 +M1PL EQU GTIA+$09 +M2PL EQU GTIA+$0a +M3PL EQU GTIA+$0b +P0PL EQU GTIA+$0c +P1PL EQU GTIA+$0d +P2PL EQU GTIA+$0e +P3PL EQU GTIA+$0f +TRIG0 EQU GTIA+$10 +TRIG1 EQU GTIA+$11 +TRIG2 EQU GTIA+$12 +TRIG3 EQU GTIA+$13 +PAL EQU GTIA+$14 +; +; +; --------------------------------------------------------------------------- +ANTIC EQU $D400 +; --------------------------------------------------------------------------- +; +DMACTL EQU ANTIC+$00 +CHACTL EQU ANTIC+$01 +DLPTR EQU ANTIC+$02 +;DLISTH EQU ANTIC+$03 +HSCROL EQU ANTIC+$04 +VSCROL EQU ANTIC+$05 +PMBASE EQU ANTIC+$07 +CHBASE EQU ANTIC+$09 +WSYNC EQU ANTIC+$0a +VCOUNT EQU ANTIC+$0b +PENH EQU ANTIC+$0c +PENV EQU ANTIC+$0d +NMIEN EQU ANTIC+$0e +NMIRES EQU ANTIC+$0f +NMIST EQU ANTIC+$0f +; +; --------------------------------------------------------------------------- +; Atari ANTIC chip display list equates +; --------------------------------------------------------------------------- +; +JUMP EQU $01 ; display list jump instruction (3 byte) +JVB EQU $41 ; display list jump and wait for vblank instruction (3) +; +SCH EQU $10 ; display list horizontal scrolling +SCV EQU $20 ; display list vertical scrolling +LMS EQU $40 ; display list load memory scan instruction (3 byte) +DLII EQU $80 ; display list interrupt instruction +; +SKIP1 EQU $00 ; display list skip 1 scan line instruction +SKIP2 EQU $10 ; display list skip 2 scan lines instruction +SKIP3 EQU $20 ; display list skip 3 scan lines instruction +SKIP4 EQU $30 ; display list skip 4 scan lines instruction +SKIP5 EQU $40 ; display list skip 5 scan lines instruction +SKIP6 EQU $50 ; display list skip 6 scan lines instruction +SKIP7 EQU $60 ; display list skip 7 scan lines instruction +SKIP8 EQU $70 ; display list skip 8 scan lines instruction +; +MODE2 EQU $02 ; display list mode 2 +MODE4 EQU $04 ; display list mode 4 +MODE8 EQU $08 ; display list mode 8 +MODEE EQU $0E ; display list mode E +MODEF EQU $0F ; display list mode F +; --------------------------------------------------------------------------- +; ENUMS +; --------------------------------------------------------------------------- + +.enum @dmactl + blank = %00 + narrow = %01 + standard= %10 + wide = %11 + missiles= %100 + players = %1000 + lineX1 = %10000 + lineX2 = %00000 + dma = %100000 +.ende + +scr48 = @dmactl(wide|dma|players|missiles|lineX1) +scr40 = @dmactl(standard|dma|players|missiles|lineX1) +scr32 = @dmactl(narrow|dma|players|missiles|lineX1) + +.enum @pmcntl + missiles= %1 + players = %10 + trigs = %100 +.ende + +.enum @gtictl + prior0 = %0 + prior1 = %1 + prior2 = %10 + prior4 = %100 + prior8 = %1000 + ply5 = %10000 ; Fifth Player Enable + mlc = %100000 ; Multiple Color Player Enable + mode9 = %01000000 + mode10 = %10000000 + mode11 = %11000000 +.ende +/* +; commented out to be replaced by the application specific A800 --> 5200 keypad translation +.enum @kbcode + _0 + _1 + _2 + _3 + _4 + _5 + _6 + _7 + _8 + _9 + _asterisk = $0a + _hash = $0b + _start = $0c + _pause = $0d + _reset = $0e +.ende +*/ \ No newline at end of file diff --git a/lib/ATARISYS.ASM b/lib/ATARISYS.ASM new file mode 100644 index 0000000..3fa62a6 --- /dev/null +++ b/lib/ATARISYS.ASM @@ -0,0 +1,724 @@ +;**************************************************************************** +;* ATARI PERSONAL COMPUTER * +;* SYSTEM EQUATES * +;**************************************************************************** +; +; OPERATING SYSTEM EQUATE FILE +; +; MODULE ORIGIN TABLE +; +; VECTOR TABLE +; +; HANDLER ENTRY POINTS ARE CALL- +; ED OUT IN THE FOLLOWING VECTOR +; TABLE. THESE ARE THE ADDRESSES +; MINUS ONE. +; +; EXAMPLE FOR EDITOR +; +; E400 OPEN +; 2 CLOSE +; 4 GET +; 6 PUT +; 8 STATUS +; A SPECIAL +; C JUMP TO POWER ON INIT +; F NOT USED +; +EDITRV EQU $E400 ;EDITOR +SCRENV EQU $E410 ;TV SCREEN +KEYBDV EQU $E420 ;KEYBOARD +PRINTV EQU $E430 ;PRINTER +CASETV EQU $E440 ;CASSETTE +; +; JUMP VECTOR TABLE +; +; THE FOLLOWING IS A TABLE OF +; JUMP INSTRUCTIONS TO VARIOUS +; ENTRY POINTS IN THE OPERATING +; SYSTEM +; +DISKIV EQU $E450 ;DISK INITIALIZATION +DSKINV EQU $E453 ;DISK INTERFACE +CIOV EQU $E456 ;CENTRAL I/O ROUTINE +SIOV EQU $E459 ;SERIAL I/O ROUTINE +SETVBV EQU $E45C ;SET SYSTEM TIMERS +SYSVBV EQU $E45F ;VBLANK CALCULATIONS +XITVBV EQU $E462 ;EXIT VBLANK +SIOINV EQU $E465 ;SIO INITIALIZATION +SENDEV EQU $E468 ;SEND ENABLE ROUTINE +INTINV EQU $E46B ;INTRPT HANDLER INIT +CIOINV EQU $E46E ;CIO INITIALIZATION +BLKBDV EQU $E471 ;BLACKBOARD MODE +WARMSV EQU $E474 ;WARM START VECTOR +COLDSV EQU $E477 ;COLD START VECTOR +RBLOKV EQU $E47A ;CASSETTE READ BLOCK +CSOPIV EQU $E47D ;CASSETTE INPUT OPEN +; +; VECTORS ADDED FOR 800XL +; +PUPDIV EQU $E480 ;POWER UP DISPLAY +SLFTSV EQU $E483 ;SELF TEST PROGRAM +PHENTV EQU $E486 ;UPLOADED HANDLER ENTER +PHULNV EQU $E489 ;UPLOADED HANDLER UNLINK +PHINIV EQU $E48C ;UPLOADED HANDLER INIT +; +; OPERATING SYSTEM EQUATES +; +; COMMAND CODES FOR IOCBS +; +_OPEN EQU $03 ;OPEN FOR I/O +GETREC EQU $05 ;GET RECORD (TEXT) +GETCHR EQU $07 ;GET CHARACTER(S) +PUTREC EQU $09 ;PUT RECORD (TEXT) +PUTCHR EQU $0B ;PUT CHARACTER(S) +_CLOSE EQU $0C ;CLOSE DEVICE +STATIS EQU $0D ;STATUS REQUEST +SPECIL EQU $0E ;SPECIAL ENTRY COMMAND +; +; SPECIAL ENTRY COMMANDS +; +DRAWLN EQU $11 ;DRAW LINE +FILLIN EQU $12 ;FILL +RENAME EQU $20 ;RENAME DISK FILE +DELETE EQU $21 ;DELETE DISK FILE +FORMAT EQU $22 ;FORMAT DISK +LOCKFL EQU $23 ;LOCK FILE +UNLOCK EQU $24 ;UNLOCK FILE +POINT EQU $25 ;POINT SECTOR +NOTE EQU $26 ;NOTE SECTOR +IOCFRE EQU $FF ;IOCB "FREE" +; +; AUX1 EQUATES +; () INDICATES WHICH DEVICES +; +APPEND EQU $01 ;WR APPEND(D)-SCN RD(E) +DIRECT EQU $02 ;OPEN DIRECTORY(D) +OPNIN EQU $04 ;OPEN FOR INPUT(ALL) +OPNOT EQU $08 ;OPEN FOR OUTPUT(ALL) +OPNINO EQU $0C ;OPEN INPUT&OUTPUT(ALL) +MXDMOD EQU $10 ;OPEN MIXED MODE(E,S) +INSCLR EQU $20 ;OPEN W/O CLEAR(E,S) +; +; DEVICE NAMES +; +SCREDT EQU 'E' ;SCREEN EDITOR (R/W) +KBD EQU 'K' ;KEYBOARD (R ONLY) +DISPLY EQU 'S' ;SCREEN DISPLAY (R/W) +PRINTR EQU 'P' ;PRINTER (W ONLY) +CASSET EQU 'C' ;CASSETTE (R/W) +RS232 EQU 'R' ;MODEM (R/W) +DISK EQU 'D' ;DISK (R/W) +; +; +; +; OPERATING SYSTEM STATUS CODES +; +SUCCES EQU $01 ;SUCCESSFUL OPERATION +BRKABT EQU $80 ;BREAK KEY ABORT +PRVOPN EQU $81 ;IOCB ALREADY OPEN +NONDEV EQU $82 ;NON-EXISTANT DEVICE +WRONLY EQU $83 ;IOCB OPEN FOR W ONLY +NVALID EQU $84 ;INVALID COMMAND +NOTOPN EQU $85 ;DEVICE/FILE NOT OPEN +BADIOC EQU $86 ;INVALID IOCB # +RDONLY EQU $87 ;IOCB OPEN FOR R ONLY +EOFERR EQU $88 ;END OF FILE +TRNRCD EQU $89 ;TRUNCATED RECORD +TIMOUT EQU $8A ;PERIPHERAL TIMEOUT +DNACK EQU $8B ;DEVICE NO ACKNOWLEDGE +FRMERR EQU $8C ;SERIAL BUS FRAME ERR +CRSROR EQU $8D ;CURSOR OVERRANGE +OVRRUN EQU $8E ;SERIAL DATA OVERRUN +CHKERR EQU $8F ;SERIAL CHECKSUM ERR +DERRER EQU $90 ;PERIPHRAL DEVICE ERR +BADMOD EQU $91 ;BAD SCREEN MODE # +FNCNOT EQU $92 ;NONEXISTANT FUNCTION +SCRMEM EQU $93 ;SCREEN MEM TOO SMALL +FILENF EQU $AA ;FILE NOT FOUND +; +; PAGE ZERO RAM ASSIGNMENTS +; +LNFLG EQU $00 ;LINBUG RAM +NGFLAG EQU $01 ;POWER-UP SELF-TEST FLAG +; +; THESE LOCATIONS NOT CLEARED +; +CASINI EQU $02 ;CASSETTE INIT LOC +RAMLO EQU $04 ;RAM POINTER MEM TST +TRAMSZ EQU $06 ;TEMP REG RAM SIZE +TSTDAT EQU $07 ;RAM TEST DATA REG +; +;CLEARED ON COLDSTART ONLY +; +WARMST EQU $08 ;WARM START FLAG +BOOTQ EQU $09 ;SUCCESSFUL BOOT FLG +DOSVEC EQU $0A ;DOS START VECTOR +DOSINI EQU $0C ;DOS INIT ADDRESS +APPMHI EQU $0E ;APPL MEM HI LIMIT +; +;CLEARED ON COLD OR WARM START +; +POKMSK EQU $10 ;MASK POKEY IRQ +BRKKEY EQU $11 ;BREAK KEY FLAG +RTCLOK EQU $12 ;REAL TIME CLOCK +BUFADR EQU $15 ;INDIRECT BUFF ADDR +ICCOMT EQU $17 ;COMMAND FOR VECTOR +DSKFMS EQU $18 ;FMS POINTER +DSKUTL EQU $1A ;DISK UTILITIES PTR +ABUFPT EQU $1C ;RESERVED +ICHIDZ EQU $20 ;HANDLER INDEX # +ICDNOZ EQU $21 ;DEVICE NUMBER +ICCOMZ EQU $22 ;COMMAND CODE +ICSTAZ EQU $23 ;STATUS RETURN +ICBALZ EQU $24 ;BUFFER ADDRESS +ICBAHZ EQU $25 +ICPTLZ EQU $26 ;PUT BYTE ROUTINE-1 +ICPTHZ EQU $27 +ICBLLZ EQU $28 ;BUFFER LENGTH +ICBLHZ EQU $29 +ICAX1Z EQU $2A ;AUXILIARY BYTES +ICAX2Z EQU $2B +ICSPRZ EQU $2C ;SPARE BYTES +ICIDNO EQU $2E ;IOCB # X 16 +CIOCHR EQU $2F ;CIO CHARACTER BYTE +STATUS EQU $30 ;INTERNAL STATUS +CHKSUM EQU $31 ;CHECKSUM +BUFRLO EQU $32 ;DATA BUFFER LO BYTE +BUFRHI EQU $33 ;DATA BUFFER HI BYTE +BFENLO EQU $34 ;NEXT BYTE PAST DATA +BFENHI EQU $35 ;BUFFER (HI & LO) +LTEMP EQU $36 ;LOADER TEMP +BUFRFL EQU $38 ;DATA BUFFR FULL FLG +RECVDN EQU $39 ;RECIEVE DONE FLAG +XMTDON EQU $3A ;XMIT DONE FLAG +CHKSNT EQU $3B ;CHECKSUM SENT FLAG +NOCKSM EQU $3C ;NO CHKSUM SENT FLAG +;BPTR EQU $3D ;CASSETTE DATA INDEX +FTYPE EQU $3E ;INTERRECORD GAP TYPE +FEOF EQU $3F ;END OF FILE FLAG +FREQ EQU $40 ;BEEP COUNT +SOUNDR EQU $41 ;NOISY I/O FLAG +CRITIC EQU $42 ;CRITICAL MODE +FMSZPG EQU $43 ;FMS ZERO PAGE +ZCHAIN EQU $4A ;HANDLER LOADER TEMP +DSTAT EQU $4C ;DISPLAY STATUS +ATRACT EQU $4D ;ATTRACT FLAG +DRKMSK EQU $4E ;DARK ATTRACT MASK +COLRSH EQU $4F ;COLOR SHIFTER +TMPCHR EQU $50 ;TEMP STORAGE +HOLD1 EQU $51 ;TEMP STORAGE +LMARGN EQU $52 ;LEFT MARGIN (1) +RMARGN EQU $53 ;RIGHT MARGIN (38) +ROWCRS EQU $54 ;CURSOR COUNTERS +COLCRS EQU $55 +DINDEX EQU $57 ;DISPLAY MODE # +SAVMSC EQU $58 ;SCREEN MEM ADDR +OLDROW EQU $5A ;DRAW START POSIT +OLDCOL EQU $5B +OLDCHR EQU $5D ;DATA UNDER CURSOR +OLDADR EQU $5E ;CURSOR MEM ADDR +FKDEF EQU $60 ;FUNC KEY DEFEAT POINTER +PALNTS EQU $62 ;PAL/NTSC FLAG +LOGCOL EQU $63 ;COL IN LOGICAL LINE +ADRESS EQU $64 ;TEMP STORAGE +MLTEMP EQU $66 ;TEMP STORAGE +SAVADR EQU $68 ;TEMP STORAGE +RAMTOP EQU $6A ;AVAILABLE RAM PAGES +BUFCNT EQU $6B ;BUFFER COUNT +BUFSTR EQU $6C ;EDITOR GETCH POINTR +BITMSK EQU $6E ;BIT MASK +SHFAMT EQU $6F ;PIXEL JUSTIFICATION +ROWAC EQU $70 ;ROW ACCUMULATOR +COLAC EQU $72 ;COLUMN ACCUMULATOR +ENDPT EQU $74 ;LINE LENGTH +DELTAR EQU $76 ;DELTA ROW +DELTAC EQU $77 ;DELTA COLUMN +KEYDEF EQU $79 ;KEY DEFEAT POINTER +SWPFLG EQU $7B ;SPLIT SCN CURS CNTL +HOLDCH EQU $7C ;KB CHAR TEMP HOLD +INSDAT EQU $7D ;TEMP STORAGE +COUNTR EQU $7E ;DRAW ITERATION CNT +; +; 80-FF ARE RESERVED FOR USER +; +; NOTE: SEE FLOATING POINT +; SUBROUTINE AREA FOR ZERO +; PAGE CELLS +; +; PAGE 1 - HARDWARE STACK +; +; PAGE TWO RAM ASSIGNMENTS +; +VDSLST EQU $0200 ;DSP LIST NMI VECTOR +VPRCED EQU $0202 ;PROCEED IRQ VECTOR +VINTER EQU $0204 ;INTERUPT IRQ VECTOR +VBREAK EQU $0206 ;BRK INST IRQ VECTOR +VKEYBD EQU $0208 ;POKEY KB IRQ VECTOR +VSERIN EQU $020A ;POKEY INPUT RDY IRQ +VSEROR EQU $020C ;POKEY OUTPUT RDY +VSEROC EQU $020E ;POKEY OUTPUT DONE +VTIMR1 EQU $0210 ;POKEY TIMER 1 IRQ +VTIMR2 EQU $0212 ;POKEY TIMER 2 IRQ +VTIMR4 EQU $0214 ;POKEY TIMER 4 IRQ +VIMIRQ EQU $0216 ;IMMED IRQ VECTOR +CDTMV1 EQU $0218 ;COUNT DOWN TIMER 1 +CDTMV2 EQU $021A ;COUNT DOWN TIMER 2 +CDTMV3 EQU $021C ;COUNT DOWN TIMER 3 +CDTMV4 EQU $021E ;COUNT DOWN TIMER 4 +CDTMV5 EQU $0220 ;COUNT DOWN TIMER 5 +VVBLKI EQU $0222 ;IMM VBLK NMI VECTOR +VVBLKD EQU $0224 ;DEF VBLK NMI VECTOR +CDTMA1 EQU $0226 ;CDTMV1 JSR ADDRESS +CDTMA2 EQU $0228 ;CDTMV2 JSR ADDRESS +CDTMF3 EQU $022A ;CDTMV3 FLAG +SRTIMR EQU $022B ;SOFTWARE REPEAT TMR +CDTMF4 EQU $022C ;CDTMV4 FLAG +INTEMP EQU $022D ;IAN'S TEMP +CDTMF5 EQU $022E ;CDTMV5 FLAG +DMACTLS EQU $022F ;SAVE DMACTL REG +DLPTRS EQU $0230 ;SAVE DISP LIST LO +;SDLSTH EQU $0231 ;SAVE DISP LIST HI +SSKCTL EQU $0232 ;SKCTL REGISTER RAM +LCOUNT EQU $0233 ;LOADER TEMP +LPENH EQU $0234 ;LIGHT PEN HORIZONTAL +LPENV EQU $0235 ;LIGHT PEN VERTICAL +BRKKY EQU $0236 ;BREAK KEY VECTOR +RELADR EQU $0238 ;LOADER REL ADDR +CDEVIC EQU $023A ;COMMAND BUFFER-DEV +CCOMND EQU $023B ;COMMAND BUFFER-CMND +CAUX1 EQU $023C ;COMMAND BUFFER AUX1 +CAUX2 EQU $023D ;COMMAND BUFFER AUX2 +;TEMP EQU $023E ;TEMPORARY RAM CELL +ERRFLG EQU $023F ;DEVICE ERROR FLAG +DFLAGS EQU $0240 ;DISK FLAGS(SECTOR1) +DBSECT EQU $0241 ;# DISK BOOT SECTORS +BOOTAD EQU $0242 ;DISK BOOT ADDRESS +COLDST EQU $0244 ;COLDSTART FLAG 1=CS +RECLEN EQU $0245 ;LOADER LENGTH +DSKTIM EQU $0246 ;DISK TIME OUT REG +VSFLAG EQU $026C ;FINE SCROLL TEMP +KEYDIS EQU $026D ;KEY DISABLE FLAG +FINE EQU $026E ;FINE SCROLL ENABLE(A1200) +GPRIOR EQU $026F ;GLOBAL PRIORITY +PADDL0 EQU $0270 ;POT 0 RAM CELL +PADDL1 EQU $0271 +PADDL2 EQU $0272 +PADDL3 EQU $0273 +STICK0 EQU $0278 ;JOYSTICK 0 RAM CELL +STICK1 EQU $0279 +PTRIG0 EQU $027C ;PADDLE TRIGGER 0 +PTRIG1 EQU $027D +PTRIG2 EQU $027E +PTRIG3 EQU $027F +STRIG0 EQU $0284 ;JOYSTICK TRIGGER 0 +STRIG1 EQU $0285 +HIBYTE EQU $0288 ;LOADER +WMODE EQU $0289 ;CASSETTE R/W MODE +BLIM EQU $028A ;CASSETTE RECORD SIZE +IMASK EQU $028B +JVECK EQU $028C ;JUMP VECTOR +NEWADR EQU $028E ;LOADER NEW ADDRESS +TXTROW EQU $0290 ;TEXT ROWCRS +TXTCOL EQU $0291 ;TEXT COLCRS +TINDEX EQU $0293 ;TEXT INDEX +TXTMSC EQU $0294 ;TEXT WINDOW MEM ADD +TXTOLD EQU $0296 ;TEXT OLDROW & COL +CRETRY EQU $029C ;# COMMAND RETRIES +HOLD3 EQU $029D +SUBTMP EQU $029E +HOLD2 EQU $029F +DMASK EQU $02A0 ;PIXEL LOCATION MASK +TMPLBT EQU $02A1 +ESCFLG EQU $02A2 ;ESCAPE FLAG +TABMAP EQU $02A3 ;TAB STOP MAP +LOGMAP EQU $02B2 ;LINE START BIT MAP +INVFLG EQU $02B6 ;INVERSE VIDEO FLAG +FILFLG EQU $02B7 ;FILL FLAG FOR DRAW +TMPROW EQU $02B8 +TMPCOL EQU $02B9 +SCRFLG EQU $02BB ;SET IF SCROLLING +HOLD4 EQU $02BC ;TEMP USED BY DRAW +DRETRY EQU $02BD ;# OF DEVICE RETRIES +SHFLOK EQU $02BE ;SHIFT/CTL LOCK FLAG +BOTSCR EQU $02BF ;BOTTOM OF SCREEN +PCOLR0 EQU $02C0 ;P0 COLOR +PCOLR1 EQU $02C1 ;P1 COLOR +PCOLR2 EQU $02C2 ;P2 COLOR +PCOLR3 EQU $02C3 ;P3 COLOR +COLOR0 EQU $02C4 ;COLOR 0 +COLOR1 EQU $02C5 +COLOR2 EQU $02C6 +COLOR3 EQU $02C7 +COLOR4 EQU $02C8 +COLBAKS EQU COLOR4 +RUNADR EQU $02C9 ;LOADER +HIUSED EQU $02CB ;LOADER +ZHIUSE EQU $02CD ;LOADER +GBYTEA EQU $02CF ;LOADER +LOADAD EQU $02D1 ;LOADER +ZLOADA EQU $02D3 ;LOADER +DSCTLN EQU $02D5 ;DISK SECTOR LENGTH +ACMISR EQU $02D7 ;RESERVED +KRPDEL EQU $02D9 ;KEY REPEAT DELAY +KEYREP EQU $02DA ;KEY REPEAT RATE(VBLANKS) +NOCLIK EQU $02DB ;CLICK ENABLE/DISABLE +HELPFG EQU $02DC ;HELP KEY FLAG +DMASAV EQU $02DD ;DMA SAVE STATE +PBPNT EQU $02DE ;PRINT BUFFER POINTER +PBUFSZ EQU $02DF ;PRINT BUFFER SIZE +DOSRUN EQU $02E0 ;DOS RUN/INIT ADDRESSES +RAMSIZ EQU $02E4 ;RAM SIZE-HIGH BYTE +MEMTOP EQU $02E5 ;TOP OF AVAIL MEMORY +MEMLO EQU $02E7 ;BOTTOM OF AVAIL MEM +HNDLOD EQU $02E9 ;POLL FLAG (1200) +DVSTAT EQU $02EA ;STATUS BUFFER +CBAUDL EQU $02EE ;CASSETTE BAUD RATE +CBAUDH EQU $02EF +CRSINH EQU $02F0 ;CURSOR INHIBIT 0=ON +KEYDEL EQU $02F1 ;KEY DELAY +CH1 EQU $02F2 ;PRIOR KB CHAR CODE +CHACT EQU $02F3 ;CHACTL REGISTER RAM +CHBAS EQU $02F4 ;CHBAS REGISTER RAM +NEWROW EQU $02F5 ;POINT DRAW GOES TO +NEWCOL EQU $02F6 +ROWINC EQU $02F8 ;ROW INCREMENT VALUE +COLINC EQU $02F9 ;COL INCREMENT VALUE +CHAR EQU $02FA ;INTERNAL CHAR CODE +ATACHR EQU $02FB ;ATASCII CHARACTER +CHKEY EQU $02FC ;KB CHAR CODE (FIFO) +FILDAT EQU $02FD ;RIGHT FILL DATA +DSPFLG EQU $02FE ;DISPLAY FLAG +SSFLAG EQU $02FF ;START/STOP FLAG +; +; PAGE THREE RAM ASSIGNMENTS +; +DDEVIC EQU $0300 ;BUS I.D. NUMBER +DUNIT EQU $0301 ;UNIT NUMBER +DCOMND EQU $0302 ;BUS COMMAND +DSTATS EQU $0303 ;COMMAND TYPE/STATUS +DBUFLO EQU $0304 ;DATA BUFFER LO BYTE +DBUFHI EQU $0305 ;DATA BUFFER HI BYTE +DTIMLO EQU $0306 ;DEVICE TIMEOUT SECS +DUNUSE EQU $0307 ;UNUSED BYTE +DBYTLO EQU $0308 ;# OF BYTES XFERRED +DBYTHI EQU $0309 +DAUX1 EQU $030A ;COMMAND AUX BYTE 1 +DAUX2 EQU $030B ;COMMAND AUX BYTE 2 +TIMER1 EQU $030C ;INITIAL TIMER VALUE +JMPERS EQU $030E ;OPTIONS (1200) +CASFLG EQU $030F ;CASSETE MODE IF SET +TIMER2 EQU $0310 ;FINAL TIMER VALUE +;TEMP1 EQU $0312 ;TEMP STORAGE +;TEMP2 EQU $0313 ;TEMP STORAGE +PTIMOT EQU $0314 ;PRINTER TIMEOUT REG +;TEMP3 EQU $0315 ;TEMP STORAGE +SAVIO EQU $0316 ;SAVE SERIAL IN DATA +TIMFLG EQU $0317 ;TIMEOUT FLAG C BAUD +STACKP EQU $0318 ;SIO STACK PTR SAVE +TSTAT EQU $0319 ;TEMP STATUS HOLDER +HATABS EQU $031A ;HANDLER ADDR TABLE +PUPBT1 EQU $033D ;POWER/UP RESET +PUPBT2 EQU $033E +PUPBT3 EQU $033F +ICHID EQU $0340 ;HANDLER INDEX # +ICDNO EQU $0341 ;DEVICE NUMBER +ICCOM EQU $0342 ;COMMAND CODE +ICSTA EQU $0343 ;STATUS +ICBAL EQU $0344 ;BUFFER ADDR LO BYTE +ICBAH EQU $0345 ;BUFFER ADDR HI BYTE +ICPTL EQU $0346 ;PUT ROUTINE ADDR-1 +ICPTH EQU $0347 +ICBLL EQU $0348 ;BUFFER LENGTH LO +ICBLH EQU $0349 ;BUFFER LENGTH HI +ICAX1 EQU $034A ;AUX BYTE 1 +ICAX2 EQU $034B ;AUX BYTE 2 +ICSPR EQU $034C ;SPARE BYTES +PRNBUF EQU $03C0 ;PRINTER BUFFER (40 BYTES) +SUPERF EQU $03E8 ;SCREEN EDITOR +CKEY EQU $03E9 ;START KEY FLAG +CASSBT EQU $03EA ;CASSETTE BOOT FLAG +CARTCK EQU $03EB ;CARTRIDGE CHECKSUM +ACMVAR EQU $03ED ;RESERVED +MINTLK EQU $03F9 ;RESERVED +GINTLK EQU $03FA ;CART INTERLOCK +CHLINK EQU $03FB ;HANDLER CHAIN +; +; PAGE FOUR RAM ASSIGNMENTS +; +CASBUF EQU $03FD ;CASSETTE BUFFER (131 BYTES) +USAREA EQU $0480 ;USER AREA +; +; PAGE FIVE AND SIX ARE RESERVED +; FOR USER WORK SPACE +; +; COLLEEN MNEMONICS +; +; --------------------------------------------------------------------------- +POKEY EQU $D200 +; --------------------------------------------------------------------------- +; +; READ +; +POT0 EQU POKEY+$00 +POT1 EQU POKEY+$01 +POT2 EQU POKEY+$02 +POT3 EQU POKEY+$03 +POT4 EQU POKEY+$04 +POT5 EQU POKEY+$05 +POT6 EQU POKEY+$06 +POT7 EQU POKEY+$07 +ALLPOT EQU POKEY+$08 +KBCODE EQU POKEY+$09 +RANDOM EQU POKEY+$0a +POTGO EQU POKEY+$0b +SERIN EQU POKEY+$0d +IRQST EQU POKEY+$0e +SKSTAT EQU POKEY+$0f +; +; WRITE +; +AUDF1 EQU POKEY+$00 +AUDC1 EQU POKEY+$01 +AUDF2 EQU POKEY+$02 +AUDC2 EQU POKEY+$03 +AUDF3 EQU POKEY+$04 +AUDC3 EQU POKEY+$05 +AUDF4 EQU POKEY+$06 +AUDC4 EQU POKEY+$07 +AUDCTL EQU POKEY+$08 +STIMER EQU POKEY+$09 +SKRES EQU POKEY+$0a +SEROUT EQU POKEY+$0d +IRQEN EQU POKEY+$0e +SKCTL EQU POKEY+$0f +; +; +; +; --------------------------------------------------------------------------- +GTIA EQU $D000 +; --------------------------------------------------------------------------- +; +; WRITE +; +HPOSP0 EQU GTIA+$00 +HPOSP1 EQU GTIA+$01 +HPOSP2 EQU GTIA+$02 +HPOSP3 EQU GTIA+$03 +HPOSM0 EQU GTIA+$04 +HPOSM1 EQU GTIA+$05 +HPOSM2 EQU GTIA+$06 +HPOSM3 EQU GTIA+$07 +SIZEP0 EQU GTIA+$08 +SIZEP1 EQU GTIA+$09 +SIZEP2 EQU GTIA+$0a +SIZEP3 EQU GTIA+$0b +SIZEM EQU GTIA+$0c +GRAFP0 EQU GTIA+$0d +GRAFP1 EQU GTIA+$0e +GRAFP2 EQU GTIA+$0f +GRAFP3 EQU GTIA+$10 +GRAFM EQU GTIA+$11 +COLPM0 EQU GTIA+$12 +COLPM1 EQU GTIA+$13 +COLPM2 EQU GTIA+$14 +COLPM3 EQU GTIA+$15 +COLPF0 EQU GTIA+$16 +COLPF1 EQU GTIA+$17 +COLPF2 EQU GTIA+$18 +COLPF3 EQU GTIA+$19 +COLBAK EQU GTIA+$1a +PRIOR EQU GTIA+$1b +VDELAY EQU GTIA+$1c +GRACTL EQU GTIA+$1d +HITCLR EQU GTIA+$1e +CONSOL EQU GTIA+$1f +; +; READ +; +M0PF EQU GTIA+$00 +M1PF EQU GTIA+$01 +M2PF EQU GTIA+$02 +M3PF EQU GTIA+$03 +P0PF EQU GTIA+$04 +P1PF EQU GTIA+$05 +P2PF EQU GTIA+$06 +P3PF EQU GTIA+$07 +M0PL EQU GTIA+$08 +M1PL EQU GTIA+$09 +M2PL EQU GTIA+$0a +M3PL EQU GTIA+$0b +P0PL EQU GTIA+$0c +P1PL EQU GTIA+$0d +P2PL EQU GTIA+$0e +P3PL EQU GTIA+$0f +TRIG0 EQU GTIA+$10 +TRIG1 EQU GTIA+$11 +TRIG2 EQU GTIA+$12 +TRIG3 EQU GTIA+$13 +PAL EQU GTIA+$14 +; +; +; --------------------------------------------------------------------------- +ANTIC EQU $D400 +; --------------------------------------------------------------------------- +; +DMACTL EQU ANTIC+$00 +CHACTL EQU ANTIC+$01 +DLPTR EQU ANTIC+$02 +;DLISTH EQU ANTIC+$03 +HSCROL EQU ANTIC+$04 +VSCROL EQU ANTIC+$05 +PMBASE EQU ANTIC+$07 +CHBASE EQU ANTIC+$09 +WSYNC EQU ANTIC+$0a +VCOUNT EQU ANTIC+$0b +PENH EQU ANTIC+$0c +PENV EQU ANTIC+$0d +NMIEN EQU ANTIC+$0e +NMIRES EQU ANTIC+$0f +NMIST EQU ANTIC+$0f +; +; +; --------------------------------------------------------------------------- +PIA EQU $D300 +; --------------------------------------------------------------------------- +; +PORTA EQU PIA+0 +PORTB EQU PIA+1 +PACTL EQU PIA+2 +PBCTL EQU PIA+3 +; +; --------------------------------------------------------------------------- +; Atari ANTIC chip display list equates +; --------------------------------------------------------------------------- +; +JUMP EQU $01 ; display list jump instruction (3 byte) +JVB EQU $41 ; display list jump and wait for vblank instruction (3) +; +SCH EQU $10 ; display list horizontal scrolling +SCV EQU $20 ; display list vertical scrolling +LMS EQU $40 ; display list load memory scan instruction (3 byte) +DLII EQU $80 ; display list interrupt instruction +; +SKIP1 EQU $00 ; display list skip 1 scan line instruction +SKIP2 EQU $10 ; display list skip 2 scan lines instruction +SKIP3 EQU $20 ; display list skip 3 scan lines instruction +SKIP4 EQU $30 ; display list skip 4 scan lines instruction +SKIP5 EQU $40 ; display list skip 5 scan lines instruction +SKIP6 EQU $50 ; display list skip 6 scan lines instruction +SKIP7 EQU $60 ; display list skip 7 scan lines instruction +SKIP8 EQU $70 ; display list skip 8 scan lines instruction +; +MODE2 EQU $02 ; display list mode 2 +MODE4 EQU $04 ; display list mode 4 +MODE8 EQU $08 ; display list mode 8 +MODEE EQU $0E ; display list mode E +MODEF EQU $0F ; display list mode F +; --------------------------------------------------------------------------- +; ENUMS +; --------------------------------------------------------------------------- + +.enum @dmactl + blank = %00 + narrow = %01 + standard= %10 + wide = %11 + missiles= %100 + players = %1000 + lineX1 = %10000 + lineX2 = %00000 + dma = %100000 +.ende + +scr48 = @dmactl(wide|dma|players|missiles|lineX1) +scr40 = @dmactl(standard|dma|players|missiles|lineX1) +scr32 = @dmactl(narrow|dma|players|missiles|lineX1) + +.enum @pmcntl + missiles= %1 + players = %10 + trigs = %100 +.ende + +.enum @gtictl + prior0 = %0 + prior1 = %1 + prior2 = %10 + prior4 = %100 + prior8 = %1000 + ply5 = %10000 ; Fifth Player Enable + mlc = %100000 ; Multiple Color Player Enable + mode9 = %01000000 + mode10 = %10000000 + mode11 = %11000000 +.ende +; --------------------------------------------------------------------------- +; KBCODEs +; --------------------------------------------------------------------------- +.enum @kbcode + _none = 255 + _esc = 28 + _1 = 31 + _2 = 30 + _3 = 26 + _4 = 24 + _5 = 29 + _6 = 27 + _7 = 51 + _8 = 53 + _9 = 48 + _0 = 50 + _lt = 54 + _gt = 55 + _del = 52 + _tab = 44 + _Q = 47 + _W = 46 + _E = 42 + _R = 40 + _T = 45 + _Y = 43 + _U = 11 + _I = 13 + _O = 8 + _P = 10 + _min = 14 + _up = 14 ; cursor function + _eq = 15 + _down = 15 ; cursor function + _ret = 12 + _A = 63 + _S = 62 + _D = 58 + _F = 56 + _G = 61 + _H = 57 + _J = 1 + _K = 5 + _L = 0 + _semicolon = 2 + _plus = 6 + _left = 6 ; cursor function + _asterisk = 7 + _right = 7 ; cursor function + _caps = 60 + _Z = 23 + _X = 22 + _C = 18 + _V = 16 + _B = 21 + _N = 36 + _M = 37 + _comma = 32 + _dot = 34 + _slash = 38 + _atari = 39 + _help = 17 + _F1 = 3 + _F2 = 4 + _F3 = 19 + _F4 = 20 + _space = 33 +.ende +EOL = $9b \ No newline at end of file diff --git a/lib/MACRO.ASM b/lib/MACRO.ASM new file mode 100644 index 0000000..1ce890a --- /dev/null +++ b/lib/MACRO.ASM @@ -0,0 +1,182 @@ +;------------------------------------- + .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 VDL +; VDL #WORD +; Changes Display List addres +; and sets width of the screen +; vdl dl,$01 - narrow screen (32 bytes) +; vdl dl,$02 - normal screen (40 bytes) +; vdl dl,$03 - wide screen (48 bytes) +; (works only with system interrupts ON) + + .if %0=2 + lda dmactls + and #$fc + ora #%2 + sta dmactls + .endif + + LDA # <%1 + STA DLPTRS + LDA # >%1 + STA DLPTRS+1 + .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)) +?ze LDA VCOUNT + cmp #16 ; if line<16 then wait for line>15 (long VBI protection) + bcc ?ze + sbc #10 ; last lines correction +?wa cmp VCOUNT + bcc ?wa +?wf cmp VCOUNT + bcs ?wf + .ENDM +;------------------------------------- + .macro waitRTC + lda RTCLOK+2 +?wa cmp RTCLOK+2 + beq ?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" + .if :2 < :1 + .error "floor higher than ceiling" + .endif +?rand + lda random + cmp #:2+1-:1 ;ceiling + bcs ?rand + .if %1>0 ; if floor = 0 - no add offset + adc #:1 + .endif + .endm +;------------------------------------- + .macro phx + txa + pha + .endm +;------------------------------------- + .macro phy + tya + pha + .endm +;------------------------------------- + .macro plx + pla + tax + .endm +;------------------------------------- + .macro ply + pla + tay + .endm +;------------------------------------- + .macro txy + txa + tay + .endm +;------------------------------------- + .macro tyx + tya + tax + .endm +;------------------------------------- + .macro pause + ;waits :1 number (byte) of frames + ldx #:1 +?PAUSELOOP + wait + dex + bne ?PAUSELOOP + .ENDM +