GSCats/macros.s

323 lines
3.8 KiB
ArmAsm
Raw Permalink Normal View History

2017-07-29 21:47:17 +00:00
.macro OP8
.i8
.a8
.endmacro
.macro OP16
.i16
.a16
.endmacro
.macro BITS8A
sep #%00100000
.a8
.endmacro
2017-07-29 21:47:17 +00:00
.macro BITS8
sep #%00110000
OP8
.endmacro
.macro BITS16
rep #%00110000
OP16
.endmacro
.macro DBR bankNum
BITS8
2018-03-05 20:32:05 +00:00
lda #bankNum
2017-07-29 21:47:17 +00:00
pha
plb
BITS16
.endmacro
.macro SYNCDBR
phk
plb
.endmacro
2018-01-16 20:56:53 +00:00
.macro SAVE_DBR
phb
phk
plb
.endmacro
.macro RESTORE_DBR
plb
.endmacro
2017-07-29 21:47:17 +00:00
2017-07-28 22:11:25 +00:00
.macro EMULATION
sec ; Enable 8-bit mode
xce
2017-07-29 21:47:17 +00:00
OP8
2017-07-28 22:11:25 +00:00
.endmacro
.macro NATIVE
clc ; Enable 16-bit mode
xce
2017-07-29 21:47:17 +00:00
BITS16
2017-07-28 22:11:25 +00:00
.endmacro
2017-07-29 21:47:17 +00:00
2017-07-28 22:11:25 +00:00
.macro SHRVIDEO
2017-07-29 21:47:17 +00:00
BITS8
2017-07-28 22:11:25 +00:00
lda NEWVIDEO
ora #%11000001
sta NEWVIDEO
2017-07-29 21:47:17 +00:00
BITS16
2017-07-28 22:11:25 +00:00
.endmacro
2017-07-29 21:47:17 +00:00
2017-07-28 22:11:25 +00:00
.macro CLASSICVIDEO
2017-07-29 21:47:17 +00:00
BITS8
2017-07-28 22:11:25 +00:00
lda NEWVIDEO
and #%00111111
sta NEWVIDEO
2017-07-29 21:47:17 +00:00
BITS16
.endmacro
2017-10-06 19:28:18 +00:00
.macro SHADOWMEMORY
sep #%00100000 ; 3 16-bit A only, to preserve X/Y
2017-07-29 21:47:17 +00:00
.a8
lda SHADOW ;5
2017-10-01 22:40:29 +00:00
sta SHADOWREGISTER ;4
lda #0 ;2
sta SHADOW ;5
2017-10-06 19:28:18 +00:00
rep #%00100000 ;3
.a16
.endmacro
.macro NORMALMEMORY
sep #%00100000 ; 3 16-bit A only, to preserve X/Y
.a8
lda SHADOWREGISTER ;4
sta SHADOW ;5
rep #%00100000 ;3
.a16
.endmacro
.macro FASTGRAPHICS ;34 cycles, 12 bytes
sei ;2
phd ;4
2018-03-05 20:32:05 +00:00
sep #%00100000 ; 3 8-bit A only, to preserve X/Y
2017-10-06 19:28:18 +00:00
.a8
2017-07-29 21:47:17 +00:00
lda STACKCTL ;5
2017-10-01 22:40:29 +00:00
sta STACKREGISTER ;4
ora #$30 ;2
sta STACKCTL ;5
2017-07-29 21:47:17 +00:00
rep #%00100000 ;3
2017-07-28 22:11:25 +00:00
.a16
tsc ;2
2017-10-01 22:40:29 +00:00
sta STACKPTR ;4
2017-07-28 22:11:25 +00:00
.endmacro
2017-10-06 19:28:18 +00:00
.macro SLOWGRAPHICS ;28 cycles, 12 bytes
2018-03-05 20:32:05 +00:00
sep #%00100000 ; 3 8-bit A only, to preserve X/Y
2017-07-29 21:47:17 +00:00
.a8
2017-10-01 22:40:29 +00:00
lda STACKREGISTER ;4
sta STACKCTL ;5
2017-07-29 21:47:17 +00:00
rep #%00100000 ;3
2017-07-29 21:47:17 +00:00
.a16
2017-10-01 22:40:29 +00:00
lda STACKPTR ;4
tcs ;2
pld ;5
cli ;2
2017-07-29 21:47:17 +00:00
.endmacro
2017-07-28 22:11:25 +00:00
.macro LOADPARAM24 bankNumDoubled,addr16
lda #bankNumDoubled
sta PARAM24+1
lda #addr16
sta PARAM24
.endmacro
2017-07-28 22:11:25 +00:00
2017-08-10 02:33:52 +00:00
2017-08-13 21:54:18 +00:00
.macro pstring Arg
.byte .strlen(Arg), Arg
.endmacro
.macro qbyte Arg
.dbyt Arg>>16,Arg&$0000ffff
.endmacro
.macro qbytei Arg
.dbyt ~(Arg>>16),~(Arg&$0000ffff)
.endmacro
.macro qbyte7 Arg
.dbyt (Arg>>16)&$7777,Arg&$00007777
.endmacro
.macro fontword Arg ; Converts 0->A,F->E to match our palette for font rendering
.dbyt (((Arg & $FF00) | $AA00) & $EE00) | (((Arg & $00FF) | $00AA) & $00EE)
.endmacro
.macro ldaA Arg ; Forces 24-bit absolute addressing to bank $00
.byte $af
.word Arg
.byte $00
.endmacro
.macro BREAK
.local nobrk
pha
lda breakpoint
beq nobrk
; lda #1
; sta $e1c029
pla
brk
nobrk:
pla
.endmacro
2018-03-05 20:32:05 +00:00
.macro BREAK_NOSTACK
.local nobrk
2018-03-05 20:32:05 +00:00
lda breakpoint
beq nobrk
lda #1
sta $e1c029
brk
nobrk:
.endmacro
.macro HARDBRK
pha
lda #1
sta $e1c029
pla
brk
.endmacro
.macro DEADLOCK
deadlock: jmp deadlock
.endmacro
.macro BREAKLOCK
.local deadlock
pha
lda breakpoint
beq nobrk
pla
deadlock: jmp deadlock
nobrk:
pla
.endmacro
.macro JSRA ; Destination in accumulator
.local jsri_smc
sta jsri_smc+1
jsri_smc:
jsr 0
.endmacro
2018-12-29 18:33:08 +00:00
.macro ABSA ; Absolute value of accumulator. Assumes status flags set correctly for accumulator!
.local done
bpl done
eor #$ffff
inc
done:
.endmacro
.macro MEMCHK ; Check to see when a memory value has been stepped on
.local chkdone
pha
lda $0311CC
cmp #$4242
bne chkdone
lda #1
sta $e1c029
pla
brk
chkdone:
pla
.endmacro
2017-07-28 22:11:25 +00:00
;;;;;;;;;;
; Stack Macros
.macro SAVE_AXY ; Saves all registers
pha
phx
phy
.endmacro
.macro RESTORE_AXY ; Restores all registers
ply
plx
pla
.endmacro
.macro SAVE_AY ; Saves accumulator and Y index
pha
phy
.endmacro
.macro RESTORE_AY ; Restores accumulator and Y index
ply
pla
.endmacro
.macro SAVE_AX ; Saves accumulator and X index
pha
phx
.endmacro
.macro RESTORE_AX ; Restores accumulator and X index
plx
pla
.endmacro
.macro SAVE_XY ; Saves X and Y index
phx
phy
.endmacro
.macro RESTORE_XY ; Restores X and Y index
ply
plx
.endmacro
2017-08-15 19:40:14 +00:00
.macro SAVE_P0 ; Saves PARAML0
lda PARAML0
pha
.endmacro
.macro RESTORE_P0 ; Restores PARAML0
pla
sta PARAML0
.endmacro