MACRO
$label MADC16 $r
$label ldrh r0, [r7, #CPU_HL]
ldrh r1, [r7, #$r]
movs r12, r8, lsr #1
adc r2, r1, r0
and r8, r8, #&ff00
eor r3, r2, r0 ; r ^ b
eor r12, r2, r1 ; r ^ A
strh r2, [r7, #CPU_HL]
movs r0, r2, lsl #16
eor r0, r3, r1 ; r ^ b ^ A
orrcs r8, r8, #C_FLAG
and r3, r12, r3 ; (r ^ b) & (r ^ A)
orreq r8, r8, #Z_FLAG
and r0, r0, #(H_FLAG << 8)
orrmi r8, r8, #S_FLAG
and r3, r3, #(V_FLAG << 13)
orr r8, r8, r0, lsr #8
orr r8, r8, r3, lsr #13
mov pc, r11
MEND
MACRO
$label MADCHL2
$label ldrh r0, [r7, #CPU_HL]
movs r12, r8, lsr #1
adc r1, r0, r0
and r8, r8, #&ff00
movs r12, r1, lsl #16
orrcs r8, r8, #C_FLAG
strh r1, [r7, #CPU_HL]
eor r2, r1, r0
orreq r8, r8, #Z_FLAG
and r3, r2, #(V_FLAG << 13)
and r2, r1, #(H_FLAG << 8)
orrmi r8, r8, #S_FLAG
orr r8, r8, r3, lsr #13
orr r8, r8, r2, lsr #8
mov pc, r11
MEND
MACRO
$label MADCSP
$label ldrh r0, [r7, #CPU_HL]
mov r1, r9, lsl #16
and r2, r8, #C_FLAG
add r2, r2, r0
add r2, r2, r1, lsr #16
and r8, r8, #&ff00
eor r3, r2, r0 ; r ^ b
eor r12, r2, r9 ; r ^ A
strh r2, [r7, #CPU_HL]
movs r0, r2, lsl #16
eor r0, r3, r9 ; r ^ b ^ A
orrcs r8, r8, #C_FLAG
and r3, r12, r3 ; (r ^ b) & (r ^ A)
orreq r8, r8, #Z_FLAG
and r0, r0, #(H_FLAG << 8)
orrmi r8, r8, #S_FLAG
and r3, r3, #(V_FLAG << 13)
orr r8, r8, r0, lsr #8
orr r8, r8, r3, lsr #13
mov pc, r11
MEND
MACRO
$label MSBC16 $r
$label ldrh r0, [r7, #CPU_HL]
ldrh r1, [r7, #$r]
and r2, r8, #C_FLAG
rsb r2, r2, r0
eor r3, r1, r0 ; A ^ b
sub r2, r2, r1
eor r0, r2, r0 ; A ^ r
eor r1, r2, r3 ; A ^ b ^ r
movs r12, r2, lsl #16
and r8, r8, #&ff00
strh r2, [r7, #CPU_HL]
orr r8, r8, #N_FLAG
and r0, r0, r3 ; (A ^ b) & (A ^ r)
orrcs r8, r8, #C_FLAG
and r1, r1, #(H_FLAG << 8)
orreq r8, r8, #Z_FLAG
and r0, r0, #(V_FLAG << 13)
orrmi r8, r8, #S_FLAG
orr r8, r8, r1, lsr #8
orr r8, r8, r0, lsr #13
mov pc, r11
MEND
MACRO
$label MSBCHL2
$label mov r0, #0
tst r8, #C_FLAG
subne r0, r0, #1
and r8, r8, #&ff00
strh r0, [r7, #CPU_HL]
orreq r8, r8, #(Z_FLAG + N_FLAG)
orrne r8, r8, #(S_FLAG + H_FLAG + N_FLAG + C_FLAG)
mov pc, r11
MEND
MACRO
$label MSBCSP
$label ldrh r0, [r7, #CPU_HL]
mov r1, r9, lsl #16
and r2, r8, #C_FLAG
rsb r2, r2, r0
eor r3, r0, r9 ; A ^ b
sub r2, r2, r1, lsr #16
eor r0, r2, r0 ; A ^ r
eor r1, r2, r3 ; A ^ b ^ r
movs r12, r2, lsl #16
and r8, r8, #&ff00
strh r2, [r7, #CPU_HL]
orr r8, r8, #N_FLAG
and r0, r0, r3 ; (A ^ b) & (A ^ r)
orrcs r8, r8, #C_FLAG
and r1, r1, #(H_FLAG << 8)
orreq r8, r8, #Z_FLAG
and r0, r0, #(V_FLAG << 13)
orrmi r8, r8, #S_FLAG
orr r8, r8, r1, lsr #8
orr r8, r8, r0, lsr #13
mov pc, r11
mov pc, r11
MEND
MACRO
$label OUT8
$label ldrh r0, [r7, #CPU_BC]
str r10, [r7, #CPU_REMCLOCK]
bl iocore_out
ldr r10, [r7, #CPU_REMCLOCK]
mov pc, r11
MEND
MACRO
$label OUTR8 $r
$label ldrb r1, [r7, #$r]
OUT8
MEND
MACRO
$label INP8
$label ldrh r0, [r7, #CPU_BC]
str r10, [r7, #CPU_REMCLOCK]
bl iocore_inp
ldrb r1, [r0, r7]
bic r2, r8, #(&ff - C_FLAG)
ldr r10, [r7, #CPU_REMCLOCK]
orr r8, r2, r1
MEND
MACRO
$label INPR8 $r
$label INP8
strb r0, [r7, #$r]
mov pc, r11
MEND
END
RetroPC.NET-CVS <cvs@retropc.net>