David Haywood's Homepage
MAME work and other stuff
November 29, 2011 Haze Categories: General News. 42 Comments on C-C-C-C-Combo … Ultimate MAME 0.144u1 (MameComplete?)

Ultimate MAME 0.144u1

The main official complaint with regards my previous ‘UltimateMAME’ proof of concept seemed to be the merging of everything into the single MAME tree. While I personally consider this an advantage (less places to look = less confusion) sometimes compromises have to be made in order to get things accepted officially.

Therefore, I present, based on the current codebase, a new proof of concept.

This, instead of combining the folders , adds a new build target to the system ‘complete’

The basic changes are still very simple, the mame.mak / mess.mak files have been reorganized a little to support what I’m doing, a simple tool has been created to merge .lst files to a final .lst file (right now it just joins the files, but additional validity checks could be added)

To support this the shared systems between MAME and MESS (where retail console units were used as the base for arcade machines) have been put in their own shared.lst to avoid conflicts, and an additional set of rules have been added to the makefiles to build the correct .lst for each target.

This, if accepted (and there really is no good reason it shouldn’t be, the base changes are legitimate and useful progress regardless) will reduce the actual number of files needed to create a combined build down to 2. The ‘complete.mak’ and ‘complete.c’ in the ‘complete’ folder. Therefore, even if a decision to not include those 2 specific files is taken it will be a LOT easier to maintain externally anyway.

From the point of view of Mamedev this allows the projects to maintain their individual identity, and keep the folder separation.

From the point of view, or somebody working on cross-project drivers it gives the option to build a single combined binary as a target. As an added bonus, if you have a single ‘Complete.exe’ binary built, and want the individual MAME.exe or MESS.exe out of it then everything you need is already built, so changing the target in the makefile will give you the split build in a matter of seconds, no need for a new rebuild!

For people who don’t care about having a combined binary this is a 0 impact change, absolutely nothing about the project work flow changes, and the combined target can happily be ignored. By default MAME.exe / MESS.exe will be built, you have to specify that you want a combined binary.

This is in essence win-win for everybody.


Binaries / Source stuff
The following MAME/MESS sync positions were used:


Both being slightly newer than 0.144u1 on the ‘Better error handling for softlists’ change.

After combining those sources, the following diff was applied to update the build system as I describe above.
That still leaves the default build target in the makefile as ‘mame’ change it to ‘combined’ to get the combined build.

Combined Source here
64-bit Binary here
32-bit Binary here

I’ve still had some issues building the tools, but it should be possible to resolve those quite easily, it just wasn’t necessary for this 2nd proof of concept, which was targeted at resolving the issues MameDev had with the first patch.

Fingers crossed that the basics of this will actually be accepted, I can’t think of any legitimate reasons why it wouldn’t be, but you never know with Mamedev these days… Anyhow, it’s all been submitted yet for some reason I still have a bad feeling I’ll come up with answers to all the problems, then just get radio silence instead of a real reason for things not being included tho…

Given that I’ve called the build target ‘Complete’ (which is a better description of it) and the exe is therefore complete.exe maybe I should call any future builds produced like this ‘MameComplete’ as they represent a more complete Mame build than the baseline. The current name was just really based on the most complete version of Windows being the ‘Ultimate’ editions ;-)


Mini Game Review – Willy Wino’s Stag Night (Amstrad CPC)

I’ve recently been having a bit of a play with the Amstrad CPC driver, scoping out how well it runs things (definitely room for improvement) and it’s on that system I’d like to highlight a game I think is a good example of classic platforming action.

Released in 1988 by Probe Software, Willy Wino’s Stag Night utilizes the lower resolution, higher colour mode of the CPC to good effect. Unlike many games on the system which overload the screen with action, and attempt all sorts of fancy scrolling at the cost of fluidity Willy Wino’s presents clear graphics, and a solid framerate, boasting some very nice animation of the main character.

The game is a flip-screen ‘collect all the objects’ style game, think Manic Miner, but with multi-screen levels and bigger objects and you’re pretty much there. It’s not the longest game in the world at only 8 levels, but with only 3 lives it remains challenging without ever seeming unfair.

In keeping with the theme of the overall game you’re picking up bottles of Willy’s preferred alcoholic beverage (which would appear to have no ill effect on your protagonist) Enemies are your typical spikes, traps, fire, and a random assortment of other objects, you’ve got the conveyor belts you expect in this type of game and everything is pretty much as you’d expect. There’s no music, just a little tune each time you pick up an object and the sound of your footsteps, jumping and deaths. All fitting and polished like the rest of the game comes across as.

Overall presentation is good, you have all the option to choose your keys, some brief instructions, and if you leave the game running on the menu you’ll get to see a collection of screens from the game which just makes you want to play more to actually reach them.

The main difficult comes from the movement speed, your character is quite slow, no faster than any of the enemies, which means you have to carefully plan what you’re going to do, when you’re going to make a run for it. You turn slower than the enemies, so indecision can be fatal, also like most games in this genre it’s important to get the jumps right, jump into a spike and you’re history. Again, this never feels unfair, and once you get the hang of the timing you’ll be able to anticipate most dangerous situations well. To keep you on your toes there is a timer in the form of the ‘Air’ bar top left, so you can’t just hang around forever!

All in all it’s classic platform action and a very good example of working to the strengths of the system, there are definitely flashier games but as far as standing up to the test of time goes this one is a gem, and not one to overlook!

Willy Winos Stag Night Willy Winos Stag Night Willy Winos Stag Night

Willy Winos Stag Night Willy Winos Stag Night Willy Winos Stag Night

Willy Winos Stag Night Willy Winos Stag Night Willy Winos Stag Night

Willy Winos Stag Night Willy Winos Stag Night Willy Winos Stag Night

For the purpose of testing the current ‘Ultimate MAME’ build posted here was tested, system ‘cpc464’ and entry ‘-cass willywin’ which is the cassette version from the Software List.

To use, type |tape and hit return (the | character is mapped to the { key here) and then type run” hit return, then press any key.

To start the tape in you have to turn the full keyboard emulation off with SCROLL LOCK, press TAB to bring up the internal menu, Scroll down to Tape Control, select that, scroll down to Play, select that, close the menu with Tab, then hit SCROLL LOCK again to turn the full keyboard emulation back on.. Then wait a while for it to load, enjoying the ‘Bleep Loader’ which owners of both the Amstrad and Speccy will be very familiar with ;-) In terms of emulation quality, I didn’t notice any problems at all with the emulation of this title.


Mini Game Review – Ghouls (Amstrad CPC)

When somebody says ‘Pacman with Legs’ most people instantly think of Crazy Otto, the prototype which was to later become Ms. Pacman. I think of this. The concept is so simple, so perfect, Pacman, as a platform game.

Ghouls is a game I want to love as a game, but it’s also a game I’d dearly actually love to be able to complete the first level on. Actually merely overcoming the first obstacle is a challenge. This game has issues.

When it comes to collision detection helping you, for example, needing to land on a platform, it seems you need to be spot on, or you miss. When it comes to something killing you, the slightest touch will do it. Controls are also terribly laggy too, you need pixel perfect jumps, but there is a noticeable delay between pressing the jump button, and actually jumping. Worse still, if you actually hold down the jump button for more than a fraction of a second, even if you release it prior to jumping, you’ll jump once again upon landing, usually to your death. Usually this is because falls kill you, jump off a ledge, and you die. Was that really necessary?

This could have been a really good game, but the execution lets it down so badly it really borders on unplayable, it’s a real shame, because you can see what the game designers and programmers wanted to achieve, and they’ve got the visual style of a side-on Pacman game down to a science here. Simply to get screenshots of other levels I had to leave it in running the demo mode, a demo mode where the character makes no attempt to actually play the level, possibly a wise move, death after all is inevitable ;-)

The levels have moving platforms (which kill you) Ghosts which home in on you (and kill you) Gaping canyons (which kill you) Spikes (which kill you) Extending bridges (which usually just end up killing you) and to top it off you don’t even get that many lives, there’s no password system, no checkpoints in the levels, and sometimes the ghosts actually spawn in positions which make the levels seemingly impossible even if you were to get the jumps spot on.

Somebody could go back to the drawing board and produce a really good game out of this, I’m sure, but issues with the controls, issues with the collision, the sheer number of things which will kill you and the lack of any feeling that you’re making worthwhile progress means this game falls at the first hurdle, much like you do 9 times out of 10 when you play it. Worth looking at just to imagine what it could have been, but ultimately terrible.

Ghouls Ghouls

Ghouls Ghouls

Ghouls Ghouls

Ghouls Ghouls

For the purpose of testing the current ‘Ultimate MAME’ build posted here was tested, system ‘cpc464’ and entry ‘-flop1 ghoulsuk’ which is the floppy disk version from the Software List.

To use, type run”ghouls and hit return.. the game will load from the emulated disk drive.

No emulation problems were observed, the game really is just as unplayable on a real system!


You can follow any responses to this entry through the RSS 2.0 feed.

Awsome , thanks for your hard work and dedication to the project.. going to give it a try right now.

Keep it up Haze!

Instead of MameComplete, how about GameComplete?

Grand All-Machine Emulator.

What kind of machines? The acronym tells you!

Unbelievable progress.
I expect a full acceptance of this by MAMEDEV. In fact not doing it is like yelling “hey there are underground reasons we don’t want it and we have the power to just enforce them, so don’t bother us with it”.

Haggybaby I understand Haze wants to keep MAME in the name, both because of compliance to MAME rules and because of the additional exposure “whatever-MAME” has over “whatever-MESS” or “whetever-something-else”.

I have to say I hate MAMEComplete and such names, but I understand why he needs to do it.

KEEP IT UP HAZE! (and find actual co-fighters, not just supporters)

How about “TotalMESS”?


Hopefully they will accept this. I’m looking forward to a single version with all the benefits. 2012 will be a great year … until 12/21/12 at least.


Why not leave it as just MAME?
Many Amazing Machines Emulator ;)

Well so far.. absolute silence..

Ive had a peak at this. good stuff

Theyd have to be mad or stupid not to accept this. I agree with the devs about this being cleaner than putting it all in the mame directery, I had my reservations with your previus patch but this one is good

Also to add, great reviews!

A question Haze.
Instead of waiting for an answer, why not provoke it?
I mean ok you submitted code… isn’t there a public place where you (as co-dev) can ask mamedevs and wait for some reply?
I am not very fond of guerrilla wars (although trained for those – but that is completely different subject hehehe). I am very fond of clear questions and clear answers. In such cases, the side at fault will have to go out and react in a way that will satisfy the public.
We tend to forget (and possibly mamedev themselves too) that MAME *IS* an open-source project.

Why don’t you call it maMEss? Or MAmeSS?
Mostly Arcade Machine Emulator Super System.

You can call it Joe if you want.
I’d still like it.

as Haze was already told yesterday before he sent the diff, Micko was cooking up a different solution which would not require any editing of makefile or splitting .lst files
This is a solution which Micko has worked on for quite some time already and which should be possible to be built pretty soon, even if won’t be officially supported (i.e. reports based on such a build won’t be aknowledge at Mametesters, unless they also happen on the official build).

For this reason Haze’s patch won’t be included, but an alternative way for a custom combo compile shall be available soon for users’ compile

Quite some time?

I have a solution here, which took an hour to create, which solves the problem absolutely…

and splitting the .lst file is *sensible* to avoid duplication etc.

I’m just starting to think Mamedev will do anything to avoid using my code and avoid actually crediting me for any of it. Not that I care about the credit, but it’s starting to seem petty.

As I’ve pointed out throughout all of this, coming up with a working solution isn’t time consuming, and isn’t hard.. the basic changes needed to support such were made ages ago now, yet progress has consistently stalled on the final, easy steps..

and your ‘unless they also happen on official build’ comment is a bit pathetic too… the code built using this is THE SAME.

It’s compiling the same project files, for both project files, just linking them all together and using combined lists to produce the final binary.

Anything to discredit a good idea……

Mamedev really is a dinosaur refusing to embrace or support progress… the fact that it takes this long to get anything done when the solutions are easy, the attempts to write such a build off as in some way inferior. Are there actually any programmers left on the projects any more, or is it all just endless bureaucracy?

oh, finally, somebody else having a version of this, worked on for ages, in private doesn’t benefit _anybody_. Work on such things could easily be done in the active tree where everybody gets immediate benefits.

so say what you will, I’ve instead done it in a very public, open way, which IMHO is the very spirit of MAME / MESS, showing what can be done, for the benefit of everybody.

and sorry, ranty as all that may sound it’s always been the way the best progress has been made in the projects.

Put in the solution, work on it, iron out the bugs, improve it, rework it…. eventually you get where you want to be, in the meantime people see, and benefit from interesting little bits of progress, and gain a greater understanding for why things have been done, and what actual progress means. People can learn from it.

Holding back solutions doesn’t allow any of that to happen, and doesn’t actually get the project anywhere.

When I say “worked on for some time”, I mean that Micko started making makefile more modular when he was porting PinMAME sets to modern core (he called his build PAME). Then, he simply added the pinball skeletons to MAME, and focused on reducing as much as possible duplication in source between MAME and MESS.

These steps has accidentally set the foundation for the combo build.

More recently, he has proposed a couple of ways to build the two exes together since around the time you pushed half a lot of the MESS source into MAME, but previous solutions were partially rejected and a different path followed at the end.

It’s not like that a combo build has been possible for ages and kept secret.
It was simply a long procedure whose byproduct is not only making easier your ultimate build (which has done a very good job at advertising MESS among users, but I still doubt it will attract more devs than those which were already attracted by the separate projects), but also makes much easier to have coexistent trees inside the same src/ directory and/or to create different compile TARGETs without the need of editing or splitting anything.

This solution which has been done now has been possible for a long time… as has the previous one I proposed.

The various (recent) refactoring steps which have taken place just change how it gets done, they don’t make it more / less possible but we’re talking actually possible, without too much work for in excess of a year now. Actually Aaron’s initial change to use .lst files made it _harder_ because before that you could just have a .c file with 2 include lines to merge the lists. I had a build like this over a year ago, but at the time didn’t go public with it because I thought it was so simple and easy to implement that it would be quickly done in the official projects for the benefit of everybody. I’ve only started going public with the stuff now because it’s just a waste otherwise.

A professional project would simply

a) Promote MESS / the console emulation side of things more heavily on the MAME website. This would ensure people actually know the emulator exists, and that it’s provides the console component to MAME.

b) Host all 3 binaries
‘Mame Complete’ for people who want everything
‘Mame’ for people who just want basic MAME
‘Mess’ for people who just want basic MESS

c) Source code, which can be used to build any of the above.

That would be neat, tidy, fair, and reflective of the current state of the projects. The users could get the build they wanted, MESS becomes less of a dirty secret, and the project(s) feel closer to living up to their potential. It would also avoid the confusion of ‘Is MESS 0.144u1 the same base as MAME 0.144u1’ type questions as you recently saw on the forums. The simple answer would be ‘Yes’ and the job for people building packages much easier. They build all 3 packages, from one source tree, which actually then only requires *1* long compile of the main ‘Complete’ build, then the target changing to MAME/MESS to spit out the split builds in a matter of seconds. Right now they have to pull 2 different sources, and do 2 full compiles. That’s more time consuming in every sense. Do you see the benefits of what I’m proposing?

Plenty of successful projects follow this mentality for public offerings, eg Linux distributions offering more complete DVD downloads, or stripped back CD downloads depending on the needs of the user. MAME is very similar to an operating system, it’s a platform on which things run.

Obviously for support with the console side people could still be directed to the existing MESS sites, MESS wiki etc. For support with the arcade side, the existing MAME sites. Support absolutely isn’t a problem, if you’re insinuating that users wouldn’t know if they were running a console or an arcade I think you’re being a bit insulting towards the users…

Doing this would be best for developers and users alike…. Doing this is easy.

It _won’t_ change things overnight, I know that much, but the long term benefits of more people being exposed to a more capable version of MAME, more people seeing direct ties to the MESS project, and seeing what MESS contributes to MAME can’t be a bad thing in any way. There are no disadvantages to having and offering a more capable version of the software, so why do you want so badly to hide it and make things more difficult?

just for completeness sake, it is also possible to include .lst files and fwiw I first compiled a combo build (with a few system stripped out because I was not interested into them) a few weeks after MESS stopped to build a .dll on windows, as a proof of concept for a friend, so yeah I know it has been possible for a long time, if you were willing to fix the source conflicts (at time there were also functions with conflicting names for sega consoles, so it required modify a couple of .c/.h files more, but nothing that couldn’t be done with a very basic C knowledge and a bit of trial and error).

still, a which builds with no changes to the source (and no conflicts at all) and only requiring the addition of a bunch of files and a separate target, is definitely easier for average users.

for the rest, you see insinuations where there are none, exactly like you in the past saw politics where there was not so much (if any). but past is past and I think it’s good to leave it behind and try to make things better ;).

Well I was asking more specifically if you could see the advantages of the single source distribution, and multiple binaries, especially to those packaging mame/mess for linux package managers and the like.

Really right now they have to consider 2 out of sync releases, from 2 sources, and do 2 full compiles.

That reduces to 1 in-sync source, from once place, 1 full compile, and 2 targets which can be built instantly as a result of that.

A properly organized MAME project would acknowledge that MESS is a large part of it, and be distributed like that, it just makes sense.

From the point of view of co-ordination Micko could still take care of Mess specifics, Kale could take care of Mame specifics, and releases would simply be a case of making sure both parties were ready, which isn’t all that different to now anyway.

combile Mame/Mess needs Mame/Mess dev has a all complete Mame/Mess driver to do list…

The only problem with the merge is that MAME won’t be “the accurate emulator” anymore

MAME isn’t “the accurate emulator” anyway.

In the case of most arcade games it’s just the only choice, having the MESS / console stuff there highlights the inaccuracies, and would make them easier to fix. Nothing more, nothing less.

I’ve said before, the perfect example is the CoJag Jaguar stuff in MAME. The ‘accurate’ MAME emulation is might cope with the arcade games on the platform, but with real Jaguar games it manages to run about 1 title in the entire library properly. The accuracy in MAME is nothing but an illusion and always has been.

Also, depsite lower compatibility and a perceived worse level of accuracy MESS is probably more accurate than MAME for a lot of the systems it emulates, even if it lags behind many of the standalones.

The thing with arcade emulation for the most part is that you could train a monkey to do it, it’s not hard, the majority of games are VERY tolerant to low levels of accuracy, and for most systems you only have a handful of games to highlight any issues, none of which usually abuse the hardware too much.

Therefore MAME *looks* like it’s an accurate emulator, when really it’s not, just nothing is stressing the emulation.

Console emulation on the other hand is a much more complex field, you HAVE to be accurate to get a good level of compatibility, there will be games abusing each and every aspect of the system, games which worked by chance. You can’t just kludge something to work, as often happens in MAME, because with console emulation such kludges will usually break more than they fix.

A driver with 50-60% compatibility of 1000 games in MESS is often more accurate than drivers which *seem* perfect in MAME but only have to cater for 1 or 2 games.

Aiming for a higher level of accuracy is good, arcade games alone don’t allow that.

Everything that Haze has said here actually makes perfect sense.

Why expect the end user to compile 2X as much or download 2 different binaries to enjoy the wonderful work and progress that is taking place?

MESS releases are always shortly after a MAME release cycle and it’s actually ridiculous that it doesn’t occur simultaneously, when it has already been proven that it’s indeed possible.

Without setting up a mame or mess.ini
MAME expects zipped ROMs by default to be in roms directory. CHDs are in there respective directories in roms directory as well
(might as well be software lists)

MESS expects zipped BIOS ROMs in roms directory.
Software list directories are basically setup like CHDs are with minor differences.

So exactly what’s the problem with 1 executable which would make everything much more simple on so many levels?

Even though some emulation in MESS is lacking compared to some standalone emulators, what is currently lacking makes up for that when it comes to convenience of how the input system works.

The problem with standalone emulators are that a user has to download them all separately and then figure out how the options work to configure controls/keys to what they want. Every single one is different, which leads to the inconvenience of a learning curve before one can get playing.

If MAME/MESS wish to expand and increase their user base, then it must change and adapt to be much more simple to operate. This Ultimate MAME proof of concept is a step in the right direction for accomplishing this.

How many times have people tried explaining to someone off the street or a first time user, that really knows nothing of how MAME/MESS operate the differences between MAME/MESS and how exactly to get started?

Currently, it seems much more difficult than it really needs to be, which has probably forced many to give-up before they even get started and return to their pop in said game and hit power button on their console.

With some change to the current system, lets think hypothetically what could be possible here. You could have the Ultimate Documentation project that someone knowing nothing could download and immediately have access to a wealth of information.

Image if a single binary could access the new ProjectMESS site as well as AntoPISA’s site or 1 server which would have all this information stored to show the user information instead of them being forced to download it for access to it. The same could be done for mameinfo, history, etc.

If the initial setup process/learning curve is reduced or eliminated then I suspect the user-base would greatly increase.

Does anyone else here thinks Haze is making up fake comments to support his theories?

Unless I’m incredibly good at typing in my sleep……

Anyway, regarding the points just made, yeah, that’s pretty much what I’m saying.

For MESS roms you don’t have to keep religious directory structures tho, mess will look for all software in the standard roms/ path if you want, the sub-folders are entirely optional, just help with organization.

Launching stuff with a softlist will always be a bit different to your basic arcade stuff, but if the frontends start to support it better it will become transparent anyway. Couple of rules for the different softlists and you’re sorted.

ProjectMESS is good, like MAWS, has the potential to be a useful source of information, however I wouldn’t integrate support directly into a binary. Online sites come and go, often if people lose interest the sites vanish, domains expire, and get bought up by scammers and the like. I’ve got at least one audio CD with old ‘multimedia internet’ links where it actually now launches some porn site with hijack scripts because the band simply no longer exist, and didn’t bother to renew their hosting. You wouldn’t want to bake some kind of hardcoded link / resource grabbing into a binary, you’re just asking for trouble. Besides that, I’ll often be using software offline, and I think all USEFUL information should be selfcontained in the package.

In addition to that, and a point I made to ETA a while back, any *online* resource is only going to be relevant for the current version, and a lot of people like to use old ones for reasons of performance or whatever else.. A lot can change

I live for the day that I’ll just point MAMESS (nice name?) to my TOSEC root and everything will be set.


(ok I don’t actually live FOR THAT day)

Hello Haze,

I am trying your ultimate mame program its cool. I am having one problem. I cant run the gameboy game super mario land 2 6 golden coins.

I have the correct gameboy bios and i even renamed the game to sml2 (what the program found it as).

At the command line i typed

mame gameboy sml2

i got a error that said error dmg_bin not found even though it is in the roms directory.

Is the gameboy bios supposed to be in its own folder? the config file doesnt tell you this.

If you could help that would be great!



nah you don’t need any specific folder setup..

it would appear gameboy needs

dmg_boot.bin 256 CRC(59c8598e) SHA1(4ed31ec6b0b175bb109c0eb5fd3d193da823339f)

in gameboy.zip

anywhere in your rom path.

The game Ghouls was originally released for the BBC Micro. I never played the CPC version but on the BBC Micro it was also difficult due over sensitive controls, and being fast, but definitely playable. I recommend you try the BBC Micro version to see how it was originally developed, before being ported.

Ahh interesting, I wasn’t aware of that. The BBC Micro driver was broken for a while in MESS so I didn’t look at it when I looked over some of the other stuff recently.

I’ll definitely see how the two versions compare, because it’s hard to believe anybody considered that version playable enough to actually design the levels it has, so I’ll bet something was lost in the porting.

I think it should be called MACE – Muti Arcade/Console Emulator.

FWIW I’m not putting out a 144u2 build, I don’t consider there to have been any worthwhile changes in either emulator to make it worth doing.

Hey Haze, you still have the cool riders “Let’s remove this rom and see what happens” screenshots?


NM, dox found them, thanks.


Well, in fact, no he didn’t. So, do you have them ? :-)


I just sent the ones I have to dox, but they seem to be the same ones he has.


that’s all I ever got off Guru.

Ok, thanks :-)


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.