mamedev / mame

MAME
https://www.mamedev.org/
Other
7.76k stars 1.95k forks source link

nichibutsu/cclimber.cpp: Improves Swimmer driver and adds a new game set #12446

Closed NeilBakersTech closed 3 days ago

NeilBakersTech commented 3 weeks ago

Hey folks. I was granted access to a private arcade collection to repair some game boards and an unusual one caught my eye.

The game board stack was a Tehkan Swimmer, the same as one in my own collection but with modifications to the CPU and Video layers.

Using a Willem programmer I was able to read the EPROM data as 2764 and 2764 types and a grep of MAME code returned no match on the checksums.

When trying to add it to MAME it did not work when renamed as Swimmer and creating replacement EPROMs for my Swimmer game board yielded no results either.

I spent some time making technical notes from my Swimmer game board to understand the working of the board and source of the problem. These notes did not allow the game to run either but led me to see some problems with MAME and the emulation of Swimmer.

Foremost there are numerous places on the game board where address lines are not fully decoded resulting in what MAME calls mirroring. It can be seen on the input section where MAME had separated ports. I have corrected these.

Specific to Swimmer and not Crazy Climber is the sound latch handling. The Swimmer board is a Tehkan game board and uses the same flp-flop configuration with LS273 as found on Bomb Jack for clearing sound latch on read.

After fixing these mistakes in MAME and performing a routine cleaning of the source files I began narrow down what was required to run this new ROM.

Without ongoing access to the modified game board I am unable to determine how the alterations work on hardware but they provide 2 new RAM areas over the standard Swimmer configuration. One of them bypasses the fixed color generation circuits of the original by providing dynamic colors with 3 bits per gun while the other acts as scratch RAM.

The ROM started up as a game I had not heard of before 'Au' with a copyright of 1983

I have begun understand the Dipswitch requirements but could not discover the meaning for a couple. Is there an AI game code analysis tool to help with them or is it a labor intensive process?

Please thank Neill Baker Tech if you decide to include my changes.

NeilBakersTech commented 3 weeks ago
  1. this will fail CI because there's no reference between the added game for mame.lst

    1. glueing together a PR with a cleanup AND a new romset should be already be a good reason to outright reject this. Choose one plan and stick with it.

sod off and take your attitude elsewhere you odious little shit

jackson2k2 commented 3 weeks ago

sod off and take your attitude elsewhere you odious little shit

Oh boy, not this again.

NOTE: The Crazy Climber driver overall needs a complete refactor and devicification at some point, along with Galaxian and friends. Thanks for polishing it up in the meantime though.

Here is a Swimmer netlist I have been meaning to push eventually: https://pastebin.com/raw/4hXTQLpi

And it should be very simple to hook up:

    AY8910(config, m_ay_psg[0], AUDIO_CLOCK/2);
    m_ay_psg[0]->add_route(0, m_nl_in, 1.0, 0);
    m_ay_psg[0]->add_route(1, m_nl_in, 1.0, 1);
    m_ay_psg[0]->add_route(2, m_nl_in, 1.0, 2);
    m_ay_psg[0]->set_flags(AY8910_RESISTOR_OUTPUT);
    AY8910(config, m_ay_psg[1], AUDIO_CLOCK/2);
    m_ay_psg[1]->add_route(0, m_nl_in, 1.0, 3);
    m_ay_psg[1]->add_route(1, m_nl_in, 1.0, 4);
    m_ay_psg[1]->add_route(2, m_nl_in, 1.0, 5);
    m_ay_psg[1]->set_flags(AY8910_RESISTOR_OUTPUT);

    NETLIST_SOUND(config, m_nl_in, (AUDIO_CLOCK / 2) / 8 / 2)
        .set_source(NETLIST_NAME(swimmer))
        .add_route(ALL_OUTPUTS, "speaker", 1.0);

    NETLIST_STREAM_INPUT(config, m_ay_ch[0], 0, "R_AY1_CHA.R");
    NETLIST_STREAM_INPUT(config, m_ay_ch[1], 1, "R_AY1_CHB.R");
    NETLIST_STREAM_INPUT(config, m_ay_ch[2], 2, "R_AY1_CHC.R");
    NETLIST_STREAM_INPUT(config, m_ay_ch[3], 3, "R_AY2_CHA.R");
    NETLIST_STREAM_INPUT(config, m_ay_ch[4], 4, "R_AY2_CHB.R");
    NETLIST_STREAM_INPUT(config, m_ay_ch[5], 5, "R_AY2_CHC.R");

    NETLIST_STREAM_OUTPUT(config, m_nl_out, 0, "R13.1")
        .set_mult_offset(70000.0 / 32768.0, 0.0);

NOTE: The Senjyo hardware that succeeds this is clearly derivative from the Au hardware in some form, these are all big parts of why I am investigating devicifying the Crazy Climber and Galaxian family tree (currently I had began to work on this but all previous attempts have been futile time burners).

angelosa commented 3 weeks ago
  1. this will fail CI because there's no reference between the added game for mame.lst

    1. glueing together a PR with a cleanup AND a new romset should be already be a good reason to outright reject this. Choose one plan and stick with it.

sod off and take your attitude elsewhere you odious little shit

Well Mr. random-first-time-github-contributor that happens to own an incredibly rare pre-JAMMA romset, happened to do non-trivial C++ subclassing and at the same time seemingly didn't read the contributing guidelines, your story doesn't hold together on its feet and I refuse to run the CI pipeline given I know it will fail.

Are you gonna comply or you are pretending somebody else has to do the job for you?

NeilBakersTech commented 3 weeks ago
  1. this will fail CI because there's no reference between the added game for mame.lst

    1. glueing together a PR with a cleanup AND a new romset should be already be a good reason to outright reject this. Choose one plan and stick with it.

sod off and take your attitude elsewhere you odious little shit

Well Mr. random-first-time-github-contributor that happens to own an incredibly rare pre-JAMMA romset, happened to do non-trivial C++ subclassing and at the same time seemingly didn't read the contributing guidelines, your story doesn't hold together on its feet and I refuse to run the CI pipeline given I know it will fail.

Are you gonna comply or you are pretending somebody else has to do the job for you?

Non-trivial subclassing? My CS degree and 37 years of EE and critical system maintenance experience say otherwise.

I had heard on the grapevine the community here were condescending and to be avoided but didn't expect to experience it with such a simple discovery.

Good luck in the future. You'll need it.

rb6502 commented 3 weeks ago

I don't know what's going on here, but the changes actually look decent at a quick look.

And combining adding a new set with a cleanup pass is a perfectly normal thing to do, especially in a driver that's as much of a mess as Crazy Climber. If it was a situation where those two operations spanned 17 commits in a single PR then I'd be peeved. If the CI passes aside from the mame.lst problem I'll give it a closer look.

angelosa commented 3 weeks ago

Non-trivial subclassing? My CS degree and 37 years of EE and critical system maintenance experience say otherwise.

I had heard on the grapevine the community here were condescending and to be avoided but didn't expect to experience it with such a simple discovery.

Well, care to upload a PCB picture of this?

wd40yasu commented 3 weeks ago

uploaded video footage from Tecmo Arcade Game Chronicle to ftp/videos/VTS_05_1(TEHKAN Au).VOB

happppp commented 1 week ago

I don't like angelosa's condescending feedback much either, but you'd be a champ if you had replied to it professionally. I don't care about the backstory. Next time you leak a hoarded ROM, please be more discreet.

The source code is fine. IMO it can be merged, we can adjust mame.lst ourselves if you don't want to.

mamehaze commented 1 week ago

I don't like angelosa's condescending feedback much either, but you'd be a champ if you had replied to it professionally. I don't care about the backstory. Next time you leak a hoarded ROM, please be more discreet.

The source code is fine. IMO it can be merged, we can adjust mame.lst ourselves if you don't want to.

FWIW I don't think this is a 'leaked' ROM at all; if you take a look at https://www.tilt.it/deb/visti-it.html it indicates that the game was on location in a few places in Italy. The most likely source is there IMHO, much as we've seen Alone Shettle Crew, Vampire and some others turn up in the last year; all games known to have been operated in Europe.

My betting here is that's been some warehouse raid or auctioning off of assets recently; Occam's razor and all that. Would even make sense for somebody who has picked up some PCBs be looking to have them repaired if possible.

If something has been seen / played in Europe it's probably not as rare as some would have you believe, it's pretty evident at this point that Europe ended up being a dumping ground for PCBs / cabinets that weren't likely to do well in Japan (or otherwise was a place where location tests got bootlegged) There must be a list near 100 games long where that has been the case.

I don't think calling this kind of thing leaked, when it almost certainly isn't, helps anybody; you're just feeding conspiracy theories and throwing other people under the bus.

mamehaze commented 3 days ago

I'd say bootleg (or Swimmer conversion) not hack, OP indicates it was a Swimmer PCB, most bootlegs are hacked.

happppp commented 3 days ago

IMO OP is not trustworthy =)

mamehaze commented 3 days ago

IMO OP is not trustworthy =)

I don't really seem to see why not. They demonstrated a good enough knowledge about the PCB in question, even if Kale seems to have driven them off with his initial hostile reply. If they've said it's a Swimmer PCB I'd trust that, which almost certainly makes it a bootleg.

happppp commented 3 days ago

I have no way to prove it one way or another, but I'd say the chance is higher that this backstory is fabricated rather than genuine. I won't take Neill's word for it.