-@ vim:filetype=armasm\r
-\r
-@ (c) Copyright 2006-2009, Grazvydas "notaz" Ignotas\r
-@ All Rights Reserved\r
-\r
-\r
-@@ .include "port_config.s"\r
+/*\r
+ * PicoDrive\r
+ * (C) notaz, 2006-2009\r
+ *\r
+ * This work is licensed under the terms of MAME license.\r
+ * See COPYING file in the top-level directory.\r
+ */\r
\r
.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_DIS_32X, (1 << 20)\r
+.equ POPT_EN_32X, (1 << 20)\r
\r
.text\r
.align 4\r
ldr r3, =(Pico+0x22200)\r
ldr r1, [r2, #8] @ SRam.end\r
cmp r0, r1\r
- bge m_read8_nosram\r
+ bgt m_read8_nosram\r
ldr r1, [r2, #4] @ SRam.start\r
cmp r0, r1\r
blt m_read8_nosram\r
m_read8_eeprom:\r
stmfd sp!,{r0,lr}\r
bl EEPROM_read\r
- ldmfd sp!,{r0,lr}\r
- tst r0, #1\r
+ ldmfd sp!,{r1,lr}\r
+ tst r1, #1\r
moveq r0, r0, lsr #8\r
bx lr\r
\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
m_read8_not_brq:\r
ldr r2, =PicoOpt\r
ldr r2, [r2]\r
- tst r2, #POPT_DIS_32X\r
- beq PicoRead8_32x\r
+ tst r2, #POPT_EN_32X\r
+ bne PicoRead8_32x\r
mov r0, #0\r
bx lr\r
\r
ldr r3, =(Pico+0x22200)\r
ldr r1, [r2, #8] @ SRam.end\r
cmp r0, r1\r
- bge m_read16_nosram\r
+ bgt m_read16_nosram\r
ldr r1, [r2, #4] @ SRam.start\r
cmp r0, r1\r
blt m_read16_nosram\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
m_read16_not_brq:\r
ldr r2, =PicoOpt\r
ldr r2, [r2]\r
- tst r2, #POPT_DIS_32X\r
- beq PicoRead16_32x\r
+ tst r2, #POPT_EN_32X\r
+ bne PicoRead16_32x\r
mov r0, #0\r
bx lr\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
m_write8_not_sreg:\r
ldr r2, =PicoOpt\r
ldr r2, [r2]\r
- tst r2, #POPT_DIS_32X\r
- beq PicoWrite8_32x\r
+ tst r2, #POPT_EN_32X\r
+ bne PicoWrite8_32x\r
bx lr\r
\r
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\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
m_write16_not_sreg:\r
ldr r2, =PicoOpt\r
ldr r2, [r2]\r
- tst r2, #POPT_DIS_32X\r
- beq PicoWrite16_32x\r
+ tst r2, #POPT_EN_32X\r
+ bne PicoWrite16_32x\r
bx lr\r
\r
.pool\r
\r
+@ vim:filetype=armasm\r