Archive for May, 2016
Long time without posting, but work on MAME/MESS has proceeded pretty well (with some hyatus here and there…)
For instance, in MAME 0.173 you can now play with up to 9 friends in Saturn Bomberman, with the Sega Saturn driver (of course), thanks to the work made on the controller emulation (based on previous great work by Kale!)
The Saturn Multitap support is still not 100% accurate, but it is a starting point, at least.
Since the release, instead, I spent some time cleaning up the NeoGeo driver (whose cartslot emulation was not very accurate, at best, with all possible protection devices being mounted in the main system when running single-game drivers, and thus making a poor job at documenting how the hardware actually worked).
At the same time, I have also decided to go back revisiting old things that I had never managed to get working when converting console to use slot devices in MAME/MESS (see old entries of the blog, if you are not sure what I’m referring to).
One of the items which annoyed me most was NBA Jam for the MegaDrive / Genesis.
If you have ever tried to play it in MAME, indeed, the game plays without any apparent issue:
You boot, enter your initial
Then you play the first match
The problem is that, while as long as you keep playing the game records your progresses (wins & losses), when you quit and restart emulation, you are greeted with a disappointing “No Record” message
Given that this is one of the games I have wasted more time with as a teenager, both at arcades and at home on the MegaDrive, this was really an itch that I couldn’t scratch and that kept jumping to my mind whenever I had time to look into unsolved emulation issues.
The big problem with this was the nature of the issue: the cart relied on the serial EEPROM implementation available in the MAME core and I had zero past experience with this kind of chips. I downloaded (long ago) the datasheet for the specific device used in NBA Jam carts (a X24C02 EEPROM) but to no avail: the MAME implementation was close enough to sound reasonable and not close enough (at least to my eyes) to directly compare the code process with the process described in the datasheet. One of the worst possible scenario for tracking down a bug like this 😉
In the end, after several attempts, yesterday I have managed to write down some equivalent code good enough to get to the following screen
This means that I shall finally be able to improve my old record of 26 wins in a row and it also means that we are closer than ever to emulating in MAME the similar EEPROMs used by other MegaDrive games and by some Bandai games on Famicom.
My effort will go primarily towards investigating why the core implementation fails, so that any other driver will be able to benefit of the improvements… but this also means it might be a few releases before other games using these EEPROMs are playable. However, having a working implementation to compare the broken one with could probably attract the attention of other DEVs as well, and work team might give a boost to the development.