David Haywood's Homepage
MAME work and other stuff
November 25, 2013 Haze Categories: General News. Enter your password to view comments.

This content is password protected. To view it please enter your password below:


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

Ding Ding Ding! We Have A Winner!

You asked what the most important progress of 2013 was and I’m saying this.

Over 10 years I have waited for real MVS support in Mame! Thank You! It is the small improvements on forgotton drivers like this that matter.

Yeh man, this is epic!

about time! this was top of my most wanted list

how does it work in mameui? can i use the ctrl key to select more games similar to files in windows explorer?

write a tutorial for beginners using this new feature please

You can’t really use the feature from something like MAMEUI, you’ll need to grab QMC2 to take full advantage of the new functionality.

That said there’s little point, as I’ve mentioned in the edit above the changes were yanked straight out before I had time to even clean them up* in what can only be seen as an unprecedented and destructive act.

It appears to be personal, as this isn’t a standard course of action especially not for something that would have inevitably been cleaned up before the next release, and so I don’t think there’s much point in me spending another second working on it because it’s bound to be blocked for political reasons outside my control should I try again. If it’s going to go in now it will almost certainly have to be cleaned up and submitted by somebody else who is willing to waste their time.

*which was my first plan for this morning, I simply submitted what I had in a working state last night after staying up until almost 5am working on it and expected to resume work and make it pretty this morning, I was quite aware that there were some issues, even said as such but wanted to encourage greater team involvement and get a version of the code that worked out there before risking breaking it. In the end it’s all been for nothing, because by the time I woke up to improve it, it was gone, and I’m overly tired after putting in the extra shift to get where I was. Really ruined my day.

It has been moved to a branch named “Haze”, so maybe you can work on it and merge the code when it’s ready? A bit like Jürgen has been doing with the alto driver.

In the eyes of OG it will probably never be ready until the softlists are abolished, he’s clearly made that his remit.

Any other cleanups could have been done in the main branch just like any other work in MAME, which was exactly my plan for this morning (use delegates etc. instead of the static members, use region types instead of UINT8* and size_t, convert to cartridge devices etc. already had that clearly planned out). it was deleted for reasons beyond that, because OG thinks the software list stuff is ugly and belongs nowhere near MAME, he has stated as much in the past.

For that reason I think it’s futile to continue, I thought by demonstrating real working new progress (as you can see in this video) it would be as acceptable as any other change and allow other people to help improve it and for us to properly document and understand the multi-slot mechanisms.

If you, AWJ, or somebody else wants to try their hand then be my guest, I’ve documented roughly how it should work but it’s quite obvious at this time that the cleanups I was going to make today (maybe a few more hours work) won’t suffice or it would have been left alone while I did them (it’s not exactly like it’s release day). This is a deeper and more political issue like so many things I’m afraid, there’s no other reason for such an unprecedented deletion of in-progress code by somebody who isn’t even working on the code in question. I have severe doubts it would be accepted even if I did apply the planned cleanups so doing them would be a waste of my time.


I don’t think Micko would have bothered creating the branch if he didn’t think the code might be merged when updated to “modern” standards. He is the coordinator, so he has final say.
Anyway I’ll shut up and let you big boys decide how to go about it. :)

As I said, it’s dead to me now. I consider it a waste of time and won’t be touching it further. Mamedev (or at least one member of Mamedev who is willing to outright nuke peoples code) doesn’t want the functionality. People will simply have to do without.

If you want to try and make it work in an acceptable way then you can, but you’ll be chasing an ever moving target as people change the criteria.

considering the huge lists of things you submitted and it’s still waiting to be polished up, I’d guess the *horrible* code full of cross references would have stayed in MAME for years…

Man you’re a fuckwit. It wasn’t nuked outright, it was moved to a branch where you can make good on your promise to clean it up, then merge it to mainline. Well done, you’ve taken this as an excuse not to clean it up, left the ugly code for someone else to wrangle, and made up a conspiracy where big bad OG is out to get you. You just love playing the victim card and washing your hands of things.

or it would have been cleaned up in the morning, which was the plan and reason I dug up the code to finally get it done. I have priorities.

Moving the code to another branch is NOT standard procedure and was not necessary.

It was nuked outright without any consultation until I mentioned to Micko that it was insulting and far worse than anything I’d done in the past, at which point he put it in the other branch to try and keep the peace.

The *core* value of MAME is to get things working, to understand things, I was working towards that, getting a better understanding of this system. The code I submitted built on what was there, it was a little rough around the edges, but OG has stated in the past he has a problem with the *existing* NeoGeo XML handling from what he said in the past (which incidentally I’ve also been blamed for and insulted over repeatedly in your shoutbox in the past despite it not being my code at all, so why he hasn’t just ripped that out I don’t know) There was a clear plan and that was a step forward in it.

Another part of the plan was to actually clean up the existing XML handling for NeoGeo, allowing the decryption keys to be passed from the XML instead of having to hardcode such a long list of cart protection handlers.

OG said this morning he changed his mind and is fine with softlists, but your patch bore more than a slight resemblance to Achocode and *that’s* what was unacceptable.

Indeed, I acknowledged in the comments that it needed some cleanup work, but wanted to get it in while it worked (or if it didn’t, have any bugs pointed out to me) then refactor it step by step, that’s how I’ve always worked in MAME. For lower priority drivers sometimes those steps are quite far apart, but they do get done (eg. recent cleanups of igs022/028/025 as we start to get a better understanding of them)

That happens all the time in the source, and I’m not trying to be funny but ripping it right out seemed like a knee-jerk reaction, and obviously I’m going to react badly to something like that when I wake up in a morning after practically no sleep (because I was working on this all night)

I had some clear plans of action, in fact I’d even started work on one of them before seeing the code was nuked. It’s not a change that happens in one step, obviously I’d rather be passing region pointers to decrypt functions etc. and not passing the state to the static members for the protection install ones, but in the moment I was coding it that solution worked until I could dig up the expected way to do it from somewhere else. I’m not stupid, and had already highlighted those as areas to improve but what I had basically worked, and provided a fall-back point while further improvements were made. A separate branch has never been required for that process, it’s simply part of how MAME development works.

I fully acknowledge that writing 100% *clean* code isn’t my strongest point, I’m far more interested in taking things forward and we do have a decent number of people on the team who are the opposite, not great at making new progress, but really good at polishing things up. I consider it to be teamwork when they can work together, leave each person to do what they do best. The reason you have me as part of the team is to reverse engineer things, solve difficult problems, make new progress to demonstrate what MAME / MESS is capable of. The reason we have people like Osso on the team is to clean things up, tidy things, ensure what we have remains maintainable by applying the polish. Both roles are important.

That’s not a cop out, because there were some very clear improvements to the code I already had in mind, but this idea that things need to be perfect before they can happen at all is kinda annoying, it feels like some of the objections to moving to a UME style build with home/arcade/manufacturer sub-tagets, that it’s not 100% ‘clean’ from the off. In MAME things evolve to be cleaner although sometimes part of that evolution involves temporarily making them uglier.

What OG’s recent change of heart does make me wonder (and I’ve asked Micko to forward it to the list) is if we can now be more sensible about some arcade systems which were basically designed like consoles, with multiple exchangeable cartridges etc. IMHO it would be much cleaner to implement those as softlist only, AND be beneficial to MESS because a lot of frontend authors would have to start considering soft-list launching if systems like that required use of the softlists. It would also be beneficial to other frontends like QMC2, which we would prefer to see people using over MAMEUI anyway.

Obviously you wouldn’t want to do that for basically ‘fixed configuration’ systems like most arcade PCBs are, but for the ones that were designed more-or-less like consoles anyway you do get greater functionality that way, and the current duplication is as ugly as anything I submitted. I specifically asked about Megatech in this instance because it’s 100% my driver, and so there are no other factors aside from political / project direction ones. Ideally NeoGeo would be handled like that too (aside from the fixed configuration cases; Irritating Maze might have been a cart but it was a 100% custom cab with custom bios you weren’t meant to change, the PCB versions weren’t carts, and the Gamblers are similar to Irritating Maze afaik requiring special cabs with custom payout hw) I’m pretty sure Playchoice could be made a LOT cleaner if it was re-factored to act more like the NES driver too because you could have PC-10 cartridge types that imported a base PC-10 cart hardware type and the relevant mapper and then simply plug them into the PC10 system via the SL code.

Good idea to host the changes here. Rest of the MAME Dev Team take a look at it. This way they can decide it worth to merge into MAME or not. You also can keep it private host here. Hell I will even test this out with everyone. :D

I think this would make your MAME life happier;

-Setup a git repo on a server
-Commit whatever you like to that repo
-Setup jenkins or something to auto pull and merge changes from the mamedev repo and check that it builds.
– Let the mamedev people decide if they want to be all shitty about accepting your stuff or if they want to be missing progress that is in your tree and not in theirs.

I’ve never understood the habit in MAME to constantly rehash some bits of code to make them “nicer”and introduce regressions instead of actually making progress.

Making progress without polishing things up? What do you want to become? Final Burn Alpha?

Don’t put words in OG’s mouth before he’s said them. You can always ask him in a private email about what the issues are and what needs to be solved before it can be merged back in to the main tree.


I think I have still a lot to learn before being able to fill the task you assign me, but I’ll try to get up to that level.

It was still exceptionally rude behavior, and completely out of line with our development model.

I’d already mentioned it needed cleanups, it wasn’t getting in the way of any work other people were doing to my knowledge, and it wouldn’t have hurt to be sent a simple mail asking me to fix ‘x, y and z’ rather than the action that was taken, to which my reply to that would have been that it’s in progress. I haven’t done anything today because I’ve been completely out the loop with a terrible migraine.

Plus I’m basing what I’ve said on his previous comments regarding it, which I couldn’t understand at the time either because the code he was accusing of being ugly back then wasn’t even anything I’d added.

It appeared it was being treated as a resubmission of that rather than a new and previously unsubmitted piece of progress. If you wish to check SVN history you’ll see I’d never submitted even one line of that in the past.

For the most part FBA doesn’t make progress, it just copies MAME code. (there are exceptions, our NeoCD code is based on their code to the point where I don’t even really take credit for it) Things being ported / added to FBA is very similar to things being ported / added to old MAME versions like CoinOps, same basic code, but extra bits of manual code to make up for core functionality that didn’t exist at the time.

If you want to talk about FBA devs rather than the project itself then iq_132 has spent a large amount of time with MAME cleaning up protection implementations for a large range of games, so in that sense your comments are rather off-base anyway. The current progress on Dragon World 3 for example is a result of that.

I understand what you’re saying but if you’ve been following my site for a while you’ll know that doesn’t really help.

My goal (if you can still call it that) is to have a project where everybody is pulling together, working together etc. towards a single goal of emulating everything the best we can. Where drivers are developed by multiple people, each focusing on what they do best. You have some people discovering things, some people tidying up things.

Forks, alternate branches etc. all fragment things, and are to me a symptom of a dysfunctional team rather than one that has a good understanding and prioritize the number one goal of producing the best and most fully featured emulator on the planet.

Maybe my vision here is too idealistic, and it’s impossible for it to ever be, certainly I’m getting more and more the impression every day that we have a team that values the code as more important than what we discover, and are relegating everybody who makes actual progress to be second class citizens. I think the whole licensing thing highlighted that too. That will kill the project. I’ve been contributing in one form or another for 15+ years, I know what I’m doing, I know what has got us where we are and has consistently kept MAME top of the pile in the past.

“I always dream about a unified scene”

I watch the video. :)

>IMHO it would be much cleaner to implement those
> as softlist only,

It doesn’t actually buy you anything. To make it clean you need to have a cart with the decryption etc on it and you can have the roms listed there anyway.

CGR what exactly do you know? Have you ever tried to maintain a project as large as FBA with two developers? No? Right.

Haze I have to respectfully disagree. At first branch schemes may seem like a bad idea. Where no one sees all the progress. However, they let people see progress in small chunks. Two to Three devs can even all work on the same branch.

In almost every project I have ever worked on. Main was usually ready or almost ready to ship. The branches is where the real work happened. You can use it to hold off on something that everyone does not feel is quite ready. It fosters teamwork. What you are doing will engender the exact opposite.

They are wonderful at catching bugs as you merge. As it forces you to reexamine the code as you check it in. You can also do discreet code reviews to find more bugs and get better quality. As you have clean base to compare against.

You can do exactly what you were doing for this game and not mess anyone up who wants to start working on something else. You by your own admission said the code was not done. Yet you wanted to check it in. Then finish it in a day or two. That is exactly what branching is for. Then you merge to main.

I also use them to teach lesser devs how to do something. I also use them to learn how to do cool things from other devs. All without the fear of messing up working code.

Pretty much every major project out there does branching. From windows to linux to oracle to android to firefox to chrome.

My rule of thumb is when it is two guys working on something you can get away with 0 branches. You add 3-4 people forget it. You will all go insane and start getting mad at each other. You will quickly break the one golden rule of source control. Do *not* break main. If you are not using branching you may as well not use source control at all as it gains you pretty much nothing other than some pretty comments when you check it in.

Also if you want to attract newer devs you better start using it. Newer devs are going to be using these things they learned where they work and at school. They will see you as a hindrance who is a cowboy just doing whatever they feel like. Please look up “best practices branching code” in google. You will see it is a good thing. It will help you become a better developer. All developers can be better.

I know your first reaction will be to fire off a retort to what I am saying. But please sleep on it for a couple of days.

You see, I do actually agree with you for the most part, but I’d like to highlight the following in what you said.

“My rule of thumb is when it is two guys working on something you can get away with 0 branches. You add 3-4 people forget it.”

That’s the thing with MAME, it might seem like a massive project, but for the majority of it the project really is one where you have 1 or 2 people working on something unless it’s the actual core, where ironically it seems much more accepted if people check into main and ruin the lives of everybody.

In the context of the project the changes made to NeoGeo have no impact outside of the scope of the files I’m working on, it is very much individual work, not a key part of some game engine. Furthermore MAME isn’t a commercial product anyway, it’s an ever evolving WIP otherwise we wouldn’t leave things like Ninja Kazan broken for probably 10 years now ;-)

Different models suit different projects, and while I do agree with what you’re saying for something like Linux (where having everything working all the time is *critical*), or a commercially shipping game (where you’re going to be charged half your studios yearly budget to put out a patch) I think if you look at it in the context of MAME it’s slightly different. MAME isn’t your average project.

I see in other places this has all resorted to ad-hominem attacks on my character again, judging me because of my employment status rather than the work I’ve done for MAME tho. Do you think MAME was born from people working in the industry, or people with a passion for what we do? Everything is backwards these days.

When I’m working it’s usually unpaid charity work, because I think that’s a damn sight more important than working for some soulless corporation like EA. It should be obvious from all my blog posts that my key value in life is making a positive difference to other people in this world, that’s the entire reason I work on MAME in the first place.

This even applied to the times I have worked for a while on games, I’m credited as intern on Space Ark because I voluntarily stayed and worked for free simply to get the project shipping so for legal / financial reasons (or whatever) that’s what the credit ended up as, if people are going to dig at me for that it seems like my own kindness and passion to get something shipped is being used against me. If you look at the prior game, Geon you’ll see I’m credited as a regular programmer because the situation at the company was different. If the right job comes along I’ll be happy to work it, but nothing in recent times has really sparked my interest at all, so I’d rather continue with work that actually helps people. My 15 years experience on MAME should count for a LOT more than any day job I may or may not have.

it did not need to be clean up. it needed to be rewritten from scratch (and it still does) using slot devices

while 2 years ago the code would have just been a little bit hacky (introducing a bit too much of static-ness compared to the direction of the project), now it is definitely ghastly! nowadays, the core is capable to implement properly multislot carts + the PCB types needed for handling the decryption through slot devices
trying to re-use the implementation you wrote 2 years ago means that you’re lazy and that someone else will have to convert it to use slot devices at a later stage

and it’s a step-by-step process, something you seem to have no grasp at all of.

Changes made during that process like splitting out what needs doing on startup and what needs enabling when the cart is enabled are CRITICAL.

That is the direction I was heading.

You are the prime offender when it comes to expecting everything perfect in one go. That isn’t how things work, that isn’t how things have ever worked.

Like I said, there was a clear plan, you reject UME for the same kind of reasons. You have no long term vision.

It does NOT need to be rewritten from scratch in one big step. It needs small adjustments, small refactors committing one step at a time until it’s ready to convert over to the new system, all this was already meticulously planned and that is the plan I was enacting. The intermediate steps will be a little ugly, but attitudes like this block all progress.

It seems because I actually dare do things I end up in the firing line, no wonder so many people are afraid to commit a damn thing beyond simple changes these days.

The code from 2 years ago was resurrected from an old tree with the full intention of getting it working in a clean way. It was committed once it was in a working state with planned cleanups to come. It did not need to sit on my HDD any longer, it would have been in much better shape come the next release, possibly even fully modern! I am not being lazy, I am prioritizing what is important (get it working), with a logical plan to get us where we need to be (make it clean). The alternative was that I left it sitting on my HDD for another 2 years by which time it would be even more out of date, because I know damn sure nobody else would have bothered in that time.

So basically stop talking shit when you have no comprehension of the bigger picture.

I am trying to take the project forward in very real ways, very raw ways, very cutting edge ways in terms of what people see. If you prefer a project where everybody just treads water and submissions never happen because people can’t submit code until it’s perfectly formed then you’re on the right track. That’s the polar opposite of what MAME development is about, none of the progress I’ve ever made in the project would ever have been possible with that attitude, so be careful what you wish for because you’ll be shutting out one hell of a lot of potential contributors at a time when the project health in terms of people making PROGRESS is critical. Historically many of our very best contributors (people I look up to and massively respect) have written some pretty damn ugly code but they got the key information out there, provided us with what was basically a working prototype and we could build on it.

I ask you this, what IS the role in the project of people who don’t understand the reverse engineering process etc. if not to help with such cleanup tasks? Is it possibly not those people who are being lazy by expecting the devs who are actually interested in making real progress to also do all the cleanup work single-handedly in one step? Why not just boot everybody such as yourself off the project if you actually have no role? Of course this is a rhetorical question, it’s a team, it should work as a team and one of the key points I made during the license debate is that the contributions of people doing the cleanups etc. is every bit as important as the rest.

It’s also the negativity that gets me, and I’ve said this before. I’ve made what is arguably a significant piece of progress in a driver a lot of people care about. Would it not have been a lot more positive to see devs jumping on the bandwagon and asking if they could HELP clean things up? You know, being positive and constructive? That is also how things worked in the past and very often when ‘ugly’ drivers were submitted I spent a large amount of time HELPING the people who had submitted them make them clean because I could see that it was worthwhile and important progress. The current team is just so.. negative.. it does my head in. I still try to help people wherever I can, that’s one reason you see so much progress here.

well due to other people driving our key QA and code-cleanup guys away (Firewave was vital to the project catching many, many subtle bugs) then you’re left with those boots to fill.

I think you can manage it from what I’ve seen so far.

Yes, I think it’s a real shame Firewave quit. I truly hope he comes back sooner or later.

let me restate in a clearer way my point: there is no way you can clean up the code you sent into using slot devices.

you would need to re-think the support from scratch to follow the slot devices approach.
I know this because I struggled for weeks trying to convert NES carts to an hybrid between legacy code and slot devices, so to clean up slowly the implementation towards being modern… but there was just no way to do it. so in the end I just gave up and spent another few weeks to redesign the code from scratch to exploit directly the slot devices… and it worked like a charm

hence, stating that you would have slowly improved it towards being modern means that either you don’t understand slot devices (which I doubt) or that you are trolling the discussion just to prove some point of yours.

if you wanted to slowly clean up the implementation, you could have done as I did with SNES carts, adding a parallel implementation of cart slots until it was good enough to replace the legacy one.
OTOH, claiming that I expect “everything perfect in one go” as you just did is a plain lie: check the snes backlog and you will see that I perfectly understand your philosophy of partial progresses towards a goal (namely, check the snesnew driver created along the legacy snes/snespal ones until the slot code was good enough)

let me restate my point in a clearer way.


and yes, I take offense to you calling me lazy, because if you think it’s acceptable to call somebody who spends time working on MAME until 4am, much to the detriment of his own health lazy, then I really don’t know what the fuck you expect of people.

There’s nothing wrong with me creating something that works, if I then have to create a bunch of fresh code to do the same thing side-by-side then it’s far better having the WORKING model there already for reference (and if it’s going away, it shouldn’t matter if that old model is ugly for a while) furthermore if I have sufficiently split the original code into reusable callable functions in the meantime they should transfer over with ease, which was my plan; to slice things into reusable, recallable parts without being TOO dependent on either model (which you probably think is ugly, but for transitional purposes it works better)

I can’t begin to understand why you have such problems.

If none of the code is reusable then the new model is frankly broken (and having seen some of the cart slot implementations I do wonder, but assume they’re just implemented in a very ugly way that I definitely would define as ghastly), or you’re the one doing the trolling. The code needs to be refactored into a way that can be used by both models because the PCB (non-cart) games need to be able to reuse the code, not duplicate it. I don’t see how any of that is rocket science for somebody with even a rudimentary understanding of programming.

Anyway, you’ve pretty much confirmed the team isn’t going to accept incremental improvements, even if I modernize what I did without converting fully to slot devices, so I’ll go back to my position of ‘do it yourself then’ You have my working example, that is my contribution. My development philosophy is clearly incompatible with the ridiculous expectations of the team. hap might have convinced me the other day that it would be worth continuing in the private branch, you’ve absolutely convinced me otherwise.

About branching;

In my experience in my day-job (and also when working on Dxbx) I discovered that instead of creating “people-oriented” branches, it is actually very helpfull to use “feature-oriented” branches.

Sure, it can be handy to have a personal sandbox, but even those branches tend to diverge in different directions simultaneously. That can be prevented by striving to put most your work in feature-oriented branches asap.

Also, having feature-oriented branches ensures other stuff doesn’t get broken, still allows more people to work on something, and fosters for integration-testing and carefull release-management.

All in all, it’s a win-win with low costs (it mainly requires a slight change in thoughts and practices of all involved individuals).

One caveat : once a feature is finished, tested and integrated, *DO* freeze and/or hide the branch, to prevent pollution and stale forks.

Just my 5 cents thou.

PS: Granted – many projects follow their own set of ‘rules’.

Some are very strict, forbidding commits to the main branch, channeling everything through a single party that does the testing & integration.

This is unworkable especially when commits are diverse and fragmented, and/or done by individuals rather than teams.

It has nothing to do with appreciation, dedication, goodwill, and other emotions, it has to do with maintainability, efficiency, reliability, and other “managerial” aspects.

From what I can gather from the blogosphere, mame and mess seem to suffer from not having strict guideliness and/or people having arguments on whether or not “their” approach is the right one.

If you guys could sort this out, the efficiency and attractiveness of both projects would probably increase, which IMHO is ‘good’ ™.


MAME / MESS have always been a place to get the information out there.. they’re not meant to impose overly strict guidelines because they’re meant to encourage people (even lesser skilled coders) to be able to contribute their understanding of hardware and emulate it for future generations to reference and further improve.

or at least that used to be the case, I’m really not sure anymore.

If the bar had been set too high I’m pretty sure we wouldn’t have at least 75% of the contributions and progress we’ve seen in MAME today. A large amount of it is was hobbyist coders, especially in the golden age of the project when things were actually prosperous. Form over functionality doesn’t always work especially not when the key element of the project in question is discovering and documenting new facts rather than knowing from the start exactly what needs to be created.

to further expand on that…

I hope the likes of md_jcart.c aren’t considered examples of good proper slot code, because if I consider anything to be absolute shitcode it’s that..

throwing away memory maps and install / unmap handlers in favor of nested if/else statements? that’s not progress and should only be done in exceptional cases, the code in some of those files makes my eyes bleed more than what I submitted!

but like I said, I’m assuming that isn’t really the proper way to do things, and is also just done like that because it was done in a rush, to get the functionality there, and in reality it could all be done with proper installed handlers.. at least I bloody hope so, the likes of READ16_MEMBER(md_jcart_device::read), READ16_MEMBER(md_seprom_codemast_device::read) and WRITE16_MEMBER(md_seprom_codemast_device::write) really, really shouldn’t exist.

Try being unemployed and keeping a roof over your families head on £71 GBP a week, then you can play the “poor me” card.

There are MAME users in a worse financial situation than you could ever imagine, but you dont see us using it as an excuse.

I am deeply offended by your comment.

Not all MAME users live in mansions with Swiss bank accounts and 5 Ferrari’s parked outside.

As a person sitting on the other side of the fence (non dev side)
I must say its disheartening to see all this arguing and bitching from the devs. MAME in my opinion is the most amazing piece of software ever created and there are many many people out there that enjoy playing these old arcade games again from our childhood. We know that it has taken so much time, money and resources from you guys to get MAME to the stage its at now and we know its all done for free. So on behalf of myself and the rest of us..please stop arguing. Take a timeout. We appreciate you all and the time and effort you all put into this project. It wouldn’t be possible without you.

Just my 2 cents…

if you had spent a few seconds browsing the history of that code before attacking me, you would see that it was just transplanted verbatim from the original implementation by ElBarto (which he said he was improving, then he had to move to a new place and I never heard any news from him about that piece of code, so I just left it as it because 1. I’m not sure how those carts worked in reality and 2. if ElBarto had done any progress, it would be easier to port it over…)

of course, it would be nice to clean up that specific implementation, but it would just require per-slot inputs like the SVP test switch, or the DIP switches in Nintendo Championship special carts, not some handler to be installed at driver level as you were doing in the neogeo case

“It would have been cleaned in the morning” is up there with “the check is in the mail” and “it won’t hurt, honest”.

That code had attracted a lot of negative comments two years ago, and I’m not even talking about mine. You have taken *none* into account in two years, yet we’re supposed to believe you’d have taken care of everything with 24 hours more? Then let me ask you, why didn’t you do this commit 24 hours later, with all the crappyness fixed?


Be cool if someone doing the PlayChoice-10 the same way. :)

You guys need to stop pointing fingers and start working as a team more to get these kind work done. None of you guys aren’t getting paid doing the drivers and stuff. So stop the attacks. I been reading ton of childish stuff and not improvements on the MAME/MESS. Wah wah. Stop crying and eat your cookie. :(

Who cares if it isn’t fixed 24 hours later? I’m pretty sure most, if not all, of you have left shit broken for months or years in the source when it could have been committed fixed. In fact, Aaron “Corebreaker McGee” Giles seemed to do it intentionally and as often as he could with whatever he got the notion to work on.

It’s pretty funny that you’re talking about him attacking you when I’ve seen you get on here several times just to attack him and then throw in a condescending wink. ;) You all do important work but when I see you and others come here to mess with Haze, I have to ask: HOW THE FUCK DO ANY OF YOU GET ANYTHING DONE?!

You’ve got Guru and Smitdogg dumping stuff and then effectively saying bow to me or go fuck yourselves because I’ll just take my PCBs and go home. Belmont just sits up in his balcony like Statler and Waldorf (your choice which one he is) trolling and slinging shit and then standing back to watch what happens. Aaron pops his head in once in a while and says “MY WILL BE DONE!” OG is the token rude Frenchman. What do you call yourselves?

The Aristocrats!

Seriously though, why can’t all of you guys just work TOGETHER for a solution instead of beating each other over the head George Plimpton style? You’re all aware of each other’s coding strengths and weaknesses. All I am sayyyyiiiiiing is GIVE PEACE A CHAAAAANCE!

P.S. It’s nice to see you stand up for yourself aggressively rather than passively, Haze. I’m so proud of you. Give ’em HELL! *buttslap*

Blimey. Isn’t this supposed to be fun and a hobby?

From a MAME management point of view, I’d suggest the following things:

– Running a big software project is more than code management. You’ve got to understand the team, what motivates them and support them. It doesn’t matter if it’s a big AAA game for EA, or a non-profit hobby project. Although much of the conversation is about branching strategy, is that the real issue here?

– Make the project more welcoming to newcomers. Reading this wouldn’t encourage me to leap into MAME dev, and it’s generally bad for publicity.

– People want to feel in control and empowered. Especially developers. Sometimes it’s better to allow a small element of freedom and chaos, than to impose bureaucracy and restrictions.

Easy for me to spout this crap from my armchair of course. It’s a difficult one to solve.

no, I’m eta not attacking you, I’m saying that code is ugly.

I’m saying IF that is the standard, and only way of doing it, you would be right, my plan would be unworkable.

but it isn’t. what i had planned is perfectly implementable, things can be gradually transitioned and shared, it does not need a full rewrite to get there as you are claiming. it would be perfectly feasible to have what I submitted (with some cleanups) in the codebase while the whole process of moving it over to the new model was done. You claim otherwise, saying it would all need rewriting. That’s what I’m challenging.

If you still consider the work done a rewrite then I don’t think you understand the scale of some of the work done in MAME.

The fact is I was given less than 24 hours* to fix / improve the code in the main tree. That is what annoys me.

*considering it was gone by the time I woke up after submitting it I’d say I was given 0.

huh? I’m not using it as an excuse, I’m explaining that I’d rather spend my time helping people while I can.

There are no mansions, swiss bank around or ferraris here. What I give the project is time, if it cost money I wouldn’t be doing it.

I actually agree with every word you’ve said here.

It’s definitely bad for publicity, but this is the team and attitudes anybody who contributes will have to work with these days, a team where even experienced MAME developers in the project are shat on and it is assumed they don’t know what they’re doing… I guess if anything it’s an important lesson to learn from the start, if you want to work on the project you’re going to have to work with these guys.

It’s also important to see just how negative the development environment is, how instead of jumping to help with tasks and be constructive you have more people who are willing to just slate what is being done and destroy it.

It doesn’t surprise me one bit that people like FW have been driven away, and that new contributors are thin on the ground, like you say, you’ve got to give freedom to people working on it, or at least act like a team. We’re seeing neither.

These are just my frustrations with a team that is clearly just plain broken, a team unlike MAMEdevs of old that I really can’t look up to with any level of respect. A team that really couldn’t give a crap about new emulation progress.

If this was a working team the response to my submission would have been ‘cool feature, but it’s a lot of work and it looks like you could use a hand, do you want me to help?’

Instead the response was more along the lines of ‘fuck that’ Even right now nobody has volunteered to help, even if the plan is 100% possible to implement. I think this annoys me because I’d be the opposite, if I see somebody in need of help in an area I can help then I try to help; I make sure any potential from a piece of work is properly fulfilled. (and even for that I end up getting insulted, I’ve seen insults thrown my way because of my close work with the people who dumped these prototypes, saying I’m sucking their dicks and they’re sucking mine.. maybe, just maybe I wanted to help ensure everything got processed in a timely manner with a direct feedback link for some incredibly rare material?)

The branching issue is a side-topic, it clearly wasn’t necessary, and was just an attempt by Micko to keep the peace, I don’t blame him, but it doesn’t really solve anything.

If the team had been like this 15 years ago there’s no way I would have ever even been able to make my first contributions. The team back then was a lot less selfish, and a lot more willing to take time out to work with somebody else and improve their submission, ensuring that the ‘new cool stuff’ did actually happen. We would all help each other.

Maybe this sounds a little unfair, because there are some genuinely good devs left, people like Charles consistently do amazing work and are a joy to work with, as are many of the other people I’ve worked with on drivers in recent times, but there’s definitely a rotten core element to it all, people who seem to think they’re above lending a hand.

I have been following mame for many years and I too agree with the fact that the tension has gotten really heavy as of the last few years. I too remember when I played with the code and had several help me to polish my fixes. Brian T, you haze, and derrick, derrick and myself spent several nites sending emails back and forth finding the dips in the golden tee series games and I forgot who submitted them for us but the point is the dev community seemed more open to lend a hand and less apt to push, turn you away. I understand that many are very very busy in real life and I appreciate the time they put in but the internal dev community has seemed more and more closed in the past few years.
I hate seeing the fights between members and I know I only see the outside but it seems a lot of this would go away if there was more open communication and understanding all the way around. and for some reason the moment something does come to lite it seems that there are many who just love to keep the bs going.
I used to think that there was nothing the dev couldn’t do as a collective as the history of mame proves but I don’t see that sense of community anymore nor do I see the great leaps and bounds mame used to make in the for seeable future. I have heard so many times that this game or that game would never be playable but then there it was in its working glory, made possible by the closeness of the dev to work together. I also understand that many things now in mame are much harder to emulate than before but I have heard that before too.
maybe the best days are behind but I would like to believe that somehow the dev can become a collective again, and great things will follow. not just to play games but to see the impossible become possible from a group of people who have proven anything can be done.

>The team back then was a lot less selfish, and a lot
> more willing to take time out to work with somebody
> else and improve their submission, ensuring that the
> ‘new cool stuff’ did actually happen. We would all
> help each other.

We do help people that don’t resort to slagging us off on their blog every time there is a disagreement.

The position you are trying to maintain is untenable. You can’t act like the one true saviour of MAME, who’s opinion matters more than anyone else’s and then complain because we don’t help you.

I’ve been trying to persuade anyone who is interested in neogeo to implement a slot system for a while, everyone moans that they just want to hack the code because they don’t understand how to do it properly.

The upshot is that I appear to have volunteered to clean up the mess myself.

He says what he wants to here because he isn’t allowed to say what he wants to in other places. I don’t know what all happens in the mailing list but I imagine the people who fight the most are a lot worse in private than they are in public. Considering how shitty they act in public, it’s really depressing to think how bad they are in private messages. Why don’t you all just wipe the slate clean as far as that goes and at least ACT like you can tolerate each other? It’s so great to see when progress is made on one thing or another but then see you treat each other like shit.

It seems like all of the senior developers are guilty of it to some degree. Stop it!

>and in reality it could all be done with proper installed handlers

Installing handlers at runtime is the wrong way to do it. Ideally the cart would expose memory maps (program/graphics/sound etc), although currently you can’t do that with slots.

I actually agree that the slot system is kinda broken. But we don’t have anyone capable of fixing it who has enough time/motivation. If you really cared about the future of MAME you’d get involved in some of the real slog work.

It has come to this because I’m utterly fed up of being slagged off myself, utterly fed up of double standards being applied (which is what triggered this rant in the first place) etc. If you try to piss me off by applying ‘rules’ to me, then completely disregard them when it’s convenient to you (respect others devs code, don’t revert things without consultation etc.) then what else do you expect? Feels like I can’t do right for doing wrong half the time. The team paint me as the devil for doing one thing at some point, then do exactly the same thing and say it’s normal. Likewise, I already mentioned, even when I work closely with people to ensure things are processed properly I see other devs slagging me (and the people I’m working with off) because they’re working with me. Hardly positive, and this happens all the fucking time. Seems if you’re not slating me (or dare to say anything even remotely positive) you’re on the ‘outside’ now and will be insulted until you join in the insults or get victimized yourself as the likes of Tafoid have seen. (If the shoutbox on bannister.org had logs I’m not sure anybody would ever want to work with this team again)

Anyway, thank you for looking at it. I hope you find some use for my changes even if you don’t end up using them directly. As always, I don’t really expect any credit.

as for moo’s comment.. The private argument are worse. That’s one reason I prefer to have these things in public view, at least that way everybody has to watch what they say. The slagging off of me still goes on behind closed doors and behind my back tho.

re: savior, whatever, you’ll see I’m very quick to credit and thank those who have helped, often above even credit for myself. I feel your views on this aren’t a clear representation of how things are. Sure, I have a pretty good idea how things should be, I can see how broken the team is in places, I can see how things need to change, need to advance, how we need a good solid long-term vision that is going to get as many new people involved as possible and test our cores in every way. That’s not because I think I’m some kind of savior, it’s because I’ve worked on so many different areas of MAME with so many different people and seen all the opinions be they good, bad or heavily biased towards one thing or another and have come to realise the only real way forward is to emulate whatever we can emulate, because everybody has a different opinion so the most neutral approach is one that lets everybody do whatever they want and emulate whatever they want within the project as long as it helps actually improve our emulation cores and drivers in some way, ie throw all the politics out the window and just let people get on with whatever they’re passionate about.

if you’re talking about other people seeing me as some kind of savior, I can’t really help that, I’ll repeat what I said a moment ago, I’m quick to credit other people, but I have worked on so many things (both ones that matter to large numbers of people and ones that matter to almost nobody) that it’s fairly natural for people to adopt that opinion. It is out of my hands.

well you should be able to import the memory device into the cart device and have a map type for each cart then you’d just replace the ‘read’ and ‘write’ function with one that calls the read/write on the device memory map, although the performance impact of that does worry me.

of course the slot system inherently has to install some kind of handler, but for standard cases (perfectly regular cart memory maps) you shouldn’t need a chain of if/else/if/else for everything, that’s like looking at Raine or FBA code.

Personally I would use installed handlers for compatibility with the other model, I’d have a base ‘NeoGeo’ slot cartridge device importing the memory interface with just the plain memory map (just ROM mapped at 0x00000 – 0xfffff), and then the specific cart types (standard banking, custom banking, extra ram, extra protection) actually used derived from that, installing handlers onto that map. That way the functions that installed the handlers could be called with a different ‘space’ if working with a regular (non-slot) system eg. the PCBs or with the cart ‘space’ if working with the slot device. It allows the same code to be shared and reused neatly for both scenarios. (like I said, I had this all planned out..)

naturally at a core level when a cart changes it IS going to be installing something, because it has changed, what’s there now isn’t what was there before.

fwiw I’m also aware that changing the base pointers for the YM sample data isn’t the most modern practice either, and I’d have been better off converting the core to pull from 2 memory maps for the samples (one regular, one delta-t) and then allowing it so that you could set up the memory map in the driver (like OKI 6295 etc.) and using bank pointers in said memory maps to point at the proper sample banks. I know that hasn’t been mentioned in all of this, but I just wanted to make it clear that there was a plan for cleaning up that bit too. (note the YM does still need resetting before you change the banks however to flush any MAME buffers and prevent it pulling sound data incorrectly from a changed bank, although that might be considered a MAME design flaw)

The ‘impossible’ does still happen when people DO work together.

The Data East protection work that was done this year for example seemed like a nightmare at one point. It wasn’t a real MCU, it couldn’t be dumped, it appeared to have a significant amount of weird behavior, and we couldn’t find any correlation between what the different games expected.

By working closely with Charles, who had devised a series of hardware tests, we were able to figure it out, and even make it look easy managing to reapply his findings from one game to every single Data East title protected with these schemes.

The work on The Gladiator surprised me too, I thought it would be a near impossible case because we knew for a fast a not insignificant amount of the ARM code was unobtainable. By working closely with rtw we were able to exact the part that was without issue, and due to some bits xingxing did in the past, and a healthy bout of luck we managed to get there. It would help greatly for the future stuff if Guru could ship his Spectral Vs. Generation v200 cart to the person I was working with, but I suspect that’s where the teamwork will breakdown for that revision.

When people work together good things happen. I do try to encourage that, and like I said, always offer a hand to take progress further in areas I think I can.

Unfortunately it doesn’t always seem like people return the favor, while I might be quick to offer a hand, other people would rather act in negative and destructive ways, and it is in those cases you really don’t see progress.

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.