improve input handling
[picodrive.git] / pico / memory_arm.s
index be2fa99..f6d7f79 100644 (file)
@@ -9,7 +9,6 @@
 .equ SRR_MAPPED,    (1 <<  0)\r
 .equ SRR_READONLY,  (1 <<  1)\r
 .equ SRF_EEPROM,    (1 <<  1)\r
-.equ POPT_6BTN_PAD, (1 <<  5)\r
 .equ POPT_EN_32X,   (1 << 20)\r
 \r
 .text\r
@@ -67,24 +66,7 @@ m_read8_eeprom:
 PicoRead8_io: @ u32 a, u32 d\r
     bic     r2, r0, #0x001f   @ most commonly we get i/o port read,\r
     cmp     r2, #0xa10000     @ so check for it first\r
-    bne     m_read8_not_io\r
-\r
-m_read8_misc_io:\r
-    ands    r0, r0, #0x1e\r
-    beq     m_read8_misc_hwreg\r
-    cmp     r0, #4\r
-    movlt   r0, #0\r
-    moveq   r0, #1\r
-    ble     PadRead\r
-    ldr     r3, =(Pico+0x22000)\r
-    mov     r0, r0, lsr #1  @ other IO ports (Pico.ioports[a])\r
-    ldrb    r0, [r3, r0]\r
-    bx      lr\r
-\r
-m_read8_misc_hwreg:\r
-    ldr     r3, =(Pico+0x22200)\r
-    ldrb    r0, [r3, #0x0f] @ Pico.m.hardware\r
-    bx      lr\r
+    beq     io_ports_read\r
 \r
 m_read8_not_io:\r
     and     r2, r0, #0xfc00\r
@@ -161,7 +143,7 @@ PicoRead16_io: @ u32 a, u32 d
     cmp     r2, #0xa10000     @ so check for it first\r
     bne     m_read16_not_io\r
     stmfd   sp!,{lr}\r
-    bl      m_read8_misc_io   @ same as read8\r
+    bl      io_ports_read     @ same as read8\r
     orr     r0, r0, r0, lsl #8 @ only has bytes mirrored\r
     ldmfd   sp!,{pc}\r
 \r
@@ -201,37 +183,7 @@ PicoWrite8_io: @ u32 a, u32 d
     bic     r2, r0, #0x1e       @ most commonly we get i/o port write,\r
     eor     r2, r2, #0xa10000   @ so check for it first\r
     eors    r2, r2, #1\r
-    bne     m_write8_not_io\r
-\r
-m_write8_io:\r
-    ldr     r2, =PicoOpt\r
-    and     r0, r0, #0x1e\r
-    ldr     r2, [r2]\r
-    ldr     r3, =(Pico+0x22000) @ Pico.ioports\r
-    tst     r2, #POPT_6BTN_PAD\r
-    beq     m_write8_io_done\r
-    cmp     r0, #2\r
-    cmpne   r0, #4\r
-    bne     m_write8_io_done @ not likely to happen\r
-    add     r2, r3, #0x200   @ Pico+0x22200\r
-    mov     r12,#0\r
-    cmp     r0, #2\r
-    streqb  r12,[r2,#0x18]\r
-    strneb  r12,[r2,#0x19]   @ Pico.m.padDelay[i] = 0\r
-    tst     r1, #0x40        @ TH\r
-    beq     m_write8_io_done\r
-    ldrb    r12,[r3, r0, lsr #1]\r
-    tst     r12,#0x40\r
-    bne     m_write8_io_done\r
-    cmp     r0, #2\r
-    ldreqb  r12,[r2,#0x0a]\r
-    ldrneb  r12,[r2,#0x0b]   @ Pico.m.padTHPhase\r
-    add     r12,r12,#1\r
-    streqb  r12,[r2,#0x0a]\r
-    strneb  r12,[r2,#0x0b]   @ Pico.m.padTHPhase\r
-m_write8_io_done:\r
-    strb    r1, [r3, r0, lsr #1]\r
-    bx      lr\r
+    beq     io_ports_write\r
 \r
 m_write8_not_io:\r
     tst     r0, #1\r
@@ -270,7 +222,7 @@ m_write8_not_sreg:
 PicoWrite16_io: @ u32 a, u32 d\r
     bic     r2, r0, #0x1f    @ most commonly we get i/o port write,\r
     cmp     r2, #0xa10000    @ so check for it first\r
-    beq     m_write8_io\r
+    beq     io_ports_write\r
 \r
 m_write16_not_io:\r
     and     r2, r0, #0xff00\r