mirror of
https://github.com/holub/mame
synced 2025-04-27 02:33:13 +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
|
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)
|
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
|
// 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();
|
return rand();
|
||||||
}
|
}
|
||||||
|
|
||||||
READ16_MEMBER(hng64_state::hng64_sound_port_0006_r)
|
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
|
// 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();
|
return rand();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,28 +218,60 @@ READ16_MEMBER(hng64_state::hng64_sound_port_0008_r)
|
|||||||
|
|
||||||
WRITE16_MEMBER(hng64_state::hng64_sound_select_w)
|
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
|
// I'm guessing these addresses are the sound chip / DSP?
|
||||||
// there are said to be 32 audio channels, so maybe the lower byte is the channel?
|
|
||||||
|
// ---- ---- 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);
|
COMBINE_DATA(&m_audiochannel);
|
||||||
}
|
}
|
||||||
|
|
||||||
WRITE16_MEMBER(hng64_state::hng64_sound_data_02_w)
|
WRITE16_MEMBER(hng64_state::hng64_sound_data_02_w)
|
||||||
{
|
{
|
||||||
m_audiodat[m_audiochannel].dat[2] = data;
|
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)
|
WRITE16_MEMBER(hng64_state::hng64_sound_data_04_w)
|
||||||
{
|
{
|
||||||
m_audiodat[m_audiochannel].dat[1] = data;
|
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)
|
WRITE16_MEMBER(hng64_state::hng64_sound_data_06_w)
|
||||||
{
|
{
|
||||||
m_audiodat[m_audiochannel].dat[0] = data;
|
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??
|
// 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
|
// 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);
|
// 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_LOAD( "c20-05.ic3", 0x0000, 0x0144, CRC(f90e5594) SHA1(6181bb25b77028bb150c84bdc073f0457efd7eaa) ) // Confirmed/Matches Japan Set
|
||||||
ROM_END
|
ROM_END
|
||||||
|
|
||||||
ROM_START( puzznici ) /* bootleg */
|
ROM_START( puzznici ) /* bootleg (original main board, bootleg sub-board without MCU) */
|
||||||
ROM_REGION( 0x20000, "maincpu", 0 )
|
ROM_REGION( 0x20000, "maincpu", 0 )
|
||||||
ROM_LOAD( "1.ic11", 0x00000, 0x20000, CRC(4612f5e0) SHA1(dc07a365414666568537d31ef01b58f2362cadaf) )
|
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_LOAD16_BYTE( "3.ic9", 0x00001, 0x20000, CRC(2bf5232a) SHA1(a8fc06bb8bae2ca6bd21e3a96c9ed38bb356d5d7) )
|
||||||
ROM_END
|
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
|
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, 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, 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, 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, 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( 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, 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( 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
|
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( 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, 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
|
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)
|
champwrj // C01 (c) 1989 Taito Corporation (Japan)
|
||||||
puzznic // C20 (c) 1989 Taito Corporation (Japan)
|
puzznic // C20 (c) 1989 Taito Corporation (Japan)
|
||||||
puzznicj // 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)
|
horshoes // C47 (c) 1990 Taito America Corporation (US)
|
||||||
palamed // C63 (c) 1990 Taito Corporation (Japan)
|
palamed // C63 (c) 1990 Taito Corporation (Japan)
|
||||||
cachat // ??? (c) 1993 Taito Corporation (Japan)
|
cachat // ??? (c) 1993 Taito Corporation (Japan)
|
||||||
|
Loading…
Reference in New Issue
Block a user