mirror of
https://github.com/holub/mame
synced 2025-04-24 09:20:02 +03:00
New clones marked not working
----------------------------- Te Yi Gong Neng (China, V632C) [dyq, little0, Guru]
This commit is contained in:
parent
b75276bf14
commit
d195751de3
@ -35,6 +35,7 @@ Year + Game PCB Sound Chips
|
||||
96 Virtua Bowling V101XCM NO-0101-1 ICS2115 IGS011 IGS003e IGS012
|
||||
96 Virtua Bowling V101HJS NO-0101-? ICS2115 IGS011 IGS003e?IGS012
|
||||
96 Long Hu Bang II V185H NO-0115 M6295 YM2413 IGS011 8255
|
||||
96 Te Yi Gong Neng NO-0127-2 M6295 YM2413 IGS011 IGS003A
|
||||
96 Wanli Changcheng ?
|
||||
96 Xingyun Man Guan ?
|
||||
98 Mj Nenrikishu SP V250J NO-0115-5 M6295 YM2413 IGS011 8255
|
||||
@ -128,10 +129,12 @@ public:
|
||||
void init_vbowlj();
|
||||
void init_vbowlhk();
|
||||
void init_ryukobou();
|
||||
void init_tygn();
|
||||
|
||||
void igs011_base(machine_config &config);
|
||||
void drgnwrld(machine_config &config);
|
||||
void nkishusp(machine_config &config);
|
||||
void tygn(machine_config &config);
|
||||
void wlcc(machine_config &config);
|
||||
void vbowl(machine_config &config);
|
||||
void vbowlhk(machine_config &config);
|
||||
@ -285,6 +288,7 @@ private:
|
||||
void vbowlhk_decrypt();
|
||||
void dbc_decrypt();
|
||||
void ryukobou_decrypt();
|
||||
void tygn_decrypt();
|
||||
void lhb2_gfx_decrypt();
|
||||
void vbowl_gfx_decrypt();
|
||||
void drgnwrld_gfx_decrypt();
|
||||
@ -295,6 +299,7 @@ private:
|
||||
void lhb_mem(address_map &map);
|
||||
void lhb2_mem(address_map &map);
|
||||
void nkishusp_mem(address_map &map);
|
||||
void tygn_mem(address_map &map);
|
||||
void vbowl_mem(address_map &map);
|
||||
void vbowlhk_mem(address_map &map);
|
||||
void wlcc_mem(address_map &map);
|
||||
@ -907,6 +912,39 @@ void igs011_state::nkishusp_decrypt()
|
||||
}
|
||||
|
||||
|
||||
void igs011_state::tygn_decrypt()
|
||||
{
|
||||
int rom_size = 0x80000;
|
||||
u16 *src = (u16 *) (m_maincpu_region->base());
|
||||
std::vector<u16> result_data(rom_size / 2);
|
||||
|
||||
for (int i = 0; i < rom_size / 2; i++)
|
||||
{
|
||||
u16 x = src[i];
|
||||
|
||||
int j = bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 0, 2, 9, 5, 12, 14, 11, 8, 6, 3, 4, 16, 15, 13, 10, 7, 1);
|
||||
|
||||
if ((j & 0x0280 / 2) || ((j & 0x0024 / 2) == 0x24 / 2))
|
||||
x ^= 0x0004;
|
||||
|
||||
if (j & 0x4000 / 2)
|
||||
{
|
||||
if ((((j & 0x100 / 2) == 0x000 / 2) ^ ((j & 0x128 / 2) == 0x028 / 2)) || ((j & 0x108 / 2) == 0x100 / 2))
|
||||
x ^= 0x0020;
|
||||
}
|
||||
else
|
||||
x ^= 0x0020;
|
||||
|
||||
if (!(j & 0x8000 / 2) && (j & 0x2000 / 2))
|
||||
x ^= 0x0008;
|
||||
|
||||
result_data[j] = x;
|
||||
}
|
||||
|
||||
memcpy(src, &result_data[0], rom_size);
|
||||
}
|
||||
|
||||
|
||||
void igs011_state::vbowl_decrypt()
|
||||
{
|
||||
u16 *src = (u16 *) (m_maincpu_region->base());
|
||||
@ -2451,6 +2489,38 @@ void igs011_state::init_lhb2()
|
||||
*/
|
||||
}
|
||||
|
||||
void igs011_state::init_tygn()
|
||||
{
|
||||
tygn_decrypt();
|
||||
|
||||
lhb2_gfx_decrypt();
|
||||
|
||||
// PROTECTION CHECKS (similar to nkishusp)
|
||||
|
||||
u16 *rom = (u16 *) m_maincpu_region->base();
|
||||
|
||||
rom[0x036d8/2] = 0x6042; // 0036d8: 660E bne $36e8 (ROM test)
|
||||
|
||||
//TODO: are the following patches needed? in that case the ones after the blank line should be adapted to the tygn offsets
|
||||
//rom[0x1c6a0/2] = 0x6034; // 01c6a0: 6734 beq $1c6d6
|
||||
//rom[0x2412a/2] = 0x6036; // 02412a: 6736 beq $24162
|
||||
//rom[0x26de6/2] = 0x6038; // 026de6: 6e38 bgt $26e20 (system error)
|
||||
//rom[0x2da36/2] = 0x6036; // 02da36: 6736 beq $2da6e
|
||||
|
||||
//rom[0x2ff20/2] = 0x6036; // 02ff20: 6736 beq $2ff58
|
||||
//rom[0x3151c/2] = 0x6036; // 03151c: 6736 beq $31554
|
||||
//rom[0x33dfc/2] = 0x6036; // 033dfc: 6736 beq $33e34
|
||||
//rom[0x3460e/2] = 0x6038; // 03460e: 6e38 bgt $34648 (system error)
|
||||
//rom[0x3f09e/2] = 0x6034; // 03f09e: 6734 beq $3f0d4
|
||||
//rom[0x406a8/2] = 0x6036; // 0406a8: 6736 beq $406e0
|
||||
//rom[0x4376a/2] = 0x6034; // 04376a: 6734 beq $437a0
|
||||
//rom[0x462d6/2] = 0x6034; // 0462d6: 6734 beq $4630c
|
||||
//rom[0x471ec/2] = 0x6036; // 0471ec: 6e36 bgt $47224 (system error)
|
||||
//rom[0x49c46/2] = 0x6000; // 049c46: 6700 0444 beq $4a08c
|
||||
//rom[0x4a2b6/2] = 0x6036; // 04a2b6: 6736 beq $4a2ee
|
||||
//rom[0x4c67a/2] = 0x6038; // 04c67a: 6e38 bgt $4c6b4 (system error)
|
||||
}
|
||||
|
||||
void igs011_state::init_vbowl()
|
||||
{
|
||||
u16 *rom = (u16 *) m_maincpu_region->base();
|
||||
@ -2820,6 +2890,14 @@ void igs011_state::nkishusp_mem(address_map &map)
|
||||
map(0xa88000, 0xa88001).r(FUNC(igs011_state::igs_dips_r<3>));
|
||||
}
|
||||
|
||||
void igs011_state::tygn_mem(address_map &map)
|
||||
{
|
||||
nkishusp_mem(map);
|
||||
|
||||
map(0x208000, 0x208001).nopr(); // TODO
|
||||
map(0x208002, 0x208003).rw(FUNC(igs011_state::drgnwrld_igs003_r), FUNC(igs011_state::lhb2_igs003_w));
|
||||
}
|
||||
|
||||
|
||||
u16 igs011_state::vbowl_unk_r()
|
||||
{
|
||||
@ -3469,6 +3547,86 @@ static INPUT_PORTS_START( nkishusp )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
// basically same game as lhb2 and nkishusp but with joystick controls
|
||||
static INPUT_PORTS_START( tygn )
|
||||
PORT_START("DSW1")
|
||||
PORT_DIPNAME( 0x07, 0x07, "Pay Out (%)" ) PORT_DIPLOCATION("DSW1:1,2,3")
|
||||
PORT_DIPSETTING( 0x07, "50" )
|
||||
PORT_DIPSETTING( 0x06, "54" )
|
||||
PORT_DIPSETTING( 0x05, "58" )
|
||||
PORT_DIPSETTING( 0x04, "62" )
|
||||
PORT_DIPSETTING( 0x03, "66" )
|
||||
PORT_DIPSETTING( 0x02, "70" )
|
||||
PORT_DIPSETTING( 0x01, "74" )
|
||||
PORT_DIPSETTING( 0x00, "78" )
|
||||
PORT_DIPNAME( 0x08, 0x08, "Minimum Bet" ) PORT_DIPLOCATION("DSW1:4")
|
||||
PORT_DIPSETTING( 0x08, "1" )
|
||||
PORT_DIPSETTING( 0x00, "2" )
|
||||
PORT_DIPNAME( 0x30, 0x30, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW1:5,6")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
|
||||
PORT_DIPSETTING( 0x30, DEF_STR( 1C_1C ) )
|
||||
PORT_DIPSETTING( 0x20, DEF_STR( 1C_2C ) )
|
||||
PORT_DIPSETTING( 0x10, DEF_STR( 1C_3C ) )
|
||||
PORT_DIPNAME( 0x40, 0x40, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DSW1:7")
|
||||
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
|
||||
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
|
||||
PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_DIPLOCATION("DSW1:8")
|
||||
|
||||
PORT_START("DSW2") // not shown in test mode
|
||||
PORT_DIPUNKNOWN( 0x01, 0x01 ) PORT_DIPLOCATION("DSW2:1")
|
||||
PORT_DIPUNKNOWN( 0x02, 0x02 ) PORT_DIPLOCATION("DSW2:2")
|
||||
PORT_DIPUNKNOWN( 0x04, 0x04 ) PORT_DIPLOCATION("DSW2:3")
|
||||
PORT_DIPUNKNOWN( 0x08, 0x08 ) PORT_DIPLOCATION("DSW2:4")
|
||||
PORT_DIPUNKNOWN( 0x10, 0x10 ) PORT_DIPLOCATION("DSW2:5")
|
||||
PORT_DIPUNKNOWN( 0x20, 0x20 ) PORT_DIPLOCATION("DSW2:6")
|
||||
PORT_DIPUNKNOWN( 0x40, 0x40 ) PORT_DIPLOCATION("DSW2:7")
|
||||
PORT_DIPUNKNOWN( 0x80, 0x80 ) PORT_DIPLOCATION("DSW2:8")
|
||||
|
||||
PORT_START("DSW3") // only 2 out of 4 DIP banks phisically present
|
||||
PORT_DIPNAME( 0xff, 0xff, DEF_STR( Unused ) )
|
||||
|
||||
PORT_START("COIN")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_SERVICE_NO_TOGGLE( 0x04, IP_ACTIVE_LOW ) // keep pressed while booting
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_SERVICE1 ) // stats
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT )
|
||||
|
||||
PORT_START("IN0")
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_START1 ) // ok
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) // ok
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) // ok
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // ok
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // ok
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON1 ) // selects input test in test mode
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON2 ) // selects image test in test mode
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON3 ) // selects audio test in test mode
|
||||
|
||||
PORT_START("IN1") // probably unused
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
|
||||
PORT_START("IN2") // probably unused
|
||||
PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_UNKNOWN )
|
||||
INPUT_PORTS_END
|
||||
|
||||
|
||||
static INPUT_PORTS_START( wlcc )
|
||||
PORT_START("DSW1")
|
||||
PORT_DIPUNKNOWN( 0x01, 0x01 )
|
||||
@ -4176,6 +4334,13 @@ void igs011_state::nkishusp(machine_config &config)
|
||||
}
|
||||
|
||||
|
||||
void igs011_state::tygn(machine_config &config)
|
||||
{
|
||||
nkishusp(config);
|
||||
m_maincpu->set_addrmap(AS_PROGRAM, &igs011_state::tygn_mem);
|
||||
}
|
||||
|
||||
|
||||
void igs011_state::sound_irq(int state)
|
||||
{
|
||||
// m_maincpu->set_input_line(3, state);
|
||||
@ -4805,6 +4970,63 @@ ROM_START( nkishusp )
|
||||
ROM_LOAD( "sp.u38", 0x00000, 0x80000, CRC(d80e28e2) SHA1(c03441686e770227db6a2a41922fbb4284710571) )
|
||||
ROM_END
|
||||
|
||||
/*********************************************************************************
|
||||
|
||||
Te Yi Gong Neng, IGS 1996
|
||||
|
||||
This is the joystick version of LHB2
|
||||
|
||||
PCB Layout
|
||||
----------
|
||||
|
||||
IGS PCB NO- 0127-2
|
||||
|-----------------------------------------|
|
||||
|UPC1242 U3587 K668 S0503.U42|
|
||||
| 3.579545MHz |
|
||||
| SW1 |
|
||||
| M0502.U3 SW2 |
|
||||
| SW3 |
|
||||
| SW4 |
|
||||
| 6164 |
|
||||
|J |
|
||||
|A M0501.U7 PAL 6164 |
|
||||
|M PAL |
|
||||
|M PAL |
|
||||
|A PAL IGS011 |
|
||||
| PAL |
|
||||
| |
|
||||
| 68000 22MHz KM428C256 |
|
||||
| 27C4096.U13 |
|
||||
| T518B IGS003A 6164 KM428C256 |
|
||||
| SW5 BATTERY 6164 |
|
||||
|-----------------------------------------|
|
||||
Notes:
|
||||
68000 - Clock 7.33333MHz [22/3]
|
||||
K668 - Oki M6295 clone. Clock 1.047619048MHz [22/21]
|
||||
U3587 - This is a YM2412 clone. Clock input 3.579545MHz
|
||||
SW1/2/3/4 - 8-Position DIP Switch. SW3 and SW4 not populated
|
||||
SW5 - Reset / NVRAM Clear
|
||||
6164 - 8kBx8-bit SRAM
|
||||
KM428C256 - Dual-Port Video RAM with 256kBx8-bit DRAM and 512x8 SAM (Serial Access Memory).
|
||||
This is the same type of RAM used on Midway T-Unit hardware but 2X larger.
|
||||
|
||||
*********************************************************************************/
|
||||
|
||||
ROM_START( tygn ) // GFX ROMs same as lhb2 and nkishusp, sound ROM same as lhb2
|
||||
ROM_REGION( 0x80000, "maincpu", 0 )
|
||||
ROM_LOAD16_WORD_SWAP( "27c4096.u13", 0x00000, 0x80000, CRC(25b1de1e) SHA1(7c3d0458b30db614e551fdf0db3f93fa44fcb758) )
|
||||
|
||||
ROM_REGION( 0x800000, "blitter", ROMREGION_ERASEFF )
|
||||
ROM_LOAD( "m0501.u7", 0x000000, 0x200000, CRC(1c952bd6) SHA1(a6b6f1cdfb29647e81c032ffe59c94f1a10ceaf8) )
|
||||
|
||||
ROM_REGION( 0x200000, "blitter_hi", ROMREGION_ERASEFF ) // high order bit of graphics (5th bit)
|
||||
ROM_LOAD( "m0502.u3", 0x00000, 0x80000, CRC(5d73ae99) SHA1(7283aa3d6b15ceb95db80756892be46eb997ef15) )
|
||||
|
||||
ROM_REGION( 0x80000, "oki", 0 )
|
||||
ROM_LOAD( "s0502.u42", 0x00000, 0x80000, CRC(c9609c9c) SHA1(f036e682b792033409966e84292a69275eaa05e5) )
|
||||
ROM_END
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
|
||||
Virtua Bowling by IGS
|
||||
@ -4912,7 +5134,7 @@ ROM_START( xymg )
|
||||
ROM_CONTINUE( 0x00000, 0x80000 ) // 1ST+2ND IDENTICAL
|
||||
ROM_END
|
||||
|
||||
} // Anonymous namespace
|
||||
} // anonymous namespace
|
||||
|
||||
|
||||
/***************************************************************************
|
||||
@ -4935,6 +5157,7 @@ GAME( 1995, lhbv33c, lhb, lhb, lhb, igs011_state, i
|
||||
GAME( 1995, dbc, lhb, lhb, lhb, igs011_state, init_dbc, ROT0, "IGS", "Daai Baan Sing (Hong Kong, V027H)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1995, ryukobou, lhb, lhb, lhb, igs011_state, init_ryukobou, ROT0, "IGS / Alta", "Mahjong Ryukobou (Japan, V030J)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, lhb2, 0, lhb2, lhb2, igs011_state, init_lhb2, ROT0, "IGS", "Lung Fu Bong II (Hong Kong, V185H)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, tygn, lhb2, tygn, tygn, igs011_state, init_tygn, ROT0, "IGS", "Te Yi Gong Neng (China, V632C)", MACHINE_SUPPORTS_SAVE | MACHINE_NOT_WORKING ) // needs correct IGS003 routines
|
||||
GAME( 1996, xymg, 0, xymg, xymg, igs011_state, init_xymg, ROT0, "IGS", "Xingyun Man Guan (China, V651C)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, wlcc, xymg, wlcc, wlcc, igs011_state, init_wlcc, ROT0, "IGS", "Wanli Changcheng (China, V638C)", MACHINE_SUPPORTS_SAVE )
|
||||
GAME( 1996, vbowl, 0, vbowl, vbowl, igs011_state, init_vbowl, ROT0, "IGS", "Virtua Bowling (World, V101XCM)", MACHINE_SUPPORTS_SAVE | MACHINE_IMPERFECT_SOUND )
|
||||
|
@ -502,7 +502,7 @@ IGS PCB-0239-11-EE
|
||||
ROM_START( slqz3 )
|
||||
ROM_REGION( 0x04000, "maincpu", 0 )
|
||||
// Internal ROM of IGS027A type G ARM based MCU
|
||||
ROM_LOAD( "slqz3_027a.bin", 0x00000, 0x4000, CRC(abb8ef8b) SHA1(b8912fe38dc2ff3b1a718e9fe3c76eae30aad7dc) ) // unknown sticker
|
||||
ROM_LOAD( "s11_027a.bin", 0x00000, 0x4000, CRC(abb8ef8b) SHA1(b8912fe38dc2ff3b1a718e9fe3c76eae30aad7dc) )
|
||||
|
||||
ROM_REGION32_LE( 0x200000, "user1", 0 ) // external ARM data / prg
|
||||
ROM_LOAD( "u29", 0x000000, 0x200000, CRC(215fed1e) SHA1(c85d8695e0be1044ac206118c3fc0ddc7063aaf6) ) // 11xxxxxxxxxxxxxxxxxxx = 0xFF
|
||||
|
@ -20180,6 +20180,7 @@ lhb2 // (c) 1996
|
||||
lhbv33c // (c) 1995
|
||||
nkishusp // (c) 1998
|
||||
ryukobou // (c) 1995
|
||||
tygn // (c) 1996
|
||||
vbowl // (c) 1996
|
||||
vbowlhk // (c) 1996
|
||||
vbowlj // (c) 1996
|
||||
|
Loading…
Reference in New Issue
Block a user