notaz.gp2x.de
/
picodrive.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
cd: fix missed null terminator
[picodrive.git]
/
pico
/
cd
/
memory_arm.s
diff --git
a/pico/cd/memory_arm.s
b/pico/cd/memory_arm.s
index
74315e4
..
f3a1372
100644
(file)
--- a/
pico/cd/memory_arm.s
+++ b/
pico/cd/memory_arm.s
@@
-1,18
+1,20
@@
-@ vim:filetype=armasm
-
-@ Memory I/O handlers for Sega/Mega CD emulation
-@ (c) Copyright 2007-2009, Grazvydas "notaz" Ignotas
-
+@*
+@* Memory I/O handlers for Sega/Mega CD emulation
+@* (C) notaz, 2007-2009
+@*
+@* This work is licensed under the terms of MAME license.
+@* See COPYING file in the top-level directory.
+@*
.equiv PCM_STEP_SHIFT, 11
.text
.align 2
.equiv PCM_STEP_SHIFT, 11
.text
.align 2
-.global PicoRead
M68k8
_io
-.global PicoRead
M68k16
_io
-.global PicoWrite
M68k8
_io
-.global PicoWrite
M68k16
_io
+.global PicoRead
8_mcd
_io
+.global PicoRead
16_mcd
_io
+.global PicoWrite
8_mcd
_io
+.global PicoWrite
16_mcd
_io
.global PicoReadS68k8_pr
.global PicoReadS68k16_pr
.global PicoReadS68k8_pr
.global PicoReadS68k16_pr
@@
-47,19
+49,20
@@
@ externs, just for reference
.extern Pico
@ externs, just for reference
.extern Pico
-.extern
Read_CDC_Host
+.extern
cdc_host_r
.extern m68k_reg_write8
.extern s68k_reg_read16
.extern s68k_reg_write8
.extern m68k_reg_write8
.extern s68k_reg_read16
.extern s68k_reg_write8
-.extern s68k_
poll_adclk
+.extern s68k_
reg_write16
.extern s68k_poll_detect
.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
.extern PicoWrite8_io
.extern PicoWrite16_io
.extern PicoCpuCS68k
.extern PicoRead8_io
.extern PicoRead16_io
.extern PicoWrite8_io
.extern PicoWrite16_io
+.extern m68k_comm_check
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@
-132,7
+135,7
@@
PicoReadM68k8_cell1: @ 0x220000 - 0x23ffff, cell arranged
bx lr
bx lr
-PicoRead
M68k8
_io:
+PicoRead
8_mcd
_io:
and r1, r0, #0xff00
cmp r1, #0x2000 @ a120xx?
bne PicoRead8_io
and r1, r0, #0xff00
cmp r1, #0x2000 @ a120xx?
bne PicoRead8_io
@@
-174,14
+177,11
@@
m_m68k_read8_r02:
bx lr
m_m68k_read8_r03:
add r1, r1, #0x110000
bx lr
m_m68k_read8_r03:
add r1, r1, #0x110000
+ push {r1, lr}
+ bl m68k_comm_check
+ pop {r1, lr}
ldrb r0, [r1, #3]
ldrb r0, [r1, #3]
- add r1, r1, #0x002200
- ldr r1, [r1, #4]
and r0, r0, #0xc7
and r0, r0, #0xc7
- tst r1, #2 @ DMNA pending?
- bxeq lr
- bic r0, r0, #1
- orr r0, r0, #2
bx lr
m_m68k_read8_r04:
add r1, r1, #0x110000
bx lr
m_m68k_read8_r04:
add r1, r1, #0x110000
@@
-195,12
+195,12
@@
m_m68k_read8_r07:
bx lr
m_m68k_read8_r08:
mov r0, #0
bx lr
m_m68k_read8_r08:
mov r0, #0
- bl
Read_CDC_Host @ TODO: make it local
+ bl
cdc_host_r
mov r0, r0, lsr #8
bx lr
m_m68k_read8_r09:
mov r0, #0
mov r0, r0, lsr #8
bx lr
m_m68k_read8_r09:
mov r0, #0
- b
Read_CDC_Host
+ b
cdc_host_r
m_m68k_read8_r0c:
add r1, r1, #0x110000
add r1, r1, #0x002200
m_m68k_read8_r0c:
add r1, r1, #0x110000
add r1, r1, #0x002200
@@
-215,10
+215,14
@@
m_m68k_read8_r0d:
bx lr
m_m68k_read8_hi:
cmp r0, #0x30
bx lr
m_m68k_read8_hi:
cmp r0, #0x30
- movge r0, #0
- bxeq lr
add r1, r1, #0x110000
add r1, r1, #0x110000
- ldrb r0, [r1, r0]
+ movge r0, #0
+ bxge lr
+ add r1, r0
+ push {r1, lr}
+ bl m68k_comm_check
+ pop {r1, lr}
+ ldrb r0, [r1]
bx lr
bx lr
@@
-241,7
+245,7
@@
PicoReadM68k16_cell1: @ 0x220000 - 0x23ffff, cell arranged
bx lr
bx lr
-PicoRead
M68k16
_io:
+PicoRead
16_mcd
_io:
and r1, r0, #0xff00
cmp r1, #0x2000 @ a120xx
bne PicoRead16_io
and r1, r0, #0xff00
cmp r1, #0x2000 @ a120xx
bne PicoRead16_io
@@
-270,16
+274,13
@@
m_m68k_read16_r00:
bx lr
m_m68k_read16_r02:
add r1, r1, #0x110000
bx lr
m_m68k_read16_r02:
add r1, r1, #0x110000
- ldrb r0, [r1, #2]
+ push {r1, lr}
+ bl m68k_comm_check
+ pop {r1, lr}
ldrb r2, [r1, #3]
ldrb r2, [r1, #3]
- add r1, r1, #0x002200
- ldr r1, [r1, #4]
+ ldrb r0, [r1, #2]
and r2, r2, #0xc7
orr r0, r2, r0, lsl #8
and r2, r2, #0xc7
orr r0, r2, r0, lsl #8
- tst r1, #2 @ DMNA pending?
- bxeq lr
- bic r0, r0, #1
- orr r0, r0, #2
bx lr
m_m68k_read16_r04:
add r1, r1, #0x110000
bx lr
m_m68k_read16_r04:
add r1, r1, #0x110000
@@
-291,7
+292,7
@@
m_m68k_read16_r06:
bx lr
m_m68k_read16_r08:
mov r0, #0
bx lr
m_m68k_read16_r08:
mov r0, #0
- b
Read_CDC_Host
+ b
cdc_host_r
m_m68k_read16_r0c:
add r1, r1, #0x110000
add r1, r1, #0x002200
m_m68k_read16_r0c:
add r1, r1, #0x110000
add r1, r1, #0x002200
@@
-300,13
+301,18
@@
m_m68k_read16_r0c:
bx lr
m_m68k_read16_hi:
cmp r0, #0x30
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
movge r0, #0
bxge lr
- mov r0, r1, lsr #8
- and r1, r1, #0xff
- orr r0, r0, r1, lsl #8
+
+ 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
bx lr
@@
-330,7
+336,7
@@
PicoWriteM68k8_cell1: @ 0x220000 - 0x23ffff, cell arranged
bx lr
bx lr
-PicoWrite
M68k8
_io:
+PicoWrite
8_mcd
_io:
and r2, r0, #0xff00
cmp r2, #0x2000 @ a120xx?
beq m68k_reg_write8
and r2, r0, #0xff00
cmp r2, #0x2000 @ a120xx?
beq m68k_reg_write8
@@
-357,7
+363,7
@@
PicoWriteM68k16_cell1: @ 0x220000 - 0x23ffff, cell arranged
bx lr
bx lr
-PicoWrite
M68k16
_io:
+PicoWrite
16_mcd
_io:
and r2, r0, #0xff00
cmp r2, #0x2000 @ a120xx?
bne PicoWrite16_io
and r2, r0, #0xff00
cmp r2, #0x2000 @ a120xx?
bne PicoWrite16_io
@@
-375,22
+381,8
@@
m_m68k_write16_regs:
b m68k_reg_write8
m_m68k_write16_regs_spec: @ special case
b m68k_reg_write8
m_m68k_write16_regs_spec: @ special case
- ldr r2, =(Pico+0x22200)
- ldr r3, =s68k_poll_adclk
- mov r0, #0x110000
- ldr r2, [r2]
- add r0, r0, #0x00000e
mov r1, r1, lsr #8
mov r1, r1, lsr #8
- strb r1, [r2, r0] @ if (a == 0xe) s68k_regs[0x0e] = d >> 8;
- ldr r2, [r3]
- mov r1, #0
- and r2, r2, #0xfe
- cmp r2, #0x0e
- bxne lr
- ldr r0, =PicoCpuCS68k
- str r1, [r0, #0x58] @ push s68k out of stopped state
- str r1, [r3]
- bx lr
+ b m68k_reg_write8
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@
-427,14
+419,9
@@
m_s68k_read8_regs:
sub r2, r0, #0x0e
cmp r2, #(0x30-0x0e)
blo m_s68k_read8_comm
sub r2, r0, #0x0e
cmp r2, #(0x30-0x0e)
blo m_s68k_read8_comm
- sub r2, r0, #0x58
- cmp r2, #0x10
- ldrlo r2, =gfx_cd_read
- ldrhs r2, =s68k_reg_read16
stmfd sp!,{r0,lr}
bic r0, r0, #1
stmfd sp!,{r0,lr}
bic r0, r0, #1
- mov lr, pc
- bx r2
+ bl s68k_reg_read16
ldmfd sp!,{r1,lr}
tst r1, #1
moveq r0, r0, lsr #8
ldmfd sp!,{r1,lr}
tst r1, #1
moveq r0, r0, lsr #8
@@
-446,6
+433,7
@@
m_s68k_read8_comm:
ldr r1, [r1]
add r1, r1, #0x110000
ldrb r1, [r1, r0]
ldr r1, [r1]
add r1, r1, #0x110000
ldrb r1, [r1, r0]
+ bic r0, r0, #1
b s68k_poll_detect
b s68k_poll_detect
@@
-456,23
+444,15
@@
m_s68k_read8_pcm:
@ must not trash r3 and r12
ldr r1, =(Pico+0x22200)
bic r0, r0, #0xff0000
@ 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
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:
bx lr
m_s68k_read8_pcm_ram:
@@
-518,13
+498,10
@@
m_s68k_read16_regs:
bic r0, r0, #0xff0000
bic r0, r0, #0x008000
bic r0, r0, #0x000001
bic r0, r0, #0xff0000
bic r0, r0, #0x008000
bic r0, r0, #0x000001
- sub r2, r0, #0x58
- cmp r2, #0x10
- blo gfx_cd_read
cmp r0, #8
bne s68k_reg_read16
mov r0, #1
cmp r0, #8
bne s68k_reg_read16
mov r0, #1
- b
Read_CDC_Host
+ b
cdc_host_r
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@@
-595,12
+572,12
@@
m_s68k_write8_regs:
tst r0, #0x7e00
movne r0, #0
bxne lr
tst r0, #0x7e00
movne r0, #0
bxne lr
- sub r2, r0, #0x5
8
- cmp r2, #0x
10
+ sub r2, r0, #0x5
9
+ cmp r2, #0x
0f
bhs s68k_reg_write8
bic r0, r0, #1
orr r1, r1, r1, lsl #8
bhs s68k_reg_write8
bic r0, r0, #1
orr r1, r1, r1, lsl #8
- b
gfx_cd
_write16
+ b
s68k_reg
_write16
m_s68k_write8_pcm:
m_s68k_write8_pcm:
@@
-609,7
+586,7
@@
m_s68k_write8_pcm:
bic r0, r0, #0xff0000
cmp r0, #0x12
movlt r0, r0, lsr #1
bic r0, r0, #0xff0000
cmp r0, #0x12
movlt r0, r0, lsr #1
- blt pcm_write
+ blt pc
d_pc
m_write
cmp r0, #0x2000
bxlt lr
cmp r0, #0x2000
bxlt lr
@@
-712,17
+689,7
@@
m_s68k_write16_regs:
movne r0, #0
bxne lr
cmp r0, #0x0e
movne r0, #0
bxne lr
cmp r0, #0x0e
- beq m_s68k_write16_regs_spec
- sub r2, r0, #0x58
- cmp r2, #0x10
- blo gfx_cd_write16
- and r3, r1, #0xff
- add r2, r0, #1
- stmfd sp!,{r2,r3,lr}
- mov r1, r1, lsr #8
- bl s68k_reg_write8
- ldmfd sp!,{r0,r1,lr}
- b s68k_reg_write8
+ bne s68k_reg_write16
m_s68k_write16_regs_spec: @ special case
ldr r2, =(Pico+0x22200)
m_s68k_write16_regs_spec: @ special case
ldr r2, =(Pico+0x22200)
@@
-734,3
+701,4
@@
m_s68k_write16_regs_spec: @ special case
.pool
.pool
+@ vim:filetype=armasm