.extern s68k_reg_write8
.extern s68k_poll_adclk
.extern PicoCpuS68k
+.extern s68k_poll_detect
+.extern SN76496Write
@ r0=reg3, r1-r3=temp
bx lr
-PicoMemResetCDdecode: @r3
- tst r3, #4
+PicoMemResetCDdecode: @reg3
+ tst r0, #4
bxeq lr @ we should not be called in 2M mode
ldr r1, =m_s68k_write8_table
ldr r3, =m_s68k_decode_write_table
orr r3, r2, #0x002200
ldr r3, [r1, r3]
ldr r2, [r1, r2]
- tst r3, #0x00020000 @ have bus?
+ and r3, r3, #0x00030000
+ cmp r3, #0x00010000 @ have bus or in reset state?
moveq r0, #0
bxeq lr
and r2, r2, #0xc0000000 @ r3 & 0xC0
m_m68k_read8_r03:
add r1, r1, #0x110000
ldrb r0, [r1, #3]
+ add r1, r1, #0x002200
+ ldr r1, [r1, #4]
and r0, r0, #0xc7
+ tst r1, #2 @ DMNA pending?
+ bxeq lr
+ bic r0, r0, #1
+ orr r0, r0, #2
bx lr
m_m68k_read8_r04:
add r1, r1, #0x110000
orr r3, r2, #0x002200
ldr r3, [r1, r3]
ldr r2, [r1, r2]
- tst r3, #0x00020000 @ have bus?
+ and r3, r3, #0x00030000
+ cmp r3, #0x00010000 @ have bus or in reset state?
moveq r0, #0
bxeq lr
and r2, r2, #0xc0000000 @ r3 & 0xC0
m_m68k_read16_r02:
add r1, r1, #0x110000
ldrb r0, [r1, #2]
- ldrb r1, [r1, #3]
- and r1, r1, #0xc7
- orr r0, r1, r0, lsl #8
+ ldrb r2, [r1, #3]
+ add r1, r1, #0x002200
+ ldr r1, [r1, #4]
+ and r2, r2, #0xc7
+ orr r0, r2, r0, lsl #8
+ tst r1, #2 @ DMNA pending?
+ bxeq lr
+ bic r0, r0, #1
+ orr r0, r0, #2
bx lr
m_m68k_read16_r04:
add r1, r1, #0x110000
orr r3, r2, #0x002200
ldr r3, [r1, r3]
ldr r2, [r1, r2]
- tst r3, #0x00020000 @ have bus?
+ and r3, r3, #0x00030000
+ cmp r3, #0x00010000 @ have bus or in reset state?
moveq r0, #0
bxeq lr
and r2, r2, #0xc0000000 @ r3 & 0xC0
orr r3, r12, #0x002200
ldr r3, [r2, r3]
ldr r12,[r2, r12]
- tst r3, #0x00020000 @ have bus?
+ and r3, r3, #0x00030000
+ cmp r3, #0x00010000 @ have bus or in reset state?
bxeq lr
and r12,r12,#0xc0000000 @ r3 & 0xC0
add r2, r2, r12, lsr #12
tst r0, #0x70000
tsteq r0, #0x000e0
bxne lr @ invalid
+ and r2, r0, #0x19
+ cmp r2, #0x11
+ andeq r0, r1, #0xff
+ beq SN76496Write
and r1, r1, #0xff
orr r1, r1, r1, lsl #8 @ byte access gets mirrored
b PicoVideoWrite
orr r3, r12, #0x002200
ldr r3, [r2, r3]
ldr r12,[r2, r12]
- tst r3, #0x00020000 @ have bus?
+ and r3, r3, #0x00030000
+ cmp r3, #0x00010000 @ have bus or in reset state?
bxeq lr
and r12,r12,#0xc0000000 @ r3 & 0xC0
add r2, r2, r12, lsr #12
tsteq r0, #0x000e0
bxne lr @ invalid
bic r0, r0, #1
- b PicoVideoWrite
+ and r2, r0, #0x18
+ cmp r2, #0x10
+ bne PicoVideoWrite
+ and r0, r1, #0xff
+ b SN76496Write @ lsb goes to 0x11
m_m68k_write16_ram:
orr r3, r12, #0x002200
ldr r3, [r2, r3]
ldr r12,[r2, r12]
- tst r3, #0x00020000 @ have bus?
+ and r3, r3, #0x00030000
+ cmp r3, #0x00010000 @ have bus or in reset state?
bxeq lr
and r12,r12,#0xc0000000 @ r3 & 0xC0
add r2, r2, r12, lsr #12
tst r0, #0x70000
tsteq r0, #0x000e0
bxne lr @ invalid
+ and r2, r0, #0x18
+ cmp r2, #0x10
+ moveq r0, r1, lsr #16
+ beq SN76496Write @ which game is crazy enough to do that?
stmfd sp!,{r0,r1,lr}
mov r1, r1, lsr #16
bl PicoVideoWrite
tst r0, #0x7e00
movne r0, #0
bxne lr
+ sub r2, r0, #0x0e
+ cmp r2, #(0x30-0x0e)
+ blo m_s68k_read8_comm
sub r2, r0, #0x58
cmp r2, #0x10
ldrlo r2, =gfx_cd_read
and r0, r0, #0xff
bx lr
+m_s68k_read8_comm:
+ ldr r1, =(Pico+0x22200)
+ ldr r1, [r1]
+ add r1, r1, #0x110000
+ ldrb r1, [r1, r0]
+ b s68k_poll_detect
+
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
m_s68k_write8_prg: @ 0x000000 - 0x07ffff
+ ldr r2, =(Pico+0x22200)
+ eor r0, r0, #1
+ ldr r2, [r2]
+ add r3, r0, #0x020000 @ map to our address
+ add r12,r2, #0x110000
+ ldr r12,[r12]
+ and r12,r12,#0x00ff0000 @ wp
+ cmp r0, r12, lsr #8
+ strgeb r1, [r2, r3]
+ bx lr
+
+
m_s68k_write8_wordram_2M: @ 0x080000 - 0x0bffff
m_s68k_write8_wordram_1M_b1: @ 0x0c0000 - 0x0dffff, maps to 0x0e0000
m_s68k_write8_ram 0x020000
m_s68k_write16_prg: @ 0x000000 - 0x07ffff
+ ldr r2, =(Pico+0x22200)
+ bic r0, r0, #1
+ ldr r2, [r2]
+ add r3, r0, #0x020000 @ map to our address
+ add r12,r2, #0x110000
+ ldr r12,[r12]
+ and r12,r12,#0x00ff0000 @ wp
+ cmp r0, r12, lsr #8
+ strgeh r1, [r2, r3]
+ bx lr
+
+
m_s68k_write16_wordram_2M: @ 0x080000 - 0x0bffff
m_s68k_write16_wordram_1M_b1: @ 0x0c0000 - 0x0dffff, maps to 0x0e0000
m_s68k_write16_ram 0x020000
m_s68k_write32_prg: @ 0x000000 - 0x07ffff
+ ldr r2, =(Pico+0x22200)
+ bic r0, r0, #1
+ ldr r2, [r2]
+ add r3, r0, #0x020000 @ map to our address
+ add r12,r2, #0x110000
+ ldr r12,[r12]
+ and r12,r12,#0x00ff0000 @ wp
+ cmp r0, r12, lsr #8
+ bxlt lr
+ mov r0, r1, lsr #16
+ strh r0, [r2, r3]!
+ strh r1, [r2, #2]
+ bx lr
+
+
m_s68k_write32_wordram_2M: @ 0x080000 - 0x0bffff
m_s68k_write32_wordram_1M_b1: @ 0x0c0000 - 0x0dffff, maps to 0x0e0000
m_s68k_write32_ram 0x020000