|
@@ -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
|