5 * This work is licensed under the terms of MAME license.
6 * See COPYING file in the top-level directory.
9 .equ M68K_MEM_SHIFT, 16
11 .global cyclone_checkpc
12 .global cyclone_fetch8
13 .global cyclone_fetch16
14 .global cyclone_fetch32
16 .global cyclone_read16
17 .global cyclone_read32
18 .global cyclone_write8
19 .global cyclone_write16
20 .global cyclone_write32
22 @ Warning: here we abuse the fact that we are only called
23 @ from Cyclone, and assume that r7 contains context pointer.
25 ldr r1, [r7, #0x60] @ membase
27 and r3, r0, #0xff000000
29 bics r2, r0, #0xff000000
30 @ ouf, some Codemasters titles actually start at address 0
33 ldr r1, [r7, #0x6c] @ read16 map
34 mov r2, r2, lsr #M68K_MEM_SHIFT
35 ldr r1, [r1, r2, lsl #2]
39 strcc r1, [r7, #0x60] @ membase
50 cyclone_read8: @ u32 a
52 bic r0, r0, #0xff000000
53 ldr r1, [r7, #0x68] @ read8 map
54 mov r2, r0, lsr #M68K_MEM_SHIFT
55 ldr r1, [r1, r2, lsl #2]
63 cyclone_read16: @ u32 a
65 bic r0, r0, #0xff000000
66 ldr r1, [r7, #0x6c] @ read16 map
67 mov r2, r0, lsr #M68K_MEM_SHIFT
68 ldr r1, [r1, r2, lsl #2]
76 cyclone_read32: @ u32 a
78 bic r0, r0, #0xff000000
79 ldr r1, [r7, #0x6c] @ read16 map
80 mov r2, r0, lsr #M68K_MEM_SHIFT
81 ldr r1, [r1, r2, lsl #2]
86 orrcc r0, r1, r2, lsl #16
89 stmfd sp!,{r0,r1,r2,lr}
100 orr r0, r1, r0, lsr #16
104 cyclone_write8: @ u32 a, u8 d
105 bic r0, r0, #0xff000000
106 ldr r2, [r7, #0x74] @ write8 map
107 mov r3, r0, lsr #M68K_MEM_SHIFT
108 ldr r2, [r2, r3, lsl #2]
116 cyclone_write16: @ u32 a, u16 d
117 bic r0, r0, #0xff000000
118 ldr r2, [r7, #0x78] @ write16 map
119 mov r3, r0, lsr #M68K_MEM_SHIFT
120 ldr r2, [r2, r3, lsl #2]
128 cyclone_write32: @ u32 a, u32 d
129 bic r0, r0, #0xff000000
130 ldr r2, [r7, #0x78] @ write16 map
131 mov r3, r0, lsr #M68K_MEM_SHIFT
132 ldr r2, [r2, r3, lsl #2]
135 movcc r3, r1, lsr #16
148 @ vim:filetype=armasm