mirror of
https://github.com/holub/mame
synced 2025-04-26 18:23:08 +03:00
new clones
Puzznic (bootleg) [cmonkey]
This commit is contained in:
parent
ae1856faa4
commit
eb43ff52df
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
@ -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
|
||||
|
@ -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)
|
||||
|
Loading…
Reference in New Issue
Block a user