drop legacy save support
[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
3f23709e 52.extern cdc_host_r
4ff2d527 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
3f23709e 198 bl cdc_host_r
4ff2d527 199 mov r0, r0, lsr #8
200 bx lr
201m_m68k_read8_r09:
202 mov r0, #0
3f23709e 203 b cdc_host_r
4ff2d527 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
3f23709e 295 b cdc_host_r
4ff2d527 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]
334d9fb6 436 bic r0, r0, #1
2433f409 437 b s68k_poll_detect
438
4ff2d527 439
0ace9b9a 440m_s68k_read8_pcm:
441 tst r0, #0x8000
442 bne m_read_null
4ff2d527 443
0ace9b9a 444 @ must not trash r3 and r12
4ff2d527 445 ldr r1, =(Pico+0x22200)
0ace9b9a 446 bic r0, r0, #0xff0000
4ff2d527 447 ldr r1, [r1]
0ace9b9a 448 mov r2, #0x110000
449 orr r2, r2, #0x002200
450 cmp r0, #0x2000
451 bge m_s68k_read8_pcm_ram
452 cmp r0, #0x20
33be04ca 453 movge r0, r0, lsr #1
454 bge pcd_pcm_read
455 mov r0, #0
5c69a605 456 bx lr
4ff2d527 457
0ace9b9a 458m_s68k_read8_pcm_ram:
459 orr r2, r2, #0x40
460 ldr r2, [r1, r2]
461 add r1, r1, #0x100000 @ pcm_ram
462 and r2, r2, #0x0f000000 @ bank
463 add r1, r1, r2, lsr #12
464 bic r0, r0, #0x00e000
465 mov r0, r0, lsr #1
466 ldrb r0, [r1, r0]
467 bx lr
4ff2d527 468
469
470@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
471
472
0ace9b9a 473PicoReadS68k16_dec0: @ 0x080000 - 0x0bffff
474 mov r3, #0x080000 @ + ^ / 2
475 b 0f
5c69a605 476
0ace9b9a 477PicoReadS68k16_dec1:
478 mov r3, #0x0a0000 @ + ^ / 2
4790:
5c69a605 480 ldr r2, =(Pico+0x22200)
481 eor r0, r0, #2
482 ldr r2, [r2]
483 mov r0, r0, lsr #1 @ +4-6 <<16
0ace9b9a 484 add r2, r2, r3 @ map to our address
485 ldrb r0, [r2, r0]
5c69a605 486 orr r0, r0, r0, lsl #4
487 bic r0, r0, #0xf0
5c69a605 488 bx lr
4ff2d527 489
490
0ace9b9a 491PicoReadS68k16_pr:
492 and r2, r0, #0xfe00
493 cmp r2, #0x8000
494 @ pcm is on 8-bit bus, would this be same as byte access?
495 bne m_s68k_read8_pcm
4ff2d527 496
0ace9b9a 497m_s68k_read16_regs:
4ff2d527 498 bic r0, r0, #0xff0000
499 bic r0, r0, #0x008000
500 bic r0, r0, #0x000001
0ace9b9a 501 cmp r0, #8
502 bne s68k_reg_read16
503 mov r0, #1
3f23709e 504 b cdc_host_r
4ff2d527 505
4ff2d527 506
507@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
508
509
0ace9b9a 510.macro m_s68k_write8_2M_decode
48e8482f 511 ldr r2, =(Pico+0x22200)
512 eor r0, r0, #2
0ace9b9a 513 ldr r2, [r2] @ Pico.rom
48e8482f 514 movs r0, r0, lsr #1 @ +4-6 <<16
0ace9b9a 515 add r2, r2, r3 @ map to our address
48e8482f 516.endm
517
0ace9b9a 518PicoWriteS68k8_dec_m2b0: @ overwrite
519 ands r1, r1, #0x0f
520 bxeq lr
521
522PicoWriteS68k8_dec_m0b0:
523 mov r3, #0x080000
524 b 0f
525
526PicoWriteS68k8_dec_m2b1: @ overwrite
527 ands r1, r1, #0x0f
528 bxeq lr
529
530PicoWriteS68k8_dec_m0b1:
531 mov r3, #0x0a0000
5320:
533 m_s68k_write8_2M_decode
48e8482f 534 ldrb r0, [r2, r0]!
535 and r1, r1, #0x0f
536 movcc r1, r1, lsl #4
537 andcc r3, r0, #0x0f
538 andcs r3, r0, #0xf0
539 orr r3, r3, r1
48e8482f 540 strneb r3, [r2]
541 bx lr
48e8482f 542
0ace9b9a 543PicoWriteS68k8_dec_m1b0: @ underwrite
544 mov r3, #0x080000
545 b 0f
546
547PicoWriteS68k8_dec_m1b1:
548 mov r3, #0x0a0000
5490:
48e8482f 550 ands r1, r1, #0x0f
551 bxeq lr
0ace9b9a 552 m_s68k_write8_2M_decode
48e8482f 553 ldrb r0, [r2, r0]!
554 movcc r1, r1, lsl #4
555 andcc r3, r0, #0x0f
556 andcs r3, r0, #0xf0
0ace9b9a 557 teq r3, r0
558 bxne lr
48e8482f 559 orr r3, r3, r1
48e8482f 560 strneb r3, [r2]
561 bx lr
48e8482f 562
48e8482f 563
0ace9b9a 564PicoWriteS68k8_pr:
565 and r2, r0, #0xfe00
566 cmp r2, #0x8000
567 bne m_s68k_write8_pcm
48e8482f 568
0ace9b9a 569m_s68k_write8_regs:
4ff2d527 570 bic r0, r0, #0xff0000
0ace9b9a 571 bic r0, r0, #0x008000
572 tst r0, #0x7e00
573 movne r0, #0
574 bxne lr
a93a80de 575 sub r2, r0, #0x59
576 cmp r2, #0x0f
0ace9b9a 577 bhs s68k_reg_write8
578 bic r0, r0, #1
579 orr r1, r1, r1, lsl #8
a93a80de 580 b s68k_reg_write16
4ff2d527 581
582
583m_s68k_write8_pcm:
0ace9b9a 584 tst r0, #0x8000
585 bxne lr
4ff2d527 586 bic r0, r0, #0xff0000
587 cmp r0, #0x12
588 movlt r0, r0, lsr #1
33be04ca 589 blt pcd_pcm_write
4ff2d527 590
591 cmp r0, #0x2000
592 bxlt lr
593
594m_s68k_write8_pcm_ram:
595 ldr r3, =(Pico+0x22200)
596 bic r0, r0, #0x00e000
597 ldr r3, [r3]
598 mov r0, r0, lsr #1
599 add r2, r3, #0x110000
600 add r2, r2, #0x002200
601 add r2, r2, #0x000040
602 ldr r2, [r2]
603 add r3, r3, #0x100000 @ pcm_ram
604 and r2, r2, #0x0f000000 @ bank
605 add r3, r3, r2, lsr #12
606 strb r1, [r3, r0]
607 bx lr
608
609
4ff2d527 610@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
611
612
0ace9b9a 613.macro m_s68k_write16_2M_decode
48e8482f 614 ldr r2, =(Pico+0x22200)
615 eor r0, r0, #2
616 ldr r2, [r2]
617 mov r0, r0, lsr #1 @ +4-6 <<16
0ace9b9a 618 add r2, r2, r3 @ map to our address
48e8482f 619.endm
620
0ace9b9a 621PicoWriteS68k16_dec_m0b0:
622 mov r3, #0x080000
623 b 0f
624
625PicoWriteS68k16_dec_m0b1:
626 mov r3, #0x0a0000
6270:
628 m_s68k_write16_2M_decode
48e8482f 629 bic r1, r1, #0xf0
630 orr r1, r1, r1, lsr #4
631 strb r1, [r2, r0]
632 bx lr
48e8482f 633
0ace9b9a 634PicoWriteS68k16_dec_m1b0: @ underwrite
635 mov r3, #0x080000
636 b 0f
637
638PicoWriteS68k16_dec_m1b1:
639 mov r3, #0x0a0000
6400:
48e8482f 641 bics r1, r1, #0xf000
642 bicnes r1, r1, #0x00f0
643 bxeq lr
644 orr r1, r1, r1, lsr #4
0ace9b9a 645 m_s68k_write16_2M_decode
48e8482f 646 ldrb r0, [r2, r0]!
647 and r3, r1, #0x0f
648 and r1, r1, #0xf0
649 tst r0, #0x0f
650 orreq r0, r0, r3
651 tst r0, #0xf0
652 orreq r0, r0, r1
653 strb r0, [r2]
654 bx lr
48e8482f 655
0ace9b9a 656PicoWriteS68k16_dec_m2b0: @ overwrite
657 mov r3, #0x080000
658 b 0f
659
660PicoWriteS68k16_dec_m2b1:
661 mov r3, #0x0a0000
6620:
48e8482f 663 bics r1, r1, #0xf000
664 bicnes r1, r1, #0x00f0
665 bxeq lr
666 orr r1, r1, r1, lsr #4
0ace9b9a 667 m_s68k_write16_2M_decode
48e8482f 668 ldrb r0, [r2, r0]!
669 ands r3, r1, #0x0f
670 andne r0, r0, #0xf0
671 orrne r0, r0, r3
672 ands r1, r1, #0xf0
673 andne r0, r0, #0x0f
674 orrne r0, r0, r1
675 strb r0, [r2]
676 bx lr
48e8482f 677
4ff2d527 678
0ace9b9a 679PicoWriteS68k16_pr:
680 and r2, r0, #0xfe00
681 cmp r2, #0x8000
682 bne m_s68k_write8_pcm
4ff2d527 683
684m_s68k_write16_regs:
685 bic r0, r0, #0xff0000
686 bic r0, r0, #0x008000
5c69a605 687 bic r0, r0, #1
4ff2d527 688 tst r0, #0x7e00
689 movne r0, #0
690 bxne lr
5c69a605 691 cmp r0, #0x0e
a93a80de 692 bne s68k_reg_write16
4ff2d527 693
5c69a605 694m_s68k_write16_regs_spec: @ special case
695 ldr r2, =(Pico+0x22200)
696 mov r0, #0x110000
697 ldr r2, [r2]
698 add r0, r0, #0x00000f
699 strb r1, [r2, r0] @ if (a == 0xe) s68k_regs[0xf] = d;
48e8482f 700 bx lr
4ff2d527 701
0ace9b9a 702.pool
6cadc2da 703
cff531af 704@ vim:filetype=armasm