X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Pico%2Fcd%2FMemory.s;h=386e26cd60a6d57659c2599021276cc17ffdb8b8;hb=721cd3963fa4ba82ca218345e8f543703dc46c90;hp=8c360f84b75b3e6a8dcc5ff0450e621b7a72d423;hpb=7a1f6e45c9f6a11152f62303b0203475a9fd431a;p=picodrive.git diff --git a/Pico/cd/Memory.s b/Pico/cd/Memory.s index 8c360f8..386e26c 100644 --- a/Pico/cd/Memory.s +++ b/Pico/cd/Memory.s @@ -135,6 +135,8 @@ m_s68k_decode_write_table: .extern s68k_reg_write8 .extern s68k_poll_adclk .extern PicoCpuS68k +.extern s68k_poll_detect +.extern SN76496Write @ r0=reg3, r1-r3=temp @@ -201,8 +203,8 @@ PicoMemResetCD: @ r3 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 @@ -388,7 +390,8 @@ m_m68k_read8_prgbank: 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 @@ -489,7 +492,13 @@ m_m68k_read8_r02: 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 @@ -588,7 +597,8 @@ m_m68k_read16_prgbank: 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 @@ -677,9 +687,15 @@ m_m68k_read16_r00: 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 @@ -752,7 +768,8 @@ m_m68k_read32_prgbank: 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 @@ -910,7 +927,8 @@ m_m68k_write8_prgbank: 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 @@ -981,6 +999,10 @@ m_m68k_write8_vdp: 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 @@ -1009,7 +1031,8 @@ m_m68k_write16_prgbank: 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 @@ -1111,7 +1134,11 @@ m_m68k_write16_vdp: 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: @@ -1137,7 +1164,8 @@ m_m68k_write32_prgbank: 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 @@ -1279,6 +1307,10 @@ m_m68k_write32_vdp: 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 @@ -1398,6 +1430,9 @@ m_s68k_read8_regs: 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 @@ -1412,6 +1447,13 @@ m_s68k_read8_regs: 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 + @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ -1651,6 +1693,18 @@ m_s68k_read32_regs_gfx: 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 @@ -1801,6 +1855,18 @@ m_s68k_write8_regs: 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 @@ -1974,6 +2040,21 @@ m_s68k_write16_regs_spec: @ special case 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