Closed dankcushions closed 8 years ago
I guess what this means is that for Raspberry Pi 3, we will just need to omit the ARM 32-bit optimized interpreter cores and switch to the interpreter C-based cores instead for Z80 and 68K.
Hopefully Raspberry Pi 3 is significantly faster than the previous two that the reduction in performance won't be much of an issue.
raspbian runs in 32bit mode anyway, so I am just building this core for arm7 target currently (swp{b} is emulated in kernel). not sure the overhead of that vs the C emulation core.
This was raised against the wrong core - it's a mame2000 issue - whoops!
And it's been fixed in mame2000 here https://github.com/libretro/mame2000-libretro/commit/0674dcd8d21735f86e73f342b2159c54316c62eb
Closing!
This might work...
diff --git a/src/cpu/z80_drz80/drz80.s b/src/cpu/z80_drz80/drz80.s
index 9d41f0d..3c687fe 100644
--- a/src/cpu/z80_drz80/drz80.s
+++ b/src/cpu/z80_drz80/drz80.s
@@ -4082,9 +4082,13 @@ opcode_0_7:
;@EX AF,AF'
opcode_0_8:
add r1,cpucontext,#z80a2
- swp z80a,z80a,[r1]
+ ldr r0,[r1]^M
+ str z80a,[r1]^M
+ mov z80a,r0^M
add r1,cpucontext,#z80f2
- swp z80f,z80f,[r1]
+ ldr r0,[r1]^M
+ str z80f,[r1]^M
+ mov z80f,r0^M
fetch 4
;@ADD HL,BC
opcode_0_9:
@@ -5138,11 +5142,17 @@ opcode_D_8:
;@EXX
opcode_D_9:
add r1,cpucontext,#z80bc2
- swp z80bc,z80bc,[r1]
+ ldr r0,[r1]^M
+ str z80bc,[r1]^M
+ mov z80bc,r0 ^M
add r1,cpucontext,#z80de2
- swp z80de,z80de,[r1]
+ ldr r0,[r1]^M
+ str z80de,[r1]^M
+ mov z80de,r0 ^M
add r1,cpucontext,#z80hl2
- swp z80hl,z80hl,[r1]
+ ldr r0,[r1]^M
+ str z80hl,[r1]^M
+ mov z80hl,r0 ^M
fetch 4
;@JP C,$+3
opcode_D_A:
` @
This is with a Raspberry Pi 3 (ARM Cortex-A53 / ARM v8). SWP{B} is forbidden for ARMv8 (there is a warning for ARMv7). See http://infocenter.arm.com/help/index.jsp?topic=/com.arm.doc.dui0489g/Chdbbbai.html
You can work-around this by setting the CFLAGS to -march=armv7-a - see https://github.com/RetroPie/RetroPie-Setup/commit/0fcb5554d62b6eeb79b4b5a9d734e48ce243bd5d
I realise that the chances are no-one is going to want to tweak ASM code in an ancient mame core, but raising the issue anyway in case anyone needs the work-around :)