14 Difficult to Emulate Games
Connor McLaughlin edited this page 2024-08-11 22:35:12 +10:00

This is a list of games with.. interesting issues, which may be difficult to emulate depending on your level of accuracy. The symptoms range from hangs/crashes to minor graphical issues.

Some of these are from my memory a year ago, so there might be some minor errors, but most if it should be correct.

TODO: Sort into categories or something... the list ended up being much longer than I expected.


Castrol Honda Superbike Racing

Shadow Master

  • Relies on the CLUT being cached for title screens, the VRAM that the primitives point to gets overwritten.

Monkey Hero

  • DMA transfer timing or FMVs lock up
  • Commands spanning multiple blocks

Hot Wheels Turbo Racing

  • DMA timing or hangs on startup/ingame
  • Infinite DMA linked list/chains

Syphon Filter (series)

Tekken 2

  • Infinite DMA linked list/chains

Spot Goes To Hollywood

  • Requires GPU draw timing for the menus, presumably it alters the DMA chain after starting it
  • First draws copy the background, which take a while, so plenty of time for that to happen

Valkyrie Profile

  • Requires DMA timing otherwise battles time out/lock up
  • Loop address from ADPCM blocks must be ignored with the register value taking precedence

Red Asphalt

Dukes of Hazzard, The - Racing for Home

Little Princess - Marl Oukoku no Ningyou-hime 2

  • Hangs in various locations if DMA timing is off
  • Locks up if DMA timing is off/CPU does not run

Suikoden (version 1.0, not 1.1)

  • Two releases, the old version corrupts palettes if you don't emulate fetch timing from the BIOS ROM
  • It executes a bunch of memmoves (running from uncached ROM), which can't complete too quickly, racing the DMA
  • Interestingly, version 1.1 spams printf during the same screen transition with a bunch of a's and a number suffix

Deadheat Road

  • Kicks off a DMA chain involving a VRAM fill, which takes a while to complete,
  • then does a memcpy out of uncached ROM
  • then zeroes out some of the headers in the DMA chain before it finishes
  • Will hang emulators (if they don't properly handle infinite LLs) or the game will time out and skip a bunch of texture uploads in the loading scren

Colin McRae Rally 2.0

TOCA 2 - Touring Car Challenge

  • Has self-modifying code which changes the operands of geometry manipulating functions every frame.
  • Will cause slowdown on dynarecs which do not efficiently handle this.
  • If you're emulating icache incorrectly, it'll also result in stale code executing, since the game does not flush cache, instead it relies on the old code being evicted implicitly.

Alice in Cyberland

  • HUD/UI will flicker during battles if draw and DMA timing is instant

Battle Arena Toshinden

  • Runs too fast if CPU/GPU timing is off

Bust A Groove Series

  • Audio will drift slowly over time with game if GPU frame rate is incorrect

Championship Motocross 2001 featuring Ricky Carmichael

  • Sensitive to DMA timing - rider will be missing from bike if incorrect

Evil Dead - Hail to the King (USA)

  • Needs timer0 clocked from dot clock emulated

NASCAR 2001

  • Main menu music will drop in and out if SPU interrupts are not re-triggered after enabling

Casper

  • Puts SPU IRQs in addresses being read by released/off voices

Skullmonkeys

  • Requires GPU coordinate truncation/sign-extension otherwise objects will be missing

Formula One 99

  • Requires CPU icache emulation

Formula 1

  • Spams invalid MDEC commands, need to be ignored/parameters skipped

Spyro 2 PAL

Spyro 3 PAL

  • Libcrypt protection is really nasty - the cop0 instructions to grab are xor-obfuscated, and written immediately before execution
  • Naive icache implementations will break - you need to handle partial line fetches from non-16-byte-aligned addresses

Final Fantasy VIII

  • Uses an undocumented method for swapping the dualshock motors, intensity will be zero if not emulated correctly
  • Has some scenes which rely on coordinate truncation/sign extension per-scanline

Final Fantasy IX

  • Seems to use VRAM as a swap area during transitions
  • VRAM writes and readbacks must be bit-accurate, otherwise at best you get broken animations, at worst crashes
  • Requires code execution in-between DMA mode 1 blocks transfer on the intro movie.

Parasite Eve 2

Disney's Treasure Planet

  • Sensitive to MDEC timing

Pro Pinball Series, True Pinball

  • Requires interlaced rendering (line skipping) otherwise hangs on startup

Dead or Alive

Mr Driller G

  • Requires interlaced rendering, otherwise artifacts on screen in various locations

Vampire Hunter D

  • Screws with GPU packets after enabling DMA, requires CPU to run in parallel otherwise menu will be black

Victory Spike

Magical Drop III - Yokubari Tokudai-gou!

Yuukyuu no Eden - The Eternal Eden

World Cup Golf - Professional Edition

  • Expects other DMA channels to run while an infinite linked list chain is running


Team Buddies

The Next Tetris

  • Sensitive to ODE bit (31) in GPU status register

Wizard's Hamony

  • Does logical seeks to data sectors, this needs to succeed, but reads of audio sectors should fail for other games

Nickelodeon Rugrats - Search for Reptar

  • XA audio in intro has more data than can be played by the SPU, buffers need to be correctly cleared on overflow

Jackie Chan Stuntmaster

MTV Sports Games

  • Triggers interrupts by setting cop0 bits in software, can be tricky for recompilers

Zen Nihon Joshi Pro Wrestling - Joou Densetsu - Yume no Taikousen

  • lwr in branch delay slot, and lwl in load delay slot, can be tricky for recompilers

Remote Control Dandy

  • Requires VRAM transfers to be masked to 9 bits

Shadow Master

Threads of Fate

  • Branches in branch delay slots, fun times for recompilers

Tales of Phantasia

  • Battle transitions will finish too quickly if GPU draw timings are not emulated

Zoku Mikagura Shoujo Tanteidan - Kanketsuhen

  • Uses timer gated by hblank but sysclk as clock source, essentially counting ticks outside of hblank
  • Will hang at startup if not emulated correctly

WipEout

  • Repeatedly seek commands while seek is in progress, position needs to be updated when the next request comes in

Chicken Run

  • Requires deferring setting the reading/playing bit in the CD-ROM until the first sector is read

Arc the Lad III

  • Requires error interrupt on shell open for disc change detection

Voice Idol Collection - Pool Bar Story

  • Music in transitions will slow down due to timeouts in the CD-ROM code when commands are cancelled
  • I use a heuristic of "cancel only when the new command has fewer parameters than the old command, otherwise clear FIFO and send error"

Dancing Stage featuring DREAMS COME TRUE

  • Supplementary disc detection will fail if pregaps are incorrect, or errors are not sent on ReadN

Bedlem

Rise 2

  • Sensitive to sector buffering/overwrite behavior when missing CD-ROM reads

Gameshark Sampler Disc

  • Requires one cycle delay from CD-ROM interrupts

Kingsley's Adventure

  • Creates new CLUTs by modulating existing CLUT with vertex colour and direct texturing.
  • Will break hardware renderers that don't track CLUTs that have been drawn, instead of written.

Idol Promotion - Suzuki Yumie (Yumie Island)

  • Starts a CD seek+read while the start confirmation sound is playing on the title screen, and overwrites the voice memory as soon as the CD read comes in.
  • Requires the ~40 minute sled seek to be about 550ms or longer.

Transformers - Beast Wars Transmetals

  • Very sensitive to CD seek timing for short (<10 LBA) seeks.

Ogre Battle - Limited Edition

  • Spams GetlocL during intro music playback.
  • Race conditions in the CD interrupt handler, it clears the INT3/ACK before reading out the results.
  • INT1 after INT3 has to be delayed, otherwise it'll end up with the INT1's results when it's expecting the INT3.

Silent Hill

Ghost In The Shell

TwinBee RPG

Duke Nukem - Land of the Babes

Ultraman - Fighting Evolution

  • Various graphical errors if mask bit is not emulated correctly

Megatudo 2096

NBA Jam Extreme

Zero Divide

  • Requires semi-accurate CPU timings (icache/fetch) and GPU draw timings, otherwise games run too fast

Moto Racer

Frogger

Pandemonium!

Adidas Power Soccer 98

Armored Core

Auto Destruct

  • Sensitive to DMA timing (and CPU/DMA slices), otherwise controller input is dropped