notaz / picodrive

Fast MegaDrive/MegaCD/32X emulator
Other
297 stars 170 forks source link

Compatibility issues with EU codemasters titles #123

Open jandal55 opened 3 years ago

jandal55 commented 3 years ago

Noted issues starting Micro Machines TT 96, and Micro Machines Military. Upon ROM loading, controller is mapped successfully but games hang on black screen.

Appears in core versions 1.9667cdfb8 and 1.97-e368e58. Tried a rebuild back to 1.91, but same result. However 1.97-e368e58 runs the ROM on SHIELDTV w/Retroarch 1.91 Noted on Raspberry Pi Zero W and 3DS - same ROMs load under lr-genesis-gx (obvs performance is compromised)

/dev/shm.runcommand.log shows:

[INFO] [MIDI]: Initializing ... [INFO] [MIDI]: Input disabled. [INFO] [MIDI]: Output disabled. [INFO] [MIDI]: Initialized "alsa" driver. [INFO] Loading history file: [/opt/retropie/configs/megadrive/content_history.lpl]. [INFO] Loading history file: [/opt/retropie/configs/megadrive/content_music_history.lpl]. [INFO] Loading history file: [/opt/retropie/configs/megadrive/content_video_history.lpl]. [INFO] Loading history file: [/opt/retropie/configs/megadrive/content_image_history.lpl]. [INFO] Loading favorites file: [/opt/retropie/configs/megadrive/content_favorites.lpl]. [INFO] [GL]: VSync => on

[INFO] Written to playlist file: /opt/retropie/configs/megadrive/content_history.lpl [INFO] [Environ]: UNSUPPORTED (#63). [INFO] SET_GEOMETRY: 320x224, aspect: 1.429. [libretro INFO] 00001:006: m68k crash detected @ 100000 [libretro INFO] 00001:006: m68k crash detected @ 100000 [libretro INFO] 00001:006: m68k crash detected @ 100000

with the last line looping

Have attempted: change region manually and/or dictate refresh rate. Disabling various graphics-related option (Vsync, threading etc) Disabled controller 3, 4, 5 (in case this was a JCart issue). Other J-Cart and EuroJCart ROMs by codemasters work normally, just these 2 that fail identically.

irixxxx commented 3 years ago

@notaz FYI: this is caused by the initial PC set to 0 in the vector table. Since the value at address 0 is an illegal instruction it "crashes" into the game via the illegal instruction vector :-D. Removing the "beq crashed" line in pico/m68kif_cyclone.s fixes this.

notaz commented 3 years ago

Funny for them to do that. Perhaps they wanted to ensure null function pointer dereference would reset the game instead of softlocking it.