; 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 ((\2) >> x) & $ff 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 db \1 * 8 + \3, \2 * 8 + \4 else db \1 * 8, \2 * 8 endc endm dsprite: MACRO ; conditional segment is there because not every instance of ; this macro is directly OAM if _NARG >= 7 ; y tile, y pxl, x tile, x pxl, vtile offset, flags, palette db (\1 * 8) % $100 + \2, (\3 * 8) % $100 + \4, \5, (\6 << 3) + (\7 & 7) else db (\1 * 8) % $100 + \2, (\3 * 8) % $100 + \4, \5, \6 endc endm sine_wave: MACRO ; \1: amplitude x = 0 rept $20 ; Round up. dw (sin(x) + (sin(x) & $ff)) >> 8 x = x + (\1) * $40000 endr ENDM bcd: MACRO rept _NARG dn ((\1) % 100) / 10, (\1) % 10 shift endr ENDM