mirror of
https://github.com/a2-4am/4cade.git
synced 2024-06-27 03:29:30 +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_=*
|
|
}
|