3 * (C) notaz, 2006-2009
\r
5 * This work is licensed under the terms of MAME license.
\r
6 * See COPYING file in the top-level directory.
\r
9 #include "pico_int_o32.h"
\r
11 .equ SRR_MAPPED, (1 << 0)
\r
12 .equ SRR_READONLY, (1 << 1)
\r
13 .equ SRF_EEPROM, (1 << 1)
\r
14 .equ POPT_EN_32X, (1 << 20)
\r
19 .global PicoRead8_sram
\r
20 .global PicoRead8_io
\r
21 .global PicoRead16_sram
\r
22 .global PicoRead16_io
\r
23 .global PicoWrite8_io
\r
24 .global PicoWrite16_io
\r
26 PicoRead8_sram: @ u32 a
\r
28 ldr r1, [r3, #OFS_Pico_sv_end]
\r
31 ldr r2, [r3, #OFS_Pico_sv_start]
\r
34 ldrb r1, [r3, #OFS_Pico_m_sram_reg]
\r
37 ldr r1, [r3, #OFS_Pico_sv_flags]
\r
40 ldr r1, [r3, #OFS_Pico_sv_data]
\r
46 ldr r1, [r3, #OFS_Pico_romsize]
\r
49 bxgt lr @ bad location
\r
50 @ XXX: banking unfriendly
\r
51 ldr r1, [r3, #OFS_Pico_rom]
\r
61 moveq r0, r0, lsr #8
\r
65 PicoRead8_io: @ u32 a
\r
66 bic r2, r0, #0x001f @ most commonly we get i/o port read,
\r
67 cmp r2, #0xa10000 @ so check for it first
\r
77 ldr r0, [r3, #OFS_Pico_m_rotate]
\r
79 strb r0, [r3, #OFS_Pico_m_rotate]
\r
80 eor r0, r0, r0, lsl #6
\r
83 bxne lr @ odd addr -> open bus
\r
84 bic r0, r0, #1 @ bit0 defined in this area
\r
87 bxne lr @ not busreq
\r
89 ldrb r1, [r3, #OFS_Pico_m_z80Run]
\r
90 ldrb r2, [r3, #OFS_Pico_m_z80_reset]
\r
95 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
97 PicoRead16_sram: @ u32 a, u32 d
\r
99 ldr r1, [r3, #OFS_Pico_sv_end]
\r
101 bgt m_read16_nosram
\r
102 ldr r2, [r3, #OFS_Pico_sv_start]
\r
104 blt m_read16_nosram
\r
105 ldrb r1, [r3, #OFS_Pico_m_sram_reg]
\r
106 tst r1, #SRR_MAPPED
\r
107 beq m_read16_nosram
\r
108 ldr r1, [r3, #OFS_Pico_sv_flags]
\r
109 tst r1, #SRF_EEPROM
\r
111 ldr r1, [r3, #OFS_Pico_sv_data]
\r
115 orr r0, r0, r1, lsl #8
\r
119 ldr r1, [r3, #OFS_Pico_romsize]
\r
122 bxgt lr @ bad location
\r
123 @ XXX: banking unfriendly
\r
124 ldr r1, [r3, #OFS_Pico_rom]
\r
129 PicoRead16_io: @ u32 a, u32 d
\r
130 bic r2, r0, #0x001f @ most commonly we get i/o port read,
\r
131 cmp r2, #0xa10000 @ so check for it first
\r
132 bne m_read16_not_io
\r
134 bl io_ports_read @ same as read8
\r
135 orr r0, r0, r0, lsl #8 @ only has bytes mirrored
\r
139 and r2, r0, #0xfc00
\r
144 and r2, r0, #0xff00
\r
145 ldr r0, [r3, #OFS_Pico_m_rotate]
\r
147 strb r0, [r3, #OFS_Pico_m_rotate]
\r
148 eor r0, r0, r0, lsl #5
\r
149 eor r0, r0, r0, lsl #8
\r
150 bic r0, r0, #0x100 @ bit8 defined in this area
\r
152 bxne lr @ not busreq
\r
154 ldrb r1, [r3, #OFS_Pico_m_z80Run]
\r
155 ldrb r2, [r3, #OFS_Pico_m_z80_reset]
\r
156 orr r0, r0, r1, lsl #8
\r
157 orr r0, r0, r2, lsl #8
\r
160 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
162 PicoWrite8_io: @ u32 a, u32 d
\r
163 bic r2, r0, #0x1e @ most commonly we get i/o port write,
\r
164 eor r2, r2, #0xa10000 @ so check for it first
\r
170 bne m_write8_not_z80ctl @ even addrs only
\r
171 and r2, r0, #0xff00
\r
174 beq ctl_write_z80busreq
\r
177 beq ctl_write_z80reset
\r
179 m_write8_not_z80ctl:
\r
181 eor r2, r0, #0xa10000
\r
182 eor r2, r2, #0x003000
\r
183 eors r2, r2, #0x0000f1
\r
186 ldrb r2, [r3, #OFS_Pico_m_sram_reg]
\r
187 and r1, r1, #(SRR_MAPPED|SRR_READONLY)
\r
188 bic r2, r2, #(SRR_MAPPED|SRR_READONLY)
\r
190 strb r2, [r3, #OFS_Pico_m_sram_reg]
\r
193 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
195 PicoWrite16_io: @ u32 a, u32 d
\r
196 bic r2, r0, #0x1f @ most commonly we get i/o port write,
\r
197 cmp r2, #0xa10000 @ so check for it first
\r
201 and r2, r0, #0xff00
\r
203 moveq r0, r1, lsr #8
\r
204 beq ctl_write_z80busreq
\r
206 moveq r0, r1, lsr #8
\r
207 beq ctl_write_z80reset
\r
209 m_write16_not_z80ctl:
\r
211 eor r2, r0, #0xa10000
\r
212 eor r2, r2, #0x003000
\r
213 eors r2, r2, #0x0000f0
\r
214 bne PicoWrite16_32x
\r
216 ldrb r2, [r3, #OFS_Pico_m_sram_reg]
\r
217 and r1, r1, #(SRR_MAPPED|SRR_READONLY)
\r
218 bic r2, r2, #(SRR_MAPPED|SRR_READONLY)
\r
220 strb r2, [r3, #OFS_Pico_m_sram_reg]
\r
225 @ vim:filetype=armasm
\r