799 lines
23 KiB
NASM
799 lines
23 KiB
NASM
; 8608.asm
|
|
; Include this file into a customasm assembly file to use the 8608 architecture, like so:
|
|
; #include "8608.asm"
|
|
|
|
; Generated by generate-architecture.lua using the definitions in 8608-definition.lua
|
|
; Definitions for all instructions in the 8608 architecture.
|
|
#ruledef {
|
|
rst => $00
|
|
hlt => $F0
|
|
run => $F1
|
|
int => $F2
|
|
brk => $F3
|
|
irt => $F4
|
|
nop => $FF
|
|
ien => $F5
|
|
idi => $F6
|
|
inc p => $12
|
|
dec p => $15
|
|
inc q => $13
|
|
dec q => $16
|
|
inc a => $10
|
|
dec a => $11
|
|
icc a => $1B
|
|
inc b => $19
|
|
dec b => $1A
|
|
icc b => $1C
|
|
inc c => $17
|
|
dec c => $18
|
|
icc c => $1D
|
|
tst a => $14
|
|
tst b => $1E
|
|
tst c => $1F
|
|
inc *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$2B @ value`8
|
|
}
|
|
inc *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$2B @ mvalue`8
|
|
}
|
|
dec *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$2C @ value`8
|
|
}
|
|
dec *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$2C @ mvalue`8
|
|
}
|
|
icc *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$2D @ value`8
|
|
}
|
|
icc *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$2D @ mvalue`8
|
|
}
|
|
tst *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$2E @ value`8
|
|
}
|
|
tst *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$2E @ mvalue`8
|
|
}
|
|
adp {value: i8} => $4A @ value
|
|
adq {value: i8} => $4B @ value
|
|
ads {value: i8} => $4C @ value
|
|
adp b => $E6
|
|
adq b => $E7
|
|
ads b => $E8
|
|
add {value: i8} => $24 @ value
|
|
sub {value:i8} => {
|
|
mvalue = -value
|
|
$24 @ mvalue`8
|
|
}
|
|
|
|
adb {value: i8} => $72 @ value
|
|
sbb {value:i8} => {
|
|
mvalue = -value
|
|
$72 @ mvalue`8
|
|
}
|
|
|
|
adc {value: i8} => $73 @ value
|
|
sbc {value:i8} => {
|
|
mvalue = -value
|
|
$73 @ mvalue`8
|
|
}
|
|
|
|
acc {value: i8} => $78 @ value
|
|
scc {value:i8} => {
|
|
mvalue = -value
|
|
$78 @ mvalue`8
|
|
}
|
|
|
|
cmp {value: i8} => $71 @ value
|
|
and {value: i8} => $74 @ value
|
|
ior {value: i8} => $75 @ value
|
|
xor {value: i8} => $76 @ value
|
|
shl {value: i8} => $D0 @ value
|
|
shr {value: i8} => $D1 @ value
|
|
rol {value: i8} => $D2 @ value
|
|
ror {value: i8} => $D3 @ value
|
|
sra {value: i8} => $D4 @ value
|
|
add *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$AE @ value`8
|
|
}
|
|
add *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$AE @ mvalue`8
|
|
}
|
|
adb *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$9B @ value`8
|
|
}
|
|
adb *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$9B @ mvalue`8
|
|
}
|
|
adc *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$9C @ value`8
|
|
}
|
|
adc *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$9C @ mvalue`8
|
|
}
|
|
sub *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$AF @ value`8
|
|
}
|
|
sub *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$AF @ mvalue`8
|
|
}
|
|
sbb *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$9D @ value`8
|
|
}
|
|
sbb *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$9D @ mvalue`8
|
|
}
|
|
sbc *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$9E @ value`8
|
|
}
|
|
sbc *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$9E @ mvalue`8
|
|
}
|
|
acc *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$B5 @ value`8
|
|
}
|
|
acc *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$B5 @ mvalue`8
|
|
}
|
|
scc *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$B7 @ value`8
|
|
}
|
|
scc *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$B7 @ mvalue`8
|
|
}
|
|
cmp *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$B0 @ value`8
|
|
}
|
|
cmp *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$B0 @ mvalue`8
|
|
}
|
|
and *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$B1 @ value`8
|
|
}
|
|
and *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$B1 @ mvalue`8
|
|
}
|
|
ior *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$B2 @ value`8
|
|
}
|
|
ior *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$B2 @ mvalue`8
|
|
}
|
|
xor *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$B3 @ value`8
|
|
}
|
|
xor *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$B3 @ mvalue`8
|
|
}
|
|
shl *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$D5 @ value`8
|
|
}
|
|
shl *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$D5 @ mvalue`8
|
|
}
|
|
shr *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$D6 @ value`8
|
|
}
|
|
shr *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$D6 @ mvalue`8
|
|
}
|
|
rol *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$D7 @ value`8
|
|
}
|
|
rol *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$D7 @ mvalue`8
|
|
}
|
|
ror *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$D8 @ value`8
|
|
}
|
|
ror *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$D8 @ mvalue`8
|
|
}
|
|
sra *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$D9 @ value`8
|
|
}
|
|
sra *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$D9 @ mvalue`8
|
|
}
|
|
add b => $A0
|
|
adc b => $9F
|
|
sub b => $A1
|
|
sbc b => $B6
|
|
acc b => $B8
|
|
scc b => $B9
|
|
cmp b => $A2
|
|
and b => $A3
|
|
ior b => $A4
|
|
xor b => $A5
|
|
shl b => $DA
|
|
shr b => $DB
|
|
rol b => $DC
|
|
ror b => $DD
|
|
sra b => $DE
|
|
add c => $A7
|
|
adb c => $BD
|
|
sub c => $A8
|
|
sbb c => $BC
|
|
acc c => $BA
|
|
scc c => $BB
|
|
cmp c => $A9
|
|
and c => $AA
|
|
ior c => $AB
|
|
xor c => $AC
|
|
shl c => $DF
|
|
shr c => $4D
|
|
rol c => $3E
|
|
ror c => $3F
|
|
sra c => $2F
|
|
adb a => $BE
|
|
sbb a => $BF
|
|
adc a => $4E
|
|
sbc a => $4F
|
|
jmp {value: i16} => $60 @ value
|
|
jsr {value: i16} => $63 @ value
|
|
jss {value: i16} => $E2 @ value
|
|
jmp p => $64
|
|
jmp q => $66
|
|
ret => $66
|
|
jsr p => $65
|
|
jsr q => $67
|
|
jss p => $E4
|
|
jss q => $E5
|
|
rts => $E1
|
|
jpr {addr} => {
|
|
reladdr = addr - $ - 2
|
|
assert(reladdr <= 127, "jpr: Relative jump target is too far away")
|
|
assert(reladdr >= -128, "jpr: Relative jump target is too far away")
|
|
$31 @ reladdr`8
|
|
}
|
|
jnz {addr} => {
|
|
reladdr = addr - $ - 2
|
|
assert(reladdr <= 127, "jnz: Relative jump target is too far away")
|
|
assert(reladdr >= -128, "jnz: Relative jump target is too far away")
|
|
$30 @ reladdr`8
|
|
}
|
|
jne {addr} => {
|
|
reladdr = addr - $ - 2
|
|
assert(reladdr <= 127, "jne: Relative jump target is too far away")
|
|
assert(reladdr >= -128, "jne: Relative jump target is too far away")
|
|
$30 @ reladdr`8
|
|
}
|
|
jpz {addr} => {
|
|
reladdr = addr - $ - 2
|
|
assert(reladdr <= 127, "jpz: Relative jump target is too far away")
|
|
assert(reladdr >= -128, "jpz: Relative jump target is too far away")
|
|
$32 @ reladdr`8
|
|
}
|
|
jeq {addr} => {
|
|
reladdr = addr - $ - 2
|
|
assert(reladdr <= 127, "jeq: Relative jump target is too far away")
|
|
assert(reladdr >= -128, "jeq: Relative jump target is too far away")
|
|
$32 @ reladdr`8
|
|
}
|
|
jlt {addr} => {
|
|
reladdr = addr - $ - 2
|
|
assert(reladdr <= 127, "jlt: Relative jump target is too far away")
|
|
assert(reladdr >= -128, "jlt: Relative jump target is too far away")
|
|
$33 @ reladdr`8
|
|
}
|
|
jge {addr} => {
|
|
reladdr = addr - $ - 2
|
|
assert(reladdr <= 127, "jge: Relative jump target is too far away")
|
|
assert(reladdr >= -128, "jge: Relative jump target is too far away")
|
|
$34 @ reladdr`8
|
|
}
|
|
jgt {addr} => {
|
|
reladdr = addr - $ - 2
|
|
assert(reladdr <= 127, "jgt: Relative jump target is too far away")
|
|
assert(reladdr >= -128, "jgt: Relative jump target is too far away")
|
|
$35 @ reladdr`8
|
|
}
|
|
jle {addr} => {
|
|
reladdr = addr - $ - 2
|
|
assert(reladdr <= 127, "jle: Relative jump target is too far away")
|
|
assert(reladdr >= -128, "jle: Relative jump target is too far away")
|
|
$36 @ reladdr`8
|
|
}
|
|
psh a => $40
|
|
psh b => $44
|
|
psh c => $45
|
|
psh f => $E9
|
|
psh p => $41
|
|
psh q => $46
|
|
pop a => $42
|
|
pop b => $47
|
|
pop c => $48
|
|
pop f => $EA
|
|
pop p => $43
|
|
pop q => $49
|
|
psh {value: i8} => $3B @ value
|
|
phw {value: i16} => $3C @ value
|
|
lda {value: i8} => $20 @ value
|
|
ldb {value: i8} => $26 @ value
|
|
ldc {value: i8} => $27 @ value
|
|
lda *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$28 @ value`8
|
|
}
|
|
lda *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$28 @ mvalue`8
|
|
}
|
|
ldb *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$29 @ value`8
|
|
}
|
|
ldb *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$29 @ mvalue`8
|
|
}
|
|
ldc *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$2A @ value`8
|
|
}
|
|
ldc *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$2A @ mvalue`8
|
|
}
|
|
sta *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$96 @ value`8
|
|
}
|
|
sta *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$96 @ mvalue`8
|
|
}
|
|
stb *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$97 @ value`8
|
|
}
|
|
stb *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$97 @ mvalue`8
|
|
}
|
|
stc *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$98 @ value`8
|
|
}
|
|
stc *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$98 @ mvalue`8
|
|
}
|
|
lda *{value: i16} => $51 @ value
|
|
ldb *{value: i16} => $56 @ value
|
|
ldc *{value: i16} => $57 @ value
|
|
sta *{value: i16} => $50 @ value
|
|
stb *{value: i16} => $58 @ value
|
|
stc *{value: i16} => $59 @ value
|
|
lda *p+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$01 @ value`16
|
|
}
|
|
lda *p-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$01 @ mvalue`16
|
|
}
|
|
ldb *p+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$F7 @ value`16
|
|
}
|
|
ldb *p-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$F7 @ mvalue`16
|
|
}
|
|
ldc *p+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$FE @ value`16
|
|
}
|
|
ldc *p-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$FE @ mvalue`16
|
|
}
|
|
lda *q+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$EB @ value`16
|
|
}
|
|
lda *q-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$EB @ mvalue`16
|
|
}
|
|
ldb *q+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$08 @ value`16
|
|
}
|
|
ldb *q-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$08 @ mvalue`16
|
|
}
|
|
ldc *q+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$09 @ value`16
|
|
}
|
|
ldc *q-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$09 @ mvalue`16
|
|
}
|
|
sta *p+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$0A @ value`16
|
|
}
|
|
sta *p-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$0A @ mvalue`16
|
|
}
|
|
stb *p+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$0B @ value`16
|
|
}
|
|
stb *p-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$0B @ mvalue`16
|
|
}
|
|
stc *p+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$0C @ value`16
|
|
}
|
|
stc *p-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$0C @ mvalue`16
|
|
}
|
|
sta *q+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$0D @ value`16
|
|
}
|
|
sta *q-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$0D @ mvalue`16
|
|
}
|
|
stb *q+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$0E @ value`16
|
|
}
|
|
stb *q-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$0E @ mvalue`16
|
|
}
|
|
stc *q+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$0F @ value`16
|
|
}
|
|
stc *q-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$0F @ mvalue`16
|
|
}
|
|
lda *p => $53
|
|
ldb *p => $5E
|
|
ldc *p => $5F
|
|
lda *q => $55
|
|
ldb *q => $61
|
|
ldc *q => $62
|
|
sta *p => $52
|
|
stb *p => $5A
|
|
stc *p => $5B
|
|
sta *q => $54
|
|
stb *q => $5C
|
|
stc *q => $5D
|
|
lda *p++ => $C6
|
|
ldb *p++ => $C7
|
|
ldc *p++ => $C8
|
|
lda *q++ => $C9
|
|
ldb *q++ => $CA
|
|
ldc *q++ => $CB
|
|
sta *p++ => $C0
|
|
stb *p++ => $C1
|
|
stc *p++ => $C2
|
|
sta *q++ => $C3
|
|
stb *q++ => $C4
|
|
stc *q++ => $C5
|
|
ldp {value: i16} => $21 @ value
|
|
ldq {value: i16} => $23 @ value
|
|
lds {value: i16} => $25 @ value
|
|
ldv {value: i16} => $22 @ value
|
|
ldp *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$7A @ value`8
|
|
}
|
|
ldp *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$7A @ mvalue`8
|
|
}
|
|
ldq *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$7B @ value`8
|
|
}
|
|
ldq *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$7B @ mvalue`8
|
|
}
|
|
stp *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$7E @ value`8
|
|
}
|
|
stp *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$7E @ mvalue`8
|
|
}
|
|
stq *s+{value: i8} => {
|
|
assert(value <= 127, "Relative address is too far away")
|
|
assert(value >= -128, "Relative address is too far away")
|
|
$7F @ value`8
|
|
}
|
|
stq *s-{value: i8} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 127, "Relative address is too far away")
|
|
assert(mvalue >= -128, "Relative address is too far away")
|
|
$7F @ mvalue`8
|
|
}
|
|
ldp *{value: i16} => $68 @ value
|
|
ldq *{value: i16} => $6A @ value
|
|
stp *{value: i16} => $6C @ value
|
|
stq *{value: i16} => $6E @ value
|
|
ldp *p+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$EC @ value`16
|
|
}
|
|
ldp *p-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$EC @ mvalue`16
|
|
}
|
|
ldq *p+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$EE @ value`16
|
|
}
|
|
ldq *p-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$EE @ mvalue`16
|
|
}
|
|
ldp *q+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$F8 @ value`16
|
|
}
|
|
ldp *q-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$F8 @ mvalue`16
|
|
}
|
|
ldq *q+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$FA @ value`16
|
|
}
|
|
ldq *q-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$FA @ mvalue`16
|
|
}
|
|
stq *p+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$06 @ value`16
|
|
}
|
|
stq *p-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$06 @ mvalue`16
|
|
}
|
|
stp *q+{value: i16} => {
|
|
assert(value <= 32767, "Relative address is too far away")
|
|
assert(value >= -32768, "Relative address is too far away")
|
|
$FC @ value`16
|
|
}
|
|
stp *q-{value: i16} => {
|
|
mvalue = -value
|
|
assert(mvalue <= 32767, "Relative address is too far away")
|
|
assert(mvalue >= -32768, "Relative address is too far away")
|
|
$FC @ mvalue`16
|
|
}
|
|
ldp *p => $92
|
|
ldq *p => $93
|
|
ldp *q => $94
|
|
ldq *q => $95
|
|
stp *q => $7C
|
|
stq *p => $7D
|
|
ldq *p++ => $CC
|
|
ldp *q++ => $CD
|
|
stp *q++ => $CE
|
|
stq *p++ => $CF
|
|
lda b => $80
|
|
lda c => $81
|
|
ldb a => $82
|
|
ldb c => $83
|
|
ldc a => $84
|
|
ldc b => $85
|
|
lda pl => $86
|
|
lda ph => $87
|
|
lda ql => $88
|
|
lda qh => $89
|
|
ldb pl => $37
|
|
ldc ph => $38
|
|
ldb ql => $39
|
|
ldc qh => $3A
|
|
ldp q => $8A
|
|
ldp s => $8B
|
|
ldp v => $8C
|
|
ldp i => $8D
|
|
ldp cb => $91
|
|
ldq cb => $E0
|
|
ldq p => $8E
|
|
lds p => $8F
|
|
ldv p => $90
|
|
}
|