etabeta's playground


Lock on!

without comments

Long time without any news here, I know… In the past two years I’ve spent a lot of time fiddling with the internals of the emulator (nothing cheesy to display), updating software lists for MESS and taking care of ProjectMESS. Busy times in real life did not help either.

Anyway, there is some news today and I like to share it with you all: MESS now emulates properly Sonic & Knuckles pass-through cart, and even if it’s neither a complete novelty (on GameCube/Wii Eke’s GenesisPlus GX already emulated it) nor a breaking news (fake dumps with S&K+Sonic games exist to allow playing the combined carts), it is a significant addition and allows me to explain a bit more in detail one of the most important additions to MAME/MESS core of the past years: the concept of slot expansion!

The idea is easy: allow users to expand the emulated hardware in the same way as they were able to with the original hardware!
You launch the emulator, press TAB to access the internal UI and, if the driver supports slots, you will see a “Slot Option” menu entry which is the door towards a brand new world of configuration possibilities.

Let’s see an example: ISA slots for PC XT & AT computers (this has not been chosen by chance: it was ISA which originally motivated Micko to add slots, and triggered Carl’s, Mahlemiut’s and Judge’s interest πŸ™‚ ). You fire up “ibm5170”, you switch to partial emulated keyboard, you press TAB and this is what you might get
ibm5170 slot
an EGA video cart in ISA1, a disk controller with 2 drives in ISA2, a serial adapter in ISA3 (with attached two mice and a terminal, even if probably they would conflict in the emulated machine) and an IDE controller with space for two HardDisks in ISA4! and for each slot, you can choose between a dozen or so of different carts (CGA, VGA, Hercules or SVGA video adapters, SoundBlaster or Ad Lib sound cards, even things like the Roland MPU-401 or the Gravis UltraSound cards!)…

But ISA expansions were only the beginning… Curt Coder has spent a lot of time to add slots to CBM machines (but also Luxor ABC, Wang PC and many more, if you know how to use them), and now you can emulate a C64 with multiple floppy drives and IEC8 or IEEE4888 serial expansions, obtaining something like the following by launching “c64”
c64 slots
You can see that, in addition to the datasette, we have a VC-1541 and a VC-1581 floppy drives connected to the usual ports, a IEEE488 serial cart in the cart slot, with a C2040 floppy drive in its IEEE9 port and a second IEEE488 expansion connected to the first… In the end, you can get more hardware connected than the C64 can recognize and handle, exactly as with the real thing!
And in addition to testing weird hardware configurations, slots have also allowed to emulate a lot of C64 expansion carts which were simply not possible before, like the IDE64 or the CP/M cartridges.
c64 idec64 cpm

Other very nice examples are given by the Apple ][ family of computers, whose later models in MESS supports a wide variety of expansions, thanks to R. Belmont’s work
apple2 slot
(warning: the depicted configuration would probably not work neither on the real thing nor in emulation… it’s just to show how many different carts are already emulated, including IDE, SCSI and MIDI carts!)

or the IQ-151 where slots added by Sandro Ronco are of fundamental importance because the base system only supports tapes, but selecting the proper expansion cart
iq151 slot
you also get floppy drives to test disk images.

And it’s in this context that the new MegaDrive addition fits nicely. Indeed, after a couple of days of efforts into slot-ifying cart loading in the MegaDrive/Genesis driver, I was able to easily add support for Sonic & Knuckles to MESS!

You can now launch the base Sonic & Knuckles cart to obtain
but if you access the internal File Manager, you will see that you now have a second cart slot available to insert a new cart “on the top” of the previous one… Like in the real thing!
SK slot
So if I insert Sonic 2, I get…
SK+S2 title
SK+S2 slot
SK+S2 snap
If I insert Sonic 3, I get
SK+S3 title
SK+S3 snap
SK+S3 slot
And finally, by inserting Sonic 1, you have access to all levels of the Blue Sphere hidden game
SK+S1 snap
SK+S1 slot
So far, you could have obtained the same result with the hacked up images available on the net…
But now, for the first time on Windows, Unix and MacOSX, you can also insert any other game and play the unique level generated from the cart data! Here is what I got with Phantasy Star II
SK+PS2 snap
SK+PS2 slot

Concluding, I hope I was able to give you a glimpse of the opportunities offered by slot emulation in MESS and that you got a little bit curious, to the point of willing to try them out by yourselves.
At first, their usage is not the most immediate because the -lslot output can be huge, especially for systems which support dozen of expansion cards, and because sometimes additional expansions can be triggered by loading specific items from software lists. Still, I can ensure that it becomes quite easy and friendly if you use a frontend like QMC2, which promptly updates all available slots whenever you change anything and hence gives you the opportunity of testing any sane (and insane) configuration before launching the emu!

Written by etabeta

February 3rd, 2013 at 10:54 am

Posted in MESS

Dramarama (politics over progress blah blah blah)

without comments

As of late there seem to be a lot of whines over the interaction between MAME and MESS, so let me add my point of view here, since elsewhere comments are not possible.

1. Should the MAME/MESS sources get merged?

In my opinion, yes. Ideally we might want a src/emu/ folder containing all the shared components needed for a sort of universal emulation core (i.e. all CPUs, sound devices, screen devices, I/O devices, etc.), a src/mame/ folder with arcade drivers and a src/mess/ folder with console and computer drivers (and calculator and chess computers too, of course πŸ˜‰ )
And many devs are continuously working in this direction since two years, as you can very openly and easily see if you check for most Micko’s and Curt Coder’s references in MAME whatsnew.txt (and their work is only an example: many more contributions in this direction has been given over the time).

2. So what was wrong with 0.142u3 changes?

Almost everything. In the sense that most changes simply consisted in moving *some* arbitrary file from mess/ to mame/ just to make some more drivers to compile inside the MAME tree. No plan for the needed structural improvements, just pointless and whimsy reshuffling of source files (and I cannot even understand the reason for this… some unclear powergame?)

Someone could think that some changes are better than no changes at all and that cleanups might follow. But this is not true for at least two reasons.

First, there is no proof of any kind that cleanups will follow anytime soon.
Just look at the MAME history: Haze rewrote MegaDrive code for HazeMD and updated Megatech/Megaplay/Sega C2 in MAME to use his new code. One would have expected that the next natural move would have been to update MegaDrive bootlegs (Aladdin, Super Street Fighters 2, etc.) to use the new video code as well, since they simply were hacked up MegaDrives in a cabinet and since such an update would would have allowed to remove hundreds of useless lines of code from the source…
And instead nothing has happened for almost two years (for the record, I was the one ending up to update MD bootlegs to use the new code, but that’s just a minor detail).
And after two more years, we are still using the original MD code for System 18 (but this is fine to some extent, because the rest of System 18 emulation makes very hard the update at this stage).

*edit*: actually, I have been imprecise about this bit of MD video code: MD bootlegs got the video updated by Haze, it was the CPU memory maps and the inputs which remained in a poor state for a couple of years with a lot of redundant code (and got updated by myself after 0.134u2). this changes nothing of my point: cleanups do not magically happen if you leave the code there and old code can remain untouched for years if no one does the job in the right way since the beginning.

Second, such a kind of changes make development harder when not done properly (e.g. after an abrupt change of location without cleanups). And let me clarify a bit this point, which seems unclear to many.
If I decide to do some changes in a driver and I break something, in the current source structure it is not that difficult to track down where breakage can be. I can simply ask to myself:
– am I doing development for an arcade or an home system? if the former check emu/ + mame/, if the latter check emu/ + mess/.
Now, say that the answer to the first question was “home system”. How to decide between emu/ and mess/? I can simply ask to myself the following
– is the chip I’m changing only used in home system or also in arcade? if the former then chances are high that I have to look into emu/, if the latter then I have to look into mess/
That’s all. Easy, isn’t it?
And once I know which directory I have to look into, it’s easy to search in drivers/, machine/ or video/ depending on which component can cause my problems.
Well, in 0.142u3 (and situation was even worse in the original commit, which have been later rectified by Micko and Kale) this was not possible anymore.
Some floppy format files got moved from mess/ to mame/ even if *NO* arcade system was using them and some code for serial communications got moved to emu/ even if at the current stage only minor non-arcade systems use it (but the move was required to allow proper compiling). So what if the computer I’m developing for has an issue with its floppy controller or its serial comms? Where in the hell should I look for the corresponding source file?

In conclusion, outdated files got moved arbitrarily in locations which made no sense and which made development harder. And the only justification was “They can be cleaned up later”, even if history says that most of times the opposite happens. Guess why these changes have been reverted?

3. Is there any better solution?

Of course there is: it consists of studying the code used for specific components that are shared for real across more systems, of untangling these components from the specific drivers that use them and of moving them in their proper location *without* bringing the whole old code with them… And this is exactly what several MESS devs have done in the past months/years.
But this proper solution requires time, so it’s not something you can do in a night, as someone stubbornly claims.

Then, there is the completely unrelated problem of merging svn repository. It’s a different topic, that for some reason gets confused with the source reorganization, so I guess I have to give my opinion on this too: I hope the svn can be merged (better sooner than later) and, ideally, I would go for the MESS model (public svn and private mailing list) rather than the MAME model (both svn and mailing list private). But there seem to be bandwidth problems and access problems, plus some of the involved persons have also a real life, so no changes have been done yet. Anyway, let me stress it once more, it is a different issue and I’d like discussions can be kept separated.

4. Where is politics in all this?

In the above arguments politics and egos are nowhere to be found. Maybe some specific member of the mailing list might have had additional reasons to shot down the change, but you cannot confuse some single person with the whole list (generalizations are so dangerous).

What I hate most is that the above objections could have been the starting point for a meaningful and fruitful discussion on the best way to make progresses in the whole project. So the real question is: why has this discussion not happened?

Because there are people which refuse to be part of the discussion lists and prefer to whine and rant in their blogs. And people which cannot stand in discussions when other people disagree with them, prefering to insult rather than trying to find a common solution which can make everyone (or at least the majority) happy.

But of course, again, discussions take time and it’s oh-so-much-easier to play the role of the victim of a conspiracy against openness of the project than to defend personal ideas when others point out that your shortcuts are a *BAD* solution and that a better one has to be looked for.
Because even if we can agree about which direction we want to move, there is a good way to do the steps and there are many wrong but easier ways… and seldom the right way can be found by imposing one side’s point of view over the others without even the grace to sit down and discuss a bit with the other side.

Written by etabeta

May 13th, 2011 at 11:24 am

Posted in MAME,MESS

Misc updates

without comments

I’ve spent most of the past week to go on with the NES clean up: more boards have been added, a lot of code has been simplified (especially for MMC3 clone boards) and a dozen or two of games became playable as a result. This time I haven’t taken snaps, so I have almost nothing to show about this. However, try your randomly-chosen pirate game in MESS and there are good chances it will work πŸ™‚

Moreover, I have at last included in MESS svn the software list for NES. It only supports ‘proper’ dumps with separate PRG and CHR files like the real content of a NES cart (call it the MAME-approach-to-NES-dumps, if you like). As a result, current NES collections cannot be directly used to build your set, but you can red here how to workaround this problem.
In any case, the emulation quality for the games in the “new” format is exactly the same as the emulation quality for the iNES/UNIF files, so that you can test the MESS progresses even if you don’t want to download any new file

Finally, k1w1 has been so kind to prepare a XEGS software list for carts of the Atari XE Game System and (to work on something different from NES) I finally found the time to hook the list in the driver, and general cart loading as well. The following snaps show the current state of the emulation:

air01 air02

dc1 dc2

k1 k2

mb1 mb2

c1 c2

Written by etabeta

July 4th, 2010 at 1:09 pm

Posted in MESS

spring NES cleaning

without comments

While progressing in the preparation of a NES software list in xml format, I have spent some time reviewing old mapper code and fixing a few mistakes I found. The results can be seen below. Notice that, as soon as I finish moving the mapper code to use the new code I added for the software list, most of these fixes will be also available when running iNES and UNIF files.

A warning: keep reading until the bottom of the news, because I left the most important contribution at the end πŸ™‚

== Old News ==

First of all, let me recap here some of the news already reported on MESS forum last week: I have added support for protected CNROM games (usually assigned to mapper 185). This means that Mighty Bomb Jack & Seicross (Jpn)
mbj1 seicross

Bird Week & Spy vs Spy (Jpn)
bw svs

and the educational Sansuu 1, 2, 3 Nen games are all finally playable (more screens here). Then, I fixed some graphics problems in Dragon Warrior 4 and SD Keiji (snap before and after can be seen here). Moreover, I have added support for the Famicom and Subor keyboards controller, making usable both Famicom BASIC carts and various Russian & Chinese Educational carts (details and some snaps here).

== Latest News ==

Last weekend, I was able to do some more progresses. I fixed a silly regression in a few MMC1 games (introduced by my rewrites added last October). As a result the following games now run again (they showed only a grey screen between 0.134 and 0.138):

bmanta bbaz
ninja pirates
sesa2 xexyzj
shog2 shog3
trmast zombi

Then, I fixed some problems in the Camerica boards, and now a few games like Linus Spacehead’s Cosmic Crusade are playable
lcc1 lcc2

and I ported a few fixes for CONY boards from FCEUMM (thanks a lot Cah4e3), fixing various glitches and making playable (?) a bunch more of pirate fighting games
wh2 wh2b
cony cony2

I also fixed the PRG bank handling of Action 52 and now the menu can be accessed and all the 52 terrible games can be played in MESS (not sure it can be called a progress πŸ˜‰ )
act52 act52a

and I have greatly simplified Konami VRC emulation, making all the games playable (a few of them were previously, using the wrong lines for PRG/CHR switch, like the Japanese versions of Teenage Mutant Ninja Turtles 1 & 2 [1])
tj t2j

Thanks to bootgod notes, I fixed our Famicom Jump II emulation, and the game is now fully playable
jump2 jump2a

I also attempted to implement emulation of RacerMate Challenge 2, but I need more info on the hardware before MESS can do more than showing this (very preliminary) screen:

Last, but not least at all, Mariusz Wojcieszek has contributed a FUNDAMENTAL fix to MMC1 emulation which makes playable (for the first time in MESS) AD&D Hillsfar, Bill & Ted Excellent Adventure, Cosmic Wars, Rocket Ranger, Sesame Street 123 and Snow Brothers (both US and Jpn versions, while the European one was already fine)
bt2 cosw
adnd rr
sesa123 snowj

Thanks a lot Mariusz!

== Additional update ==

During lunch break, today, I finally managed to implement emulation of the Nanjing pirate board! This means that some of the ~60 games using it are now playable in MESS. This is an interesting board, since it has been used for ports of SNES / GBC / PC games. Some snaps

Final Fantasy VII
ff7 ff7a

diablo diablo2

Harvest Moon
hm hm2

Chrono Trigger
ct ct2

Not all the games are playable (e.g. Chrono Trigger resets soon after the second snap I posted), but it is a first step in the emulation of this new board.

[1] which corresponds, as the screens show, to the 2nd and 3rd US/Euro games, since the first one had a different title in Japan…

Written by etabeta

June 24th, 2010 at 9:11 pm

Posted in MESS

Documenting software, at last!

without comments

MESS 0.138 will finally add a long-awaited new feature to the long list of options for the user: the software lists.

The idea is to provide a confirmed list of good dumps for computers and console, in the same fashion as MAME does for arcade games. For MAME command line users, this also means to have an ever more
familiar way to launch games in MESS: if in MAME you would simply type

mame gamename

now in MESS you will be able to simply type

mess system -cart software

where “software” is a 8-char long name, which is stored in the .xml software lists offered in bundle with the emulator.

While the emulator will always be capable of loading your own dumps and test programs by using
the old loading options, this new feature will allow to

  • simplify bug reports, because you will be able to add the software name to any bug report and we will know for sure that the problem is in the emulator and not in a possible corrupted image (claimed to be good by the website you find it in);
  • create compatibility lists, because you will be informed about which games are not supported (due to missing parts of the emulation) and which ones are expected to work;
  • document real software that was released for a system, because lists will try to cover all the known dumped software both for common systems and for the more obscure ones, whose available games are seldom mentioned in internet (e.g. Hartung GameMaster, Epoch Super Cassette Vision, Koei Pasogo, etc.);
  • easily identify spare .bin files you have in your HD, because you will be able to use the -romident option also with the software lists.

Overall, the improvements are in my opinion well worth the addition, despite the support being still preliminary and more work being in progress. What follows is a preliminary FAQ for software lists, covering basic usage of the lists as they are implemented in MESS 0.138. Once the code stabilizes and all missing features are added, these FAQs (and some more) will be integrated in the MESS User Manual on MESS Wiki.

Q1. What are these software lists you talk about?
Q2. Where can I find the lists?
Q3. Where shall I put the lists?
Q4. Where shall I put the software?
Q5. How can I launch a game with the new commands?
Q6. Can I use MESSUI or newui with software lists?
Q7. What if I want to launch a game which is not recognized in the software lists?
Q8. What is the exact format of the lists?
Q9. What else can I use softlists for?
Q10. How will software lists be updated?
Q11. How can I contribute to software lists?
Q12. Can I use clrmame to build a full romset for MESS or do I need to manually rename thousands of files?
Q13. Are software lists recommended over the good old launching method?
Q14. What is still missing in software list support?
Q15. Are MESS lists going to make GoodTools, No-Intro and TOSEC collections useless?

Notice that the sections below written in italic font are quite technical, so you can safely skip them if you are only interested in using lists in 0.138 and not in their future developments.

Q1. What are these softlists you talk about?

A1. As of 0.138 release, MESS starts to document in xml format the games/programs which have been released for various consoles and home computers, in addition to the systems themselves (which were already documented in the source). At the moment, only carts have been documented, and not all the systems are covered; however, the plan is to extend the support to most systems and to tapes and disks as well, given the high risk for info on obscure and not so obscure systems & software to be lost forever.

The chosen (minimal) format contains a shortname for each game (like MAME shortnames), a longer name (which should match the title screen, or the box screen if no title screen exists), the release year, the publisher name and the CRC32/SHA1 checksums.
Additional info like alternative titles, development teams, precise release dates, serial numbers, available languages, etc. can be stored externally in datfiles to be displayed by frontends (even if some more optional fields might be eventually added).

Q2. Where can I find the lists?

A2. If you have downloaded MESS 0.138 or you have checked out the svn repository, you already have the lists in the hash\ directory. However, you can check the various lists in the git repository.

Q3. Where shall I put the lists?

A3. By default, software lists in .xml format are stored in the hash/ directory inside the MESS directory. You can however decide to store them elsewhere, by adding a different directory as “hashpath” in mess.ini.

Q4. Where shall I put the software?

A4. Software storage is slightly more complicate than list storage. The basic principles are:

  • different systems will have their software stored in different directories (so that you can separate e.g. SNES games from MegaDrive ones);
  • different media for a given system will be in different directories as well (so that e.g. C64 tapes will be separated from C64 carts and floppies).

In order to reflect these principles, when you load software using software lists MESS will look for files inside subdirectories of your “roms\” directory.
Namely, MESS expects to find subfolders named like the software lists: i.e. MESS will

  • look for Epoch Super Cassette Vision carts inside “roms\scv\”;
  • look for megadriv, genesis and megadrij carts inside “roms\megadriv\” (because all these systems use megadiv.xml which contains a software list with name=”megadriv”);
  • look for IBM PCJr. carts in roms\ibmpcjr_cart/.

As these few examples show, we tried to use for lists either the system name (or the parent name, when multiple systems share the same list); or the system name followed by the media type, for systems which support several media type like most home computers (see ibmpcjr example, which uses a ibmpcjr_cart list, in view of a future addition of floppy disks and tapes lists).

Of course, MESS also allow you to store your carts in different folders than “roms”, e.g. you can use “C:\console_games\snes” and “C:\console_games\gbcolor”, as long as you add the root directory “C:\console_games” to your rompaths in mess.ini. The only things you have to care about is that the subfolders (“snes\” and “gbcolor\”, in the examples above) are correctly named as the software lists they refer to.

A full list of supported xml files, with the correspondent names, will be added to MESS Wiki soon-ish to help users (even if the correct subfolders can also be generated by clrmame, see Q10 below).

Summing up, at the moment, you are allowed to store software in a directory tree like the following one


as long as your mess.ini contains a “rompath roms/;rompath_1/;rompath_2/” line.

Eventually, we might add some more storing options, like leaving roms in the main rompath, but this is currently not so easy to implement, so please stick to the folder structure above, or use the old loading options with absolute paths.

Q5. How can I launch a game with the new commands?

A5. If you have stored the software roms as explained in Q4, and you want to launch “Super Mario Land” for the Game Boy (which corresponds to the shortname ‘sml’), then you simply have to type

mess gameboy -cart sml

and MESS will load the game. Notice that MESS also allow to load the same game in gbcolor, by using the following command

mess gbcolor -cart gameboy:sml

where the “gameboy:” part tells MESS that ‘sml’ belongs to the gameboy list. Similarly, you can load “Legend of Zelda Oracle of Ages” for the Game Boy Color (whose shortname is ‘zeldaage’) both in gbcolor with the command

mess gbcolor -cart zeldaage

and in gameboy with the command

mess gameboy -cart gbcolor:zeldaage

Of course, this can only be done for systems which were compatible, i.e. which had the same physical cart interface (this is reflected in the use of the same “interface” parameter in the xml list): current compatible systems are

gameboy - gbcolor
pce - sgx

i.e. you can load Game Boy Color games in the Game Boy and viceversa, and you can load PC-Engine games in the Supergrafx. On the other hand, you cannot load a Turbografx 16 game into the PC-Engine emulation, because they were not compatible (US carts were ‘encrypted’).

Eventually, also Neo Geo Pocket and its Color version and Wonderswan and its Color version might be converted to use separate but compatible lists. However, at the moment, they use a common list (which means you have to store all the Wonderswan games in “roms\wswan” and all Neo Geo Pocket games in “roms\ngp”, rather than in separate folders depending on the color support).

Q6. Can I use MESSUI or newui with software lists?

A6. Not yet, unfortunately. At the moment, we are still working on the core support so that software list loading is only a command line feature. Nothing stops you from renaming your roms and then point MESSUI and newui to load the renamed files: most of the files will load correctly, even if no year/publisher info will be displayed. However, a few items (e.g. scv, bbcbc and ibmpcjr carts consisting of multiple files) won’t work if not loaded from command line, even if we are talking of around 10/10000 files.

Q7. What if I want to launch a game which is not recognized in the software lists?

A7. MESS still supports the old loading procedure consisting in typing

mess system -cart C:\path\to\my\carts\file.bin

or in launching games from MESSUI and newui, so you can simply keep using the old procedure for unrecognized dumps or for your own programs.

Q8. What is the exact format of the lists?

A8. The chosen (minimal) format is the following

<software name="shortname" cloneof="parentname" supported="partial">
	<description>Game Title (Region, vx.x)</description>
	<publisher>Software House</publisher>
	<part name="cart" interface="xxx_cart" feature="yyyyy">
		<dataarea name="rom" size="131072">
			<rom name="romname.bin" size="131072" crc="aaaaaaaa" 
				sha1="aaaaaaaabbbbbbbbccccccccddddddddeeeeeeee" offset="0" />


  • The software node contains the “shortname” which identifies the software (like in MAME, less than 8 chars for parents and less than 16 chars for clones), the “parentname” if this software is a clone, the “support status” (yes if missing, no or partial if the software is known to be not completely working).
  • The description, year and publisher nodes contain info for UIs and frontends.
  • he part node(s) represent the actual content of the software: “name” entry should match the media type for this software; the “interface” allows for compatibility across different lists (see the gameboy/gbcolor example in Q.5); the “feature” field allow for specifying mappers and other game-specific features which MESS have to handle when loading this software.
  • Finally, dataarea and rom contain the actual software file specifications (with “size” and “checksums”). Notice that we might well have several “dataarea” in a single “part”, and several “roms” in a single “dataarea”.

Also, as mentioned above, some more optional fields might be eventually added.

Q9. What else can I use softlists for?

A9. One of the main reasons to have a database of known dumps, is to be able to identify spare files or dumps you do by yourself. This has been an appreciated feature in MAME for years, when dealing with arcade dumps, and we wanted to offer something similar for consoles and home computers. Software lists allow for this: indeed, if you have some unknown files in “C:\unk\files\”, then you can simply launch

mess -romident C:\unk\files\

and MESS will compare size and checksums with the ones recognized by its source (for BIOS items) and by its software lists (for cart/floppy/tape items).

Q10. How will software lists be updated?

A10. Well, being external .xml files, any update to current lists will simply require to overwrite the old .xml file with the new one, inside the “hash\” directory.

Q11. How can I contribute to software lists?

A11.Any contribution (be it a fix or an improvement) can be simply posted in the MESS board.

Q12. Can I use clrmame to build a full romset for MESS or do I need to manually rename thousands of files?

A12. Of course, manually renaming thousand of files is not a very funny work and it’s definitely better to spend the time testing new features than renaming files. Hence, I strongly suggest to use clrmame, even if software lists are not 100% integrated with clrmame. In other words, be warned that some work at your end is required, and not everything is automated.

WARNING: the instructions below only apply to next cmpro version, not to the current 3.133a which does not support our xml format.

Single list handling
First of all, let assume you are only interested in a single software list, say the Arcadia one. Since at the moment clrmame cannot directly extract the list info from MESS, you have to manually feed the software list into the rommanager. Two options are available (and they are basically equivalent): either you point clrmame directly to the arcadia.xml file in the “hash\” directory (by selecting “Add DatFile…” in the Profiler window, and browsing your HD until you find the “hash\” directory inside your MESS directory) or you generate a separate xml file by using

mess arcadia -listsoftware > arc.xml

and then point clrmame to the newly generated arc.xml file (again, by selecting “Add DatFile…” in the Profiler window, and browsing your HD until you find the file you wanted).
In fact, there is no reason not to directly use the xml lists in the “hash\” directory, but I wanted to stress that MESS also allows to export lists with the -listsoftware command.

Once you have added the list to clrmame, a new profile will be created and, by loading it, you can finally setup the directory where you want to store your arcadia software, and rebuild any directory containing arcadia roms to create a romset compatible with MESS.

Multiple lists handling
Now, what if you want to get all the supported lists at once? In this case, a first dumb solution would be to repeat for each list the procedure above. However, there is also a smarter and easier procedure, thanks to the clrmame batchrun capabilities!
Indeed, to rebuild all the software lists at once, you can simply follow these steps:

  1. you point clrmame to all the lists you are interested in (by selecting “Add DatFile…” in the Profiler window and choosing the xml lists you want)
  2. after clrmame has created a new profile for each of the lists, you select all of them
  3. by pressing Enter, you are prompted with a “Profile Batchrun” window where you can choose among plenty of batchrun options
  4. in the Misc submenu, you select the fundamental “Create rompath for new dat” option and choose as root folder either your roms/ directory or any other rompath you like
  5. in the Rebuilder submenu, you select “Rebuilder run before scan” and “Use source folder”, and you enter the location of the directory which contains the roms you want to rebuild
  6. you press OK and you wait for clrmame to do its job (remember to confirm OK when the statistics are prompted)

At the end, you will have the folders you need inside “roms\” and all the available roms will be in the correct location. Of course, at Step 5. you can also select additional Rebuild and Scan options as you like, or you can decide to only Rebuild without scanning.

Notice that, after the first run, you can always select multiple profiles to scan more software lists at once, with or without any Rebuild procedure.

Eventually, we might add better integration between clrmame and MESS software lists (e.g. clrmame could be able to choose proper batchrun options after simply parsing the MESS -listxml output), but for the time being the procedure described above should allow everyone to test the new feature.

Alternatively, you can also generate a single xml containing all the software lists by using

mess -listsoftware > all_lists.xml

and then feed the resulting xml file into clrmame. However, the duplicate filenames across different lists are not supported at the moment, so clrmame will try to append some _0 or _1 to your romset names, making them not directly usable in MESS. Therefore, I currently suggest to use separate xml files as described above, rather than a single huge xml file.

Q13. Are software lists recommended over the good old launching method?

A13. To say the truth, at the moment software lists are not the suggested method for software loading, especially if you usually launch games through a frontend / UI. Indeed, we haven’t still added support for lists to MESSUI and newui, and no frontend supports them.
However, we strongly recommend to use the -romident feature whenever you want to report a bug for a system which supports software lists. Adding the shortname of the software which exhibit problems to your bug report would help to exclude that you are using a bad dump and to confirm that the bug is really due to MESS.

Q14. What is still missing in software list support?

A14. Well, in fact there are various aspects which still need to be improved.

Core improvements
As already mentioned, we need to integrate lists with UI and newui, to both display software info of the selected image and to handle software consisting of several files.

Moreover, we need to show some warnings when the user loads a software item with known problems (either the game requires unemulated features, or the dump is known to be bad).

Finally, only a few systems have been updated to really exploit all the features which lists allow, like installing per game handlers and decoding routines, and this will need per-system fixes (i.e. it will require some time).

List improvements
While lists already contain most of the known software for each systems, additional info like year and publisher are often incomplete or missing. And even when present, they still have to be verified against title screens (this especially holds true for larger lists like megadriv.xml, snes.xml, gba.xml, etc. since smaller lists have been mostly fixed already).

Also, the “supported” attribute has still to be correctly set for all games. This will require some time, given the size of some of the lists, but it is in progress.

Q15. Are MESS lists going to make GoodTools, No-Intro and TOSEC collections useless?

A15. Well, despite what some MESS supporter might claim, in my opinion we won’t replace GoodTools, No-Intro or TOSEC anytime soon. And the simple reason is that we all have different goals, so that different software collections will always appeal many users which would not like our software lists. Let me analyze more specifically the various projects (rigorously in alphabetical order):

  • GoodTools: Cowering’s tools have helped a *LOT* to make order among messy dumps floating in the internet, especially back when console emulation got started. Without GoodTools, we would probably only have tons of file generically named as HEBEREKE.BIN, which could hardly be identified as correct dumps or recognized as faulty and broken files. While often criticized for spreading out bad dumps (when it’s actually fault of websites which keeps offering corrupted dumps for download, together with the correct ones, even now that Cow’s tools don’t show missing bad dumps anymore), GoodTools have many great capabilities [1] and, in particular, they can recognize hacks, translations and demos, making them a **MUST** for people interested in homebrew & romhacking development.
  • No-Intro: No-Intro’s work is probably closer to our software lists than any other project, and I have to really say thanks to all the “datters” involved in No-Intro for the huge efforts they have done in redumping and in properly documenting console dumps. Without No-Intro, it would have been way harder to create a list of confirmed dumps, and in particular it would have been impossible for GBA. However, differently from MESS software lists, they only focus on Official Releases, making their collection a MUST for people which are not interested in pirate carts and prefer to have a clean collection of all the Jp/Eu/US software ever released for a given system.
  • TOSEC: TOSEC collections offer basically the same pros and cons of Good sets, but they cover a huge amount of obscure systems, whose software would have probably got lost without them. Despite the inclusion of bad dumps, TOSEC collections represent a MUST for people interested in home computers (e.g. for the comprehensive documentation about demos, which often represented a way more creative world than the official programs/games releases)

Summing up, if people want a collection of software which worked on the real hardware (both officially released, and pirated) and they want to launch it easily from command line MESS, then they will for sure drop other collections in favor of our software lists.
But if they want collections including demos, translations and hacks (which are often as good as the original software), or if they only want a “perfect collection” of the official software, then they will never abandon other collections to use our software lists.

And it is also for these users, which are not interested in our software lists, that MESS keeps supporting the old loading procedure, through absolute paths, so that files from the different collections can still be easily launched in MESS πŸ™‚

[1] Actually, GoodTools have many more qualities than the few I focused on: they can fix NES headers, they can convert SNES and MegaDrive images from one format to another, etc. However, I wanted to give reasons why people might want to collect Good sets and probably hacks, demos and translations are more appropriate than these additional features πŸ˜‰

Written by etabeta

May 11th, 2010 at 8:56 pm

Posted in MESS

MESS how to, episode II: Apple Macintosh Plus

without comments

This time I want to talk a bit about Macintosh Plus emulation in MESS. Do you know this machine? If not, time to fill the gap in your computer history preparation: pages at Wikipedia and at

My interest on the system first surfaced in Summer 2008, when I spent some days trying to figure out how to make this system work and run some good old Apple software. Unfortunately, I had to give up due to some serious crash in MESS, when turning off the emulated machine after OS installation. Given that the bug has been fixed last October (thanks Arbee), I really wanted to give another chance to this old Apple system and the following impressions/instructions/remarks are the result :).

Before starting, I need a disclaimer:

1. the following instructions are targeted on emulating a Macintosh Plus in MESS, only assuming you can use StuffIt 4.0.1 on the emulated macplus. They represent the best way I have been able to find to set up MESS for this driver, but there might be easier ways: please, let me know if you find ways to simplify some of the necessary tasks below, and I will update my notes accordingly πŸ™‚
Also, I think the same instructions apply as well if you want to emulate later mac machines in MESS, but there might be shortcuts compared to what I have written here.
2. while the IBM PC Jr. howto was an easy and OS-independent guide (i.e. you can follow the same steps with MESS on Windows, on MacOSX or on Linux without a single change), this howto is definitely more complicate because files for Macintosh are not very happy to be used in Windows (nor in latest Mac OSX, fwiw), and therefore you will need to dirt your hands with file manipulation outside the emulator.
3. the guide below would not have been possible without Anna Wu‘s assistance (thanks a lot) and without the wonderful Mini vMac set up page. Any mistake, on the other hand, is definitely my fault.

Ok, we are now ready to start the proper how-to. First of all, let’s run

mess macplus -listmedia

to see which media are emulated for this system: there are two floppy drives (“floppydisk1 (flop1)” & “floppydisk2 (flop2)“) and two hard disks (“harddisk1 (hard1)” & “harddisk2 (hard2)“)! good to know!

Let’s try to fire up emulation as we did with the Macintosh Plus, then:

mess macplus

mmm… waiting…


what? where is the BASIC prompt? ow, right, we are not anymore in early 80s with this machine: we have to install an OS to be able to play with this system… at least, this will mean that we will be rewarded with a flashing graphical environment once we are done πŸ˜‰

Therefore, we now start a more technical section, to answer to the question:

1. How to install the OS?

1.1 We need the OS!
Luckily, Apple still offers its old OSes, so we can simply go at Apple’s System6.0.x page and fine the files we need. Ok, but which files we need? Here, unfortunately, things start to be messy…

First of all, MESS currently only supports 400k and 800k floppy disks. Therefore, we can forget about the two System 6.0.8 1.4MB disks.

This leaves SSW_6.0.3, SSW_6.0.5 and SSW_6.0.8 (in 4 800k images). These files corresponds to Install Disks (to use modern terms) of System 6.0.3, 6.0.5 and 6.0.8, respectively. All of them work perfectly fine for our goal (but read until the end of this section before choosing which one you want to download, depending on the OS you are using). But, when you download them, you will notice that they are in .sea.bin format… and Windows does not know how to handle them!
The good news is that, if you are using MacOSX, you can simply open the files with Command + O and they will decompress (since they are Mac Binaries). At the end, you must simply add the .image extension to the four 800KB disks, if they don’t have it already.

If you are using Windows, on the other hand, then you must use an external program to decompress the System Disks into something you can actually use. The best choice is StuffIt, and I personally suggest StuffIt 9 (that can be downloaded from the Mini vMac setup page). Once you have installed this program on your Windows PC, then you will be able to decompress the System disks… almost…

In fact, it turns out that both 6.0.3 and 6.0.5 disks will decompress perfectly, if you decompress them twice, and will result in 4 .image files around 800KB as expected (System Tools, Utilities 1, Utilities 2 and Printer Tools), but 6.0.8 disks will remain around 400KB and if you try to decompress them once more, StuffIt will complain about “Unrecognized Format”.
Given that the 1.4MB images decompress fine, I think the problem is in the images themselves (moreover, on MacOSX, even if they decompress fine, they keep their SSW6.0.8_etc. names instead of taking the correct names, so something weird is definitely going on with these images).
Whatever the reason is, this basically means that Windows users would better stick to System 6.0.5 or ask to some friend with a Mac to decompress the files.

1.2 We need an Hard Disk where install to!
Of course, the OS disks alone are not enough: we need a place where the OS can be installed. In other words, an Hard Disk! Since MESS supports Hard Disks in .chd format (go back to the -listmedia output, if you don’t remember), we must create a .chd file. This can be created by using CHDMAN as follows

chdman -createblankhd my_macplus.chd 200 13 47

This will create an uncompressed writable Hard Disk of 60MB, named my_macplus.chd, in your MESS directory. The parameters used above can be changed (they represent cylinders, heads and sectors of the HD, respectively) and the size would change as well. However, currently the mac drivers in MESS will only access the first 20MB of the HD, due to a limitation of the Apple Formatting Program in System 6 (with an external formatting program, you might possibly use larger Hard Disks, as long as you have a single partition on them).

1.3 We need to install System 6 on the HD!
Now we are ready to launch MESS (at last) for the installation of System 6. However, before doing so, keep in mind that we are going to emulate a computer in MESS, and therefore a few remarks are in order about the keyboard:

  • If we want to use the usual MAME/MESS interface (i.e. TAB to access the menu, ESC to leave, P to pause, Insert to speed-up emulation, etc.) we need to press ScrlLock. This will switch MESS from fully emulated keyboard (where e.g. P only prints a P on screen, and does not pause the emulation) to partially emulated keyboard (where P also pauses emulation)
  • MESS offers Natural Keyboard mode and Emulated keyboard mode: say in our keyboard β€œShift+0β€³ gives a β€œ=” symbol instead of a β€œ)” like on a Macintosh Plus; then in Natural mode, by pressing β€œShift+0β€³ we would simply get a β€œ=”, while in Emulated mode we would get a β€œ)” as if pressing β€œShift+0β€³ on the Macintosh Plus. Both modes can be useful in certain moments, so keep in mind that we can switch between the two by entering the TAB menu and choosing Keyboard Mode.

With this in mind, let’s launch

mess macplus -hard1 my_macplus.chd -flop1 "C:\path_to_my_OS_disks\System Tools.image"

where “System Tools.image” is the first uncompressed disk, say of System 6.0.3. Then, we will finally see something better than a Floppy Disk with a question mark!

Once arrived at the “Desktop”,

let’s open the System Tools. To open it, you can either double click on the icon, or press Command + O. Notice that, by default, Command is mapped to the left Ctrl key, if you are not using the keyboard in Natural mode, but you can remap it from the TAB menu if you want (e.g. I use AltGr on my EEEPC). Also, remember that in Natural Keyboard mode, you cannot access directly Command, so you would like to switch to Emulated Keyboard mode whenever you want to use Command (and then switch back to Natural Keyboard mode as soon as you don’t need it anymore).


Opening the Setup Folder, we find the program we are looking for: Apple HD SC Setup, i.e. the program which can format our hard disk as System 6 requires. Opening it, we can start the HD init procedure


Once the procedure is completed, we are prompted back to the Desktop and now the HD is right there (right below the System Tools πŸ˜‰ )


awaiting for the OS installation. Therefore, we now need to run the Installer (here the 6.0.3 version)


until it successfully completes and we come back to the “Desktop” and we can Shut Down the system (highly recommended after the installation).


Restarting emulation with only the hard disk, we have a working Macintosh Plus with a brand new System 6.0.3 installation!


Notice, that System 6.0.5 has a slightly different Installer

and that System 6.0.8 (if you have managed to decompress it) comes without Apple HD SC Setup, so you have to init the HD with the System Tool disk of 6.0.3 or 6.0.5 and then to install 6.0.8… Probably, the easiest solution for Windows users is to simply use 6.0.5, given that in 6.0.3 some utilities might have problems.

Concerning installation options, defaults are fine for most uses. However, you might want to choose “Customize” and “System Software for Any Macintosh”, if you want to use the same HD with other (later) Apple systems in MESS.

2. How to add some programs?

2.1 Built-in software

Unfortunately, System 6.0.3 and System 6.0.5 are not very rich of software installed by default. System 6.0.8, on the other hand, offers something more, for you to play with


In particular, notice Key Caps, which turns out to be a very useful utility, especially if you press CapsLock during emulation in MESS and you cannot find any other way to unlock it in the emulated macplus!

2.2 External software
Of course, to really test MESS emulation, the small amount of built-in software is not enough. Then, you have to look around in the ‘net to find some old software compatible with System 6. And now things become *really* messy, even worse than with OS…

Indeed, you will soon find out that basically no original disk image can be found. The best you can find are some compressed directories containing the original programs… This is pretty bad for two reason: first, nobody seems to have thought about preserving the original media; second, it means we have to put back these compressed Mac files on a floppy while using a different OS! And dealing with Mac files on other OSes can create many headaches…

Most System 6 software I found is in either .sea.hqx.sit format or in sea.bin format. The former is a compressed BinHex archive, the latter a MacBinary archive. Both of them are quite hard to handle on any modern OS (MacOSX included), unfortunately.

What follows is the simplest way I found to convert files containing System 6 programs into something we can use in MESS. In addition to StuffIt 9, mentioned above, two more programs are required (both can be found at Mini vMac setup page): StuffIt 4.0.1 for Macintosh and HFVExplorer. The former is simply a System 6-compatible version of StuffIt. The latter is a wonderful tool to open, create and modify Macintosh formatted floppy disks, but it’s unfortunately only for Windows. If you are running Linux or MacOSX you might want to use it through Wine, or you might take a look to HFSUtils (more details in next section).

Now, assume you are a Windows user and that you have the two mentioned tools. Then, you have to start HFVExplorer, choose “File>Format New Volume” and create a blank disk image of 400KB or 800KB (better) size. Therefore, you have to reach the directory that contains StuffIt 4.0.1 and copy the .bin file to the blank disk. Finally, closing HFVExplorer, you have a Mac disk containing StuffIt Installer (which will be fundamental to open all .hqx and .sit files in the emulated macplus).

Now, start MESS to install StuffIt on the macplus as follows:

mess macplus -hard1 my_macplus.chd -flop1 my_stuffit_disk.dsk

Open the Disk Drive and launch the Installer


Mind that, if you have installed System 6.0.3 you will be prompted with the following


Hence, I simply suggest to use 6.0.5 or 6.0.8, so that you reach


a successful completion. Now we are finally capable of “Unstuffing” files in the emulated machine, and therefore we can decompress some programs which comes as .sit.bin


But still we don’t know exactly how to put .hqx files on disks…

I have actually had many problems with these files:

  • if I try to decompress them with StuffIt (both with StuffIt 9 on Windows and with the MacOSX version on my macbook) they don’t work
  • if I put them as they are on a floppy with HFVExpolorer, either HFVExplorer complains about broken hqx header, or the files are not recognized by StuffIt 4.0.1 in the emulated macplus
  • if I open (with an hex editor) one of the hqx files which HFVExplorer complains about, they start with the string SIT, meaning they are in fact either compressed twice (i.e. they are .sea.hqx.sit files, with .sit being an additional StuffIt compression step which gets ignored) or not BinHex-encoded anymore (i.e. they are .sea files only, even if they have kept the .hqx extension); in any case they are not .hqx files and HFVExplorer is right to complain
  • even worse, in Windows many .hqx files decompress to 0KB getting somehow broken in the process…

At the end, I found out that the key point is not to decompress them! The right thing to do is to use StuffIt 9 to “Encode” them as BinHex files and then to put them on a .dsk image with HFVExplorer. If HFVExplorer says the resulting .hqx file is broken, then I go back to the original file and I use StuffIt 9 to encode it as MacBinary and most probably this time HFVExplorer will be happy. So far I haven’t found any file which would not work once re-encoded as either BinHex or MacBinary!

Once you have put some .hqx files on a disk, then you can install them on the emulated macplus! Let’s simply launch MESS

mess macplus -hard1 my_macplus.chd -flop1 my_game_disk.dsk

open StuffIt 4.0.1 and Expand the content of the disk to your main drive. Then quit StuffIt and launch the game!

Update: Justin Kerk reported that the files which HFVExplorer complains about (for broken .hqx headers) are probably failing due to a very old Mozilla/Firefox bug which causes .hqx to get “decoded” in Windows without the extension being removed. In this way, Windows and HFVExplorer think they are .hqx while they’ve been already decoded. However, the trick of re-encoding them with StuffIt 9 fixes them in any case.

2.3 Directly writing to the Hard Disk

Unfortunately, at the moment there is no way to directly write files to the HD, unless you are using Mac OSX < 10.6. Indeed, in MacOSX 10.4 and 10.5 you can

  1. convert the chd into a raw image with
    chdman -extract my_macplus.chd output.raw
  2. rename the resulting file as output.img (notice the .img extension)
  3. open and browse output.img by using MacOSX, possibly dropping files into the raw image
  4. unmount the image and reconvert it to .chd with
    chdman -createraw my_macplus.raw my_new_macplus.chd

Using a PPC Mac with 10.4, you can even do more: you can run OS 9 in Classic then and directly run self-extracting files!

On the other hand, with Snow Leopard (MacOSX 10.6), none of the above is possible anymore. Hence, you can only move files from a Floppy Disk to the HD.

Another possibility is to use HFSUtils (which is available as a package on Fedora 12: yum install hfsutils). You can

  1. convert the chd into a raw image with
    chdman -extract my_macplus.chd output.raw
  2. use the command hmount to mount output.raw
  3. use commands like hdir and hcopy to manipulate the disk

The only problem which might affect this procedure is the issue with corrupted .hqx headers. In the worst case, it could result in files that StuffIt 4.0.1 does not recognize in the emulated macplus. Given that this is probably related to a Firefox bug, you might well not experience it, or you could try to re-download the files using wget.

The good news, though, is that the Floppy->HD transfer is only required once: as soon as the files are on a HD, you can then easily move them to another HD, without using floppies. Simply launch

mess macplus -hard1 my_macplus.chd -hard2 my_other_macplus.chd

and you will be able to move files from a .chd file to another.

3. Can we play, now?

Yes, we can… Even if a few games do not work on a Macintosh Plus (e.g. Connect 4 and IAGO require at least a MacSE to work, or the mouse will get stuck and won’t move vertically)






World Class Leader Board



Billiard Parlour


Stunt Copter

Dark Castle


Missile Command

Star Wars

Oh More Lemmings (Demo)

I also found a game (Downhill Racer) which crashes the macplus, but I’m not sure it’s supposed to work on this hardware

4 Tips & Experiments

4.1 Unstuffing stuff…
First of all, I suggest to change the default StuffIt 4.0.1 settings. Namely, I suggest to let the program ask you where to unstuff the .hqx files.

This way, you can simply select the file from the Floppy Drive and decompress it to the main drive without need of moving it in advance. When you have to decompress various files, it might be a nice trick. Also, notice the small but very useful option to decompress files in a given folder but automatically create a subfolder if more than one file is in the archive!

Moreover, I recall that one can speed up emulation by pressing Insert when the keyboard is in Partial Emulation mode. This helps a lot when you are waiting for a game to decompress.

4.2 Other drivers…
Notice that all the instructions of the howto apply to later Mac drivers, like Macintosh SE. You can also take your macplus.chd and use it in the macse driver, avoiding the need of re-installing System 6.

4.3 No hard disks…
In MESS you can also do some experiments: if you launch the macplus with no chd file, inserting a the System Tools disk in the first floppy drive and a game disk in the second (of course, containing an uncompressed game since no HD means no StuffIt 4.0.1), can you play the game?

…and at last,

That’s All, Folks!!!

Addendum: Many thanks to Sune and R.Belmont for the additional info about old Mac OSX versions and about HFSUtils, and Justin for reminding me about the Firefox bug.

Written by etabeta

April 10th, 2010 at 6:35 pm

Posted in MESS

MESS how to, episode I: IBM PC Jr.

without comments

First of this series about “How to emulate old home computers in MESS”, is the IBM PCJr. If you have never heard about this system, you would better spend next 5 minutes to read the correspondent Wikipedia and pages (more links at the bottom of the page).

The system has probably been a quite interesting beast back in the early 80s, with its graphics capabilities which extended the IBM PC CGA, its 3-voice sound chip from TI, its two cartridge slots and its built-in joystick ports. Too bad I’ve never been able to see one directly.

However, the reason I started from this system, it’s because MESS is pretty well capable of emulating the PC Jr., thanks to the wonderful work judge has done on the driver.

Hence, let assume we have dumped the proper BIOS required by MESS and that we have collected some software to be used with this machine, and let’s fire up MESS!

First of all, let’s take a look at which media are supported for this specific machine, i.e. let’s run

mess ibmpcjr -listmedia

and look at the output… mmm, there are 3 printers (which we will forget about for the moment, since I’m not sure how printer emulation works exactly in MESS :blush: ), one tape drive (“cassette (cass)“), two floppy drives (“floppydisk1 (flop1)” & “floppydisk2 (flop2)“) and two cartridge slots (“cartridge1 (cart1)” & “cartridge2 (cart2)“) to play with!! good!

Notice that -listmedia also lists all the file extensions that are supported for each media, so that we more or less know already which media has to be used for the various files we have found. However, we will come back to this pretty soon.

Now, it’s almost time to start the emulator. But first, let’s remember that we are going to emulate a computer, hence a few things have to be kept in mind:

  • If we want to use the usual MAME/MESS interface (i.e. TAB to access the menu, ESC to leave, P to pause, Insert to speed-up emulation, etc.) we need to press ScrlLock. This will switch MESS from fully emulated keyboard (where e.g. P only prints a P on screen, and does not pause the emulation) to partially emulated keyboard (where P also pauses emulation)
  • MESS offers Natural Keyboard mode and Emulated keyboard mode: say in our keyboard “Shift+0” gives a “=” symbol instead of a “)” like on a IBM PC Jr; then in Natural mode, by pressing “Shift+0” we would simply get a “=”, while in Emulated mode we would get a “)” as if pressing “Shift+0” on the IBM PC Jr. Both modes can be useful in certain moments, so keep in mind that we can switch between the two by entering the TAB menu and choosing Keyboard Mode.

Ok, we are ready to start. Let’s launch

mess ibmpcjr

and here we are: the good old IBM logo is there awaiting for us

with a counter in the bottom-right corner which is an internal test for the available RAM. MESS emulates a PC Jr. with 640KB of RAM, so we have to wait until the system finds this amount. A few seconds (you can always speed up emulation by pressing ScrollLock, to enable UI keys, and then Insert, to actually fast-forward emulation), and we are rewarded with this screen:

What?!? “Error B”?!? oh well, it’s a keyboard related problem and we can simply ignore it for now (sometimes it does not even show up). Let’s press Enter and go on πŸ˜‰


let’s wait for some time (the fast-forward trick with Insert is handy once more), and here we are with the IBM BASIC Prompt


at this point we can either write our own basic program, or we can decide to try some of the games and programs which can be found floating in the web. Let’s start with some carts: either access the File Manager in the TAB menu and load the cart you want to try, or restart emulation with

mess ibmpcjr -cart1 "C:\my_cart_folder\game.jrc"

(replace “game” with the name of the file you have, zipped images are fine as well) and see what happens…

IBM logo, Error B, Press Enter and… wow, the cart loads and the game starts (CrossFire in this case)!

pcjr_5 pcjr_6

mmm, joystick does not work (it seems to stick to Left), but Keyboard works pretty fine! I,J,K,L to move and E,S,D,F to fire. Simple game and simple commands, but not bad.
Other game carts work pretty much the same, they load automatically and they use simple controls: either I,J,K,L or Keypad 8,4,6,2 used for moving the character and some action button that you can usually find around the F key, or the Spacebar.

Mine Shaft
pcjr_7 pcjr_8

pcjr_9 pcjr_10

Pitfall II
pcjr_9 pcjr_10

and the BASIC cart, which is the main reason why we have two cart slots: one for the BASIC cart and one for a cart porgram which requires BASIC.

Unfortunately, I haven’t been able to make Color Paint work, so I’m not sure how well the two slots work in MESS.

What now? mmm… tapes? MESS supports .wav files for the cassette media, but I have none. so I cannot really test them (I think there exists at least a BASIC version on tape, and maybe some Utility program as well… I will probably try to save some BASIC program on tape, one of these days, and we will see how it works out)

So let’s skip cassettes, for now. What else? Floppies!! Back to command line, we start

mess ibmpcjr -flop1 "C:\my_floppy_folder\game.dsk"

(replace “game” with the name of the file you have, zipped images are fine as well) and see what happens…

IBM logo, Error B, Press Enter and… wow, floppies load as well and the game starts! In this case, King Quest for the PC Jr. fires up in all his magnificence
pcjr_12 pcjr_13

Too bad the main character ends up at the far left corner of the screen and does not move (the Joystick problem again?)

MS Flight Simulator is another old game which supported PC Jr.

pcjr_15 pcjr_16

I don’t seem to have more PC Jr. floppies, so let’s see what other PC Jr. files can be found in the ‘net… .BAS and .EXE files…

.EXE cannot be used: we would need to create a blank floppy disk, to insert this executable (possibly together with some Disk Operating System to make the disk boot) and finally to load it in MESS in the hope it works. While this might be possible with some tool like WinImage, it’s definitely beyond the scope of this “How to” guide and will (maybe) be covered in a future episode. For now, let’s forget .EXE as well.

What are .BAS files, then? If you open them with a text editor, you find out they are the BASIC listing of some program. Then we can use them in MESS!!

Start again MESS without any media and reach the BASIC prompt. Ok, now we can write down the BASIC program! But how to avoid typing mistakes? And what if there are thousand of lines of code? Wait, don’t give up, we can use the Paste command of MESS: let’s simply Copy from the text editor the BASIC lines and Paste them in the emulated system by using Shift+ScrlLock.


It’s a bit strange to see the text getting written without any input from you, but it’s definitely better than typing each character one by one πŸ˜‰
Mind that it can be safer to split large amounts of text into smaller chunks and paste them separately.

However, after the BASIC listing has been copied, just type run


and it works! (as long as the program is compatible with your version of BASIC πŸ˜‰ )

Is that all, folks? No!
You might have noticed that when we examined the -listmedia output, there were many formats supported for the floppy drives (some with exotic extensions like .d88). Why is that?

Simply because Micko has recently done an astounding work cleaning up floppy emulation in MESS. As a result, we now support, directly in the core, most raw disk format (from Teledisk, to CQM disks, etc.) and therefore all systems using a floppy controller are capable of reading all those formats and of looking for data they recognize.

But then, hey, maybe we can give a try to .img and .dsk files available for IBM PC compatible machines… and indeed, many bootable disks (cough… TOSEC bootable disks collection.. cough…) properly boots in the IBM PC Jr. driver!

pcjr_19 pcjr_20
pcjr_21 pcjr_22
pcjr_23 pcjr_24
pcjr_25 pcjr_26
pcjr_27 pcjr_28

of course, titles requiring more memory or other graphic modes (EGA etc.) won’t work, but there are enough compatible titles to keep an user busy for some time…

Some more PCJr. links

Written by etabeta

April 9th, 2010 at 9:13 am

Posted in MESS

NES on fire! (part 1)

without comments

Ok. The code update I worked on during last weekend is finally ready for submission. Let me take some time to fully explain why these are definitely good times for NES emulation in MESS and why MESS is no more light years away from NEStopia (even if we still have quite a long distance to cover up)!

As a first step, once I had fully fixed MMC3 emulation (as the screens from Nintendo 2-in-1 & 3-in-1 multigame carts shown in my previous post witnessed), I worked on adding MMC3 clone mappers. This was quite an easy task, thanks to the wonderful original design of the driver (Brad Oliver had done an astounding job with it, and thanks to the recent updates by Heretical One is now very easy to translate most real behaviors in MESS code) and thanks to the available documents

Samurai Spirits by Rex Soft (mapper 14)

Crayon Shin-Chan and Sangokushi 4, both by Future Media (mapper 117)

Super Fighter III (mapper 197)

They still present various glitches in-game, but I’m not sure what the problem is exactly. In the meanwhile, they are playable.

On the other hand, no particular glitch affects either K’s Panda Prince (mapper 121), a Donkey Kong Country rip-off

or Family Kid + Aladdin 4 (mapper 134)

or Thunder Warrior by TXC (mapper 189)

Then, it was time for some Waixing showtime. Waixing is a very prolific Asian producer, responsible for a lot of unlicensed Chinese translations of Japanese games and many “original” titles as well. Now MESS supports:

their Sugoro Quest (mapper 191) and Super Robot Taisen (mapper 194) translations,

their Chaos World and Captain Tsubasa translations (both on mapper 195),

their Dragon Ball Z translations (both on mapper 199)

plus a few (possibly original) other games on Mapper 192

and a few bootlegs on Mapper 242 and 245

I’m pretty sure that there exist at least other 2 versions of the first game (Waixing Zhan Shi), running on different mappers and marketed by other companies… I think we now run them all (but I don’t know Chinese, so I cannot appreciate possible differences among the versions)

Talking about Waixing, I also fixed mapper 115 (labeled as 248, previously) which was not booting some of the games like Shisen Mahjong 2 and Thunderbolt 2
Now, you can see they both work. And that’s all for Waixing games.

Back to other pirate carts, I added a couple of Super Mario bootlegs (running on mappers 50 and 106, respectively)

and I fixed both the SMB bootleg running on mapper 40 (which maybe had been working in very old MESS versions, but it’s been broken at least since 0.123)

and the game selection in Mario 7-in-1 (now you can enjoy most of Mario pirate games in a single cart, together with SMB2 & 3 and Mario’s Missing πŸ™‚ )

While at it, I added/fixed a bunch of multigame cart mappers (namely 205, 217 and 231)
All the games on the each cart should be working, to my knowledge.

Finally, to conclude the pirate mappers review, I have added IRQ triggering to Mapper 91, and Mortal Kombat 2 is now playable (despite a couple of graphical glitches, here and there) as well as some other terrible pirate beat’em up

Actually, I also added mappers 249 & 252, but they only partially work, and mappers 187, 198, 208 & 215, which are completely not working at the moment. Hence, no snaps for the latter ones.

Written by etabeta

October 7th, 2009 at 4:55 pm

Posted in MESS

NES on fire! (part 2)

without comments

However, in case you wonder, my efforts have not been only directed towards adding new mappers, but also towards fixing very old and annoying issues. Hence, there are a few chances that some of your favorite games might have been fixed in addition to the ones I show below.

Let’s start from Bandai. Mapper 16 was using incorrect mirroring. As a result of the fix, we have a lot of improvements (before vs. after):

While at it, I added support for Mapper 159 (same as 16, but with different EEPROM communications… not a big deal in MESS, since at the moment we don’t emulate the EEPROM at all… it’s on the todo list however).

I added also support for Datach games (mapper 157, same hardware), but they cannot work without Barcode reader emulation (which is not implemented at all). Finally, I added mapper 153 (similar to mapper 16, but no EEPROM) and it’s working quite well (with the exception of Famicom Jump II, which is not properly mapper 153).

Passing to Jaleco, Mapper 18 was having huge IRQ issues, e.g. in Pizza Pop, and mirroring issues as well. Now you can compare these games before and after, and see that everything works much better (first snap series from Pizza Pop, second one from Plasma Ball):

Also, this fixes the crashes reported with many of these games.

Then there is Namco. Mapper 19 was having some IRQ problem and needed mirroring to be Horizontal at start (actually, many emu use mapper 210 for some of these games, but I can see no big issues in the current code so I stick to mapper 19 until proven wrong πŸ˜‰ ). Comparisons should speak by themselves

Another announcement I’m proud of is that Mapper 48 (used by some Taito games) have been finally added to MESS. This means that we can finally play Bubble Bobble 2, Don Doko Don 2 and a few other nice games without changing emulator πŸ™‚

Also, talking about Taito, small glitches in Mapper 82 have been rectified

Mmmm…. Jaleco, Bandai, Namco, Taito… am I forgetting any big Japanese producer whose game are now more enjoyable in MESS? oh yeah! Irem!!!
Irem Mapper 65 got some attention too! Fixing IRQ issues (IRQ was triggered at the wrong time), we are now able to see play Spartan X 2

And then, I noticed that Mapper 67 (by Sunsoft) was suffering of IRQ issues as well. This was a bit harder to fix properly (and there is still a 1 line glitch which cannot be fixed without rewriting the whole video emulation) but the improvement in Fantasy Zone 2 should be clear

oh, and talking about Sunsoft games, Gimmick! regression has been fixed (the game required to load PRG in 0x6000-0x7fff, and we were not doing that anymore for some reason)

Another mapper was using the wrong mirroring: Mapper 118. Thanks to Disch’s docs, I was able to code the correct mirroring and the fixes pay back! (screens from RPG Game of Life and Pro Hockey Sport)

Also, Firewave’s regression tool has been useful to catch at least two crashes which would have never been noticed (by me): a 2-in-1 pirate game (which does not crash anymore, but does not work either) and Wally Bear which now works with no problems

Not all the news are good, unfortunately. Mapper 5 requires a few tricks that it’s not clear how to implement in MESS; Mapper 185 is not properly emulated and this results in Mighty Bombjack and Seicross being not working; Mapper 64 and 158 (used mostly by Tengen games) are basically impossible to emulate properly at the moment. About the latter, some Tengen games have always been playable with no issues (e.g. Shinobi & Rolling Thunder) and I have improved Klax to the point that now it can be played to some extent
but there are still MANY glitches, as you can see. And games like Skulls and Crossbones simply show nothing. Something to look at, in the future.

I also want to take the chance to complain about the whole iNES format (or better, about the mis-use it has been subject to for some time): there are at least 6 cases of multiple incompatible boards using the same mapper number!!! This makes impossible to properly emulate both variants of Mappers 32, 34, 78, 113, 153 and 242 without checking the checksum of the game you are loading!! However, after adding a small hack (clearly documented in the source) we can now emulate correctly the following games

Major League (mapper 32, without and with the hack in the snaps)

HES 6-in-1 (mapper 113, without and with the hack in the snaps)

Cosmo Carrier and Dragon Quest VIII (which would not work at all by using their standard mappers)

Mission Impossible II and Famicom Jump 2 use this small hack as well, but they still do not work in MESS for other reasons. Notice that, UNIF dumps of these 6 games would not suffer of these conflicts.
That’s why I dream about the day all iNES files will be replaced by UNIF ones (even if MESS still does not fully support .unf images currently… but I’m working on it, even if it will take some time)

Finally, I have added preliminary support to the remaining FFE mapper (used by an old copier… the dumps using it are labeled as hFFE by GoodNES). I have basically no interest in emulating these 3 mappers, but the source is there if anyone wants to work on them.

This has been a lot of work, as you may guess, but at least now that it’s done we won’t need to go through all the mappers again πŸ˜‰

See you…

Written by etabeta

October 7th, 2009 at 4:54 pm

Posted in MESS

Older news

without comments

Last week, I kept working on NES emulation for MESS. I made some progress (mainly on some pirate mapper) and I posted on MESS boards the results…

To avoid the screens to get lost in the number of replies, I think I’ll post here them as well:

* Fixes to Sachen mappers which were suffering of corrupted graphics [Oct 1st]

Mahjong Academy (mapper 150)

Happy Pairs (mapper 150)

Strategist (mapper 150)

Poker III 5-in-1 (mapper 243)


* Clean up of MMC1 & MMC3 (fixing scrolling glitches in Final Fantasy 3 and adding/fixing some MMC3 clones) [Oct 2nd]

Mapper 74 (no chinese text was displayed previously)

Mapper 12 (brand new addition to MESS)


* Additional clean ups and bugfixes [Oct 2nd]

Mapper 114 (used by The Lion King)

Two Nintendo multigame carts based on MMC3 (on Mapper 37 and 47, respectively)
The 2-in-1 cart was already in MESS, but the selection menu graphics had been corrupted between MESS 0.130 and today. Now that this has been fixed, I know of no regressions compared to the older MESS versions! yay!!

Other multigame carts got their graphics/banking fixed (so that now they are completely playable)
These were running on mapper 45 and 49, respectively

Finally, a Super Mario 7-in-1 cart has been added (on mapper 52)
but it turned out to have some banking problems which make it unplayable…


All the above changes have been available in MESS svn since last friday… but I’ve worked more on the driver during the weekend and soon I’ll post some nice screen to show what I have added & fixed. Stay tuned… πŸ™‚

Written by etabeta

October 6th, 2009 at 3:54 pm

Posted in MESS

By continuing to use the site, you agree to the use of cookies. more information

The cookie settings on this website are set to "allow cookies" to give you the best browsing experience possible. If you continue to use this website without changing your cookie settings or you click "Accept" below then you are consenting to this.