.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
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
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
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
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