bugfixes, adjusted famec timing
[picodrive.git] / Pico / Memory.s
index 88b8c43..93c503d 100644 (file)
@@ -435,6 +435,19 @@ m_read8_ram:
     bx      lr\r
 \r
 m_read8_above_rom:\r
+    @ might still be SRam (Micro Machines, HardBall '95)\r
+    ldr     r2, =(SRam)\r
+    ldr     r3, =(Pico+0x22200)\r
+    ldr     r1, [r2, #8]    @ SRam.end\r
+    cmp     r0, r1\r
+    bgt     m_read8_ar_nosram\r
+    ldr     r1, [r2, #4]    @ SRam.start\r
+    cmp     r0, r1\r
+    blt     m_read8_ar_nosram\r
+    ldrb    r1, [r3, #0x11] @ Pico.m.sram_reg\r
+    tst     r1, #5\r
+    bne     SRAMRead\r
+m_read8_ar_nosram:\r
     stmfd   sp!,{r0,lr}\r
     bic     r0, r0, #1\r
     mov     r1, #8\r
@@ -566,7 +579,24 @@ m_read16_ram:
     bx      lr\r
 \r
 m_read16_above_rom:\r
+    @ might still be SRam\r
+    ldr     r2, =(SRam)\r
+    ldr     r3, =(Pico+0x22200)\r
+    ldr     r1, [r2, #8]    @ SRam.end\r
     bic     r0, r0, #1\r
+    cmp     r0, r1\r
+    bgt     m_read16_ar_nosram\r
+    ldr     r1, [r2, #4]    @ SRam.start\r
+    cmp     r0, r1\r
+    blt     m_read16_ar_nosram\r
+    ldrb    r1, [r3, #0x11] @ Pico.m.sram_reg\r
+    tst     r1, #5\r
+    beq     m_read16_ar_nosram\r
+    stmfd   sp!,{lr}\r
+    bl      SRAMRead\r
+    orr     r0, r0, r0, lsl #8\r
+    ldmfd   sp!,{pc}\r
+m_read16_ar_nosram:\r
     mov     r1, #16\r
     b       OtherRead16End\r
 \r
@@ -861,7 +891,8 @@ m_write8_z80_not_ram:
     ldr     r2, =emustatus\r
     ldmfd   sp!,{lr}\r
     ldr     r1, [r2]\r
-    orr     r1, r0, r2\r
+    and     r0, r0, #1\r
+    orr     r1, r0, r1\r
     str     r1, [r2]         @ emustatus|=YM2612Write(a&3, d);\r
     bx      lr\r
 \r