cd: integrate new gfx code
[picodrive.git] / pico / cd / memory_arm.s
CommitLineData
cff531af 1@*
2@* Memory I/O handlers for Sega/Mega CD emulation
3@* (C) notaz, 2007-2009
4@*
5@* This work is licensed under the terms of MAME license.
6@* See COPYING file in the top-level directory.
7@*
4ff2d527 8
9.equiv PCM_STEP_SHIFT, 11
4ff2d527 10
11.text
0ace9b9a 12.align 2
13
fa8fb754 14.global PicoRead8_mcd_io
15.global PicoRead16_mcd_io
16.global PicoWrite8_mcd_io
17.global PicoWrite16_mcd_io
0ace9b9a 18
19.global PicoReadS68k8_pr
20.global PicoReadS68k16_pr
21.global PicoWriteS68k8_pr
22.global PicoWriteS68k16_pr
23
24.global PicoReadM68k8_cell0
25.global PicoReadM68k8_cell1
26.global PicoReadM68k16_cell0
27.global PicoReadM68k16_cell1
28.global PicoWriteM68k8_cell0
29.global PicoWriteM68k8_cell1
30.global PicoWriteM68k16_cell0
31.global PicoWriteM68k16_cell1
32
33.global PicoReadS68k8_dec0
34.global PicoReadS68k8_dec1
35.global PicoReadS68k16_dec0
36.global PicoReadS68k16_dec1
37.global PicoWriteS68k8_dec_m0b0
38.global PicoWriteS68k8_dec_m1b0
39.global PicoWriteS68k8_dec_m2b0
40.global PicoWriteS68k8_dec_m0b1
41.global PicoWriteS68k8_dec_m1b1
42.global PicoWriteS68k8_dec_m2b1
43.global PicoWriteS68k16_dec_m0b0
44.global PicoWriteS68k16_dec_m1b0
45.global PicoWriteS68k16_dec_m2b0
46.global PicoWriteS68k16_dec_m0b1
47.global PicoWriteS68k16_dec_m1b1
48.global PicoWriteS68k16_dec_m2b1
4ff2d527 49
50@ externs, just for reference
51.extern Pico
4ff2d527 52.extern Read_CDC_Host
53.extern m68k_reg_write8
4ff2d527 54.extern s68k_reg_read16
4ff2d527 55.extern s68k_reg_write8
a93a80de 56.extern s68k_reg_write16
2433f409 57.extern s68k_poll_detect
33be04ca 58.extern pcd_pcm_write
59.extern pcd_pcm_read
0ace9b9a 60.extern PicoCpuCS68k
61.extern PicoRead8_io
62.extern PicoRead16_io
63.extern PicoWrite8_io
64.extern PicoWrite16_io
08769494 65.extern m68k_comm_check
4ff2d527 66
4ff2d527 67
68@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
69
70@ utilities
71
72@ r0=addr[in,out], r1,r2=tmp
73.macro cell_map
74 ands r1, r0, #0x01c000
75 ldrne pc, [pc, r1, lsr #12]
76 beq 0f @ most common?
77 .long 0f
78 .long 0f
79 .long 0f
80 .long 0f
81 .long 1f
82 .long 1f
83 .long 2f
84 .long 3f
851: @ x16 cells
86 and r1, r0, #0x7e00 @ col
87 and r2, r0, #0x01fc @ row
88 orr r2, r2, #0x0400
89 orr r1, r2, r1, ror #13
90 b 9f
912: @ x8 cells
92 and r1, r0, #0x3f00 @ col
93 and r2, r0, #0x00fc @ row
94 orr r2, r2, #0x0600
95 orr r1, r2, r1, ror #12
96 b 9f
973: @ x4 cells
98 and r1, r0, #0x1f80 @ col
99 and r2, r0, #0x007c @ row
100 orr r1, r2, r1, ror #11
101 and r2, r0,#0x1e000
102 orr r1, r1, r2, lsr #6
103 b 9f
1040: @ x32 cells
105 and r1, r0, #0xfc00 @ col
106 and r2, r0, #0x03fc @ row
107 orr r1, r2, r1, ror #14
1089:
109 and r0, r0, #3
110 orr r0, r0, r1, ror #26 @ rol 4+2
111.endm
112
113
4ff2d527 114@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
115
116
117m_read_null:
118 mov r0, #0
119 bx lr
120
121
0ace9b9a 122PicoReadM68k8_cell0: @ 0x220000 - 0x23ffff, cell arranged
123 mov r3, #0x0c0000
124 b 0f
4ff2d527 125
0ace9b9a 126PicoReadM68k8_cell1: @ 0x220000 - 0x23ffff, cell arranged
127 mov r3, #0x0e0000
1280:
4ff2d527 129 cell_map
130 ldr r1, =(Pico+0x22200)
0ace9b9a 131 add r0, r0, r3
4ff2d527 132 ldr r1, [r1]
133 eor r0, r0, #1
134 ldrb r0, [r1, r0]
135 bx lr
136
137
fa8fb754 138PicoRead8_mcd_io:
0ace9b9a 139 and r1, r0, #0xff00
140 cmp r1, #0x2000 @ a120xx?
141 bne PicoRead8_io
4ff2d527 142
143 ldr r1, =(Pico+0x22200)
144 and r0, r0, #0x3f
145 ldr r1, [r1] @ Pico.mcd (used everywhere)
146 cmp r0, #0x0e
147 ldrlt pc, [pc, r0, lsl #2]
148 b m_m68k_read8_hi
149 .long m_m68k_read8_r00
150 .long m_m68k_read8_r01
151 .long m_m68k_read8_r02
152 .long m_m68k_read8_r03
153 .long m_m68k_read8_r04
154 .long m_read_null @ unused bits
155 .long m_m68k_read8_r06
156 .long m_m68k_read8_r07
157 .long m_m68k_read8_r08
158 .long m_m68k_read8_r09
159 .long m_read_null @ reserved
160 .long m_read_null
161 .long m_m68k_read8_r0c
162 .long m_m68k_read8_r0d
163m_m68k_read8_r00:
164 add r1, r1, #0x110000
00bd648e 165 ldr r0, [r1, #0x30]
4ff2d527 166 and r0, r0, #0x04000000 @ we need irq2 mask state
167 mov r0, r0, lsr #19
168 bx lr
169m_m68k_read8_r01:
170 add r1, r1, #0x110000
171 add r1, r1, #0x002200
172 ldrb r0, [r1, #2] @ Pico_mcd->m.busreq
173 bx lr
174m_m68k_read8_r02:
175 add r1, r1, #0x110000
176 ldrb r0, [r1, #2]
177 bx lr
cc5ffc3c 178m_m68k_read8_r03:
179 add r1, r1, #0x110000
180 push {r1, lr}
181 bl m68k_comm_check
182 pop {r1, lr}
183 ldrb r0, [r1, #3]
184 and r0, r0, #0xc7
185 bx lr
4ff2d527 186m_m68k_read8_r04:
187 add r1, r1, #0x110000
188 ldrb r0, [r1, #4]
189 bx lr
190m_m68k_read8_r06:
191 ldrb r0, [r1, #0x73] @ IRQ vector
192 bx lr
193m_m68k_read8_r07:
194 ldrb r0, [r1, #0x72]
195 bx lr
196m_m68k_read8_r08:
197 mov r0, #0
198 bl Read_CDC_Host @ TODO: make it local
199 mov r0, r0, lsr #8
200 bx lr
201m_m68k_read8_r09:
202 mov r0, #0
203 b Read_CDC_Host
204m_m68k_read8_r0c:
205 add r1, r1, #0x110000
206 add r1, r1, #0x002200
207 ldr r0, [r1, #0x14] @ Pico_mcd->m.timer_stopwatch
208 mov r0, r0, lsr #24
209 bx lr
210m_m68k_read8_r0d:
211 add r1, r1, #0x110000
212 add r1, r1, #0x002200
213 ldr r0, [r1, #0x14]
214 mov r0, r0, lsr #16
215 bx lr
216m_m68k_read8_hi:
217 cmp r0, #0x30
4ff2d527 218 add r1, r1, #0x110000
cc5ffc3c 219 movge r0, #0
220 bxge lr
221 add r1, r0
222 push {r1, lr}
223 bl m68k_comm_check
224 pop {r1, lr}
225 ldrb r0, [r1]
226 bx lr
4ff2d527 227
4ff2d527 228
229@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
230
231
0ace9b9a 232PicoReadM68k16_cell0: @ 0x220000 - 0x23ffff, cell arranged
233 mov r3, #0x0c0000
234 b 0f
4ff2d527 235
0ace9b9a 236PicoReadM68k16_cell1: @ 0x220000 - 0x23ffff, cell arranged
237 mov r3, #0x0e0000
2380:
4ff2d527 239 cell_map
240 ldr r1, =(Pico+0x22200)
0ace9b9a 241 add r0, r0, r3
4ff2d527 242 ldr r1, [r1]
243 bic r0, r0, #1
244 ldrh r0, [r1, r0]
245 bx lr
246
247
fa8fb754 248PicoRead16_mcd_io:
0ace9b9a 249 and r1, r0, #0xff00
250 cmp r1, #0x2000 @ a120xx
251 bne PicoRead16_io
4ff2d527 252
253m_m68k_read16_m68k_regs:
254 ldr r1, =(Pico+0x22200)
255 and r0, r0, #0x3e
256 ldr r1, [r1] @ Pico.mcd (used everywhere)
257 cmp r0, #0x0e
258 ldrlt pc, [pc, r0, lsl #1]
259 b m_m68k_read16_hi
260 .long m_m68k_read16_r00
261 .long m_m68k_read16_r02
262 .long m_m68k_read16_r04
263 .long m_m68k_read16_r06
264 .long m_m68k_read16_r08
265 .long m_read_null @ reserved
266 .long m_m68k_read16_r0c
267m_m68k_read16_r00:
268 add r1, r1, #0x110000
7a1f6e45 269 ldr r0, [r1, #0x30]
4ff2d527 270 add r1, r1, #0x002200
271 ldrb r1, [r1, #2] @ Pico_mcd->m.busreq
272 and r0, r0, #0x04000000 @ we need irq2 mask state
273 orr r0, r1, r0, lsr #11
274 bx lr
cc5ffc3c 275m_m68k_read16_r02:
276 add r1, r1, #0x110000
277 push {r1, lr}
278 bl m68k_comm_check
279 pop {r1, lr}
280 ldrb r2, [r1, #3]
281 ldrb r0, [r1, #2]
c008977e 282 and r2, r2, #0xc7
cc5ffc3c 283 orr r0, r2, r0, lsl #8
284 bx lr
4ff2d527 285m_m68k_read16_r04:
286 add r1, r1, #0x110000
287 ldrb r0, [r1, #4]
288 mov r0, r0, lsl #8
289 bx lr
290m_m68k_read16_r06:
291 ldrh r0, [r1, #0x72] @ IRQ vector
292 bx lr
293m_m68k_read16_r08:
294 mov r0, #0
295 b Read_CDC_Host
296m_m68k_read16_r0c:
297 add r1, r1, #0x110000
298 add r1, r1, #0x002200
299 ldr r0, [r1, #0x14]
300 mov r0, r0, lsr #16
301 bx lr
302m_m68k_read16_hi:
303 cmp r0, #0x30
cc5ffc3c 304 add r1, r1, #0x110000
4ff2d527 305 movge r0, #0
306 bxge lr
cc5ffc3c 307
308 add r1, r0, r1
309 push {r1, lr}
310 bl m68k_comm_check
311 pop {r0, lr}
312 ldrh r0, [r0]
313 mov r1, r0, lsr #8
314 and r0, r0, #0xff
315 orr r0, r1, r0, lsl #8
316 bx lr
4ff2d527 317
318
0ace9b9a 319@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
4ff2d527 320
4ff2d527 321
0ace9b9a 322PicoWriteM68k8_cell0: @ 0x220000 - 0x23ffff, cell arranged
323 mov r12,#0x0c0000
324 b 0f
4ff2d527 325
0ace9b9a 326PicoWriteM68k8_cell1: @ 0x220000 - 0x23ffff, cell arranged
327 mov r12,#0x0e0000
3280:
329 mov r3, r1
330 cell_map
331 ldr r2, =(Pico+0x22200)
332 add r0, r0, r12
333 ldr r2, [r2]
334 eor r0, r0, #1
335 strb r3, [r2, r0]
4ff2d527 336 bx lr
337
338
fa8fb754 339PicoWrite8_mcd_io:
0ace9b9a 340 and r2, r0, #0xff00
341 cmp r2, #0x2000 @ a120xx?
342 beq m68k_reg_write8
343 b PicoWrite8_io
344
345
4ff2d527 346@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
347
348
0ace9b9a 349PicoWriteM68k16_cell0: @ 0x220000 - 0x23ffff, cell arranged
350 mov r12, #0x0c0000
351 b 0f
352
353PicoWriteM68k16_cell1: @ 0x220000 - 0x23ffff, cell arranged
354 mov r12, #0x0e0000
3550:
356 mov r3, r1
357 cell_map
4ff2d527 358 ldr r1, =(Pico+0x22200)
0ace9b9a 359 add r0, r0, r12
4ff2d527 360 ldr r1, [r1]
361 bic r0, r0, #1
0ace9b9a 362 strh r3, [r1, r0]
4ff2d527 363 bx lr
364
365
fa8fb754 366PicoWrite16_mcd_io:
0ace9b9a 367 and r2, r0, #0xff00
368 cmp r2, #0x2000 @ a120xx?
369 bne PicoWrite16_io
4ff2d527 370
0ace9b9a 371m_m68k_write16_regs:
372 and r0, r0, #0x3e
373 cmp r0, #0x0e
374 beq m_m68k_write16_regs_spec
375 and r3, r1, #0xff
376 add r2, r0, #1
377 stmfd sp!,{r2,r3,lr}
378 mov r1, r1, lsr #8
379 bl m68k_reg_write8
380 ldmfd sp!,{r0,r1,lr}
381 b m68k_reg_write8
4ff2d527 382
0ace9b9a 383m_m68k_write16_regs_spec: @ special case
0ace9b9a 384 mov r1, r1, lsr #8
08769494 385 b m68k_reg_write8
4ff2d527 386
387
0ace9b9a 388@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
389@ Sub 68k
390@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
4ff2d527 391
4ff2d527 392
0ace9b9a 393PicoReadS68k8_dec0: @ 0x080000 - 0x0bffff
394 mov r3, #0x080000 @ + ^ / 2
395 b 0f
4ff2d527 396
0ace9b9a 397PicoReadS68k8_dec1:
398 mov r3, #0x0a0000 @ + ^ / 2
3990:
5c69a605 400 ldr r2, =(Pico+0x22200)
401 eor r0, r0, #2
402 ldr r2, [r2]
403 movs r0, r0, lsr #1 @ +4-6 <<16
0ace9b9a 404 add r2, r2, r3 @ map to our address
5c69a605 405 ldrb r0, [r2, r0]
406 movcc r0, r0, lsr #4
407 andcs r0, r0, #0xf
408 bx lr
5c69a605 409
4ff2d527 410
0ace9b9a 411PicoReadS68k8_pr:
412 and r2, r0, #0xfe00
413 cmp r2, #0x8000
414 bne m_s68k_read8_pcm
4ff2d527 415
416m_s68k_read8_regs:
417 bic r0, r0, #0xff0000
418 bic r0, r0, #0x008000
2433f409 419 sub r2, r0, #0x0e
420 cmp r2, #(0x30-0x0e)
421 blo m_s68k_read8_comm
4ff2d527 422 stmfd sp!,{r0,lr}
423 bic r0, r0, #1
a93a80de 424 bl s68k_reg_read16
4ff2d527 425 ldmfd sp!,{r1,lr}
426 tst r1, #1
427 moveq r0, r0, lsr #8
428 and r0, r0, #0xff
429 bx lr
430
2433f409 431m_s68k_read8_comm:
432 ldr r1, =(Pico+0x22200)
433 ldr r1, [r1]
434 add r1, r1, #0x110000
435 ldrb r1, [r1, r0]
436 b s68k_poll_detect
437
4ff2d527 438
0ace9b9a 439m_s68k_read8_pcm:
440 tst r0, #0x8000
441 bne m_read_null
4ff2d527 442
0ace9b9a 443 @ must not trash r3 and r12
4ff2d527 444 ldr r1, =(Pico+0x22200)
0ace9b9a 445 bic r0, r0, #0xff0000
4ff2d527 446 ldr r1, [r1]
0ace9b9a 447 mov r2, #0x110000
448 orr r2, r2, #0x002200
449 cmp r0, #0x2000
450 bge m_s68k_read8_pcm_ram
451 cmp r0, #0x20
33be04ca 452 movge r0, r0, lsr #1
453 bge pcd_pcm_read
454 mov r0, #0
5c69a605 455 bx lr
4ff2d527 456
0ace9b9a 457m_s68k_read8_pcm_ram:
458 orr r2, r2, #0x40
459 ldr r2, [r1, r2]
460 add r1, r1, #0x100000 @ pcm_ram
461 and r2, r2, #0x0f000000 @ bank
462 add r1, r1, r2, lsr #12
463 bic r0, r0, #0x00e000
464 mov r0, r0, lsr #1
465 ldrb r0, [r1, r0]
466 bx lr
4ff2d527 467
468
469@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
470
471
0ace9b9a 472PicoReadS68k16_dec0: @ 0x080000 - 0x0bffff
473 mov r3, #0x080000 @ + ^ / 2
474 b 0f
5c69a605 475
0ace9b9a 476PicoReadS68k16_dec1:
477 mov r3, #0x0a0000 @ + ^ / 2
4780:
5c69a605 479 ldr r2, =(Pico+0x22200)
480 eor r0, r0, #2
481 ldr r2, [r2]
482 mov r0, r0, lsr #1 @ +4-6 <<16
0ace9b9a 483 add r2, r2, r3 @ map to our address
484 ldrb r0, [r2, r0]
5c69a605 485 orr r0, r0, r0, lsl #4
486 bic r0, r0, #0xf0
5c69a605 487 bx lr
4ff2d527 488
489
0ace9b9a 490PicoReadS68k16_pr:
491 and r2, r0, #0xfe00
492 cmp r2, #0x8000
493 @ pcm is on 8-bit bus, would this be same as byte access?
494 bne m_s68k_read8_pcm
4ff2d527 495
0ace9b9a 496m_s68k_read16_regs:
4ff2d527 497 bic r0, r0, #0xff0000
498 bic r0, r0, #0x008000
499 bic r0, r0, #0x000001
0ace9b9a 500 cmp r0, #8
501 bne s68k_reg_read16
502 mov r0, #1
503 b Read_CDC_Host
4ff2d527 504
4ff2d527 505
506@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
507
508
0ace9b9a 509.macro m_s68k_write8_2M_decode
48e8482f 510 ldr r2, =(Pico+0x22200)
511 eor r0, r0, #2
0ace9b9a 512 ldr r2, [r2] @ Pico.rom
48e8482f 513 movs r0, r0, lsr #1 @ +4-6 <<16
0ace9b9a 514 add r2, r2, r3 @ map to our address
48e8482f 515.endm
516
0ace9b9a 517PicoWriteS68k8_dec_m2b0: @ overwrite
518 ands r1, r1, #0x0f
519 bxeq lr
520
521PicoWriteS68k8_dec_m0b0:
522 mov r3, #0x080000
523 b 0f
524
525PicoWriteS68k8_dec_m2b1: @ overwrite
526 ands r1, r1, #0x0f
527 bxeq lr
528
529PicoWriteS68k8_dec_m0b1:
530 mov r3, #0x0a0000
5310:
532 m_s68k_write8_2M_decode
48e8482f 533 ldrb r0, [r2, r0]!
534 and r1, r1, #0x0f
535 movcc r1, r1, lsl #4
536 andcc r3, r0, #0x0f
537 andcs r3, r0, #0xf0
538 orr r3, r3, r1
48e8482f 539 strneb r3, [r2]
540 bx lr
48e8482f 541
0ace9b9a 542PicoWriteS68k8_dec_m1b0: @ underwrite
543 mov r3, #0x080000
544 b 0f
545
546PicoWriteS68k8_dec_m1b1:
547 mov r3, #0x0a0000
5480:
48e8482f 549 ands r1, r1, #0x0f
550 bxeq lr
0ace9b9a 551 m_s68k_write8_2M_decode
48e8482f 552 ldrb r0, [r2, r0]!
553 movcc r1, r1, lsl #4
554 andcc r3, r0, #0x0f
555 andcs r3, r0, #0xf0
0ace9b9a 556 teq r3, r0
557 bxne lr
48e8482f 558 orr r3, r3, r1
48e8482f 559 strneb r3, [r2]
560 bx lr
48e8482f 561
48e8482f 562
0ace9b9a 563PicoWriteS68k8_pr:
564 and r2, r0, #0xfe00
565 cmp r2, #0x8000
566 bne m_s68k_write8_pcm
48e8482f 567
0ace9b9a 568m_s68k_write8_regs:
4ff2d527 569 bic r0, r0, #0xff0000
0ace9b9a 570 bic r0, r0, #0x008000
571 tst r0, #0x7e00
572 movne r0, #0
573 bxne lr
a93a80de 574 sub r2, r0, #0x59
575 cmp r2, #0x0f
0ace9b9a 576 bhs s68k_reg_write8
577 bic r0, r0, #1
578 orr r1, r1, r1, lsl #8
a93a80de 579 b s68k_reg_write16
4ff2d527 580
581
582m_s68k_write8_pcm:
0ace9b9a 583 tst r0, #0x8000
584 bxne lr
4ff2d527 585 bic r0, r0, #0xff0000
586 cmp r0, #0x12
587 movlt r0, r0, lsr #1
33be04ca 588 blt pcd_pcm_write
4ff2d527 589
590 cmp r0, #0x2000
591 bxlt lr
592
593m_s68k_write8_pcm_ram:
594 ldr r3, =(Pico+0x22200)
595 bic r0, r0, #0x00e000
596 ldr r3, [r3]
597 mov r0, r0, lsr #1
598 add r2, r3, #0x110000
599 add r2, r2, #0x002200
600 add r2, r2, #0x000040
601 ldr r2, [r2]
602 add r3, r3, #0x100000 @ pcm_ram
603 and r2, r2, #0x0f000000 @ bank
604 add r3, r3, r2, lsr #12
605 strb r1, [r3, r0]
606 bx lr
607
608
4ff2d527 609@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
610
611
0ace9b9a 612.macro m_s68k_write16_2M_decode
48e8482f 613 ldr r2, =(Pico+0x22200)
614 eor r0, r0, #2
615 ldr r2, [r2]
616 mov r0, r0, lsr #1 @ +4-6 <<16
0ace9b9a 617 add r2, r2, r3 @ map to our address
48e8482f 618.endm
619
0ace9b9a 620PicoWriteS68k16_dec_m0b0:
621 mov r3, #0x080000
622 b 0f
623
624PicoWriteS68k16_dec_m0b1:
625 mov r3, #0x0a0000
6260:
627 m_s68k_write16_2M_decode
48e8482f 628 bic r1, r1, #0xf0
629 orr r1, r1, r1, lsr #4
630 strb r1, [r2, r0]
631 bx lr
48e8482f 632
0ace9b9a 633PicoWriteS68k16_dec_m1b0: @ underwrite
634 mov r3, #0x080000
635 b 0f
636
637PicoWriteS68k16_dec_m1b1:
638 mov r3, #0x0a0000
6390:
48e8482f 640 bics r1, r1, #0xf000
641 bicnes r1, r1, #0x00f0
642 bxeq lr
643 orr r1, r1, r1, lsr #4
0ace9b9a 644 m_s68k_write16_2M_decode
48e8482f 645 ldrb r0, [r2, r0]!
646 and r3, r1, #0x0f
647 and r1, r1, #0xf0
648 tst r0, #0x0f
649 orreq r0, r0, r3
650 tst r0, #0xf0
651 orreq r0, r0, r1
652 strb r0, [r2]
653 bx lr
48e8482f 654
0ace9b9a 655PicoWriteS68k16_dec_m2b0: @ overwrite
656 mov r3, #0x080000
657 b 0f
658
659PicoWriteS68k16_dec_m2b1:
660 mov r3, #0x0a0000
6610:
48e8482f 662 bics r1, r1, #0xf000
663 bicnes r1, r1, #0x00f0
664 bxeq lr
665 orr r1, r1, r1, lsr #4
0ace9b9a 666 m_s68k_write16_2M_decode
48e8482f 667 ldrb r0, [r2, r0]!
668 ands r3, r1, #0x0f
669 andne r0, r0, #0xf0
670 orrne r0, r0, r3
671 ands r1, r1, #0xf0
672 andne r0, r0, #0x0f
673 orrne r0, r0, r1
674 strb r0, [r2]
675 bx lr
48e8482f 676
4ff2d527 677
0ace9b9a 678PicoWriteS68k16_pr:
679 and r2, r0, #0xfe00
680 cmp r2, #0x8000
681 bne m_s68k_write8_pcm
4ff2d527 682
683m_s68k_write16_regs:
684 bic r0, r0, #0xff0000
685 bic r0, r0, #0x008000
5c69a605 686 bic r0, r0, #1
4ff2d527 687 tst r0, #0x7e00
688 movne r0, #0
689 bxne lr
5c69a605 690 cmp r0, #0x0e
a93a80de 691 bne s68k_reg_write16
4ff2d527 692
5c69a605 693m_s68k_write16_regs_spec: @ special case
694 ldr r2, =(Pico+0x22200)
695 mov r0, #0x110000
696 ldr r2, [r2]
697 add r0, r0, #0x00000f
698 strb r1, [r2, r0] @ if (a == 0xe) s68k_regs[0xf] = d;
48e8482f 699 bx lr
4ff2d527 700
0ace9b9a 701.pool
6cadc2da 702
cff531af 703@ vim:filetype=armasm