David Haywood's Homepage
MAME work and other stuff
March 30, 2019 Haze Categories: General News. 8 Comments on The Importance of Alternate Versions

One of the things I picked up with the money that was donated is the following JAKKS Pacific Spiderman, which has a different, much more boxy looking shell than the more commonly seen one with GameKey port (and the later release of the same form with the port removed)


Spiderman 5-in-1 JAKKS

Various sources indicated that Spider-Man 5-in-1 started life as a game running on the SunPlus SPG110 based SoC (System on Chip), not the 2xx (usually 240) type SoCs found in all the GameKeyReady units. I felt due to the vastly different form factor here, which appears to be an earlier and less refined design (closer to the early SpongeBob unit, which is on even earlier hardware) that there was a good chance that the device pictured would be the version running on the SPG110 hardware.

It was.

While this contains exactly the same games as the already emulated GameKeyReady version it is useful for some very important reasons. Firstly, the Classic Arcade Pinball title is also running on SPG110, and was never ported to SPG2xx to my knowledge. The (undumped, but sourced) EA Sports units also run on SPG110.

The problem is, SPG110 actually differs from SPG2xx in some significant ways, not least it uses an entirely different palette format (HSL based instead of RGB based) and also has somewhat different video capabilities (Video RAM is private, only writable with the CPU via DMA / port uploads, sprite format is different, tile base register is shared, not per layer, priorities are per tile, not per layer, transparency handling is done with a separate table, not upper bit of palette etc.)

Having the same game on two different pieces of hardware makes it much easier to draw conclusions about how the unemulated hardware works by comparing code, data structures in RAM, register writes etc. between the two versions, thus telling us plenty about the previously undocumented and not fully understood SPG110.

This has allowed me to implement many features of the SPG110 hardware, to get this version booting. Note, the colours are not 100% correct yet, I’ve asked Olivier Galibert if he can look into it further as HSL decoding is not my strong point. On the left is the SPG110 set that I’ve been making improvements to, on the right is the SPG2xx set that is already emulated. This kind of reference for the colours in an already correctly emulated version is going to be an essential guideline for improving the decoding.


Spider-Man Spider-Man
Spider-Man Spider-Man
Spider-Man Spider-Man
Left: SPG110 hardware version with currently imperfect HSL decoding Right: SPG2xx hardware version with correct RGB decoding

As you may have noticed, both screens show sprites, and last time I showed Classic Arcade Pinball shots, it was lacking in sprites. Needless to say, it now has sprites with the recent work done.


Classic Arcade Pinball Classic Arcade Pinball
Classic Arcade Pinball Classic Arcade Pinball
SPG110 emulation improvements have given Classic Arcade Pinball sprites and controls

Again colours are still imperfect, but fixing Spider-Man should fix them here too. I also added inputs so you can actually play the game.

Sound is unemulated, but seems to be closely related to the SPG2xx stuff (probably with less channels) so I did some refactoring of all the SPG2xx code in the process, splitting various internal peripherals into sub device modules (including the I/O which is how I was able to hook up inputs easily here)

Interestingly videos show a shadow on the ball for this game, yet the hardware does not seem to have shadow sprite capability as SPG2xx does, so I’m currently puzzled about how that is being pulled off, it could be some raster interrupt abuse like that one SNES game does, but we’ll see. (I’m assuming there aren’t multiple versions of this on different hardware anyway, I didn’t think to take pictures of my unit running before sending it off to Sean for dumping)

The earlier version of the ‘Disney’ Plug and Play might also run on SPG110, the one we sourced and had dumped is the less common GameKeyReady unit (which works fine in MAME) but I still need to do a proper update about that (it’s supported in 0.208 tho)

Anyway, going to leave it at that for now, hopefully if the colours can be further fixed it will be more worthwhile showing screenshots later. I just wanted to highlight why buying this alt version of Spider-Man was a gamble that paid off in terms of it enabling me to make progress on other things too.

8 Comments

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

Very nice work!

I’m guessing the color is HSV, not HSL, considering things seem to go “white” quickly, when they should probably be more concentrated (spider man score).

Hi, Haze,
This is unrelated question, but after reading your blog for many years, and after reading all your old posted, I’ve a politcal-related question: Are you happy with the direction/management that Mame went towards, especially in regards to the license change, and the management that Aaron Giles did?

It’s just that several times you spoke out against it and had even quit Mame.

Thank you.

I’m happy with the license change at the time it was done, as I feel the project was mature enough to do it at that point. It was also done properly, making sure to contact every contributor, getting their permission etc. (even in some cases, where contributors had passed away, going through their estate) While BSD does allow people to take parts of MAME and close them off, I feel the majority of parts they’d be interested in are mature enough that they’re not going to be making substantial enough changes that the devs we have couldn’t just do themselves if needed. (Some parts are GPL because the individual authors want to ensure they remain open)

I was less happy with the way Aaron was doing it, which seemed to be by trying to erode the project license with things under different licenses, slowly sneaking them in, and honestly felt he was too heavy handed in his approach at times w/regards to ownership and such. I don’t really feel MAME was mature enough to be risking BSD at the time, there was too much potential for somebody to close it off and actually make something substantially better without giving back. It didn’t sit right with me at the time.

What is frustrating is how some people are (incorrectly) interpreting the changes. The changes apply to 0.172 and newer only, it doesn’t retroactively allow you to use older versions as commercial software under a GPL or BSD license.

My main problem with Aaron, and those that followed, is that they didn’t really want to embrace some of the changes needed to drive the project forward. I feel we lost a lot of ground, and potentially sentenced a lot of obscure hardware to death by not integrating MESS earlier. You’ve only got to look at the waves that MAME has been making since that step was actually taken in the end, how many new people have ended up on board, and how many things that we simply didn’t know about before are being discovered and preserved. MAME’s strict policy meant it ended up stuck in a bit of a rut. Maybe I should blame myself for not pushing this policy further, or even making the change when I was calling the shots, but since I was probably the youngest team member at the time I didn’t really feel it appropriate, I saw my role more as one of doing the project a favor at the time rather than it being a job I wanted long term (I was far more interested in figuring hardware out)

That said, taking aside the management issues, I can’t take away that Aaron was instrumental in actually giving MAME some important features, and pushing things when it comes to the likes of emulating the VooDoo hardware (which Ted has since picked up) even if many will question why MAME can’t run 90s 3D games with ‘old’ VooDoo cards and relatively weak processors at full speed still. Considering the technology that was available when these things were being done I still thing he did a great job on those tho. These days you have a lot more options available (fully programmable video cards for example) that might have changed the approach, but who knows.

The current management gives me mixed feelings. In terms of PR it can be poor, and I feel often a little invasive when it comes to what people are working on and how they want to work on it. There is still an element of ‘rule by fear’ which isn’t great. I think when the current ‘board members’ take a step back and just let things flow is when we see the best progress – the process of reverse engineering something can be messy, not much is perfect first time, but people need the freedom to establish facts and explore possibilities without excessive nitpicking over code (especially from those who haven’t spent ages researching a particular system) This is my opinion of course.

However, the positives of the current management team is that they are a lot more open minded, they’ve been willing to embrace the changes needed to take the project forward (eg. the inclusion of the non-arcade stuff previously mentioned) and as a result we still see monthly releases, the project is active and healthy and remains relevant in 2019 for many reasons. There are also people with a passion for programming on-board, which, when they actually work together with those doing the reverse engineering (eg to refactor, tidy up and generally make code nicer) can complement the skills of those reverse engineering things.

For complex systems there are typically 3 levels; those working with the hardware to work out details / get vital data out, those working with the software and MAME to try and get the emulation running by making new discoveries, and those who aren’t necessarily emulating anything, but are making the code presentable. Information, code etc. is fed from one layer to the other until you get the results you see. (That’s an over simplified view, because there are other sides to it, eg. people who specialize in certain areas, devices emulations etc. who can be pulled in to try and aid with specific tasks, or if an understanding of something is needed, but it gives you a general idea. An ecosystem that allows all those different people, of different skill-sets to coexist is essential. Trying to run MAME as purely a ‘software project’ doesn’t work, and I think the current management team is starting to realise that because they do seem to have been more accommodating of late.

For me, personally, I am happier working on non-arcade stuff, it just seems to be a friendlier audience many of whom really appreciate the obscure stuff we’re pulling up from their childhood.

I’m also happier working slightly outside of the team as I always found the mailing lists etc. to be a bit too toxic. I’m not sure if that is still the case, but there are a number of people still subscribed to them which means I really have no interest in being in the same company. (same for a number of IRC channels) With the more public project (Github etc.) I really think the mailing list is basically redundant, I don’t feel like I’m really missing anything just working the way I do.

I do however think it is important for those working on MAME to band together at this time tho, the threat from things like RetroArch / LibRetro, which promotes an absolutely terrible design model and just encourages ‘Zombie’ cores rather than global improvement or anything that is going to be of long term benefit to emulation, is still a far bigger problem than petty team politics. We need to keep making MAME better, continue to encourage people to work on MAME, get people with a good understanding of some of the more popular systems onboard rather than allowing people to continue to use zombie cores with no mutual benefits beyond their scope. We need to show exactly why the current versions of MAME are substantially better than the old ones and try to ensure that no major regressions last for any length of time. We need visions of how to tackle some slightly newer platforms than we are right now.

The general public need to help there too tho, can’t just assume that because MAME is a big team that things will get done. We do need people to just step in, look at random bugs, try and fix them, or even try to make a significant difference to the emulation of a platform. We do see this sometimes (eg. a really long standing Tattoo Assassins sound bug was fixed in 0.208 thanks to an external contributor, and before that we saw Naomi rendering improvements, and even cam900 has been adding missing features to a bunch of NES mappers) It would be great to see somebody come up with a GOOD Android port, that wasn’t RetroArch based, but instead properly packaged MAME, actually gave access to all the features etc. and worked as expected, instead of being a gross hacked up barely functional mess sold on hype. One of the best examples of amazing public support can be seen in the hardware department tho; the work groups like Caps0ff, and people like Sean Riddle are doing to push MAME forward, work that would usually be prohibitively expensive, is being done just because they really want to see things move forward.

Also supporting MAME and the things the developers do want to do is vital. Bounties and the like don’t work, it has to be a voluntary thing, not a ‘work demand’ but I was impressed with the response to the donation drive I did, people were very supportive there, and because of that we were able to pick up a lot of useful TV games (even if the amount of that ending up on postage makes me sad) However, I personally felt bad for even having to ask, I don’t know why, but I did. Even if in the end the total amount donated was only a fraction of what some people are willingly pledging every single month to some other projects just for existing and basically allowing them to pirate current generation games I still felt bad for asking.

I guess what keeps me interested at the moment, rather than quitting, is more this kind of thing that is going on anyway. Previously I felt I had to stay with MAME, because if I left things wouldn’t get done properly. The moment I took a break you ended up with unprocessed dumps piling up, things not being verified etc. People would make changes to drivers that were outright wrong, and I felt compelled to stay just because I felt some level of responsibility for ensuring that things got processed in good time, and MAME didn’t become horribly broken.

These days there are better testing systems in place, and again good number of people have stepped in to help with processing new dumps etc. There is still something of a problem with non-arcade stuff not getting added to Software Lists (but most of that is never submitted directly to the devs, and needs people actively tracking the scene, and modern developments etc.) Maybe it’s less of an issue now because the arcade dumping has died down a bit (as is inevitable, the only things really left are going to turn up by chance because of people price gouging etc.)

But anyway, seeing things like actual protection MCUs dumped, being able to remove old simulation code, know that things are properly emulated for the first time ever, discovering what previously unknown tech sits behind epoxy blobs, and the interesting architectures used by things like these TV games and LCD handhelds is actually fun, it makes me want to stay, it feels more than ever like we’re doing things that actually matter and creating something which will be of huge importance in the future.

I also have a better understanding my myself now too. I can still end up roped into arguments by various trolls etc. but am now more likely to get a second opinion on things as to how I’m reading somebody, and if they’re genuinely trying to make a point, or just out to bully me. There are some on the team who have been firmly established as the latter, and likewise on some forums. My policy does remain one of trying to educate people however, and various autistic traits do make me an easy target and never know if it’s actually worth trying to give logic to people, or if they’re just intent on wasting my time, trolling me and making me feel bad. I still need to brave getting a proper diagnosis at some point (previous times I’ve just been messed around) but I’ve been in so many situations where somebody has said “mind our autistic friend” when they were talking about somebody else, and everybody assumed they were talking about me. However, even without a proper diagnosis, the coping methods suggested for such cases, and ways of dealing with things have helped, and I wish I’d known more of them about 20 years ago, I might not have felt the need to step down and give the project to Aaron in the first place had I, but I simply had no way of coping, and just wanted to get on with the figuring out of systems instead.

Probably a longer answer than you were expecting, but it just about covers my current views on things, and why I’m still here.

yeah, there are quite a few videos of it on YT, getting it right is proving to be annoying, even for OG tho.

HSV is more likely, but the hue part isn’t making much sense, we’ve tried different ranges (min/max values) and different amounts of phase shifting, but it never aligns with what we want, even when we have Spiderman which should be close to a 100% colour match to the SPG2xx version when decoded.

I have got preliminary sound tho.

Haze, thank you so much for writing an indepth and personal answer. I do appreciate it. In fact, I’m surprised this hasn’t been an article in the past.

I hope no one misreads what you wrote and verbally attack you about it. In saying this, I folloed Aaron’s work closel and I like the devices work he took lead of.

I attempted to be diagnosed too, but disappointingly the psychiatrist said there wasn’t anything wrong with me, although his focus was on looking for bipolar traits due to my father having had it. I truly don’t accept the diagnosis, for when I look back at my life, especially at my behaviour, and now when I am in situations, I definitely notice I react differently than those around me, and when I Google symptons or read psychology books on indivuals place on the spectrum, I’d definitely place myself there. And I’m constantly told I’m autistic by friends and others too, so I definitely understand where you’re coming from.

I’ve found myself making almost all my decisions based on logic, but I also factor in making random decisions or placing myself in unplanned situations to experience things I can’t plan. This is working great for me. People think my life is sporatic and unthought out, but there is method to my madness. There is a reason why I now live in a Spanish speaking billage in the mountains in Colombia when I’m from a beautiful town in Australia.

And I can mimick emotional connection just by logic. Logically I know the woman who calls me every day to talk deserves me calling her to ask how her day is, and even when I don’t desire that and only desire reading Dart programming tutorials, I convince myself Ishould logically call her. And I’ve started realising that I always seem obsessed with seeing people and being kind to people who don’t logically deserve my kindness and am trying to look at who is actually being kind to me and am trying to focus on those individuals.

Mame is definitely a huge project, and I’d perhaps argue that perfectionists and programmers are opinionated and so clashes will naturally occur.

Right, I hope people don’t misread it as something more than it is too.

Aaron did do some important work, he also had things that I didn’t really have, such as contacts and money, which made it easier to move forward with things like the SVN server. I think the timing was good there too because prior to that most of the solutions I’d tried on Windows were ropy at best and it was easier to get caught up in trying to fight with the version control rather than develop things but by that point the tools were pretty good.

One of the criticisms I did have is that his fields of interest seemed quite narrow. He definitely had the skills to reverse engineer some interesting things (or at least I’m assuming so, and he didn’t just have full documentation on them) but at the same time he often didn’t seem interested in looking at other things where his skills would be a good fit, or things would get added to drivers he’d work on, and where he clearly had the best understanding, but because they were a bit outside the box they didn’t get looked at. “Shooting Star” in the Art & Magic driver for example, is Art & Magic hardware, with some additional IO boards and runs some kind of video slot machine. Nobody really understands the Art & Magic hardware as well as Aaron, but at the same time he seemed to have no interest in getting that hooked up properly.

It could just be that I was overestimating his skills however. I sometimes do that, I’ll undervalue mine, and then look up to the other devs as if they have far better skills and surely must be able to figure out things that somebody who is a relative grafter like me couldn’t. Maybe the reality is they were just better at projecting they had more skills, when I was close to the same level anyway, but in reality they were just as stuck as me when it came to such things. I’ve never really been able to sell myself.

Things like the device system definitely made sense as MAME was growing, and would probably have existed from the start had MAME started out a bit later, but since it was initially rooted firmly in C, not C++ any kind of OO programming was faked at the time. Shifting away from that was very important tho, and C++ devices / objects (or whatever you want to call them) did make it possible to clean up the codebase, make code more reusable instead of copy+pasted everywhere and generally allow a greater focus on creating single *working* implementations, and not have to deal with problems where you couldn’t have multiple copies of something because the code was so badly written. If you look at quite a few single platform emulators they still don’t actually do this, and often have multiple, slightly different copies of code to emulate the exact same thing in different situations. Also if you look at the design of something like RetroArch / LibRetro this is one of the fundamental problems, it encourages that model where instead of shared devices you have tons of re-implementations of the same thing across the ‘cores’ with no mutual benefits.

I’m less sold on how things like the artwork system were done, and while things like the recent Game & Watch emulation still rely on it to a degree (the SVG handling takes away a lot of it) it is still code that’s showing its age, and maybe a lack of foresight in the design; having to allocate a boatload of textures for every state of an object was never going to scale, and not actually having elements that could move around remains a big issue, also the scaling etc. feels a bit wonky (random gaps where there should be none) to this day. There were more ‘object’ based game engines that could have provided better inspiration for a path forward even then and the future roadmap still involves upgrading that to something more akin to the kind of scene / presentation engine a modern game might have under the hood. Funnily enough those aren’t the reasons most of the public didn’t like the ‘new video system’ (which was tied fairly closely to this) they were more annoyed that the MAME image was no longer guaranteed to be a simple bitmap the same size as the game screen (there are many problems that meant it couldn’t be in the long run tho)

I also worked with many, many people in my time on MAME, and a lot of the best results were when doing that, working with a bunch of people with different skills / different things they enjoyed, splitting up work, bouncing things between different people; actually very similar to what is happening now with the home stuff / TV games. I always found Aaron more difficult to work with tho, again he didn’t really seem to have a huge amount of interest in being involved in that kind of process, rather just doing solo projects etc. One thing I always felt was important was being able to jump in and do a little task for somebody if they wanted etc. or seeing somebody step up and just look at something if others were starting to run out of ideas, and that didn’t seem to happen very often with Aaron. Maybe he just had different circles tho. In the end I’ve cleaned up and fixed a fair few things he did so maybe subconsciously it was me not taking that step with Aaron back in the day, or again believing Aaron to have such knowledge that I couldn’t possibly improve something he’d done, even if a lot of the fixes turned out to be really simple / obvious stuff; looking up to people just because of their position / where they work can be dangerous it can make you blind to their ability to actually make mistakes and it’s a trap I very consciously tell myself not to fall into over and over again to the point of actually stating I care more about their contributions than where they work, what they’ve achieved in life, what they earn etc.

I felt Aaron also wanted some questionable people he was friends with on the development list, people with no real interest in development, but instead ones he was friends with who had sent him things to emulate, but who might also be a problem if they got wind of a rare PCB being for sale etc. Kinda felt a bit like some people could buy their way in that way, and there was a conflict of interest.

Overall he did some good things, he did some bad things, like most people really. Not all of these were tied to being coordinator for MAME, most would have been accepted as submissions regardless of who was in charge, some probably even happened outside of that period anyway.

It was just a shame that the team did descend into basically the same as you see in modern day politics, with people vetoing ideas just because I was suggesting them rather than on grounds of their value, making weak excuses etc. The vast majority of things I suggested did happen eventually, usually after somebody else decided they were a good idea and put them forward instead, but I do feel there was a lot of putting personal vendettas ahead of what the project needed until a few years ago.

I guess I just don’t like thinking about all the things that might have been lost due to project politics, but I suppose there have been more things lost to greed / stupidity / elitism outside of the dev team and when the only thing you really care about is leaving a record of our digital history, it is frustrating to know there are cases where people that could have helped without any real consequence have actively made that more difficult instead. I suppose when some just see MAME as a tool for piracy tho, and others see emulation as something that is going to devalue a thing they they have possession of, or make them less ‘special’ as a person if it gets emulated then that’s always going to happen.

One reasons I’ve been pushing hard to show all the other uses of MAME, especially expanding into the non-arcade side is to distance it more from that ‘piracy tool just for playing games’ image it had in some circles. I’m quite happy to show off games that very few people are going to want to try playing, I’m aware for example only a tiny minority are going to find the ‘I Can Play Piano’ work interesting, or ever think to fire it up in MAME, but in terms of showing that MAME will look at anything, and value anything, not just things people have an interest in playing, I think it’s useful. I’d like to demonstrate more of the obsolete operating systems that run in current versions too, as that kind of thing could one day prove invaluable to other data recovery efforts etc. (which obviously also goes a long way beyond ‘playing games’)

It will be interesting to see how history remembers MAME.

Leave a Reply

Your email address will not be published. Required fields are marked *

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.

Close