cd: fix breakage in comm detection
[picodrive.git] / pico / cd / memory_arm.s
index b9bbaec..380258c 100644 (file)
@@ -53,7 +53,6 @@
 .extern m68k_reg_write8
 .extern s68k_reg_read16
 .extern s68k_reg_write8
-.extern s68k_poll_adclk
 .extern s68k_poll_detect
 .extern gfx_cd_read
 .extern gfx_cd_write16
@@ -62,6 +61,7 @@
 .extern PicoRead16_io
 .extern PicoWrite8_io
 .extern PicoWrite16_io
+.extern m68k_comm_check
 
 
 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@ -176,14 +176,11 @@ m_m68k_read8_r02:
     bx      lr
 m_m68k_read8_r03:
     add     r1, r1, #0x110000
+    push    {r1, lr}
+    bl      m68k_comm_check
+    pop     {r1, lr}
     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
@@ -217,10 +214,14 @@ m_m68k_read8_r0d:
     bx      lr
 m_m68k_read8_hi:
     cmp     r0, #0x30
-    movge   r0, #0
-    bxeq    lr
     add     r1, r1, #0x110000
-    ldrb    r0, [r1, r0]
+    movge   r0, #0
+    bxge    lr
+    add     r1, r0
+    push    {r1, lr}
+    bl      m68k_comm_check
+    pop     {r1, lr}
+    ldrb    r0, [r1]
     bx      lr
 
 
@@ -272,16 +273,13 @@ m_m68k_read16_r00:
     bx      lr
 m_m68k_read16_r02:
     add     r1, r1, #0x110000
-    ldrb    r0, [r1, #2]
+    push    {r1, lr}
+    bl      m68k_comm_check
+    pop     {r1, lr}
     ldrb    r2, [r1, #3]
-    add     r1, r1, #0x002200
-    ldr     r1, [r1, #4]
+    ldrb    r0, [r1, #2]
     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
@@ -302,13 +300,18 @@ m_m68k_read16_r0c:
     bx      lr
 m_m68k_read16_hi:
     cmp     r0, #0x30
-    addlt   r1, r1, #0x110000
-    ldrlth  r1, [r1, r0]
+    add     r1, r1, #0x110000
     movge   r0, #0
     bxge    lr
-    mov     r0, r1, lsr #8
-    and     r1, r1, #0xff
-    orr     r0, r0, r1, lsl #8
+
+    add     r1, r0, r1
+    push    {r1, lr}
+    bl      m68k_comm_check
+    pop     {r0, lr}
+    ldrh    r0, [r0]
+    mov     r1, r0, lsr #8
+    and     r0, r0, #0xff
+    orr     r0, r1, r0, lsl #8
     bx      lr
 
 
@@ -377,22 +380,8 @@ m_m68k_write16_regs:
     b       m68k_reg_write8
 
 m_m68k_write16_regs_spec:               @ special case
-    ldr     r2, =(Pico+0x22200)
-    ldr     r3, =s68k_poll_adclk
-    mov     r0, #0x110000
-    ldr     r2, [r2]
-    add     r0, r0, #0x00000e
     mov     r1, r1, lsr #8
-    strb    r1, [r2, r0]                @ if (a == 0xe) s68k_regs[0x0e] = d >> 8;
-    ldr     r2, [r3]
-    mov     r1, #0
-    and     r2, r2, #0xfe
-    cmp     r2, #0x0e
-    bxne    lr
-    ldr     r0, =PicoCpuCS68k
-    str     r1, [r0, #0x58]             @ push s68k out of stopped state
-    str     r1, [r3]
-    bx      lr
+    b       m68k_reg_write8
 
 
 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@