Score - first attemp

This commit is contained in:
Pecusx
2024-11-26 20:28:43 +01:00
parent ebca02f968
commit 94412126ea
6 changed files with 1456 additions and 9 deletions
+117 -9
View File
@@ -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
BIN
View File
Binary file not shown.
+161
View File
@@ -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
+272
View File
@@ -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
*/
+724
View File
@@ -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
+182
View File
@@ -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