mirror of
https://github.com/a2-4am/4cade.git
synced 2024-06-16 16:29:51 +00:00
84 lines
1.6 KiB
Plaintext
84 lines
1.6 KiB
Plaintext
|
;license:MIT
|
||
|
;(c) 2019-2022 by 4am
|
||
|
;
|
||
|
|
||
|
!ifndef _FX_MACROS_MISC_ {
|
||
|
|
||
|
!macro HIGH_3_LOW_5 .input {
|
||
|
and #%11100000 ; second value: high 3 bits = index into tables to find bitmasks
|
||
|
tax
|
||
|
eor (<.input), y ; second value: low 5 bits = byte offset within the row (implicitly "and #%00011111")
|
||
|
tay
|
||
|
}
|
||
|
|
||
|
; must set N flag based on Y immediately before using these macros
|
||
|
; e.g. LDY, INY, DEY, TYA
|
||
|
!macro IS_Y_OFFSCREEN {
|
||
|
bpl +
|
||
|
sec
|
||
|
bcs ++
|
||
|
+ cpy #40
|
||
|
++
|
||
|
}
|
||
|
!macro BRANCH_IF_Y_IS_OFFSCREEN .target {
|
||
|
cpy #40
|
||
|
bcs .target
|
||
|
}
|
||
|
!macro LONG_BRANCH_IF_Y_IS_OFFSCREEN .target {
|
||
|
cpy #40
|
||
|
bcc +
|
||
|
jmp .target
|
||
|
+
|
||
|
}
|
||
|
|
||
|
!macro COPY_TO_0 .start, .end {
|
||
|
; out: X=0
|
||
|
; Z=1
|
||
|
ldx #(.end-.start)
|
||
|
- lda .start-1, x
|
||
|
sta $FF, x
|
||
|
dex
|
||
|
bne -
|
||
|
}
|
||
|
|
||
|
!macro OVERCOPY_TO_0 .start, .end {
|
||
|
; over-copy region to $00
|
||
|
; clobbers $FF
|
||
|
; out: X=0
|
||
|
; Y=last byte before start (e.g. 0 if the last instruction is JMP $0000)
|
||
|
ldx #(.end-.start+1)
|
||
|
- ldy .start-2, x
|
||
|
sty $FE, x
|
||
|
dex
|
||
|
bne -
|
||
|
}
|
||
|
|
||
|
!macro INC_INPUT_AND_LOOP .loop {
|
||
|
inc <input
|
||
|
beq +
|
||
|
jmp .loop
|
||
|
+ bit KBD
|
||
|
bmi +
|
||
|
inc <input+1
|
||
|
jmp .loop
|
||
|
+ rts
|
||
|
}
|
||
|
|
||
|
!macro DEC_INPUT_AND_LOOP .loop {
|
||
|
lda input
|
||
|
php
|
||
|
dec input
|
||
|
dec input
|
||
|
plp
|
||
|
bne +
|
||
|
dec input+1
|
||
|
bit KBD
|
||
|
bpl .loop
|
||
|
bmi ++
|
||
|
+ jmp .loop
|
||
|
++ rts
|
||
|
}
|
||
|
|
||
|
_FX_MACROS_MISC_=*
|
||
|
}
|