better mmuhack usage
[picodrive.git] / Pico / Memory.s
index 51778c4..351c1a7 100644 (file)
@@ -1,7 +1,9 @@
+@ vim:filetype=armasm\r
+\r
 @ memory handlers with banking support for SSF II - The New Challengers\r
 @ mostly based on Gens code\r
 \r
-@ (c) Copyright 2006, notaz\r
+@ (c) Copyright 2006-2007, Grazvydas "notaz" Ignotas\r
 @ All Rights Reserved\r
 \r
 \r
@@ -384,7 +386,7 @@ m_read8_above_rom:
     stmfd   sp!,{r0,lr}\r
     bic     r0, r0, #1\r
     mov     r1, #8\r
-    bl      UnusualRead16\r
+    bl      OtherRead16End\r
     ldmfd   sp!,{r1,lr}\r
     tst     r1, #1\r
     moveq   r0, r0, lsr #8\r
@@ -441,6 +443,7 @@ m_read16_rom4: @ 0x200000 - 0x27ffff, SRAM area (NBA Live 95)
     mov     r0, r0, lsr #8\r
     orr     r0, r0, r1, lsl #8\r
     bx      lr\r
+\r
 m_read16_nosram:\r
     ldr     r1, [r3, #4]    @ 1ci\r
     cmp     r0, r1\r
@@ -485,18 +488,16 @@ m_read16_romF: @ 0x780000 - 0x7fffff
     m_read16_rom 0xF\r
 \r
 m_read16_misc:\r
-    mov     r1, #16\r
-    ldr     r2, =OtherRead16\r
     bic     r0, r0, #1\r
-    bx      r2\r
+    mov     r1, #16\r
+    b       OtherRead16\r
 \r
 m_read16_vdp:\r
     tst     r0, #0x70000\r
     tsteq   r0, #0x000e0\r
     bxne    lr              @ invalid read\r
-    ldr     r1, =PicoVideoRead\r
     bic     r0, r0, #1\r
-    bx      r1\r
+    b       PicoVideoRead\r
 \r
 m_read16_ram:\r
     ldr     r1, =Pico\r
@@ -506,10 +507,9 @@ m_read16_ram:
     bx      lr\r
 \r
 m_read16_above_rom:\r
-    mov     r1, #16\r
-    ldr     r2, =UnusualRead16\r
     bic     r0, r0, #1\r
-    bx      r2\r
+    mov     r1, #16\r
+    b       OtherRead16End\r
 \r
 .pool\r
 \r
@@ -568,6 +568,7 @@ m_read32_rom4: @ 0x200000 - 0x27ffff, SRAM area (does any game do long reads?)
     and     r1, r1, #0xff\r
     orr     r0, r0, r1, lsl #8\r
     bx      lr\r
+\r
 m_read32_nosram:\r
     ldr     r1, [r3, #4]    @ (1ci)\r
     cmp     r0, r1\r
@@ -633,12 +634,10 @@ m_read32_vdp:
     tsteq   r0, #0x000e0\r
     bxne    lr              @ invalid read\r
     bic     r0, r0, #1\r
-    stmfd   sp!,{r0,lr}\r
+    add     r1, r0, #2\r
+    stmfd   sp!,{r1,lr}\r
     bl      PicoVideoRead\r
-    mov     r1, r0\r
-    ldmfd   sp!,{r0}\r
-    stmfd   sp!,{r1}\r
-    add     r0, r0, #2\r
+    swp     r0, r0, [sp]\r
     bl      PicoVideoRead\r
     ldmfd   sp!,{r1,lr}\r
     orr     r0, r0, r1, lsl #16\r
@@ -657,13 +656,13 @@ m_read32_above_rom:
     bic     r0, r0, #1\r
     stmfd   sp!,{r0,lr}\r
     mov     r1, #32\r
-    bl      UnusualRead16\r
+    bl      OtherRead16End\r
     mov     r1, r0\r
     ldmfd   sp!,{r0}\r
     stmfd   sp!,{r1}\r
     add     r0, r0, #2\r
     mov     r1, #32\r
-    bl      UnusualRead16\r
+    bl      OtherRead16End\r
     ldmfd   sp!,{r1,lr}\r
     orr     r0, r0, r1, lsl #16\r
     bx      lr\r
@@ -679,8 +678,11 @@ PicoWriteRomHW_SSF2: @ u32 a, u32 d
 \r
     @ sram register\r
     ldr     r2, =(Pico+0x22211) @ Pico.m.sram_reg\r
+    ldrb    r0, [r2]\r
     and     r1, r1, #3\r
-    strb    r1, [r2]\r
+    bic     r0, r0, #3\r
+    orr     r0, r0, r1\r
+    strb    r0, [r2]\r
     bx      lr\r
 \r
 pwr_banking:\r
@@ -702,3 +704,4 @@ pwr_banking:
     str     r12, [r2, r0, lsl #2]\r
  \r
     bx      lr\r
+\r