Trickiest games to emulate?
Moderator: BigEvilCorporation
-
- Very interested
- Posts: 628
- Joined: Thu Nov 30, 2006 6:30 am
Trickiest games to emulate?
I was wondering if anyone had thoughts on what Genesis games are trickiest to emulate properly. Looking through past threads, I gather that the moose level in Mickey Mania is one trouble spot as it depends on some sprites not getting drawn as a result of during off the display during HBLANK. What are some other tricky games?
-
- Very interested
- Posts: 3131
- Joined: Thu Nov 30, 2006 9:46 pm
- Location: France - Sevres
- Contact:
Re: Trickiest games to emulate?
Curiously Mickey Mania works perfectly on Gens even if that trick is not emulated. I guess it work because sprites which are not visible are masked with sprite masking feature (and not only the sprite limitation due to the h blank cut off).Mask of Destiny wrote:I was wondering if anyone had thoughts on what Genesis games are trickiest to emulate properly. Looking through past threads, I gather that the moose level in Mickey Mania is one trouble spot as it depends on some sprites not getting drawn as a result of during off the display during HBLANK. What are some other tricky games?
Castlevania gave me some headaches too, the cached SAT attributes in VDP was really tricky as the complex sprites priorities...
-
- Very interested
- Posts: 292
- Joined: Sat Apr 21, 2007 1:14 am
Re: Trickiest games to emulate?
The opening text scroller in Monster World IV is troublesome.Mask of Destiny wrote:I was wondering if anyone had thoughts on what Genesis games are trickiest to emulate properly. Looking through past threads, I gather that the moose level in Mickey Mania is one trouble spot as it depends on some sprites not getting drawn as a result of during off the display during HBLANK. What are some other tricky games?
I think Super Skidmarks (PAL) and The Chaos Engine had some weird timing issues with their split screens.
"The Chaos Engine" and "Double Clutch" (title screen) requires emulation of VDP Fifo writes delay. "Sonic 2" and "Combat Cars" require interlaced mode 2 emulation ( the latter needs accurate vcounter handling in this mode).
There are many games sensitive to HBLANK and HINT/VINT timing/handling where one will break when you try to fix another one (i remember this was the trickiest part when trying to get 100% compatibility, although now that we have exact timings documented, it should be easier), you might want to do a quick search within the few Kega or Regen threads in this forum, there was a few list of sensitive games that were posted some time ago.
I also remember posting some infos about tricky games to emulate without errors in a recent thread about the firecore.
There are many games sensitive to HBLANK and HINT/VINT timing/handling where one will break when you try to fix another one (i remember this was the trickiest part when trying to get 100% compatibility, although now that we have exact timings documented, it should be easier), you might want to do a quick search within the few Kega or Regen threads in this forum, there was a few list of sensitive games that were posted some time ago.
I also remember posting some infos about tricky games to emulate without errors in a recent thread about the firecore.
Last edited by Eke on Sat Jan 19, 2013 6:07 pm, edited 1 time in total.
In my experience anything from EA, in particular with their three colour intro (IE, like Legend of Galahad), will test some undocumented/undefined aspects of your VDP core that few other games rely on. This is because EA didn't use the official, licensed SDK provided by Sega, but reverse-engineered their own development tools and support libraries, so they often do things "outside the norm".
Lemmings is a traditional hard one to get working, since it relies on a pending horizontal interrupt which is masked on the M68000 side being suppressed by a vertical interrupt, which the M68000 does take, with the suppressed horizontal interrupt then raised by the VDP again when the vertical interrupt is acknowledged. In this way, a horizontal interrupt from the previous frame is actually triggered on the next frame, relative to vint that is. If you get something wrong here, the HUD is broken in-game.
The score counter in Columns is broken if your M68000 has a bug in its shift instructions. On the M68000, the shift count for LSL and LSR is modulo 64, meaning a shift count of 32 for example will give you a result of 0 on the M68000. On x86 architecture, the shift count is modulo 32, meaning a shift count of 32 will yield the original number. If this means if you're compiling for x86 rather than x64, and you don't handle shift counts greater than 31 as a special case, the score counter in columns will end up messing up as the score increases.
I'm still having trouble with games that do various mid-frame changes, like Road Rash II and Mickey Mania. Road Rash II (and a few other similar games, I mostly only test with this one) is heavily dependent on the HV counter, and also does mid-frame changes, so you need to ensure you have accurate HV counter emulation as well as handling mid-frame changes correctly. The moose chase level in Mickey Mania goes a step further and not only requires accurate handling of mid-frame changes, but also requires accurate emulation of the sprite rendering process when the display is disabled mid-line. The intro screen for Legend of Galahad also disables the display mid-frame, and requires accurate timing to ensure that it is disabled at the correct point, and not re-enabled before the end of the frame.
Lemmings is a traditional hard one to get working, since it relies on a pending horizontal interrupt which is masked on the M68000 side being suppressed by a vertical interrupt, which the M68000 does take, with the suppressed horizontal interrupt then raised by the VDP again when the vertical interrupt is acknowledged. In this way, a horizontal interrupt from the previous frame is actually triggered on the next frame, relative to vint that is. If you get something wrong here, the HUD is broken in-game.
The score counter in Columns is broken if your M68000 has a bug in its shift instructions. On the M68000, the shift count for LSL and LSR is modulo 64, meaning a shift count of 32 for example will give you a result of 0 on the M68000. On x86 architecture, the shift count is modulo 32, meaning a shift count of 32 will yield the original number. If this means if you're compiling for x86 rather than x64, and you don't handle shift counts greater than 31 as a special case, the score counter in columns will end up messing up as the score increases.
I'm still having trouble with games that do various mid-frame changes, like Road Rash II and Mickey Mania. Road Rash II (and a few other similar games, I mostly only test with this one) is heavily dependent on the HV counter, and also does mid-frame changes, so you need to ensure you have accurate HV counter emulation as well as handling mid-frame changes correctly. The moose chase level in Mickey Mania goes a step further and not only requires accurate handling of mid-frame changes, but also requires accurate emulation of the sprite rendering process when the display is disabled mid-line. The intro screen for Legend of Galahad also disables the display mid-frame, and requires accurate timing to ensure that it is disabled at the correct point, and not re-enabled before the end of the frame.
Really? I've never heard of that. I'm interested in doing tests on that to figure out what could cause it. Where does it lock up, partway through the level? Do you know if the lockup was occurring on a US or European system? Was there a particular ROM you were using? I can't run the game right now but when I'm back at my computer I'll give it a go. I own the cartridge of this game so I can easily test it on the hardware.