arm asm memory access functions for m/s68k

This commit is contained in:
kub 2019-03-20 19:08:46 +01:00
parent e0396782f3
commit 78d817c370
4 changed files with 205 additions and 9 deletions

View file

@ -178,9 +178,9 @@ m_m68k_read8_r02:
bx lr
m_m68k_read8_r03:
add r1, r1, #0x110000
push {r1, lr}
stmfd sp!, {r1, lr}
bl m68k_comm_check
pop {r1, lr}
ldmfd sp!, {r1, lr}
ldrb r0, [r1, #3]
and r0, r0, #0xc7
bx lr
@ -219,10 +219,10 @@ m_m68k_read8_hi:
add r1, r1, #0x110000
movge r0, #0
bxge lr
add r1, r0
push {r1, lr}
add r1, r1, r0
stmfd sp!, {r1, lr}
bl m68k_comm_check
pop {r1, lr}
ldmfd sp!, {r1, lr}
ldrb r0, [r1]
bx lr
@ -275,9 +275,9 @@ m_m68k_read16_r00:
bx lr
m_m68k_read16_r02:
add r1, r1, #0x110000
push {r1, lr}
stmfd sp!, {r1, lr}
bl m68k_comm_check
pop {r1, lr}
ldmfd sp!, {r1, lr}
ldrb r2, [r1, #3]
ldrb r0, [r1, #2]
and r2, r2, #0xc7
@ -307,9 +307,9 @@ m_m68k_read16_hi:
bxge lr
add r1, r0, r1
push {r1, lr}
stmfd sp!, {r1, lr}
bl m68k_comm_check
pop {r0, lr}
ldmfd sp!, {r0, lr}
ldrh r0, [r0]
mov r1, r0, lsr #8
and r0, r0, #0xff
@ -701,6 +701,101 @@ m_s68k_write16_regs_spec: @ special case
strb r1, [r2, r0] @ if (a == 0xe) s68k_regs[0xf] = d;
bx lr
.global s68k_read8
.global s68k_read16
.global s68k_write8
.global s68k_write16
s68k_read8:
ldr r3, =s68k_read8_map
bic r0, r0, #0xff000000
mov r2, r0, lsr #16
ldr r3, [r3, r2, lsl #2]
eor r2, r0, #1
movs r3, r3, lsl #1
ldrccb r0, [r3, r2]
bxcc lr
bx r3
s68k_read16:
ldr r3, =s68k_read16_map
bic r0, r0, #0xff000000
mov r2, r0, lsr #16
ldr r3, [r3, r2, lsl #2]
bic r0, r0, #1
movs r3, r3, lsl #1
ldrcch r0, [r3, r0]
bxcc lr
bx r3
s68k_read32:
ldr r3, =s68k_read16_map
bic r0, r0, #0xff000000
mov r2, r0, lsr #16
ldr r3, [r3, r2, lsl #2]
bic r0, r0, #1
movs r3, r3, lsl #1
ldrcch r1, [r3, r0]!
ldrcch r0, [r3, #2]
orrcc r0, r0, r1, lsl #16
bxcc lr
stmfd sp!, {r0, r3, r4, lr}
mov lr, pc
bx r3
ldmfd sp!, {r1, r3}
str r0, [sp]
add r0, r1, #2
mov lr, pc
bx r3
ldmfd sp!, {r1, lr}
mov r0, r0, lsl #16
mov r1, r1, lsl #16
orr r0, r1, r0, lsr #16
bx lr
s68k_write8:
ldr r3, =s68k_write8_map
bic r0, r0, #0xff000000
mov r2, r0, lsr #16
ldr r3, [r3, r2, lsl #2]
eor r2, r0, #1
movs r3, r3, lsl #1
strccb r1, [r3, r2]
bxcc lr
bx r3
s68k_write16:
ldr r3, =s68k_write16_map
bic r0, r0, #0xff000000
mov r2, r0, lsr #16
ldr r3, [r3, r2, lsl #2]
bic r0, r0, #1
movs r3, r3, lsl #1
strcch r1, [r3, r0]
bxcc lr
bx r3
s68k_write32:
ldr r3, =s68k_write16_map
bic r0, r0, #0xff000000
mov r2, r0, lsr #16
ldr r3, [r3, r2, lsl #2]
bic r0, r0, #1
movs r3, r3, lsl #1
movcc r2, r1, lsr #16
strcch r2, [r3, r0]!
strcch r1, [r3, #2]
bxcc lr
stmfd sp!, {r0, r1, r3, lr}
mov r1, r1, lsr #16
mov lr, pc
bx r3
ldmfd sp!, {r0, r1, r3, lr}
add r0, r0, #2
bx r3
.pool
@ vim:filetype=armasm