INCLUDE z80a.inc
EXPORT z80a_cb
EXPORT z80a_ixcb
EXPORT z80a_iycb
AREA .text, CODE, READONLY
MACRO
$label BITA $b, $s
$label tst r8, #($b << 8)
bic r8, r8, #(&ff - C_FLAG)
orreq r8, r8, #(H_FLAG + Z_FLAG)
orrne r8, r8, #(H_FLAG + $s)
mov pc, r11
MEND
MACRO
$label BRA $b
$label bic r8, r8, #($b << 8)
mov pc, r11
MEND
MACRO
$label BSA $b
$label orr r8, r8, #($b << 8)
mov pc, r11
MEND
rlc_a and r0, r8, #(&7f << 8)
cmp r8, #&8000
orrcs r0, r0, #&80
adc r1, r0, r0
ldrb r2, [r7, r0, lsr #7]
add r8, r2, r1
mov pc, r11
rrc_a movs r0, r8, lsr #9
orrcs r0, r0, #&80
ldrb r1, [r0, r7]
adc r8, r1, r0, lsl #8
mov pc, r11
rl_a and r0, r8, #(&7f << 8)
tst r8, #C_FLAG
orrne r0, r0, #&80
cmp r8, #&8000
ldrb r1, [r7, r0, lsr #7]
adc r8, r1, r0 lsl #1
mov pc, r11
rr_a mov r0, r8, lsr #9
tst r8, #C_FLAG
orrne r0, r0, #&80
ldrb r1, [r0, r7]
movs r2, r8, lsr #9
adc r8, r1, r0, lsl #8
mov pc, r11
sla_a and r0, r8, #(&7f << 8)
movs r2, r8, lsr #16
ldrb r1, [r7, r0, lsr #7]
adc r8, r1, r0, lsl #1
mov pc, r11
sra_a tst r8, #&8000
orrne r8, r8, #&10000
srl_a movs r0, r8, lsr #9
ldrb r1, [r0, r7]
adc r8, r1, r0, lsl #8
mov pc, r11
sll_a and r0, r8, #(&7f << 8)
orr r0, r0, #&80
movs r2, r8, lsr #16
ldrb r1, [r7, r0, lsr #7]
adc r8, r1, r0, lsl #1
mov pc, r11
bit0_a BITA &01, 0
bit1_a BITA &02, 0
bit2_a BITA &04, 0
bit3_a BITA &08, 0
bit4_a BITA &10, 0
bit5_a BITA &20, 0
bit6_a BITA &40, 0
bit7_a BITA &80, S_FLAG
br0_a BRA &01
br1_a BRA &02
br2_a BRA &04
br3_a BRA &08
br4_a BRA &10
br5_a BRA &20
br6_a BRA &40
br7_a BRA &80
bs0_a BSA &01
bs1_a BSA &02
bs2_a BSA &04
bs3_a BSA &08
bs4_a BSA &10
bs5_a BSA &20
bs6_a BSA &40
bs7_a BSA &80
MACRO
$label BITR4 $b, $s
$label bic r8, r8, #(&ff - C_FLAG)
tst r0, #$b
orreq r8, r8, #(H_FLAG + Z_FLAG)
orrne r8, r8, #(H_FLAG + $s)
mov pc, r11
MEND
MACRO
$label BRR4 $b
$label bic r0, r0, #$b
strb r0, [r4]
mov pc, r11
MEND
MACRO
$label BSR4 $b
$label orr r0, r0, #$b
strb r0, [r4]
mov pc, r11
MEND
rlc_m Z80WORK #23
rlc_r and r1, r0, #&7f
cmp r0, #&80
adc r2, r1, r1
and r8, r8, #(&ff << 8)
ldrb r3, [r2, r7]
strb r2, [r4]
adc r8, r3, r8
mov pc, r11
rrc_m Z80WORK #23
rrc_r movs r0, r0, lsr #1
and r8, r8, #(&ff << 8)
orrcs r0, r0, #&80
ldrb r1, [r0, r7]
strb r0, [r4]
adc r8, r1, r8
mov pc, r11
rl_m Z80WORK #23
rl_r and r1, r8, #C_FLAG
movs r2, r0, lsl #25
orr r3, r2, r1, lsl #24
and r8, r8, #(&ff << 8)
mov r1, r3, lsr #24
ldrb r2, [r7, r3, lsr #24]
strb r1, [r4]
adc r8, r2, r8
mov pc, r11
rr_m Z80WORK #23
rr_r and r1, r8, #C_FLAG
movs r2, r0, lsr #1
orr r3, r2, r1, lsl #7
and r8, r8, #(&ff << 8)
ldrb r1, [r3, r7]
strb r3, [r4]
adc r8, r1, r8
mov pc, r11
sla_m Z80WORK #23
sla_r movs r1, r0, lsl #25
and r8, r8, #(&ff << 8)
mov r2, r1, lsr #24
ldrb r3, [r7, r1, lsr #24]
strb r2, [r4]
adc r8, r3, r8
mov pc, r11
sra_m Z80WORK #23
sra_r tst r0, #&80
orrne r0, r0, #&100
movs r1, r0, lsr #1
and r8, r8, #(&ff << 8)
ldrb r2, [r1, r7]
strb r1, [r4]
adc r8, r2, r8
mov pc, r11
sll_m Z80WORK #23
sll_r movs r1, r0, lsl #25
add r1, r1, #(1 << 24)
and r8, r8, #(&ff << 8)
mov r2, r1, lsr #24
ldrb r3, [r7, r1, lsr #24]
strb r2, [r4]
adc r8, r3, r8
mov pc, r11
srl_m Z80WORK #23
srl_r movs r1, r0, lsr #1
and r8, r8, #(&ff << 8)
ldrb r2, [r1, r7]
strb r1, [r4]
adc r8, r2, r8
mov pc, r11
bit0_m Z80WORK #20
bit0_r BITR4 &01, 0
bit1_m Z80WORK #20
bit1_r BITR4 &02, 0
bit2_m Z80WORK #20
bit2_r BITR4 &04, 0
bit3_m Z80WORK #20
bit3_r BITR4 &08, 0
bit4_m Z80WORK #20
bit4_r BITR4 &10, 0
bit5_m Z80WORK #20
bit5_r BITR4 &20, 0
bit6_m Z80WORK #20
bit6_r BITR4 &40, 0
bit7_m Z80WORK #20
bit7_r BITR4 &80, S_FLAG
br0_m Z80WORK #23
br0_r BRR4 &01
br1_m Z80WORK #23
br1_r BRR4 &02
br2_m Z80WORK #23
br2_r BRR4 &04
br3_m Z80WORK #23
br3_r BRR4 &08
br4_m Z80WORK #23
br4_r BRR4 &10
br5_m Z80WORK #23
br5_r BRR4 &20
br6_m Z80WORK #23
br6_r BRR4 &40
br7_m Z80WORK #23
br7_r BRR4 &80
bs0_m Z80WORK #23
bs0_r BSR4 &01
bs1_m Z80WORK #23
bs1_r BSR4 &02
bs2_m Z80WORK #23
bs2_r BSR4 &04
bs3_m Z80WORK #23
bs3_r BSR4 &08
bs4_m Z80WORK #23
bs4_r BSR4 &10
bs5_m Z80WORK #23
bs5_r BSR4 &20
bs6_m Z80WORK #23
bs6_r BSR4 &40
bs7_m Z80WORK #23
bs7_r BSR4 &80
z80a_cb GETPC8
add r6, r6, #(1 << 24)
and r1, r0, #7 ; reg
and r2, r0, #&f8 ; ctrl
cmp r1, #6
bcc cb_r
beq cb_xhl
cb_a adr r12, cba_r
ldr r2, [r12, r2, lsr #1]
Z80WORK #8
mov pc, r2
cba_r dcd rlc_a
dcd rrc_a
dcd rl_a
dcd rr_a
dcd sla_a
dcd sra_a
dcd sll_a
dcd srl_a
dcd bit0_a
dcd bit1_a
dcd bit2_a
dcd bit3_a
dcd bit4_a
dcd bit5_a
dcd bit6_a
dcd bit7_a
dcd br0_a
dcd br1_a
dcd br2_a
dcd br3_a
dcd br4_a
dcd br5_a
dcd br6_a
dcd br7_a
dcd bs0_a
dcd bs1_a
dcd bs2_a
dcd bs3_a
dcd bs4_a
dcd bs5_a
dcd bs6_a
dcd bs7_a
cb_r adr r12, cbr4_r
add r3, r7, #CPU_C
eor r1, r1, #1
ldr r2, [r12, r2, lsr #1]
Z80WORK #8
ldrb r0, [r1, r3]
add r4, r1, r3
mov pc, r2
cbr4_r dcd rlc_r
dcd rrc_r
dcd rl_r
dcd rr_r
dcd sla_r
dcd sra_r
dcd sll_r
dcd srl_r
dcd bit0_r
dcd bit1_r
dcd bit2_r
dcd bit3_r
dcd bit4_r
dcd bit5_r
dcd bit6_r
dcd bit7_r
dcd br0_r
dcd br1_r
dcd br2_r
dcd br3_r
dcd br4_r
dcd br5_r
dcd br6_r
dcd br7_r
dcd bs0_r
dcd bs1_r
dcd bs2_r
dcd bs3_r
dcd bs4_r
dcd bs5_r
dcd bs6_r
dcd bs7_r
cb_xhl ldrh r4, [r7, #CPU_HL]
MEMLEA8 r4, r0, r1
adr r12, cbr4_m
ldrb r0, [r0, r4]
ldr r2, [r12, r2, lsr #1]
add r4, r4, r1
mov pc, r2
cbr4_m dcd rlc_m
dcd rrc_m
dcd rl_m
dcd rr_m
dcd sla_m
dcd sra_m
dcd sll_m
dcd srl_m
dcd bit0_m
dcd bit1_m
dcd bit2_m
dcd bit3_m
dcd bit4_m
dcd bit5_m
dcd bit6_m
dcd bit7_m
dcd br0_m
dcd br1_m
dcd br2_m
dcd br3_m
dcd br4_m
dcd br5_m
dcd br6_m
dcd br7_m
dcd bs0_m
dcd bs1_m
dcd bs2_m
dcd bs3_m
dcd bs4_m
dcd bs5_m
dcd bs6_m
dcd bs7_m
z80a_ixcb GETIPC r1, CPU_IX
add r6, r6, #(1 << 24)
GETPC8
MEMLEA8 r1, r2, r3
adr r12, cbr4_m
and r0, r0, #&f8
ldr r12, [r12, r0, lsr #1]
ldrb r0, [r1, r2]
add r4, r1, r3
mov pc, r12
z80a_iycb GETIPC r1, CPU_IY
add r6, r6, #(1 << 24)
GETPC8
MEMLEA8 r1, r2, r3
adr r12, cbr4_m
and r0, r0, #&f8
ldr r12, [r12, r0, lsr #1]
ldrb r0, [r1, r2]
add r4, r1, r3
mov pc, r12
END
RetroPC.NET-CVS <cvs@retropc.net>