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