From eb43ff52df9e76f3dadbede7567b79b7b0869453 Mon Sep 17 00:00:00 2001 From: mamehaze Date: Sat, 14 Mar 2015 11:52:58 +0000 Subject: [PATCH] new clones Puzznic (bootleg) [cmonkey] --- src/mame/audio/hng64.c | 61 ++++++++++++++++++++++++++++++++------ src/mame/drivers/taito_l.c | 15 ++++++++-- src/mame/mame.lst | 3 +- 3 files changed, 66 insertions(+), 13 deletions(-) diff --git a/src/mame/audio/hng64.c b/src/mame/audio/hng64.c index 8003b14b492..dbce6f5c885 100644 --- a/src/mame/audio/hng64.c +++ b/src/mame/audio/hng64.c @@ -23,6 +23,10 @@ IRQ mask register on the internal interrupt controller is set to 0xd8 so levels 0,1,2,5 are unmasked +returning random values / triggering random interrupts eventually results in a situation +where the CPU stops writing to the sound related addresses and starts reading / masking the +serial comms register. + */ @@ -191,15 +195,17 @@ WRITE16_MEMBER(hng64_state::hng64_sound_port_0008_w) READ16_MEMBER(hng64_state::hng64_sound_port_0004_r) { + // it writes the channel select before reading this.. so either it works on channels, or the command.. // read in irq5 - logerror("%08x: hng64_sound_port_0004_r mask (%04x)\n", space.device().safe_pc(), mem_mask); + printf("%08x: hng64_sound_port_0004_r mask (%04x) chn %04x\n", space.device().safe_pc(), mem_mask, m_audiochannel); return rand(); } READ16_MEMBER(hng64_state::hng64_sound_port_0006_r) { + // it writes the channel select before reading this.. so either it works on channels, or the command.. // read in irq5 - logerror("%08x: hng64_sound_port_0006_r mask (%04x)\n", space.device().safe_pc(), mem_mask); + printf("%08x: hng64_sound_port_0006_r mask (%04x) chn %04x\n", space.device().safe_pc(), mem_mask, m_audiochannel); return rand(); } @@ -212,28 +218,60 @@ READ16_MEMBER(hng64_state::hng64_sound_port_0008_r) WRITE16_MEMBER(hng64_state::hng64_sound_select_w) { - // seems to write values in the format xxyy where yy is 0x00-0x1f and xx is oten 00/01/0a - // there are said to be 32 audio channels, so maybe the lower byte is the channel? + // I'm guessing these addresses are the sound chip / DSP? + + // ---- ---- 000c cccc + // c = channel + + if (data & 0x00e0) printf("hng64_sound_select_w unknown channel %02x\n", data & 0x00ff); + + UINT8 command = data >> 8; + + switch (command) + { + case 0x00: + case 0x01: + case 0x02: + case 0x03: // 00003fffffff (startup only?) + case 0x04: // doesn't use 6 + case 0x05: // 00003fffffff (mostly, often) + case 0x06: // 00007ff0ffff mostly + case 0x07: // 0000000f0708 etc. (low values) + case 0x08: // doesn't write to 2/4/6 with this set?? + case 0x09: // doesn't write to 2/4/6 with this set?? + case 0x0a: // random looking values + + break; + + default: + printf("hng64_sound_select_w unrecognized command %02x\n", command); + break; + } -// logerror("hng64_sound_select_w") COMBINE_DATA(&m_audiochannel); } WRITE16_MEMBER(hng64_state::hng64_sound_data_02_w) { m_audiodat[m_audiochannel].dat[2] = data; -// logerror("write port 0x0002 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); + +// if ((m_audiochannel & 0xff00) == 0x0a00) +// printf("write port 0x0002 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); } WRITE16_MEMBER(hng64_state::hng64_sound_data_04_w) { m_audiodat[m_audiochannel].dat[1] = data; -// logerror("write port 0x0004 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); + +// if ((m_audiochannel & 0xff00) == 0x0a00) +// printf("write port 0x0004 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); } WRITE16_MEMBER(hng64_state::hng64_sound_data_06_w) { m_audiodat[m_audiochannel].dat[0] = data; -// logerror("write port 0x0006 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); + +// if ((m_audiochannel & 0xff00) == 0x0a00) +// printf("write port 0x0006 chansel %04x data %04x (%04x%04x%04x)\n", m_audiochannel, data, m_audiodat[m_audiochannel].dat[0], m_audiodat[m_audiochannel].dat[1], m_audiodat[m_audiochannel].dat[2]); } // but why not just use the V33/V53 XA mode?? @@ -377,7 +415,12 @@ WRITE_LINE_MEMBER(hng64_state::tcu_tm2_cb) { // these are very active, maybe they feed back into the v53 via one of the IRQ pins? TM2 toggles more rapidly than TM1 // logerror("tcu_tm2_cb %02x\n", state); - m_audiocpu->set_input_line(2, state? ASSERT_LINE:CLEAR_LINE); // not accurate, just so we have a trigger + + // NOT ACCURATE, just so that all the interrupts get triggered for now. + static int i = 0; + m_audiocpu->set_input_line(i, state? ASSERT_LINE:CLEAR_LINE); + i++; + if (i == 3) i = 0; } diff --git a/src/mame/drivers/taito_l.c b/src/mame/drivers/taito_l.c index 9315fdfa58c..49d9edb202e 100644 --- a/src/mame/drivers/taito_l.c +++ b/src/mame/drivers/taito_l.c @@ -2352,7 +2352,7 @@ ROM_START( puzznicj ) ROM_LOAD( "c20-05.ic3", 0x0000, 0x0144, CRC(f90e5594) SHA1(6181bb25b77028bb150c84bdc073f0457efd7eaa) ) // Confirmed/Matches Japan Set ROM_END -ROM_START( puzznici ) /* bootleg */ +ROM_START( puzznici ) /* bootleg (original main board, bootleg sub-board without MCU) */ ROM_REGION( 0x20000, "maincpu", 0 ) ROM_LOAD( "1.ic11", 0x00000, 0x20000, CRC(4612f5e0) SHA1(dc07a365414666568537d31ef01b58f2362cadaf) ) @@ -2361,6 +2361,15 @@ ROM_START( puzznici ) /* bootleg */ ROM_LOAD16_BYTE( "3.ic9", 0x00001, 0x20000, CRC(2bf5232a) SHA1(a8fc06bb8bae2ca6bd21e3a96c9ed38bb356d5d7) ) ROM_END +ROM_START( puzznicb ) /* bootleg (original main board, bootleg sub-board without MCU) */ + ROM_REGION( 0x20000, "maincpu", 0 ) + ROM_LOAD( "ic11.bin", 0x00000, 0x20000, CRC(2510df4d) SHA1(534327e3d7f847b6c0effc5fd0fb9f5da9b0d3b1) ) + + ROM_REGION( 0x20000, "gfx1", 0 ) // this has the bad line in tile 1 fixed (unused I believe) are we sure the roms used in the original sets are a good dump? + ROM_LOAD16_BYTE( "ic10.bin", 0x00000, 0x10000, CRC(be12749a) SHA1(c67d1a434486843a6776d89e905362b7db595d8d) ) + ROM_LOAD16_BYTE( "ic9.bin", 0x00001, 0x10000, CRC(0f183340) SHA1(9eef7de801eb9763313f55a38e567b92fca3bfa6) ) +ROM_END + /* Taito's Horse Shoe @@ -2588,13 +2597,13 @@ GAME( 1989, flipull, plotting, plotting, plotting, driver_device, 0, GAME( 1989, puzznic, 0, puzznic, puzznic, driver_device, 0, ROT0, "Taito Corporation Japan", "Puzznic (World)", 0 ) GAME( 1989, puzznicj, puzznic, puzznic, puzznic, driver_device, 0, ROT0, "Taito Corporation", "Puzznic (Japan)", 0 ) GAME( 1989, puzznici, puzznic, puzznici, puzznic, driver_device, 0, ROT0, "bootleg", "Puzznic (Italian bootleg)", 0 ) +GAME( 1989, puzznicb, puzznic, puzznici, puzznic, driver_device, 0, ROT0, "bootleg", "Puzznic (bootleg)", 0 ) GAME( 1990, horshoes, 0, horshoes, horshoes, driver_device, 0, ROT270, "Taito America Corporation", "American Horseshoes (US)", 0 ) GAME( 1990, palamed, 0, palamed, palamed, driver_device, 0, ROT0, "Taito Corporation", "Palamedes (Japan)", 0 ) GAME( 1993, cachat, 0, cachat, cachat, driver_device, 0, ROT0, "Taito Corporation", "Cachat (Japan)", 0 ) - GAME( 1993, tubeit, cachat, cachat, tubeit, driver_device, 0, ROT0, "bootleg", "Tube-It", 0 ) // No (c) message GAME( 199?, cubybop, 0, cachat, cubybop, driver_device, 0, ROT0, "Hot-B", "Cuby Bop (location test)", 0 ) // No (c) message, but Hot-B company logo in tile gfx @@ -2603,6 +2612,6 @@ GAME( 1992, plgirls, 0, cachat, plgirls, driver_device, 0, GAME( 1992, lagirl, plgirls, cachat, plgirls, driver_device, 0, ROT270, "bootleg", "LA Girl", 0 ) // bootleg hardware with changed title & backgrounds GAME( 1993, plgirls2, 0, cachat, plgirls2, driver_device, 0, ROT270, "Hot-B", "Play Girls 2", 0 ) -GAME( 1993, plgirls2b, plgirls2, cachat, plgirls2, driver_device, 0, ROT270, "bootleg", "Play Girls 2 (bootleg)", 0 ) // bootleg hardware (regular Z80 etc. instead of TC0090LVC, but acts the same) +GAME( 1993, plgirls2b, plgirls2, cachat, plgirls2, driver_device, 0, ROT270, "bootleg", "Play Girls 2 (bootleg)", GAME_IMPERFECT_GRAPHICS ) // bootleg hardware (regular Z80 etc. instead of TC0090LVC, but acts almost the same - scroll offset problems) GAME( 1990, evilston, 0, evilston, evilston, driver_device, 0, ROT270, "Spacy Industrial, Ltd.", "Evil Stone", GAME_IMPERFECT_SOUND ) // not Taito PCB, just uses TC0090LVC diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 31924ae4f11..e5216e1b67f 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -2283,7 +2283,8 @@ champwru // C01 (c) 1989 Taito America Corporation (US) champwrj // C01 (c) 1989 Taito Corporation (Japan) puzznic // C20 (c) 1989 Taito Corporation (Japan) puzznicj // C20 (c) 1989 Taito Corporation (Japan) -puzznici // C20 (c) 1989 Taito Corporation (Japan) +puzznici // bootleg +puzznicb // bootleg horshoes // C47 (c) 1990 Taito America Corporation (US) palamed // C63 (c) 1990 Taito Corporation (Japan) cachat // ??? (c) 1993 Taito Corporation (Japan)