jep-hack/macros/data.asm
Zeta_Null 2f8a41f833 First Commit
Upload literally everything from the pokecrystal16 expand-move-ID branch
2023-09-10 12:35:35 -04:00

115 lines
1.8 KiB
NASM

; Value macros
; Many arbitrary percentages are simple base-10 or base-16 values:
; - 10 = 4 percent
; - 15 = 6 percent
; - $10 = 6 percent + 1 = 7 percent - 1
; - 20 = 8 percent
; - 25 = 10 percent
; - 30 = 12 percent
; - 40 = 16 percent
; - 50 = 20 percent - 1
; - 60 = 24 percent - 1
; - 70 = 28 percent - 1
; - 80 = 31 percent + 1 = 32 percent - 1
; - 85 = 33 percent + 1 = 34 percent - 1
; - 100 = 39 percent + 1 = 40 percent - 2
; - 120 = 47 percent + 1
; - 123 = 49 percent - 1
; - 160 = 63 percent
; - 180 = 71 percent - 1 = 70 percent + 2
; - 200 = 79 percent - 1
; - 230 = 90 percent + 1
DEF percent EQUS "* $ff / 100"
; e.g. 1 out_of 2 == 50 percent + 1 == $80
DEF out_of EQUS "* $100 /"
MACRO assert_power_of_2
assert (\1) & ((\1) - 1) == 0, "\1 must be a power of 2"
ENDM
; Constant data (db, dw, dl) macros
MACRO dwb
dw \1
db \2
ENDM
MACRO dbw
db \1
dw \2
ENDM
MACRO dbbbw
db \1, \2, \3
dw \4
ENDM
MACRO dbwbb
db \1
dw \2
db \3, \4
ENDM
MACRO dbwbw
db \1
dw \2
db \3
dw \4
ENDM
MACRO dn ; nybbles
rept _NARG / 2
db ((\1) << 4) | (\2)
shift 2
endr
ENDM
MACRO dc ; "crumbs"
rept _NARG / 4
db ((\1) << 6) | ((\2) << 4) | ((\3) << 2) | (\4)
shift 4
endr
ENDM
MACRO dt ; three-byte (big-endian)
db LOW((\1) >> 16), HIGH(\1), LOW(\1)
ENDM
MACRO dd ; four-byte (big-endian)
db HIGH((\1) >> 16), LOW((\1) >> 16), HIGH(\1), LOW(\1)
ENDM
MACRO bigdw ; big-endian word
db HIGH(\1), LOW(\1)
ENDM
MACRO dba ; dbw bank, address
rept _NARG
dbw BANK(\1), \1
shift
endr
ENDM
MACRO dab ; dwb address, bank
rept _NARG
dwb \1, BANK(\1)
shift
endr
ENDM
MACRO bcd
rept _NARG
dn ((\1) % 100) / 10, (\1) % 10
shift
endr
ENDM
MACRO sine_table
; \1 samples of sin(x) from x=0 to x<0.5 turns (pi radians)
for x, \1
dw sin(x * 0.5 / (\1))
endr
ENDM