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 .equ SRR_MAPPED, (1 << 0)
\r
10 .equ SRR_READONLY, (1 << 1)
\r
11 .equ SRF_EEPROM, (1 << 1)
\r
12 .equ POPT_EN_32X, (1 << 20)
\r
17 .global PicoRead8_sram
\r
18 .global PicoRead8_io
\r
19 .global PicoRead16_sram
\r
20 .global PicoRead16_io
\r
21 .global PicoWrite8_io
\r
22 .global PicoWrite16_io
\r
24 PicoRead8_sram: @ u32 a, u32 d
\r
26 ldr r3, =(Pico+0x22200)
\r
27 ldr r1, [r2, #8] @ SRam.end
\r
30 ldr r1, [r2, #4] @ SRam.start
\r
33 ldrb r1, [r3, #0x11] @ Pico.m.sram_reg
\r
39 ldr r1, [r2, #4] @ SRam.start
\r
40 ldr r2, [r2] @ SRam.data
\r
47 ldr r1, [r3, #4] @ romsize
\r
50 bxgt lr @ bad location
\r
51 @ XXX: banking unfriendly
\r
62 moveq r0, r0, lsr #8
\r
66 PicoRead8_io: @ u32 a, u32 d
\r
67 bic r2, r0, #0x001f @ most commonly we get i/o port read,
\r
68 cmp r2, #0xa10000 @ so check for it first
\r
76 ldr r3, =(Pico+0x22200)
\r
78 ldr r0, [r3, #8] @ Pico.m.rotate
\r
81 eor r0, r0, r0, lsl #6
\r
84 bxne lr @ odd addr -> open bus
\r
85 bic r0, r0, #1 @ bit0 defined in this area
\r
88 bxne lr @ not busreq
\r
90 ldrb r1, [r3, #(8+0x01)] @ Pico.m.z80Run
\r
91 ldrb r2, [r3, #(8+0x0f)] @ Pico.m.z80_reset
\r
99 tst r2, #POPT_EN_32X
\r
104 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
106 PicoRead16_sram: @ u32 a, u32 d
\r
108 ldr r3, =(Pico+0x22200)
\r
109 ldr r1, [r2, #8] @ SRam.end
\r
111 bgt m_read16_nosram
\r
112 ldr r1, [r2, #4] @ SRam.start
\r
114 blt m_read16_nosram
\r
115 ldrb r1, [r3, #0x11] @ Pico.m.sram_reg
\r
116 tst r1, #SRR_MAPPED
\r
117 beq m_read16_nosram
\r
118 ldr r1, [r2, #0x0c]
\r
119 tst r1, #SRF_EEPROM
\r
121 ldr r1, [r2, #4] @ SRam.start
\r
122 ldr r2, [r2] @ SRam.data
\r
127 orr r0, r0, r1, lsl #8
\r
131 ldr r1, [r3, #4] @ romsize
\r
134 bxgt lr @ bad location
\r
135 @ XXX: banking unfriendly
\r
141 PicoRead16_io: @ u32 a, u32 d
\r
142 bic r2, r0, #0x001f @ most commonly we get i/o port read,
\r
143 cmp r2, #0xa10000 @ so check for it first
\r
144 bne m_read16_not_io
\r
146 bl io_ports_read @ same as read8
\r
147 orr r0, r0, r0, lsl #8 @ only has bytes mirrored
\r
151 and r2, r0, #0xfc00
\r
153 bne m_read16_not_brq
\r
155 ldr r3, =(Pico+0x22200)
\r
156 and r2, r0, #0xff00
\r
157 ldr r0, [r3, #8] @ Pico.m.rotate
\r
160 eor r0, r0, r0, lsl #5
\r
161 eor r0, r0, r0, lsl #8
\r
162 bic r0, r0, #0x100 @ bit8 defined in this area
\r
164 bxne lr @ not busreq
\r
166 ldrb r1, [r3, #(8+0x01)] @ Pico.m.z80Run
\r
167 ldrb r2, [r3, #(8+0x0f)] @ Pico.m.z80_reset
\r
168 orr r0, r0, r1, lsl #8
\r
169 orr r0, r0, r2, lsl #8
\r
175 tst r2, #POPT_EN_32X
\r
180 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
182 PicoWrite8_io: @ u32 a, u32 d
\r
183 bic r2, r0, #0x1e @ most commonly we get i/o port write,
\r
184 eor r2, r2, #0xa10000 @ so check for it first
\r
190 bne m_write8_not_z80ctl @ even addrs only
\r
191 and r2, r0, #0xff00
\r
194 beq ctl_write_z80busreq
\r
197 beq ctl_write_z80reset
\r
199 m_write8_not_z80ctl:
\r
201 eor r2, r0, #0xa10000
\r
202 eor r2, r2, #0x003000
\r
203 eors r2, r2, #0x0000f1
\r
204 bne m_write8_not_sreg
\r
205 ldr r3, =(Pico+0x22200)
\r
206 ldrb r2, [r3, #(8+9)] @ Pico.m.sram_reg
\r
207 and r1, r1, #(SRR_MAPPED|SRR_READONLY)
\r
208 bic r2, r2, #(SRR_MAPPED|SRR_READONLY)
\r
210 strb r2, [r3, #(8+9)]
\r
216 tst r2, #POPT_EN_32X
\r
220 @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
\r
222 PicoWrite16_io: @ u32 a, u32 d
\r
223 bic r2, r0, #0x1f @ most commonly we get i/o port write,
\r
224 cmp r2, #0xa10000 @ so check for it first
\r
228 and r2, r0, #0xff00
\r
230 moveq r0, r1, lsr #8
\r
231 beq ctl_write_z80busreq
\r
233 moveq r0, r1, lsr #8
\r
234 beq ctl_write_z80reset
\r
236 m_write16_not_z80ctl:
\r
238 eor r2, r0, #0xa10000
\r
239 eor r2, r2, #0x003000
\r
240 eors r2, r2, #0x0000f0
\r
241 bne m_write16_not_sreg
\r
242 ldr r3, =(Pico+0x22200)
\r
243 ldrb r2, [r3, #(8+9)] @ Pico.m.sram_reg
\r
244 and r1, r1, #(SRR_MAPPED|SRR_READONLY)
\r
245 bic r2, r2, #(SRR_MAPPED|SRR_READONLY)
\r
247 strb r2, [r3, #(8+9)]
\r
250 m_write16_not_sreg:
\r
253 tst r2, #POPT_EN_32X
\r
254 bne PicoWrite16_32x
\r
259 @ vim:filetype=armasm
\r