272 lines
4.0 KiB
Plaintext
272 lines
4.0 KiB
Plaintext
; ======================================================
|
|
; Macros for 16 bit operations
|
|
; The suffix "16" is added to common opcodes, eg "add16"
|
|
; Only the A register is used (except ld16 (indirect))
|
|
; ======================================================
|
|
|
|
; Summary
|
|
; add16, adc16
|
|
; sub16, sbc16
|
|
; inc16, dec16
|
|
; ld16
|
|
; cmp16
|
|
; shr16, shl16
|
|
; push16, pop16
|
|
|
|
macro add16 mem, const
|
|
lda {1}
|
|
clc
|
|
adc #(({2}) MOD 256)
|
|
sta {1}
|
|
lda {1}+1
|
|
#if {2} < 256
|
|
if carry then inc {1}+1
|
|
#else
|
|
adc #(({2})/256)
|
|
sta {1}+1
|
|
#endif
|
|
end macro
|
|
|
|
macro add16 mem, mem
|
|
lda {1}
|
|
clc
|
|
adc {2}
|
|
sta {1}
|
|
lda {1}+1
|
|
adc {2}+1
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro add16 mem, const, "1"
|
|
lda {1}
|
|
sec
|
|
adc #(({2}) MOD 256)
|
|
sta {1}
|
|
lda {1}+1
|
|
adc #({2}/256)
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro add16 mem, mem, "1"
|
|
lda {1}
|
|
sec
|
|
adc {2}
|
|
sta {1}
|
|
lda {1}+1
|
|
adc {2}+1
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro adc16 mem, const
|
|
lda {1}
|
|
adc #(({2}) MOD 256)
|
|
sta {1}
|
|
lda {1}+1
|
|
#if {2} < 256
|
|
bcc .local_out
|
|
inc {1}+1
|
|
#else
|
|
adc #(({2})/256)
|
|
sta {1}+1
|
|
#endif
|
|
.local_out:
|
|
end macro
|
|
|
|
macro adc16 mem, mem
|
|
lda {1}
|
|
adc {2}
|
|
sta {1}
|
|
lda {1}+1
|
|
adc {2}+1
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro sub16 mem, const
|
|
lda {1}
|
|
sec
|
|
sbc #(({2}) MOD 256)
|
|
sta {1}
|
|
lda {1}+1
|
|
sbc #(({2})/256)
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro sub16 mem, mem
|
|
lda {1}
|
|
sec
|
|
sbc {2}
|
|
sta {1}
|
|
lda {1}+1
|
|
sbc {2}+1
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro sub16 mem, const, "1"
|
|
lda {1}
|
|
clc
|
|
sbc #(({2}) MOD 256)
|
|
sta {1}
|
|
lda {1}+1
|
|
sbc #(({2})/256)
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro sub16 mem, mem, "1"
|
|
lda {1}
|
|
clc
|
|
sbc {2}
|
|
sta {1}
|
|
lda {1}+1
|
|
sbc {2}+1
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro sbc16 mem, const
|
|
lda {1}
|
|
sbc #(({2}) MOD 256)
|
|
sta {1}
|
|
lda {1}+1
|
|
sbc #(({2})/256)
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro sbc16 mem, mem
|
|
lda {1}
|
|
sbc {2}
|
|
sta {1}
|
|
lda {1}+1
|
|
sbc {2}+1
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro inc16 mem
|
|
inc {1}
|
|
if zero then inc {1}+1
|
|
end macro
|
|
|
|
macro dec16 mem
|
|
dec {1}
|
|
if negative then dec {1}+1
|
|
end macro
|
|
|
|
macro ld16 "ay", const
|
|
lda #(({2}) MOD 256)
|
|
ldy #(({2})/256)
|
|
end macro
|
|
|
|
macro ld16 "ay", mem
|
|
lda {2}
|
|
ldy {2}+1
|
|
end macro
|
|
|
|
macro ld16 "ax", const
|
|
lda #(({2}) MOD 256)
|
|
ldx #(({2})/256)
|
|
end macro
|
|
|
|
macro ld16 "ax", mem
|
|
lda {2}
|
|
ldx {2}+1
|
|
end macro
|
|
|
|
macro ld16 mem, "ay"
|
|
sta {1}
|
|
sty {1}+1
|
|
end macro
|
|
|
|
macro ld16 mem, "ax"
|
|
sta {1}
|
|
stx {1}+1
|
|
end macro
|
|
|
|
macro ld16 mem, const
|
|
lda #(({2}) MOD 256)
|
|
sta {1}
|
|
#if (({2}) MOD 256) != (({2})/256)
|
|
lda #(({2})/256)
|
|
#endif
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro ld16 mem, mem
|
|
lda {2}
|
|
sta {1}
|
|
lda {2}+1
|
|
sta {1}+1
|
|
end macro
|
|
|
|
macro ld16 indirect, mem
|
|
ldy #0
|
|
lda {2}
|
|
sta ({1}),y
|
|
lda {2}+1
|
|
iny
|
|
sta ({1}),y
|
|
end macro
|
|
|
|
macro ld16 indirect, const
|
|
ldy #0
|
|
lda #({2} MOD 256)
|
|
sta ({1}),y
|
|
lda #({2}/256)
|
|
iny
|
|
sta ({1}),y
|
|
end macro
|
|
|
|
macro cmp16 mem, const
|
|
lda {1}+1
|
|
cmp #(({2})/256)
|
|
if zero then
|
|
lda {1}
|
|
cmp #(({2}) MOD 256)
|
|
end if
|
|
end macro
|
|
|
|
macro cmp16 mem, mem
|
|
lda {1}+1
|
|
cmp {2}+1
|
|
if zero then
|
|
lda {1}
|
|
cmp {2}
|
|
end if
|
|
end macro
|
|
|
|
macro shl16 mem
|
|
asl {1}
|
|
rol {1}+1
|
|
end macro
|
|
|
|
macro shr16 mem
|
|
lsr {1}
|
|
ror {1}+1
|
|
end macro
|
|
|
|
macro push16 mem
|
|
lda {1}
|
|
pha
|
|
lda {1}+1
|
|
pha
|
|
end macro
|
|
|
|
macro push16 const
|
|
lda #(({1}) MOD 256)
|
|
pha
|
|
lda #(({1})/256)
|
|
pha
|
|
end macro
|
|
|
|
macro pop16 mem
|
|
pla
|
|
sta {1}+1
|
|
pla
|
|
sta {1}
|
|
end macro
|
|
|
|
macro mul16 mem, const
|
|
ECHO "to be implemented"
|
|
end macro
|
|
|
|
macro mul16 mem, mem
|
|
ECHO "to be implemented"
|
|
end macro
|