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
98 tst r2, #POPT_EN_32X
\r
103 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
105 PicoRead16_sram: @ u32 a, u32 d
\r
107 ldr r1, [r3, #OFS_Pico_sv_end]
\r
109 bgt m_read16_nosram
\r
110 ldr r2, [r3, #OFS_Pico_sv_start]
\r
112 blt m_read16_nosram
\r
113 ldrb r1, [r3, #OFS_Pico_m_sram_reg]
\r
114 tst r1, #SRR_MAPPED
\r
115 beq m_read16_nosram
\r
116 ldr r1, [r3, #OFS_Pico_sv_flags]
\r
117 tst r1, #SRF_EEPROM
\r
119 ldr r1, [r3, #OFS_Pico_sv_data]
\r
123 orr r0, r0, r1, lsl #8
\r
127 ldr r1, [r3, #OFS_Pico_romsize]
\r
130 bxgt lr @ bad location
\r
131 @ XXX: banking unfriendly
\r
132 ldr r1, [r3, #OFS_Pico_rom]
\r
137 PicoRead16_io: @ u32 a, u32 d
\r
138 bic r2, r0, #0x001f @ most commonly we get i/o port read,
\r
139 cmp r2, #0xa10000 @ so check for it first
\r
140 bne m_read16_not_io
\r
142 bl io_ports_read @ same as read8
\r
143 orr r0, r0, r0, lsl #8 @ only has bytes mirrored
\r
147 and r2, r0, #0xfc00
\r
149 bne m_read16_not_brq
\r
152 and r2, r0, #0xff00
\r
153 ldr r0, [r3, #OFS_Pico_m_rotate]
\r
155 strb r0, [r3, #OFS_Pico_m_rotate]
\r
156 eor r0, r0, r0, lsl #5
\r
157 eor r0, r0, r0, lsl #8
\r
158 bic r0, r0, #0x100 @ bit8 defined in this area
\r
160 bxne lr @ not busreq
\r
162 ldrb r1, [r3, #OFS_Pico_m_z80Run]
\r
163 ldrb r2, [r3, #OFS_Pico_m_z80_reset]
\r
164 orr r0, r0, r1, lsl #8
\r
165 orr r0, r0, r2, lsl #8
\r
171 tst r2, #POPT_EN_32X
\r
176 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
178 PicoWrite8_io: @ u32 a, u32 d
\r
179 bic r2, r0, #0x1e @ most commonly we get i/o port write,
\r
180 eor r2, r2, #0xa10000 @ so check for it first
\r
186 bne m_write8_not_z80ctl @ even addrs only
\r
187 and r2, r0, #0xff00
\r
190 beq ctl_write_z80busreq
\r
193 beq ctl_write_z80reset
\r
195 m_write8_not_z80ctl:
\r
197 eor r2, r0, #0xa10000
\r
198 eor r2, r2, #0x003000
\r
199 eors r2, r2, #0x0000f1
\r
200 bne m_write8_not_sreg
\r
202 ldrb r2, [r3, #OFS_Pico_m_sram_reg]
\r
203 and r1, r1, #(SRR_MAPPED|SRR_READONLY)
\r
204 bic r2, r2, #(SRR_MAPPED|SRR_READONLY)
\r
206 strb r2, [r3, #OFS_Pico_m_sram_reg]
\r
212 tst r2, #POPT_EN_32X
\r
216 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
218 PicoWrite16_io: @ u32 a, u32 d
\r
219 bic r2, r0, #0x1f @ most commonly we get i/o port write,
\r
220 cmp r2, #0xa10000 @ so check for it first
\r
224 and r2, r0, #0xff00
\r
226 moveq r0, r1, lsr #8
\r
227 beq ctl_write_z80busreq
\r
229 moveq r0, r1, lsr #8
\r
230 beq ctl_write_z80reset
\r
232 m_write16_not_z80ctl:
\r
234 eor r2, r0, #0xa10000
\r
235 eor r2, r2, #0x003000
\r
236 eors r2, r2, #0x0000f0
\r
237 bne m_write16_not_sreg
\r
239 ldrb r2, [r3, #OFS_Pico_m_sram_reg]
\r
240 and r1, r1, #(SRR_MAPPED|SRR_READONLY)
\r
241 bic r2, r2, #(SRR_MAPPED|SRR_READONLY)
\r
243 strb r2, [r3, #OFS_Pico_m_sram_reg]
\r
246 m_write16_not_sreg:
\r
249 tst r2, #POPT_EN_32X
\r
250 bne PicoWrite16_32x
\r
255 @ vim:filetype=armasm
\r