pandora: fix readme and pxml version
[picodrive.git] / pico / m68kif_cyclone.s
CommitLineData
cff531af 1/*
2 * PicoDrive
3 * (C) notaz, 2009
4 *
5 * This work is licensed under the terms of MAME license.
6 * See COPYING file in the top-level directory.
7 */
5e89f0f5 8
9.equ M68K_MEM_SHIFT, 16
10
11.global cyclone_checkpc
12.global cyclone_fetch8
13.global cyclone_fetch16
14.global cyclone_fetch32
15.global cyclone_read8
16.global cyclone_read16
17.global cyclone_read32
18.global cyclone_write8
19.global cyclone_write16
20.global cyclone_write32
21
22@ Warning: here we abuse the fact that we are only called
23@ from Cyclone, and assume that r7 contains context pointer.
24cyclone_checkpc:
25 ldr r1, [r7, #0x60] @ membase
26 sub r0, r0, r1
12da51c2 27 and r3, r0, #0xff000000
28 bic r0, r0, #1
29 bics r2, r0, #0xff000000
ef4f41a8 30 @ ouf, some Codemasters titles actually start at address 0
31 @ beq crashed
5e89f0f5 32
33 ldr r1, [r7, #0x6c] @ read16 map
12da51c2 34 mov r2, r2, lsr #M68K_MEM_SHIFT
5e89f0f5 35 ldr r1, [r1, r2, lsl #2]
5e89f0f5 36
ec191db8 37 movs r1, r1, lsl #1
38 subcc r1, r1, r3
39 strcc r1, [r7, #0x60] @ membase
40 addcc r0, r0, r1
41 bxcc lr
5e89f0f5 42
43crashed:
44 stmfd sp!,{lr}
45 mov r1, r7
46 bl cyclone_crashed
5e89f0f5 47 ldmfd sp!,{pc}
48
49
50cyclone_read8: @ u32 a
51cyclone_fetch8:
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]
56 eor r2, r0, #1
57 movs r1, r1, lsl #1
58 ldrccb r0, [r1, r2]
59 bxcc lr
60 bx r1
61
62
63cyclone_read16: @ u32 a
64cyclone_fetch16:
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]
69 bic r0, r0, #1
70 movs r1, r1, lsl #1
71 ldrcch r0, [r1, r0]
72 bxcc lr
73 bx r1
74
75
76cyclone_read32: @ u32 a
77cyclone_fetch32:
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]
82 bic r0, r0, #1
83 movs r1, r1, lsl #1
6375e627 84 ldrcch r2, [r1, r0]!
5e89f0f5 85 ldrcch r1, [r1, #2]
6375e627 86 orrcc r0, r1, r2, lsl #16
5e89f0f5 87 bxcc lr
88
32feba74 89 stmfd sp!,{r0,r1,r2,lr}
5e89f0f5 90 mov lr, pc
91 bx r1
92 mov r2, r0, lsl #16
32feba74 93 ldmfd sp!, {r0,r1}
5e89f0f5 94 str r2, [sp]
95 add r0, r0, #2
96 mov lr, pc
97 bx r1
32feba74 98 ldmfd sp!, {r1,lr}
5e89f0f5 99 mov r0, r0, lsl #16
100 orr r0, r1, r0, lsr #16
32feba74 101 bx lr
5e89f0f5 102
103
104cyclone_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]
109 eor r3, r0, #1
110 movs r2, r2, lsl #1
111 strccb r1, [r2, r3]
112 bxcc lr
113 bx r2
114
115
116cyclone_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]
121 bic r0, r0, #1
122 movs r2, r2, lsl #1
123 strcch r1, [r2, r0]
124 bxcc lr
125 bx r2
126
127
128cyclone_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]
133 bic r0, r0, #1
134 movs r2, r2, lsl #1
135 movcc r3, r1, lsr #16
136 strcch r3, [r2, r0]!
137 strcch r1, [r2, #2]
138 bxcc lr
139
140 stmfd sp!,{r0-r2,lr}
141 mov r1, r1, lsr #16
142 mov lr, pc
143 bx r2
144 ldmfd sp!,{r0-r2,lr}
145 add r0, r0, #2
146 bx r2
147
cff531af 148@ vim:filetype=armasm