3 .equ M68K_MEM_SHIFT, 16
5 .global cyclone_checkpc
7 .global cyclone_fetch16
8 .global cyclone_fetch32
10 .global cyclone_read16
11 .global cyclone_read32
12 .global cyclone_write8
13 .global cyclone_write16
14 .global cyclone_write32
16 @ Warning: here we abuse the fact that we are only called
17 @ from Cyclone, and assume that r7 contains context pointer.
19 ldr r1, [r7, #0x60] @ membase
21 bic r0, r0, #0xff000000
25 ldr r1, [r7, #0x6c] @ read16 map
26 mov r2, r0, lsr #M68K_MEM_SHIFT
27 ldr r1, [r1, r2, lsl #2]
31 str r1, [r7, #0x60] @ membase
39 ldr r0, [r7, #0x40] @ reload PC + membase
43 cyclone_read8: @ u32 a
45 bic r0, r0, #0xff000000
46 ldr r1, [r7, #0x68] @ read8 map
47 mov r2, r0, lsr #M68K_MEM_SHIFT
48 ldr r1, [r1, r2, lsl #2]
56 cyclone_read16: @ u32 a
58 bic r0, r0, #0xff000000
59 ldr r1, [r7, #0x6c] @ read16 map
60 mov r2, r0, lsr #M68K_MEM_SHIFT
61 ldr r1, [r1, r2, lsl #2]
69 cyclone_read32: @ u32 a
71 bic r0, r0, #0xff000000
72 ldr r1, [r7, #0x6c] @ read16 map
73 mov r2, r0, lsr #M68K_MEM_SHIFT
74 ldr r1, [r1, r2, lsl #2]
79 orrcc r0, r1, r0, lsl #16
93 orr r0, r1, r0, lsr #16
97 cyclone_write8: @ u32 a, u8 d
98 bic r0, r0, #0xff000000
99 ldr r2, [r7, #0x74] @ write8 map
100 mov r3, r0, lsr #M68K_MEM_SHIFT
101 ldr r2, [r2, r3, lsl #2]
109 cyclone_write16: @ u32 a, u16 d
110 bic r0, r0, #0xff000000
111 ldr r2, [r7, #0x78] @ write16 map
112 mov r3, r0, lsr #M68K_MEM_SHIFT
113 ldr r2, [r2, r3, lsl #2]
121 cyclone_write32: @ u32 a, u32 d
122 bic r0, r0, #0xff000000
123 ldr r2, [r7, #0x78] @ write16 map
124 mov r3, r0, lsr #M68K_MEM_SHIFT
125 ldr r2, [r2, r3, lsl #2]
128 movcc r3, r1, lsr #16