etabeta's playground

MESS & MAME wip

Time is ticking out…

without comments

Since I got stuck with porting my custom EEPROM implementation for Genesis/MegaDrive towards the core one [*] and since updating software lists with PCB info is valuable but not very exciting, I was searching for some not too complex but still rewarding emulation task to occupy my weekend.

While going through my notes and partially developed implementations, I stumbled upon a bunch of notes about the “General Purpose I/O port” of the GBA, a bunch of pins connected to the ROM on the GBA cart PCBs which allow the system to serially transfer bits through the cartslot. The main usage of the port was the routing of the RTC in Pocket Monster games, the Rumble feature of Drill Dozer and the Gyroscope sensor of Warioware Twisted. The missing implementation of the RTC comms was also the reason why Sennen Kazoku was stuck on the following screen
sennenkz01

Since the port was quite well documented (mainly thanks to the great reverse engineering job done by the nocash guy) and the RTC improvement was often requested on the Bannister MESS board, I decided to take (again) a quick look to see whether this time I could manage to make the RTC work.

It turned out that in my previous attempts on this, I had misread some of the bits of info presented at GBATEK. After some work to add the correct GPIO hookup into the driver, I was finally greeted by Sennen Kazoku getting in-game
sennenkz02 sennenkz03

Similarly, the new code allowed to say goodbye to this annoying messages
poke01 poke02
and made Pokémon Ruby / Emerald / Sapphire at last fully working
poke03 poke04
(and yes, I’m sort of cheating with the above screens, since the game could be played even without the RTC, but some events would not have worked as designed without it, so it is a *real* improvements 😉 )

With the RTC implemented, I decided to look a bit to the other games using the port and it turned out that RTC was probably the most complex of the device exploiting the GPIO port… good for us!

In a few hours I was able to implement in MAME the Gyroscopic Sensor used by Warioware Twisted, so that its minigames will be playable in next MAME release
wario01 wario02
wario03 wario04

Next it was the turn of Boktai’s luminosity/light sensor. Such a sensor was used in the three games of the Boktai / Bokura no Taiyou series, and the lack of support for it had a great playability impact in MAME: it not only made almost impossible the gameplay in Boktai 2 / Zoku Bokura no Taiyou and in Shin Bokura no Taiyou (the Jpn-only third chapter in the saga), since solar light is needed to recharge the main character’s weapon, but even more annoyingly it caused the following screen to show up and stop any play at the very beginning of the first game
boktai01

Luckily, the sensor implementation was not too difficult (in MAME you will be able to choose the luminosity level from the “Machine Configuration” menu entry of the internal interface… at least until we get some sort of webcam support as input device in MAME, which would force users to play the game outside in order to actually defeat vampires 😉 ) and we now can play these games (almost) as they were intended
boktai02 boktai03
(observe the luminosity bars which are not empty as they were in MAME/MESS so far…)

To complete the picture, it remained to add the Rumble chip and that was very easy to add, even if it is probably less interesting from the MAME-users’ point of view in its current state: as with other MAME outputs, with the new code the emulator will now send out a "Rumble" output bit (0 for Rumble=OFF and 1 for Rumble=ON) whenever the games try to access the Rumble component… however, users will need a third party application to listen to the output and redirect it to some hardware that can "rumble" in sync with the gameplay.

Is this all? Well, I thought so at first… but then I realized that there were a few more low hanging fruits I could implement, and that is how we will also get in next MAME:

  • emulation of the Tilt sensor used by Yoshi’s Universal Gravitation / Yoshi Topsy-Turvy / Yoshi no Banyuuinryoku (and by Koro Koro Puzzle)
    yoshi01 yoshi02

  • emulation of the Rumble chip used by MBC-5 Game Boy Color games (like Pokémon Pinball and more), once again restricted to a "Rumble" output bit ready to be intercepted by some external listener application
  • partial emulation of the RTC used by MBC-3 Game Boy Color games (like Pokémon Gold / Silver / Crystal and many more), which allows to actually pass from a stuck clock that never updates
    pokegbc01 pokegbc02
    to a clock that is aligned with real time when the game is rebooted
    pokegbc03 pokegbc04
    You might have noticed that I wrote partial emulation above, and the reason is that the clock goes definitely too fast while in-game and thus the support cannot be considered complete…

In the next few days, I plan to revisit a little bit the GPIO direction bit handling, since it does not match perfectly the description at GBATEK and I would like to understand where the difference comes from, and to search for the issue which causes the RTC to go so fast in GBC games. Let’s see how it does work out 🙂

[*] I’ve done some progress but it’s pretty boring… and it always requires me playing at least a NBA Jam match to test that both reading and writing to EEPROM works fine, which usually does not fit well the short lunch breaks at work, when I have the chance to make some hobbyist developments

Written by etabeta

June 6th, 2016 at 3:58 pm

Posted in MESS

we’re JAMming (…and I hope you like jamming too)

without comments

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!)

bomb01
bomb02

bomb03
bomb04

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
jam01
jam02
jam07

Then you play the first match
jam03
jam04

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
jam07a

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

jam06
AT LAST!!!

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.
Stay tuned 🙂

Written by etabeta

May 1st, 2016 at 5:52 pm

Posted in MESS

Barcode scanning

without comments

Some time ago, I have discussed about Nantettate! Baseball by Sunsoft (for the Nintendo Famicom) and about the sub-cart system used to update team data of the original game at later stage, to renew players’ experience without the need of a whole new game.

In Japan, however, it was far from being an isolated case. In particular, it seems that Bandai was a company who strongly believed in the concept of expandable games, with cheaper updates at later times. It happened with Famicom Karaoke Studio (new songs were added by switching the cart in the body of the Karaoke Studio connector)

(Karaoke Studio base cart and add-on cart pics from ochagumi’s blog)
karaoke

it happened with the Datach Joint ROM System (featuring a barcode scanner in the base device)

(Datach base cart and add-on cart pics from nesworld.com)
datach1datach2

and it also happened a few years later with the Sufami Turbo for the Super Famicom (a.k.a. SuFami)

(Sufami Turbo base cart from an auction)
sufami

In emulators, these expansions are never trivial to handle (not to mention that quite often users are not aware of the correct usage of the original hardware!), but luckily the progresses about slot devices in MESS made them quite easy to work with, both from the development and from the usage points of view. If Sufami Turbo was already handled fine under the SNES driver, and Karaoke Studio is still out of reach due to mic emulation requirements, in the past few days I dug out some old (and broken) code to emulate the Datach unit in MESS and decided to take another look to the barcode reader support.

Long story short, I managed to fix the barcode handling code, and in next release you will be able to effectively play most of Datach games in MESS! However, I guess that some explanations on the way it will work in the emulator could be useful.

EDIT (2014-02-13): As of latest MAME/MESS svn, Datach games have been moved from NES softlist to a separate Datach softlist (because the carts are different, as you can see from the pictures). Also, the base unit has been properly implemented as a passthrough cart with a separate cartslot for its minicarts. This means that to test the improvements below you now have to launch MESS with the following command

mess nes -cart datach -cart2 gamename

where gamename can be either a softlist shortname, or the full path to the iNES files for the games (notice that you can also load an headerless 256k dump of your Datach minicarts, so you don’t need to add an header if you dumped your own cart)

First of all you will need to launch a Datach game in NES. These typically are games which boots with this logo
datach_logo
If you have ever launched one of these games in previous MESS, you would have noticed that some games were not really playable due to the game sitting there waiting for a barcode to be scanned into the unit. The Dragon Ball game (Dragon Ball Z – Gekitou Tenkaichi Budou Kai) and the Yu Yu Hakusho game (Yu Yu Hakusho – Bakutou Ankoku Bujutsu Kai) are perfect examples for this
title title
If you try to start a game and you have no barcode, you cannot pass through the following screens
no_code_dbz no_code_yuu
where the game waits for a barcode to generate your character.

Now, when you get to those screens, you can just open up the UI and you will see a brand new menu item: Barcode Reader!
menu1

You select it, you choose the Datach reader, and you will get to the Barcode prompt
menu2
and here you can enter your favorite barcode! (you first type the code, then you select the “Enter Code” option)

EDIT (2014-02-14): the guy at retrostuff.org (the website where I had borrowed the original Goku barcode) has scanned some more original cards for the Datach Dragon Ball Z game. This helps to play the game as it was intended. You can find them at this page. Thanks a lot, mate.

By using “5018-4385” and “9638-5074” (two codes I found by googling EAN-8 barcodes) you get a fight between an alien and the cyborg 18!
vs01 vs02

The game also features a menu where you can test your barcodes to see which fighters get unlocked with each code, before entering the tournament!
code_test
By selecting “022248-300117” (which comes from an original DBZ card for Goku), you will see the game scanning the code
scan
and you will get a Level 2 Sayan fighter.
fight1
By using “062982-144233” (mentioned in nocash documents) you will get a different and stronger Level 2 fighter (maybe Trunks?)
fight2
By using “9-771129-975005” (a code I took from a comic book I had at home) you will get a weak Level 1 Piccolo
fight3
and so on…

Similarly, in Yu Yu Hakusho – Bakutou Ankoku Bujutsu Kai, you can now pass to the actual fights
fight4
vs03 vs04

You can now also play Ultraman Club – Supokon Fight!
ultra01 ultra02
ultra03 ultra04
and J League Super Top Players
jl03
jl04 ultra05
jl01 jl02
and SD Gundam – Gundam Wars
gundam1 gundam2
even if I’m not sure how to pass this screen 🙂
gundam3

Finally, Battle Rush – Build Up Robot Tournament does not enter in game (maybe it sits waiting for response from the unemulated EEPROM?)
brsh
The factory option works, but in this way there is not much to do other than creating robots over and over.

There was also a seventh Datach game, Crayon Shin-Chan Ora to Poi Poi, but this does not even use the barcode unit and it was probably only sold in Datach format (in addition to the standard FC cart format) to make happier the owner of the Datach unit.

I’m not fully satisfied by the initial commit to MESS, because Datach carts are still treated as base FC carts, without a separate slot, but this will be fixed later. In the meanwhile, 6 out of 7 Datach games are playable, at last!

Finally, for the moment I won’t look in supporting Barcode Battler units (both for NES and SNES), because those require to convert the NES/SNES controllers to be slot devices and thus require more time than I have at the moment. Also, I’d be actually more interested into understanding how Barcode Boy worked, since only a few emulators support or document it 😉

Written by etabeta

February 12th, 2014 at 4:56 pm

Posted in MESS

MMC5, at last

without comments

One of the main limitations of NES emulation in MESS has always been the lack of MMC-5 support. It was not the only problem (many games suffer of 1-line glitches, a few games are broken, and Skulls & Crossbones IRQ handling does not like at all out PPU code), but still MMC-5 was probably the most annoying one, because Castlevania III is one of the favorite games of a lot of people (including myself) and it was a pain to admit that we were not able to support it properly in MESS.

I have written many times in the past that the culprit was our emulation of the NES video chip, too limited to handle all MMC-5 features, and that a full PPU rewrite was needed in order to properly fix CV3 and the various Koei games which run on this boards. And I have promised to many friends that eventually I would have been able to tackle the challenge of such a rewrite.
Unfortunately, a long series of real life events is keeping me 95% busy with non-emulation stuff, so that the actual rewrite I’ve been working on since last June is still faaaaar from completion. In conclusion, proper MMC-5 support in MESS seemed doomed…

…if it wasn’t for the fact that I was terribly nauseated by repeating over and over that MESS was very cool (thanks to the MAME debugger, to the number of supported pirate mappers, to the support for Game Genie, Famicom BASIC and Nantettatte Baseball subcarts), but not good enough to support MMC-5, despite MMC-5 was one of the most famous official Nintendo mappers and it was already supported by most other emus…
Read the rest of this entry »

Written by etabeta

February 8th, 2014 at 9:22 pm

Posted in MESS

Digging into uncommon items

without comments

One thing which I have always wanted to add support for in MESS was tape loading from inside Family BASIC for the Japanese Famicom. I’m not sure if I was fascinated to see what could be done when using my fav 8bit console as an home computer, or if I wanted to support it because only a bunch of other emus do (NEStopia, NesterJ, any other?), fact his that I had made multiple attempts in the past 2 years to add cassettes to Famicom in MESS, with no luck.

The problem was not the cassette recorder connection in itself: it was well documented which bits correspond to read from tape and write to tape, respectively. The problem was the small number of testcases and the apparent lack of documentation about the cassette file formats!

Once Anna Wu managed to find for me a few .tp files to play with (many thanks as usual, Anna), I thought I was ready to go, but I realized soon that the problem was not so easy to solve: a .tp file contains a sort of waveform pattern, but I was unable to convert it to something that Family BASIC was capable to recognize…

The real breakthrough happened when I got in touch with Pokun at nesdev boards, who in turn pointed me to UglyJoe, brilliant and very friendly admin at famicom world forums
He not only had found out that .tp was just a raw wave file at 32kHz (very easy to convert to a .wav file to be fed to MESS, e.g. with Audacity), but he also spent a lot of time last year typing a dozen of Family BASIC programs in his FC and saving them to tape!!!

Hence, by converting Anna’s .tp files and studying UglyJoe’s .wav files, I finally succeeded in adding tape support to our beloved emulator.

EDIT: I recall that if you launch BASIC V3.0 and you get an error message displayed, or if you launch BASIC V2.0/V2.0A and you get a grey screen, it means that you haven’t connected the Famicom Keyboard! To test any of the games below, you need to launch famicom emulation in MESS with one of the BASIC carts mounted, then access the internal UI with TAB, go into Driver Configurations and change the Expansion port to “FC Keyboard”. Once you’ve done this, the BASIC cart will work as shown in the pictures 🙂

Hero
basgam01 basgam02
basgam03 basgam04

Star Killer
basgam05 basgam06

Urban Champ
basgam07 basgam08

and some of the files typed in by UglyJoe (that you can find at famicomworld and maybe you can also say thanks for his work, while you’re there)

uglyjoe01 uglyjoe02
uglyjoe03 uglyjoe04
uglyjoe05 uglyjoe06

The new feature revealed also that our NES input handling, whose cleanup I had kept postponing for months, really needed to be revamped in order to allow working controls in these games. Indeed, our code had been written with NES controllers in mind (and it worked well for those), but Famicom controllers were different. Original FC had indeed hardwired controllers and any additional peripheral had to be connected to the expansion port which we were not emulating properly. This has been mostly fixed now and, when tape support will be added, you will be able to also control the main characters in the games 🙂

An interesting feature of UglyJoe’s tapes is that you have to load the BG data separately. Luckily, UJ gave all the necessary details and I post them here too, for reference. So you need to launch Famicom in MESS with the Family BASIC v2.0 (or v2.0A) cart, with the FC Keyboard enabled as controller, and with one of the bg data wav file as cassette. Then, follow next steps

1. After entering your name, the cart will ask you if you want to load GAME BASIC. Either press Yes (F1), or type “GAME BASIC” and press Enter.
load01

2. At next menu, select “2. BG GRAPHIC” by pressing “2”
load02

3. Then press FC “ESC” key (in emulated keyboard mode, it is mapped by default to your TAB key; in natural keyboard mode, it is mapped to your own ESC key) and select “FILE” (scroll with arrow keys and confirm with the SpaceBar)
load03

4. Press “L” (for LOAD) and Enter (no need to specify a filename). Then, enter the Internal UI and press Play in the Tape Control menu: after some second the program will be recognized and loaded (you can always FastForward the emulation to reduce the loading times!)
load04

5. When loading procedure completes, the graphics will be displayed. Here you can access again the menu as before, by pressing the FC “ESC” key and then press the FC “STOP” key (mapped by default to your Backspace key) to go back to the main BASIC menu
load05

6. Select “1. BASIC” by pressing “1”, to finally access the BASIC prompt
load06

7. Now, enter the Internal UI, and load the program wav file through the File Manager menu. Then go back to emulation and type LOAD. Start the new tape from the Tape Control submenu of the Internal UI and wait for its completion
load07

8. Typing RUN, you will be finally able to play the game and help Mario to kill the floating crab 🙂
load08 load09

None of these programs is going to compete with main Famicom productions (2KB of memory is too small for that), of course, but Family BASIC was a piece of Famicom history and it was a pity not to document it properly… and who knows, maybe some Japanese user will dig out his old collection of tapes and we might find more of these before they get lost forever!

p.s. there were a few more programs supporting tapes on the Famicom, and a few on chinese famiclones. if someone still has such tapes, please contact us at MESS boards!

Written by etabeta

June 14th, 2013 at 10:35 pm

Posted in MESS

More on slots (not the gambling)

without comments

OK, I had left you with the announcement of MESS supporting the lock-on cartridge for Sonic & Knuckles, but in the past weeks I have worked hard to propagate the nice features of slot expansions to other systems in MESS and I have to say that the results are definitely nice… actually so nice that a single blog post is not enough for all the changes that have been done (and the snaps necessary to show them all!), and I preferred to split them across a series of entries!

If you are a regular follower at the MESS board at bannister.org, you probably have already heard about most of these (except the NES ones… those should be a nice surprise for you too 🙂 ), but I think that it might be good for everyone to finally see in action all those svn logs entries about “slot devices”

  • The Sega side of the progresses, namely MegaDrive and Saturn
  • The Game Boy side of the progresses
  • The SNES side of the progresses
  • The NES side of the progresses

There is still so much to do for these systems (more SNES addons to emulate, more sound chips in NES carts to implement, more protected GB pirate games to support, etc.) that you can expect to see slot devices mentioned in messnew and svn log still for long time, but I’m confident nobody would deny that this is a great starting point for future progresses!

Written by etabeta

April 21st, 2013 at 1:44 pm

Posted in MESS

More on slots, the NES side

without comments

Finally, the NES chapter, i.e. the real news getting prepared for MESS 0.148u4!

Converting NES carts to slot devices has been my goal since a long time. It’s been essentially the main reason I’ve decided to learn more about slots, given that many NES carts had some additional chips on them and that these were impossible to support appropriately in MESS without slots.
However, at the same time, converting NES carts meant having to create around 300 hundreds different types of slots, so to covert all PCBs/mappers used by NES carts. It is not very surprising, therefore, that it took me really a looooong time before being able to announce the actual completion of the slot-ification process…

However, the work has finally reached a point where it can be made public because, even if more cleanups are definitely needed, at least no regressions are known at this stage (but I’m pretty sure that something has slipped through our regression tests, with more than 3000 dumps available…)

The first consequences of the slot devices cannot really be shown, because they mostly deal with sounds 🙂
With the new code, indeed, MESS finally features (like many other emus)
– sound FX in the Japanese version of Gimmick, by emulating the additional YM2149 present inside the Sunsoft 5B chip
– OST in Lagrange Point, by emulating the YM2413 present inside the VRC-7 chip
– speech in Jaleco sports game, even if they currently use external samples, mostly recorded years ago by Pongbashi, given that the ADPCM chip used in these is currently undumpable (samples go in the samples/ folder, like you would do with MAME samples, and you can use the old TOSEC set from 2009)

Definitely more suited to be displayed with snaps is the support for the NES-EVENT PCB, which means that you can now play in MESS the Nintendo World Championship 1990 cart (DipSwitches included)
nwc90_0 nwc90_1
nwc90_2 nwc90_3
nwc90_4 nwc90_5
nwc90_6 nwc90_7
nwc90_8 nwc90_9
nwc90_a nwc90_b

Another interesting aspect is that, thanks to the great analysis done by naruko on the Sunsoft-6/Sunsoft-DCS pcbs, MESS is now capable of emulating Nantettatte!! Baseball lock-on mechanism! This Sunsoft game is pretty interesting, given that it experimented a very original way to solve the problem of sports games with stats becoming outdated a few months after the game release…
Basically, one had to buy the original game first, at full price, and then after a few months the publisher offered cost-reduced minicarts containing new teams and new data to be plugged into the original game!

Nantettatte!! Baseball base cart and add-on cart pics from zation0323’s blog
ntbreal_a

You can see that the update cart fits the small blue slot in the main cart!
ntbreal_b

In MESS you will now be able to emulate this behavior like with Sonic & Knuckles: when you load Nantettatte!! Baseball, MESS offers you a -cart2 slot where you can load the add-on minicart (only two were sold by Sunsoft, ’91 Hen and OB Hen). By loading one of the minicarts, the first difference you see is in the available teams

ntbreal_0 ntbreal_1
base game (up left), 91 hen (up right) and OB hen (down left). also, I have fixed some gfx issues present in current MESS (down right).
ntbreal_2 ntbreal_4

but I guess that also team members and stats have been updated. Maybe, if this mechanism had been successful, Electronic Arts and other companies would have followed a different strategy in the past 20 years, but I guess Nantettatte!! Baseball was not a blockbuster 😉

Along the same line of piggyback carts, we now support the real NES Game Genie from Galoob (not very useful, given that most of these same codes are also in Puggsy’s cheats, but if it was possible on the real system why not in MESS as well?). Once again, when you load the Game Genie in the main cartslot, a -cart2 device becomes available to load any another game you want

Game Genie with Super Mario Bros. and the codes to make Mario immortal and to have Bowser flames in all levels
gg01
gg02 gg03

Game Genie with Super Mario Bros. 3 and the code for the Hammer suit
gg04
gg05 gg06

While converting the old code to the new slots, I have also improved some pcbs and/or fixed some bugs, which I guess will be appreciated by everyone. For instance, Family Circuit ’91 is no more glitchy as in 0.148u2

Ingame before the rewrite (left) and after (right)
famcir91_0 famcir91_1
and some Tengen games work now, like Klax, Road Runner and Alien Syndrome
klax_0 klax_1
rrunn_0 rrunn_1
asyn_0 asyn_1

Some progresses have also been made on other games, which however still do not work.
Skull and Crossbones now draws most of its graphics (but dies when the gameplay starts, possibly due to a delay in IRQ firing which is not easy to implement in current PPU code and which will probably have to wait until the PPU rewrite)
sxb_0 sxb_1

And Racermate Challenge II after some flickers (the game saves on battery the videoram content, but we currently do not emulate this, so the game has to initialize it every time, which should be the reason of the flickering…) finally shows the current game screen, but it cannot work because the bycicle controller is not emulated at all
racmate2_0 racmate2_1

Plus, I have added support for some more pirate pcbs, mostly used by multigame carts or FDS conversions
mc_0 mc_1
mc_2 mc_3
mihun_0 mihun_1
aisenshi_0 aisenshi_1
histfds_0 histfds_1
doki_0 doki_1
fuun_0 fuun_1
monty_0 monty_1
smb2m_0 smb2m_1

Written by etabeta

April 21st, 2013 at 1:43 pm

Posted in MESS

More on slots, the SNES side

without comments

Before 0.148u2 release, SNES carts got converted to slot devices as well. Like with MegaDrive and Virtua Racing, the main effect on the end-users is that now games using add-on chips like DSP-1/2/3/4 (e.g. Super Mario Kart, Dungeon Master, etc.) or ST-010 (e.g. Exhaustion Heat 2), or SuperFX (e.g. Star Fox) can be loaded into snes & snespal directly, without the needs of additional clone systems (snesdsp, snessfx, etc.) like in 0.148! And we also support dumps with the DSP bios attached at the end of the file, like byuu’s higan, for ease of compatibility of the files between emulators.

smk_0 smk_1

exhaust2_0 exhaust2_1

sfox_0 sfox_1

The rewrite had however also many other effects. For instance, the Powerfest ’94 competition cart is playable in MESS now (DipSwitches included)
pfest94_0 pfest94_1
pfest94_2 pfest94_3
pfest94_4 pfest94_5
pfest94_6 pfest94_7
pfest94_8 pfest94_9

But we also added support for DSP-1 games with large ROM, like Super Bases Loaded II
sbl_0 sbl_1
sbl_2 sbl_3

Furthermore, some basic support for BS-X Satellaview was added to both BS-X – Sore wa Namae o Nusumareta Machi no Monogatari
bsx_base0 bsx_base1
bsx_base2bsx_base3

and some other compatible games
bsx_comp0 bsx_comp1
bsx_comp2 bsx_comp3
bsx_comp4 bsx_comp5
bsx_comp6 bsx_comp7

Even if most games making non trivial usage of flash memory are not working yet (which means that 70% of the BS-X carts, including the popular BS Zelda, BS Excitebike, Radical Dreamers and Treasure Conflix, will only show a black screen 🙁 ), a few other work fine
bsx01 bsx02
bsx03 bsx04
bsx05 bsx06
bsx07 bsx08
bsx09 bsx10
bsx11 bsx12

Luckily, even our sloppy BSX implementation is enough to support the character data in Same Game, by just dropping samegmcc or samegamecd in the -cart2 slot available when loading samegame…

Same Game + Chara Cassette, Bomberman flavor

Same Game + Chara Cassette, Momotarou flavor

Same Game + Chara Data (which adds Tengai Makyou characters)

A more interesting addition was probably the Korean 20-in-1 multigame cart showed here, which mostly work in current MESS (even if a couple of games freeze at start)
kor20_0kor20_1
kor20_2

kor20_3
kor20_4 kor20_5
kor20_6 kor20_7
kor20_8 kor20_9

As in the MegaDrive case, the slot code allowed for emulation of more protected SNES pirate carts

Digimon
snes_pir00 snes_pir01
Pokemon Gold Silver
snes_pi0r2 snes_pir03
X-Men VS Street Fighter
snes_pir04 snes_pir05
Pocket Monster
snes_pir06 snes_pir07
Soul Edge
snes_pir08 snes_pir09
KOF 2000
snes_pir10 snes_pir11
Pokemon Stadium
snes_pir12 snes_pir13
Tekken 2
snes_pir14 snes_pir15
Street Fighter EX Alpha
snes_pir16snes_pir17

Also, even if MESS has supported 8MB ExHiROM/ExLoROM games with no problems since 2007, support is now more transparent and they work exactly the same as HiROM/LoROM

snaps from Dragon Quest 3 English translation


snaps from Super Demo World

As you might have guessed at this stage, a byproduct of the usage of slots is that it is now very easy to add emulation of the copy protection and of the bankswitch mechanisms used in many pirate carts. However, I can’t stress enough that without slots it would have never been possible to support properly the add-on chips as we do now 🙂

Written by etabeta

April 21st, 2013 at 1:43 pm

Posted in MESS

More on slots, the Game Boy side

without comments

Soon after finishing MegaDrive, I have converted Game Boy and Game Boy Color carts to use internally the slot devices, and as a byproduct I found out that some “Collection” games, like Genjin Collection, Momotarou Collection, Mortal Kombat I & II and Super Chinese Land 1.2.3 were emulated as plain MBC1 even if they were in fact using an alternate switching mechanism. By fixing that, all of them now work fine in MESS and don’t freeze/reset anymore when a game is selected!

gbcol_0 gbcol_1 gbcol_2 gbcol_3

Also, I was able to add support for some pirate games which were not emulated before, like Rockman 8 (which might still have issues, given that enemies do not appear for whole sections of the levels… but it might just be the way it is originally, I don’t really know…)
rockman8_0 rockman8_1 rockman8_2 rockman8_3
rockman8_4 rockman8_5 rockman8_6 rockman8_7

and the raw dumps of Sintax chinese games (huge thanks go to Taizou, who reverse engineered the non-trivial protection for these!).
sintax_1 sintax_2 sintax_3

Some of these are quite interesting
sintax_10 sintax_11 sintax_12 sintax_13

others not so much, but still worth preservation to better represent the HK market
sintax_4 sintax_5 sintax_6 sintax_7
sintax_8 sintax_9 sintax_14 sintax_15
sintax_16 sintax_17sintax_18 sintax_19
sintax_20 sintax_21 sintax_22 sintax_23
sintax24 sintax_25 sintax_26 sintax_27
sintax_28 sintax_29 sintax_30 sintax_31
sintax_32 sintax_33 sintax_34 sintax_35

Written by etabeta

April 21st, 2013 at 1:43 pm

Posted in MESS

More on slots, the Sega side

without comments

MegaDrive support has been improved some more, so that in addition to all the protected pirate carts which were supported by HazeMD, it also supports the recently dumped Super Mario World 64

smw64_1 smw64_2

and a few RPGs that not many other emus allow to play (credits go to Eke too, for the kind support in sorting out a few bankswitch corner cases)

Beggar Prince
beggar_0 beggar_1
beggar_3 beggar_4

Legend of Wukong
wukong_0 wukong_1
wukong_2 wukong_3

And, quite important from an user-friendlyness point of view, you can now use the main genesis/megadriv/megadrij emulation to run Virtua Racing
vru_0 vru_1
vru_2 vru_3
instead of using some clone systems (gensvp and c.) which many users did not even know that existed. Now you just load the game and it plays fine (by internally adding the required co-processor)

Also the slot code allowed to fix some bugs in our previous code, fixing some games which had been broken or heavily glitched in MESS for years like World Series Baseball games
wsb96_old wsb96
WSB before (left) and after (right) the fixes!

As per Kale’s request, I also slot-ified the Saturn carts, allowing for cleaner support of Backup RAM carts. Hence, you can now format your saturn ‘memory card’ and load/save stuff there, e.g. in Castlevania Symphony of the Night

cvsat_0

Also, you can copy data between the internal backup memory and the external one, like in a real saturn

1. select the external memory
cvsat_1

2. select the data to copy
cvsat_2

3. it’s written to the internal memory!
cvsat_3

Written by etabeta

April 21st, 2013 at 1:43 pm

Posted in MESS