summaryrefslogtreecommitdiff
path: root/macros/code.asm
diff options
context:
space:
mode:
authorRemy Oukaour <remy.oukaour@gmail.com>2017-12-14 00:36:24 -0500
committerRemy Oukaour <remy.oukaour@gmail.com>2017-12-14 00:36:24 -0500
commite48a401290e794854880f06fc230a369f37e6b9b (patch)
treedcad6cd5d1a7e62a2f2a92522c5619d41dc416cf /macros/code.asm
parent8745915dbd38e9647e0b27d20cb73da0fdde353f (diff)
Reorganize macros
Diffstat (limited to 'macros/code.asm')
-rw-r--r--macros/code.asm55
1 files changed, 55 insertions, 0 deletions
diff --git a/macros/code.asm b/macros/code.asm
new file mode 100644
index 000000000..5e247e9a3
--- /dev/null
+++ b/macros/code.asm
@@ -0,0 +1,55 @@
+; Syntactic sugar macros
+
+lb: MACRO ; r, hi, lo
+ ld \1, (\2 & $ff) << 8 + (\3 & $ff)
+ ENDM
+
+ln: MACRO ; r, hi, lo
+ ld \1, (\2 & $f) << 4 + (\3 & $f)
+ ENDM
+
+ldpixel: MACRO
+if _NARG >= 5
+ lb \1, \2 * 8 + \4, \3 * 8 + \5
+else
+ lb \1, \2 * 8, \3 * 8
+endc
+endm
+
+depixel EQUS "ldpixel de,"
+bcpixel EQUS "ldpixel bc,"
+
+
+; Design patterns
+
+jumptable: MACRO
+ ld a, [\2]
+ ld e, a
+ ld d, 0
+ ld hl, \1
+ add hl, de
+ add hl, de
+ ld a, [hli]
+ ld h, [hl]
+ ld l, a
+ jp hl
+endm
+
+; Many mobile functions were dummied out in localization.
+mobile EQUS "ret"
+
+maskbits: macro
+; example usage in rejection sampling:
+; .loop
+; call Random
+; maskbits 30
+; cp 30
+; jr nc, .loop
+x = 1
+rept 8
+IF \1 > x
+x = (x + 1) * 2 +- 1
+ENDC
+endr
+ and x
+endm