pokecrystal-board/macros/data.asm

127 lines
1.9 KiB
NASM
Raw Normal View History

2018-02-02 19:24:50 -08:00
; Value macros
2020-05-07 08:09:41 -07:00
; 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
2018-02-02 19:24:50 -08:00
percent EQUS "* $ff / 100"
2020-05-07 08:09:41 -07:00
; e.g. 1 out_of 2 == 50 percent + 1 == $80
out_of EQUS "* $100 /"
assert_power_of_2: MACRO
assert (\1) & ((\1) - 1) == 0, "\1 must be a power of 2"
ENDM
2017-12-13 21:36:24 -08:00
; Constant data (db, dw, dl) macros
dwb: MACRO
dw \1
db \2
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dbw: MACRO
db \1
dw \2
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dbbw: MACRO
db \1, \2
dw \3
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dbww: MACRO
db \1
dw \2, \3
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dbwww: MACRO
db \1
dw \2, \3, \4
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dn: MACRO ; nybbles
rept _NARG / 2
2017-12-13 21:36:24 -08:00
db ((\1) << 4) | (\2)
shift 2
endr
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dc: MACRO ; "crumbs"
rept _NARG / 4
2017-12-13 21:36:24 -08:00
db ((\1) << 6) | ((\2) << 4) | ((\3) << 2) | (\4)
shift 4
endr
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dx: MACRO
x = 8 * ((\1) - 1)
rept \1
2017-12-13 21:36:24 -08:00
db ((\2) >> x) & $ff
x = x - 8
endr
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dt: MACRO ; three-byte (big-endian)
dx 3, \1
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dd: MACRO ; four-byte (big-endian)
dx 4, \1
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
bigdw: MACRO ; big-endian word
2018-09-09 15:25:43 -07:00
dx 2, \1 ; db HIGH(\1), LOW(\1)
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dba: MACRO ; dbw bank, address
rept _NARG
2017-12-13 21:36:24 -08:00
dbw BANK(\1), \1
shift
endr
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dab: MACRO ; dwb address, bank
rept _NARG
2017-12-13 21:36:24 -08:00
dwb \1, BANK(\1)
shift
endr
2017-12-28 13:31:16 -08:00
ENDM
2017-12-13 21:36:24 -08:00
dba_pic: MACRO ; dbw bank, address
db BANK(\1) - PICS_FIX
dw \1
ENDM
bcd: MACRO
rept _NARG
dn ((\1) % 100) / 10, (\1) % 10
shift
endr
ENDM
sine_table: MACRO
; \1 samples of sin(x) from x=0 to x<32768 (pi radians)
x = 0
rept \1
dw (sin(x) + (sin(x) & $ff)) >> 8 ; round up
x = x + DIV(32768, \1) ; a circle has 65536 "degrees"
endr
2017-12-13 21:36:24 -08:00
ENDM