X-Git-Url: https://notaz.gp2x.de/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=pico%2Fcd%2Fmemory_arm.s;h=db5b8a23157e0b4d7ac53f17d319da8c9e4d663c;hb=8e4e84c2150047dcbe3799083cdfa2a7d5cf9d7b;hp=2fc74ca0fd00a152011a5d24a417efd4c956e46f;hpb=08769494e89920b5987f10c9d15e33e4e0110930;p=picodrive.git diff --git a/pico/cd/memory_arm.s b/pico/cd/memory_arm.s index 2fc74ca..db5b8a2 100644 --- a/pico/cd/memory_arm.s +++ b/pico/cd/memory_arm.s @@ -11,10 +11,10 @@ .text .align 2 -.global PicoReadM68k8_io -.global PicoReadM68k16_io -.global PicoWriteM68k8_io -.global PicoWriteM68k16_io +.global PicoRead8_mcd_io +.global PicoRead16_mcd_io +.global PicoWrite8_mcd_io +.global PicoWrite16_mcd_io .global PicoReadS68k8_pr .global PicoReadS68k16_pr @@ -56,6 +56,8 @@ .extern s68k_poll_detect .extern gfx_cd_read .extern gfx_cd_write16 +.extern pcd_pcm_write +.extern pcd_pcm_read .extern PicoCpuCS68k .extern PicoRead8_io .extern PicoRead16_io @@ -134,7 +136,7 @@ PicoReadM68k8_cell1: @ 0x220000 - 0x23ffff, cell arranged bx lr -PicoReadM68k8_io: +PicoRead8_mcd_io: and r1, r0, #0xff00 cmp r1, #0x2000 @ a120xx? bne PicoRead8_io @@ -174,16 +176,14 @@ m_m68k_read8_r02: add r1, r1, #0x110000 ldrb r0, [r1, #2] bx lr -m_m68k_read8_r03: @ FIXME: sync with C - add r2, r1, #0x110000 - ldrb r1, [r2, #3] - add r2, r2, #0x002200 - ldr r2, [r2, #4] - and r1, r1, #0xc7 - tst r2, #2 @ DMNA pending? - bicne r1, r1, #1 - orrne r1, r1, #2 - b m68k_comm_check +m_m68k_read8_r03: + add r1, r1, #0x110000 + push {r1, lr} + bl m68k_comm_check + pop {r1, lr} + ldrb r0, [r1, #3] + and r0, r0, #0xc7 + bx lr m_m68k_read8_r04: add r1, r1, #0x110000 ldrb r0, [r1, #4] @@ -216,11 +216,15 @@ m_m68k_read8_r0d: bx lr m_m68k_read8_hi: cmp r0, #0x30 - movge r0, #0 - bxeq lr add r1, r1, #0x110000 - ldrb r1, [r1, r0] - b m68k_comm_check + movge r0, #0 + bxge lr + add r1, r0 + push {r1, lr} + bl m68k_comm_check + pop {r1, lr} + ldrb r0, [r1] + bx lr @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ -242,7 +246,7 @@ PicoReadM68k16_cell1: @ 0x220000 - 0x23ffff, cell arranged bx lr -PicoReadM68k16_io: +PicoRead16_mcd_io: and r1, r0, #0xff00 cmp r1, #0x2000 @ a120xx bne PicoRead16_io @@ -269,18 +273,16 @@ m_m68k_read16_r00: and r0, r0, #0x04000000 @ we need irq2 mask state orr r0, r1, r0, lsr #11 bx lr -m_m68k_read16_r02: @ FIXME: out of sync from C - add r3, r1, #0x110000 - ldrb r1, [r3, #2] - ldrb r2, [r3, #3] - add r3, r3, #0x002200 - ldr r3, [r3, #4] +m_m68k_read16_r02: + add r1, r1, #0x110000 + push {r1, lr} + bl m68k_comm_check + pop {r1, lr} + ldrb r2, [r1, #3] + ldrb r0, [r1, #2] and r2, r2, #0xc7 - orr r1, r2, r1, lsl #8 - tst r3, #2 @ DMNA pending? - bicne r1, r1, #1 - orrne r1, r1, #2 - b m68k_comm_check + orr r0, r2, r0, lsl #8 + bx lr m_m68k_read16_r04: add r1, r1, #0x110000 ldrb r0, [r1, #4] @@ -300,14 +302,19 @@ m_m68k_read16_r0c: bx lr m_m68k_read16_hi: cmp r0, #0x30 - addlt r1, r1, #0x110000 - ldrlth r1, [r1, r0] + add r1, r1, #0x110000 movge r0, #0 bxge lr - mov r2, r1, lsr #8 - and r1, r1, #0xff - orr r1, r2, r1, lsl #8 - b m68k_comm_check + + add r1, r0, r1 + push {r1, lr} + bl m68k_comm_check + pop {r0, lr} + ldrh r0, [r0] + mov r1, r0, lsr #8 + and r0, r0, #0xff + orr r0, r1, r0, lsl #8 + bx lr @ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @@ -330,7 +337,7 @@ PicoWriteM68k8_cell1: @ 0x220000 - 0x23ffff, cell arranged bx lr -PicoWriteM68k8_io: +PicoWrite8_mcd_io: and r2, r0, #0xff00 cmp r2, #0x2000 @ a120xx? beq m68k_reg_write8 @@ -357,7 +364,7 @@ PicoWriteM68k16_cell1: @ 0x220000 - 0x23ffff, cell arranged bx lr -PicoWriteM68k16_io: +PicoWrite16_mcd_io: and r2, r0, #0xff00 cmp r2, #0x2000 @ a120xx? bne PicoWrite16_io @@ -442,23 +449,15 @@ m_s68k_read8_pcm: @ must not trash r3 and r12 ldr r1, =(Pico+0x22200) bic r0, r0, #0xff0000 -@ bic r0, r0, #0x008000 ldr r1, [r1] mov r2, #0x110000 orr r2, r2, #0x002200 cmp r0, #0x2000 bge m_s68k_read8_pcm_ram cmp r0, #0x20 - movlt r0, #0 - bxlt lr - orr r2, r2, #(0x48+8) @ pcm.ch + addr_offset - add r1, r1, r2 - and r2, r0, #0x1c - ldr r1, [r1, r2, lsl #2] - tst r0, #2 - moveq r0, r1, lsr #PCM_STEP_SHIFT - movne r0, r1, lsr #(PCM_STEP_SHIFT+8) - and r0, r0, #0xff + movge r0, r0, lsr #1 + bge pcd_pcm_read + mov r0, #0 bx lr m_s68k_read8_pcm_ram: @@ -595,7 +594,7 @@ m_s68k_write8_pcm: bic r0, r0, #0xff0000 cmp r0, #0x12 movlt r0, r0, lsr #1 - blt pcm_write + blt pcd_pcm_write cmp r0, #0x2000 bxlt lr