summaryrefslogtreecommitdiff
path: root/macros/data.asm
diff options
context:
space:
mode:
authorISSOtm <eldredhabert0@gmail.com>2018-05-27 11:18:14 +0200
committerISSOtm <eldredhabert0@gmail.com>2018-05-27 11:18:14 +0200
commit6bd6e25eef4a57d1898d7aae0b3b09e6dc5f2695 (patch)
tree214d4e433770231e3067e069426beb449af74dd1 /macros/data.asm
parent83afa8a12dfe450c378ca11743a2291501ec19a8 (diff)
Import more macros from pokecrystal
Diffstat (limited to 'macros/data.asm')
-rw-r--r--macros/data.asm129
1 files changed, 129 insertions, 0 deletions
diff --git a/macros/data.asm b/macros/data.asm
new file mode 100644
index 0000000..241e52a
--- /dev/null
+++ b/macros/data.asm
@@ -0,0 +1,129 @@
+; Value macros
+
+percent EQUS "* $ff / 100"
+
+
+; Constant data (db, dw, dl) macros
+
+dwb: MACRO
+ dw \1
+ db \2
+ENDM
+
+dbw: MACRO
+ db \1
+ dw \2
+ENDM
+
+dbbw: MACRO
+ db \1, \2
+ dw \3
+ENDM
+
+dbww: MACRO
+ db \1
+ dw \2, \3
+ENDM
+
+dbwww: MACRO
+ db \1
+ dw \2, \3, \4
+ENDM
+
+dn: MACRO ; nybbles
+rept _NARG / 2
+ db ((\1) << 4) | (\2)
+ shift
+ shift
+endr
+ENDM
+
+dc: MACRO ; "crumbs"
+rept _NARG / 4
+ db ((\1) << 6) | ((\2) << 4) | ((\3) << 2) | (\4)
+ shift
+ shift
+ shift
+ shift
+endr
+ENDM
+
+dx: MACRO
+x = 8 * ((\1) - 1)
+rept \1
+ db LOW((\2) >> x)
+x = x + -8
+endr
+ENDM
+
+dt: MACRO ; three-byte (big-endian)
+ dx 3, \1
+ENDM
+
+dd: MACRO ; four-byte (big-endian)
+ dx 4, \1
+ENDM
+
+bigdw: MACRO ; big-endian word
+ dx 2, \1
+ENDM
+
+dba: MACRO ; dbw bank, address
+rept _NARG
+ dbw BANK(\1), \1
+ shift
+endr
+ENDM
+
+dab: MACRO ; dwb address, bank
+rept _NARG
+ dwb \1, BANK(\1)
+ shift
+endr
+ENDM
+
+dba_pic: MACRO ; dbw bank, address
+ db BANK(\1) - PICS_FIX
+ dw \1
+ENDM
+
+
+dbpixel: MACRO
+if _NARG >= 4
+; x tile, x pxl, y tile, y pxl
+ db \1 * 8 + \3, \2 * 8 + \4
+else
+; x, y
+ db \1 * 8, \2 * 8
+endc
+ENDM
+
+dsprite: MACRO
+; y tile, y pxl, x tile, x pxl, vtile offset, flags, attributes
+ db LOW(\1 * 8) + \2, LOW(\3 * 8) + \4, \5, \6
+ENDM
+
+
+menu_coords: MACRO
+; x1, y1, x2, y2
+ db \2, \1 ; start coords
+ db \4, \3 ; end coords
+ENDM
+
+
+bcd: MACRO
+rept _NARG
+ dn LOW(\1) / 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 HIGH(sin(x) + LOW(sin(x))) ; round up
+x = x + DIV(32768, \1) ; a circle has 65536 "degrees"
+endr
+ENDM