MACRO
$label LD8 $d, $s
$label ldrb r0, [r7, #$s]
strb r0, [r7, #$d]
mov pc, r11
MEND
MACRO
$label LD8A $d
$label mov r0, r8, lsr #8
strb r0, [r7, #$d]
mov pc, r11
MEND
MACRO
$label LDA8 $s
$label ldrb r0, [r7, #$s]
and r8, r8, #&ff
orr r8, r8, r0, lsl #8
mov pc, r11
MEND
MACRO
$label LDAx $src
$label ldrh r0, [r7, #$src]
and r8, r8, #&ff
MEMRD8 r0, r0
add r8, r8, r0, lsl #8
mov pc, r11
MEND
MACRO
$label LD8x $d, $s
$label ldrh r0, [r7, #$s]
MEMRD8 r1, r0
strb r1, [r7, #$d]
mov pc, r11
MEND
MACRO
$label LDxA $dst
$label ldrh r0, [r7, #$dst]
mov r1, r8, lsr #8
MEMWR8 r0, r1
mov pc, r11
MEND
MACRO
$label LDx8 $dst, $src
$label ldrh r0, [r7, #$dst]
ldrb r1, [r7, #$src]
MEMWR8 r0, r1
mov pc, r11
MEND
MACRO
$label LD8b $dst
$label GETPC8
strb r0, [r7, #$dst]
mov pc, r11
MEND
MACRO
$label LD16w $dst
$label GETPC16
strh r0, [r7, #$dst]
mov pc, r11
MEND
MACRO
$label LDx16 $src
$label GETPC16
ldrh r1, [r7, #$src]
mov lr, r11
b mem_write16
MEND
MACRO
$label LD16x $dst
$label GETPC16
bl mem_read16
strh r0, [r7, #$dst]
mov pc, r11
MEND
MACRO
$label MINC16 $dst
$label ldrh r0, [r7, #$dst]
add r0, r0, #1
strh r0, [r7, #$dst]
mov pc, r11
MEND
MACRO
$label MINC8 $dst
$label ldrb r0, [r7, #$dst]
add r1, r7, #CPU_INCFLAG
bic r8, r8, #(&ff - C_FLAG)
ldrb r2, [r0, r1]
add r3, r0, #1
orr r8, r8, r2
strb r3, [r7, #$dst]
mov pc, r11
MEND
MACRO
$label MINCM8 $dst
$label ldrh r0, [r7, #$dst]
MEMLEA8 r0, r1, r2
ldrb r3, [r1, r0]
add r12, r7, #CPU_INCFLAG
bic r8, r8, #(&ff - C_FLAG)
ldrb r1, [r12, r3]
add r3, r3, #1
orr r8, r8, r1
strb r3, [r2, r0]
mov pc, r11
MEND
MACRO
$label MDEC8 $dst
$label ldrb r0, [r7, #$dst]
add r1, r7, #CPU_DECFLAG
bic r8, r8, #(&ff - C_FLAG)
ldrb r2, [r0, r1]
sub r3, r0, #1
orr r8, r8, r2
strb r3, [r7, #$dst]
mov pc, r11
MEND
MACRO
$label MDECM8 $dst
$label ldrh r0, [r7, #$dst]
MEMLEA8 r0, r1, r2
ldrb r3, [r1, r0]
add r12, r7, #CPU_DECFLAG
bic r8, r8, #(&ff - C_FLAG)
ldrb r1, [r12, r3]
sub r3, r3, #1
orr r8, r8, r1
strb r3, [r2, r0]
mov pc, r11
MEND
MACRO
$label MADD16 $dst, $src
$label ldrh r0, [r7, #$dst]
ldrh r1, [r7, #$src]
bic r8, r8, #(&ff - (S_FLAG + Z_FLAG + V_FLAG))
add r2, r1, r0
eor r3, r1, r0
add r8, r8, r2, lsr #16
eor r3, r3, r2
strh r2, [r7, #$dst]
and r3, r3, #(H_FLAG << 8)
orr r8, r8, r3, lsr #8
mov pc, r11
MEND
MACRO
$label MADD16D $dst
$label ldrh r0, [r7, #$dst]
bic r8, r8, #(&ff - (S_FLAG + Z_FLAG + V_FLAG))
and r1, r0, #(H_FLAG << 8)
add r8, r8, r0, lsr #15
add r2, r0, r0
add r8, r8, r1, lsr #8
strh r2, [r7, #$dst]
mov pc, r11
MEND
MACRO
$label MADDSP $dst
$label ldrh r0, [r7, #$dst]
mov r1, r9, lsl #16
bic r8, r8, #(&ff - (S_FLAG + Z_FLAG + V_FLAG))
add r2, r0, r1, lsr #16
eor r3, r0, r1, lsr #16
add r8, r8, r2, lsr #16
eor r3, r3, r2
and r3, r3, #(H_FLAG << 8)
strh r2, [r7, #$dst]
orr r8, r8, r3, lsr #8
mov pc, r11
MEND
MACRO
$label MDEC16 $dst
$label ldrh r0, [r7, #$dst]
sub r0, r0, #1
strh r0, [r7, #$dst]
mov pc, r11
MEND
MACRO
$label MADD8 $r
$label and r1, r8, #(&ff << 8)
mov r2, $r lsl #24
adds r3, r2, r1, lsl #16
orrcs r3, r3, #(C_FLAG << 16)
orrvs r3, r3, #(V_FLAG << 16)
eor r0, r2, r1, lsl #16
orreq r3, r3, #(Z_FLAG << 16)
eor r1, r0, r3
orrmi r3, r3, #(S_FLAG << 16)
and r2, r1, #(H_FLAG << 24)
mov r8, r3, lsr #16
orr r8, r8, r2, lsr #24
mov pc, r11
MEND
MACRO
$label MADDR8 $src
$label ldrb r0, [r7, #$src]
MADD8 r0
MEND
MACRO
$label MADDM8 $src
$label ldrh r0, [r7, #$src]
MEMRD8 r12, r0
MADD8 r12
MEND
MACRO
$label MADC8 $r
$label and r1, r8, #C_FLAG
add r1, r1, r8, lsr #8
add r1, r1, $r
eor r2, r1, $r ; r ^ b
eor r3, r1, r8, lsr #8 ; r ^ A
movs r1, r1, lsl #24
eor r0, r2, r8, lsr #8 ; r ^ b ^ A
orrcs r1, r1, #(C_FLAG << 16)
and r2, r3, r2 ; (r ^ b) & (r ^ A)
orreq r1, r1, #(Z_FLAG << 16)
and r0, r0, #H_FLAG
orrmi r1, r1, #(S_FLAG << 16)
and r2, r2, #(V_FLAG << 5)
orr r8, r0, r1, lsr #16
orr r8, r8, r2, lsr #5
mov pc, r11
MEND
MACRO
$label MADCR8 $src
$label ldrb r0, [r7, #$src]
MADC8 r0
MEND
MACRO
$label MADCM8 $src
$label ldrh r0, [r7, #$src]
MEMRD8 r12, r0
MADC8 r12
MEND
MACRO
$label MSUB8 $r
$label and r1, r8, #(&ff << 8)
mov r2, $r lsl #24
rsbs r3, r2, r1, lsl #16
orr r3, r3, #(N_FLAG << 16)
orrcc r3, r3, #(C_FLAG << 16)
orrvs r3, r3, #(V_FLAG << 16)
eor r0, r2, r1, lsl #16
orreq r3, r3, #(Z_FLAG << 16)
eor r1, r0, r3
orrmi r3, r3, #(S_FLAG << 16)
and r2, r1, #(H_FLAG << 24)
mov r8, r3, lsr #16
orr r8, r8, r2, lsr #24
mov pc, r11
MEND
MACRO
$label MSUBR8 $src
$label ldrb r0, [r7, #$src]
MSUB8 r0
MEND
MACRO
$label MSUBM8 $src
$label ldrh r0, [r7, #$src]
MEMRD8 r12, r0
MSUB8 r12
MEND
MACRO
$label MSBC8 $r
$label and r1, r8, #C_FLAG
rsb r2, $r, r8, lsr #8
eor r3, $r, r8, lsr #8 ; A ^ b
sub r2, r2, r1
eor r0, r2, r8, lsr #8 ; A ^ r
eor r1, r2, r3 ; A ^ b ^ r
movs r2, r2, lsl #24
and r0, r0, r3 ; (A ^ b) & (A ^ r)
orr r2, r2, #(N_FLAG << 16)
orrcs r2, r2, #(C_FLAG << 16)
orreq r2, r2, #(Z_FLAG << 16)
and r1, r1, #H_FLAG
orrmi r2, r2, #(S_FLAG << 16)
and r0, r0, #(V_FLAG << 5)
orr r8, r1, r2, lsr #16
orr r8, r8, r0, lsr #5
mov pc, r11
MEND
MACRO
$label MSBCR8 $src
$label ldrb r0, [r7, #$src]
MSBC8 r0
MEND
MACRO
$label MSBCM8 $src
$label ldrh r0, [r7, #$src]
MEMRD8 r12, r0
MSBC8 r12
MEND
MACRO
$label MAND8 $r
$label and r2, $r, r8, lsr #8
ldrb r3, [r2, r7]
orr r8, r3, r2, lsl #8
mov pc, r11
MEND
MACRO
$label MANDR8 $src
$label ldrb r0, [r7, #$src]
MAND8 r0
MEND
MACRO
$label MANDM8 $src
$label ldrh r0, [r7, #$src]
MEMRD8 r12, r0
MAND8 r12
MEND
MACRO
$label MXOR8 $r
$label eor r2, $r, r8, lsr #8
ldrb r3, [r2, r7]
orr r8, r3, r2, lsl #8
mov pc, r11
MEND
MACRO
$label MXORR8 $src
$label ldrb r0, [r7, #$src]
MXOR8 r0
MEND
MACRO
$label MXORM8 $src
$label ldrh r0, [r7, #$src]
MEMRD8 r12, r0
MXOR8 r12
MEND
MACRO
$label MOR8 $r
$label orr r2, $r, r8, lsr #8
ldrb r3, [r2, r7]
orr r8, r3, r2, lsl #8
mov pc, r11
MEND
MACRO
$label MORR8 $src
$label ldrb r0, [r7, #$src]
MOR8 r0
MEND
MACRO
$label MORM8 $src
$label ldrh r0, [r7, #$src]
MEMRD8 r12, r0
MOR8 r12
MEND
MACRO
$label MCP8 $r
$label and r1, r8, #(&ff << 8)
mov r2, $r lsl #24
rsbs r3, r2, r1, lsl #16
orr r1, r1, #N_FLAG
eor r0, r2, r8, lsl #16
orrcc r1, r1, #C_FLAG
eor r2, r0, r3
orrvs r1, r1, #V_FLAG
and r0, r2, #(H_FLAG << 24)
orreq r1, r1, #Z_FLAG
orrmi r1, r1, #S_FLAG
orr r8, r1, r0, lsr #24
mov pc, r11
MEND
MACRO
$label MCPR8 $src
$label ldrb r0, [r7, #$src]
MCP8 r0
MEND
MACRO
$label MCPM8 $src
$label ldrh r0, [r7, #$src]
MEMRD8 r12, r0
MCP8 r12
MEND
MACRO
$label MJR
$label GETPC8S
Z80WORK #5
add r9, r9, r0, lsl #16
mov pc, r11
MEND
MACRO
$label MJREQ
$label addne r9, r9, #&10000
movne pc, r11
MJR
MEND
MACRO
$label MJRNFLG $flag
$label tst r8, #$flag
MJREQ
MEND
MACRO
$label MJRNE
$label addeq r9, r9, #&10000
moveq pc, r11
MJR
MEND
MACRO
$label MJRFLG $flag
$label tst r8, #$flag
MJRNE
MEND
MACRO
$label MJP
$label mov r4, r9, lsl #16
GETPC16
mov r4, r4, lsr #16
orr r9, r4, r0, lsl #16
mov pc, r11
MEND
MACRO
$label MJPR16 $r
$label ldrh r0, [r7, #$r]
mov r4, r9, lsl #16
mov r9, r0, lsl #16
orr r9, r9, r4, lsr #16
mov pc, r11
MEND
MACRO
$label MJPNFLG $flag
$label tst r8, #$flag
addne r9, r9, #&20000
movne pc, r11
MJP
MEND
MACRO
$label MJPFLG $flag
$label tst r8, #$flag
addeq r9, r9, #&20000
moveq pc, r11
MJP
MEND
MACRO
$label MCALL
$label GETPC16
mov r2, r9, lsl #16 ; sp
mov r3, r0, lsl #16 ; new pc
sub r2, r2, #&20000
mov r1, r9, lsr #16
mov r0, r2, lsr #16
orr r9, r3, r2 lsr #16
mov lr, r11
Z80WORK #7
b mem_write16
MEND
MACRO
$label MCALLNF $flag
$label tst r8, #$flag
addne r9, r9, #&20000
movne pc, r11
MCALL
MEND
MACRO
$label MCALLF $flag
$label tst r8, #$flag
addeq r9, r9, #&20000
moveq pc, r11
MCALL
MEND
MACRO
$label MRET
$label mov r4, r9, lsl #16 ; sp
mov r0, r4, lsr #16
bl mem_read16
add r4, r4, #&20000
mov r0, r0, lsl #16
Z80WORK #6
add r9, r0, r4, lsr #16
mov pc, r11
MEND
MACRO
$label MRETNF $flag
$label tst r8, #$flag
movne pc, r11
MRET
MEND
MACRO
$label MRETF $flag
$label tst r8, #$flag
moveq pc, r11
MRET
MEND
MACRO
$label MRST $vct
$label mov r0, r9, lsl #16
mov r1, r9, lsr #16
sub r0, r0, #&20000
mov lr, r11
mov r0, r0, lsr #16
orr r9, r0, #($vct << 16)
b mem_write16
MEND
MACRO
$label MPUSHr1
$label mov r0, r9, lsl #16
mov lr, r11
subs r0, r0, #&20000
addcc r9, r9, #&10000
mov r0, r0, lsr #16
sub r9, r9, #2
b mem_write16
MEND
MACRO
$label MPUSH $dst
$label ldrh r1, [r7, #$dst]
MPUSHr1
MEND
MACRO
$label MPOPr0
$label mov r1, r9, lsl #16
cmn r1, #(2 << 16)
subcs r9, r9, #(1 << 16) ; round down...
mov r0, r1, lsr #16
bl mem_read16
add r9, r9, #2
MEND
MACRO
$label MPOP $dst
$label MPOPr0
strh r0, [r7, #$dst]
mov pc, r11
MEND
MACRO
$label MEXSP $src
$label mov r4, r9, lsl #16
mov r0, r4, lsr #16
bl mem_read16
ldrh r1, [r7, #$src]
mov lr, r11
strh r0, [r7, #$src]
mov r0, r4, lsr #16
b mem_write16
MEND
MACRO
$label MLDSP $src
$label mov r0, r9, lsr #16
ldrh r1, [r7, #$src]
orr r9, r1, r0, lsl #16
mov pc, r11
MEND
END
RetroPC.NET-CVS <cvs@retropc.net>