Multibyte constant
This macro allows including long hexadecimal constants on one line, like an arbitrary extension of the .dbyt (2 byte big endian constant).
; ASM6 uses HEX, Use a Macro to convert it to use MBYT!
; Macro by Hamtaro126, under no licence.
macro mbyt string
hex string
endm
; mbyt.s
; Multibyte constant macro for ca65
;
; Copyright 2013 Damian Yerrick
; Copying and distribution of this file, with or without
; modification, are permitted in any medium without royalty provided
; the copyright notice and this notice are preserved in any source
; code copies. This file is offered as-is, without any warranty.
;
.macro mbyt_hex2nibs highnib, lownib
.local highdig, lowdig
; "dec0de" the hex nibbles
.if highnib >= 'A' && highnib <= 'F'
highdig = highnib - 'A' + 10
.elseif highnib >= 'a' && highnib <= 'f'
highdig = highnib - 'a' + 10
.elseif highnib >= '0' && highnib <= '9'
highdig = highnib - '0'
.endif
.if lownib >= 'A' && lownib <= 'F'
lowdig = lownib - 'A' + 10
.elseif lownib >= 'a' && lownib <= 'f'
lowdig = lownib - 'a' + 10
.elseif lownib >= '0' && lownib <= '9'
lowdig = lownib - '0'
.endif
.byte highdig * $10 + lowdig
;.out .sprintf(".byte %02x", highdig * $10 + lowdig)
.endmacro
.macro mbyt inbytes
; thanks to thefox who recommended .set
.local pos
pos .set 0
.out .sprintf("%s", inbytes)
.repeat .strlen(inbytes)
.if pos < .strlen(inbytes)
nib .set .strat(inbytes, pos)
; these characters can be used as separators
.if (nib = ' ' || nib = ',' || nib = '$' || nib = '_')
pos .set pos + 1
.else
mbyt_hex2nibs nib, {.strat(inbytes, pos + 1)}
pos .set pos + 2
.endif
.endif
.endrepeat
.endmacro
; use it like this:
; mbyt "09F91102 9D74E35B D84156C5 635688C0"
Movax12 has a another implementation.
; Implementation of multibyte constants for Unofficial-MagicKit.
; By zzo38, Creative Commons Zero
macro mbyt
macset 2,4,\$1>1
macgoto mbyt_\2
endm
macro mbyt_0
endm
macro mbyt_1
macset 2,2,1
macset 2,5,2
db $\2
mbyt_0 \>1
macset 1,1,1
mbyt_0 \>1
macset 1,1,1
macgoto mbyt
endm
; Example:
; mbyt 09F91102 9D74E35B D84156C5 635688C0
- Ned Batchelder: Hex words has test cases
- Alternate implementation by thefox
- Multibyte constant on GbdevWiki