New working systems

-------------------
Aka Mahjong (Double Bet) [Hammy]

New systems marked not working
------------------------------
Double 8 Lines [Ioannis Bampoulas]
Super Cherry Master Plus [Ioannis Bampoulas]

New clones marked not working
-----------------------------
Turbo PK (Ver 2.3B2, encrypted)  [Hammy]
This commit is contained in:
Ivan Vangelista 2024-08-29 22:19:55 +02:00
parent 4d06a147d7
commit b2f608fe69
6 changed files with 284 additions and 153 deletions

View File

@ -4469,6 +4469,19 @@ ROM_START( ippatsu )
ROM_LOAD( "82s123an", 0x00, 0x20, CRC(3bde1bbd) SHA1(729498483943f960e38c4ada992b099b698b497a) )
ROM_END
// has NEW DOUBLE BET MOJHONG (sic) in ROM but title screen shows 赤麻雀 (Red Mahjong)
ROM_START( akamj )
ROM_REGION( 0x18000, "maincpu", 0 )
ROM_LOAD( "b3.bin", 0x00000, 0x8000, CRC(fb2e5a3e) SHA1(6a06b36dd3baa4c0aba339aaf2e00d82d08cbb22) )
ROM_LOAD( "bc2.bin", 0x08000, 0x8000, CRC(38d2aa91) SHA1(b0469803265c6359dc5680e669324a41b84548d7) )
ROM_LOAD( "bc1.bin", 0x10000, 0x8000, CRC(38d2aa91) SHA1(b0469803265c6359dc5680e669324a41b84548d7) ) // yes, same ROM 2 times
ROM_REGION( 0x20, "proms", 0 )
// taken from Royal Mahjong, might or might not be the same.
ROM_LOAD( "82s123.prm", 0x00, 0x20, BAD_DUMP CRC(d3007282) SHA1(e4d863ab193e49208ed0f59dcddb1da0492314f6) )
ROM_END
ROM_START( suzume )
ROM_REGION( 0x100000, "maincpu", 0 )
ROM_LOAD( "p1.bin", 0x00000, 0x1000, CRC(e9706967) SHA1(2e3d78178623de6552c9036da90e02f240d94055) )
@ -6181,7 +6194,8 @@ GAME( 1984?, chalgirl, 0, chalgirl, royalmah, royalmah_prgbank_state, ini
GAME( 1983, seljan, 0, seljan, seljan, royalmah_state, empty_init, ROT0, "Jem / Dyna Corp", "Sel-Jan (Japan)", 0 )
GAME( 1983, janyoup2, royalmj, janyoup2, janyoup2, royalmah_state, empty_init, ROT0, "Cosmo Denshi", "Janyou Part II (ver 7.03, July 1 1983)",0 )
GAME( 1985, tahjong, royalmj, tahjong, tahjong, royalmah_prgbank_state, init_tahjong, ROT0, "Bally Pond / Nasco", "Tahjong Yakitori (ver. 2-1)", 0 ) // 1985 Jun. 17
GAME( 1981, janputer, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd. / Mes)", "New Double Bet Mahjong (bootleg of Royal Mahjong)", 0 ) // MT #05392
GAME( 1981, janputer, 0, royalmah, royalmah, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd. / Mes)", "New Double Bet Mahjong (bootleg of Royal Mahjong", 0 ) // MT #05392
GAME( 1981, akamj, 0, ippatsu, ippatsu, royalmah_state, empty_init, ROT0, "bootleg (Paradise Denshi Ltd.)", "Aka Mahjong (Double Bet)", 0 )
GAME( 1984, rkjanoh2, 0, rkjanoh2, royalmah, royalmah_prgbank_state, init_chalgirl, ROT0, "SNK / Dyna Corp", "Royal King Jang Oh 2 (v4.00 1984 Jun 10th)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING ) // never seems to set the palette bank?
GAME( 1984, janoh, 0, janoh, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 1)", MACHINE_NOT_WORKING )
GAME( 1984, janoha, janoh, janoha, royalmah, royalmah_state, empty_init, ROT0, "Toaplan", "Jan Oh (set 2)", MACHINE_NOT_WORKING ) // this one is complete?

View File

@ -1,5 +1,6 @@
// license:BSD-3-Clause
// copyright-holders:Mirko Buffoni, David Haywood
// copyright-holders: Mirko Buffoni, David Haywood
/***************************************************************************
Cabaret (AMT)
@ -15,6 +16,8 @@ TODO:
- Remove patches after finding why there are so many pitfalls. Maybe the
game expects to read inputs via an external device and expects certain
timings
- Trojan out internal ROMs for kungfua and double8l
- kungfua and double8l have 5 8-DIP banks (sheets available for double8l)
Press F1+F2 during reset to see 'pork*ish' test mode :P
@ -24,9 +27,11 @@ are the same of IGS. AMT may be previous IGS name.
***************************************************************************/
#include "emu.h"
#include "cpu/z180/z180.h"
#include "machine/i8255.h"
#include "sound/ymopl.h"
#include "emupal.h"
#include "screen.h"
#include "speaker.h"
@ -40,16 +45,45 @@ class cabaret_state : public driver_device
public:
cabaret_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_fg_tile_ram(*this, "fg_tile_ram")
, m_fg_color_ram(*this, "fg_color_ram")
, m_bg_scroll(*this, "bg_scroll")
, m_bg_tile_ram(*this, "bg_tile_ram")
, m_maincpu(*this, "maincpu")
, m_gfxdecode(*this, "gfxdecode")
, m_palette(*this, "palette")
, m_led(*this, "led6")
{ }
void cabaret(machine_config &config);
void init_cabaret();
void init_double8l();
void init_kungfua();
protected:
virtual void machine_start() override { m_led.resolve(); }
virtual void machine_reset() override;
virtual void video_start() override;
private:
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
required_shared_ptr<uint8_t> m_fg_tile_ram;
required_shared_ptr<uint8_t> m_fg_color_ram;
required_shared_ptr<uint8_t> m_bg_scroll;
required_shared_ptr<uint8_t> m_bg_tile_ram;
output_finder<> m_led;
tilemap_t *m_bg_tilemap = nullptr;
tilemap_t *m_fg_tilemap = nullptr;
uint8_t m_nmi_enable = 0;
uint8_t m_out[3]{};
void bg_scroll_w(offs_t offset, uint8_t data);
void bg_tile_w(offs_t offset, uint8_t data);
void fg_tile_w(offs_t offset, uint8_t data);
@ -58,43 +92,22 @@ public:
void ppi2_b_w(uint8_t data);
void ppi2_c_w(uint8_t data);
void show_out();
void init_cabaret();
TILE_GET_INFO_MEMBER(get_bg_tile_info);
TILE_GET_INFO_MEMBER(get_fg_tile_info);
uint32_t screen_update_cabaret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(cabaret_interrupt);
void cabaret(machine_config &config);
void cabaret_map(address_map &map);
void cabaret_portmap(address_map &map);
uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
INTERRUPT_GEN_MEMBER(interrupt_cb);
protected:
virtual void machine_start() override { m_led.resolve(); }
virtual void machine_reset() override;
virtual void video_start() override;
required_shared_ptr<uint8_t> m_fg_tile_ram;
required_shared_ptr<uint8_t> m_fg_color_ram;
required_shared_ptr<uint8_t> m_bg_scroll;
required_shared_ptr<uint8_t> m_bg_tile_ram;
tilemap_t *m_bg_tilemap = nullptr;
tilemap_t *m_fg_tilemap = nullptr;
int m_nmi_enable = 0;
uint8_t m_out[3]{};
required_device<cpu_device> m_maincpu;
required_device<gfxdecode_device> m_gfxdecode;
required_device<palette_device> m_palette;
output_finder<> m_led;
void program_map(address_map &map);
void port_map(address_map &map);
};
/***************************************************************************
Video Hardware
***************************************************************************/
void cabaret_state::bg_scroll_w(offs_t offset, uint8_t data)
{
m_bg_scroll[offset] = data;
@ -109,14 +122,14 @@ void cabaret_state::bg_tile_w(offs_t offset, uint8_t data)
TILE_GET_INFO_MEMBER(cabaret_state::get_bg_tile_info)
{
int code = m_bg_tile_ram[tile_index];
int const code = m_bg_tile_ram[tile_index];
tileinfo.set(1, code & 0xff, 0, 0);
}
TILE_GET_INFO_MEMBER(cabaret_state::get_fg_tile_info)
{
int code = m_fg_tile_ram[tile_index] | (m_fg_color_ram[tile_index] << 8);
int tile = code & 0x1fff;
int const code = m_fg_tile_ram[tile_index] | (m_fg_color_ram[tile_index] << 8);
int const tile = code & 0x1fff;
tileinfo.set(0, code, tile != 0x1fff ? ((code >> 12) & 0xe) + 1 : 0, 0);
}
@ -134,14 +147,14 @@ void cabaret_state::fg_color_w(offs_t offset, uint8_t data)
void cabaret_state::video_start()
{
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cabaret_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8);
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cabaret_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_bg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cabaret_state::get_bg_tile_info)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8);
m_fg_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(cabaret_state::get_fg_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32);
m_fg_tilemap->set_transparent_pen(0);
m_bg_tilemap->set_scroll_cols(64);
}
uint32_t cabaret_state::screen_update_cabaret(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
uint32_t cabaret_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect)
{
bitmap.fill(m_palette->black_pen(), cliprect);
@ -169,14 +182,14 @@ void cabaret_state::nmi_and_coins_w(uint8_t data)
{
if ((m_nmi_enable ^ data) & (~0xdd))
{
logerror("PC %06X: nmi_and_coins = %02x\n",m_maincpu->pc(),data);
logerror("PC %06X: nmi_and_coins = %02x\n", m_maincpu->pc(), data);
// popmessage("%02x",data);
}
machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a
machine().bookkeeping().coin_counter_w(1, data & 0x04); // coin_c
machine().bookkeeping().coin_counter_w(2, data & 0x08); // key in
machine().bookkeeping().coin_counter_w(3, data & 0x10); // coin m_out mech
machine().bookkeeping().coin_counter_w(0, data & 0x01); // coin_a
machine().bookkeeping().coin_counter_w(1, data & 0x04); // coin_c
machine().bookkeeping().coin_counter_w(2, data & 0x08); // key in
machine().bookkeeping().coin_counter_w(3, data & 0x10); // coin m_out mech
m_led = BIT(data, 6); // led for coin m_out / hopper active
@ -200,13 +213,13 @@ void cabaret_state::ppi2_c_w(uint8_t data)
void cabaret_state::cabaret_map(address_map &map)
void cabaret_state::program_map(address_map &map)
{
map(0x00000, 0x0efff).rom();
map(0x0f000, 0x0ffff).ram();
}
void cabaret_state::cabaret_portmap(address_map &map)
void cabaret_state::port_map(address_map &map)
{
map(0x0000, 0x003f).ram(); // Z180 internal regs
@ -214,20 +227,20 @@ void cabaret_state::cabaret_portmap(address_map &map)
map(0x0090, 0x0093).rw("ppi2", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x00a0, 0x00a3).rw("ppi3", FUNC(i8255_device::read), FUNC(i8255_device::write));
map(0x00b0, 0x00b0).portr("DSW3"); /* DSW3 */
map(0x00b0, 0x00b0).portr("DSW3");
map(0x00e0, 0x00e1).w("ymsnd", FUNC(ym2413_device::write));
map(0x2000, 0x27ff).ram().w(FUNC(cabaret_state::fg_tile_w)).share("fg_tile_ram");
map(0x2800, 0x2fff).ram().w(FUNC(cabaret_state::fg_color_w)).share("fg_color_ram");
map(0x2000, 0x27ff).ram().w(FUNC(cabaret_state::fg_tile_w)).share(m_fg_tile_ram);
map(0x2800, 0x2fff).ram().w(FUNC(cabaret_state::fg_color_w)).share(m_fg_color_ram);
map(0x3000, 0x37ff).ram().w(m_palette, FUNC(palette_device::write8)).share("palette");
map(0x3800, 0x3fff).ram().w(m_palette, FUNC(palette_device::write8_ext)).share("palette_ext");
map(0x1000, 0x103f).ram().w(FUNC(cabaret_state::bg_scroll_w)).share("bg_scroll");
map(0x1000, 0x103f).ram().w(FUNC(cabaret_state::bg_scroll_w)).share(m_bg_scroll);
map(0x1800, 0x19ff).ram().w(FUNC(cabaret_state::bg_tile_w)).share("bg_tile_ram");
map(0x8000, 0xffff).rom().region("gfx3", 0);
map(0x1800, 0x19ff).ram().w(FUNC(cabaret_state::bg_tile_w)).share(m_bg_tile_ram);
map(0x8000, 0xffff).rom().region("bgmaps", 0);
}
@ -346,8 +359,8 @@ static const gfx_layout layout_8x32x6i =
};
static GFXDECODE_START( gfx_cabaret )
GFXDECODE_ENTRY( "gfx1", 0x00000, layout_8x8x6, 0, 16 )
GFXDECODE_ENTRY( "gfx2", 0x00000, layout_8x32x6i, 0, 16 )
GFXDECODE_ENTRY( "fgtiles", 0x00000, layout_8x8x6, 0, 16 )
GFXDECODE_ENTRY( "bgtiles", 0x00000, layout_8x32x6i, 0, 16 )
GFXDECODE_END
@ -359,10 +372,10 @@ GFXDECODE_END
void cabaret_state::machine_reset()
{
m_nmi_enable = 0;
m_nmi_enable = 0;
}
INTERRUPT_GEN_MEMBER(cabaret_state::cabaret_interrupt)
INTERRUPT_GEN_MEMBER(cabaret_state::interrupt_cb)
{
if (m_nmi_enable & 0x80)
device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero);
@ -370,11 +383,11 @@ INTERRUPT_GEN_MEMBER(cabaret_state::cabaret_interrupt)
void cabaret_state::cabaret(machine_config &config)
{
/* basic machine hardware */
// basic machine hardware
Z80180(config, m_maincpu, XTAL(12'000'000));
m_maincpu->set_addrmap(AS_PROGRAM, &cabaret_state::cabaret_map);
m_maincpu->set_addrmap(AS_IO, &cabaret_state::cabaret_portmap);
m_maincpu->set_vblank_int("screen", FUNC(cabaret_state::cabaret_interrupt));
m_maincpu->set_addrmap(AS_PROGRAM, &cabaret_state::program_map);
m_maincpu->set_addrmap(AS_IO, &cabaret_state::port_map);
m_maincpu->set_vblank_int("screen", FUNC(cabaret_state::interrupt_cb));
i8255_device &ppi1(I8255(config, "ppi1"));
ppi1.in_pa_callback().set_ioport("BUTTONS2");
@ -392,19 +405,19 @@ void cabaret_state::cabaret(machine_config &config)
ppi3.in_pb_callback().set_ioport("DSW1");
ppi3.in_pc_callback().set_ioport("DSW2");
/* video hardware */
// video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
screen.set_size(512, 256);
screen.set_visarea_full();
screen.set_screen_update(FUNC(cabaret_state::screen_update_cabaret));
screen.set_screen_update(FUNC(cabaret_state::screen_update));
screen.set_palette(m_palette);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_cabaret);
PALETTE(config, m_palette).set_format(palette_device::xBGR_555, 0x800);
/* sound hardware */
// sound hardware
SPEAKER(config, "mono").front_center();
YM2413(config, "ymsnd", XTAL(3'579'545)).add_route(ALL_OUTPUTS, "mono", 1.0);
}
@ -414,13 +427,13 @@ void cabaret_state::init_cabaret()
{
uint8_t *rom = memregion("maincpu")->base();
/* decrypt the program ROM */
// decrypt the program ROM
for (int i = 0; i < 0xf000; i++)
{
if ((i & 0x2206) == 0x2002) rom[i] ^= 0x01;
}
/* Patch pitfalls */
// Patch pitfalls
rom[0x1012] =
rom[0x1013] = 0;
rom[0x13b8] = 0x18;
@ -432,25 +445,139 @@ void cabaret_state::init_cabaret()
rom[0xc6c4] = 0x18;
}
ROM_START( cabaret )
ROM_REGION( 0x10000, "maincpu", 0 ) /* 64k for code */
ROM_LOAD( "cg-8v204.u97", 0x0000, 0x10000, CRC(44cebf77) SHA1(e3f4e4abf41388f0eed50cf9a0fd0b14aa2f8b93) )
void cabaret_state::init_double8l()
{
uint8_t *rom = memregion("maincpu")->base();
ROM_REGION( 0x60000, "gfx1", 0 )
// TODO: verify if/when the internal ROM gets dumped
for (int i = 0x4000; i < 0x10000; i++)
if ((i & 0x3206) == 0x2002)
rom[i] = rom[i] ^ 0x01;
}
void cabaret_state::init_kungfua()
{
uint8_t *rom = memregion("maincpu")->base();
for (int i = 0x4000; i < 0x10000; i++)
{
rom[i] = rom[i] ^ 0x01;
}
}
ROM_START( cabaret )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "cg-8v204.u97", 0x00000, 0x10000, CRC(44cebf77) SHA1(e3f4e4abf41388f0eed50cf9a0fd0b14aa2f8b93) )
ROM_REGION( 0x60000, "fgtiles", 0 )
ROM_LOAD( "cg-4.u43", 0x40000, 0x20000, CRC(e509f50a) SHA1(7e68ca54642c92cdb348d5cf9466065938d0e027) )
ROM_LOAD( "cg-5.u44", 0x20000, 0x20000, CRC(e2cbf489) SHA1(3a15ed7efd5696656e6d55b54ec0ff779bdb0d98) )
ROM_LOAD( "cg-6.u45", 0x00000, 0x20000, CRC(4f2fced7) SHA1(b954856ffdc97fbc99fd3ec087376fbf466d2d5a) )
ROM_REGION( 0xc000, "gfx2", 0 )
ROM_REGION( 0xc000, "bgtiles", 0 )
ROM_LOAD( "cg-1.u40", 0x8000, 0x4000, CRC(7dee8b1f) SHA1(80dbdf6aab9b02cc000956b7894023552428e6a1) )
ROM_LOAD( "cg-2.u41", 0x0000, 0x4000, CRC(ce8dea39) SHA1(b30d1678a7b98cd821d2ce7383a83cb7c9f31b5f) )
ROM_LOAD( "cg-3.u42", 0x4000, 0x4000, CRC(7e1f821f) SHA1(b709d49f9d1890fe3b8ca7f90affc0017a0ad95e) )
ROM_REGION( 0x8000, "gfx3", 0 )
ROM_LOAD( "cg-7.u98", 0x0000, 0x8000, CRC(b93ae6f8) SHA1(accb87045c278d5d79fff65bb763aa6e8025a945) ) /* background maps, read by the CPU */
ROM_REGION( 0x8000, "bgmaps", 0 )
ROM_LOAD( "cg-7.u98", 0x0000, 0x8000, CRC(b93ae6f8) SHA1(accb87045c278d5d79fff65bb763aa6e8025a945) ) // background maps, read by the CPU
ROM_END
// custom CPU package DB8LN CPUV1.0 1991 (almost surely Z180 based).
ROM_START( double8l )
ROM_REGION( 0x10000, "maincpu", 0 )
// contains leftover x86 code at 0-3fff
ROM_LOAD( "db8ln_cpuv1.0_1991.u80", 0x00000, 0x04000, NO_DUMP )
ROM_LOAD( "u97", 0x00000, 0x10000, CRC(84686a43) SHA1(9e41c725a4fe9c674979c8437715e5c3197e4aa2) ) // 27C512, didn't have an original sticker
ROM_REGION( 0x60000, "fgtiles", 0 ) // all Intel 27C010A
ROM_LOAD( "d8ln_cgf4.u43", 0x40000, 0x20000, CRC(d16b724d) SHA1(37ad925b07ef64d28670a8937ef6edfb00708d59) )
ROM_LOAD( "d8ln_cgf5.u44", 0x20000, 0x20000, CRC(7c4aa36f) SHA1(0d1fe127a300b3341b0f15c6bdaeffde1564b204) )
ROM_LOAD( "d8ln_cgf6.u45", 0x00000, 0x20000, CRC(759a8b81) SHA1(9b885d0eab72c7257005f1da21269ce490888640) )
ROM_REGION( 0xc000, "bgtiles", 0 )
ROM_LOAD( "d8ln_cgf1.u40", 0x8000, 0x4000, CRC(969bb2e9) SHA1(5aecce965f558a11ec117ab5ccb82b841de6051f) ) // Microchip 27C128
ROM_LOAD( "d8ln_cgf2.u41", 0x0000, 0x4000, CRC(bf6ef240) SHA1(a79e16ba259f03c0479e87a647a3a6a2ce0a1aac) ) // Microchip 27C128
ROM_LOAD( "d8ln_cgf3.u42", 0x4000, 0x4000, CRC(f432f709) SHA1(a203c01358b42f6b8639ce45afa70a86afdc79cf) ) // Intel 27128A
ROM_REGION( 0x8000, "bgmaps", 0 )
ROM_LOAD( "d8ln_cgf7.u98", 0x0000, 0x8000, CRC(5268ae60) SHA1(9e5d819fc5a5623cc3e81384ba542391c59ab7f1) ) // 27C256, background maps, read by the CPU
ROM_REGION( 0x100, "proms", 0 )
ROM_LOAD( "dm74s287.u38", 0x000, 0x100, CRC(935d8c14) SHA1(04e90b01ef1e3485d3bfcf9473a18b7afea25d1d) )
ROM_REGION( 0x600, "plds", ROMREGION_ERASE00 )
ROM_LOAD( "ami18cv8.u46", 0x000, 0x155, NO_DUMP )
ROM_LOAD( "pal16l8an.u47", 0x200, 0x104, NO_DUMP )
ROM_LOAD( "ami18cv8.u48", 0x400, 0x155, NO_DUMP )
ROM_END
/*
Cherry master looking board
Big chip with no markings at U80 stickered KUNG FU
V1.0
1992
Board silkscreend on top PCB NO.0013-B
.45 27010 stickered 6
.44 27010 stickered 5
.43 27010 stickered 4
.42 27128 stickered 3
.41 27128 stickered 2
.40 27128 stickered 1
.98 27256 stickered 7 couldn't read chip, but board was silkscreened 27c256
.97 27512 stickered ? looked like Japanese writing
.38 74s287
.46 18cv8 <--- same checksum as .48
.47 pal16l8a <--- checksum was 0
.48 18cv8 <--- same checksum as .46
unknown 24 pin chip @ u29
open 24 pin socket @ u54
12 MHz crystal
5 x DSW8
3 x NEC D8255AC
*/
ROM_START( kungfua )
ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASE00 )
// u97 contains leftover x86 code at 0-3fff (compiled with Borland Turbo-C).
// You can rename the rom to kungfu.exe and run it (DOS MZ executable)!
// The rest is Z80 code, so the CPU at u80 is probably a variant with internal ROM.
ROM_LOAD( "kungfu-internal.u80", 0x00000, 0x04000, NO_DUMP )
ROM_LOAD( "kungfu.u97", 0x00000, 0x10000, CRC(5c8e16de) SHA1(4af3795753d6e08f528b861d3a771c782e173556) )
ROM_REGION( 0x60000, "fgtiles", 0 )
ROM_LOAD( "kungfu-4.u43", 0x40000, 0x20000, CRC(df4afedb) SHA1(56ab18c46a199653c284417a8e9edc9f32374318) )
ROM_LOAD( "kungfu-5.u44", 0x20000, 0x20000, CRC(25c9c98e) SHA1(2d3a399d8d53ee5cb8106d2b35d1ab1778439f81) )
ROM_LOAD( "kungfu-6.u45", 0x00000, 0x20000, CRC(f1ec5f0d) SHA1(0aa888e13312ed5d98953c81f03a61c6175c7fec) )
ROM_REGION( 0xc000, "bgtiles", ROMREGION_ERASE00 )
ROM_LOAD( "kungfu-1.u40", 0x8000, 0x4000, CRC(abaada6b) SHA1(a6b910db7451e8ca737f43f32dfc8fc5ecf865f4) )
ROM_LOAD( "kungfu-2.u41", 0x0000, 0x4000, CRC(927b3060) SHA1(a780ea5aaee04287cc9533c2d258dc18f8426530) )
ROM_LOAD( "kungfu-3.u42", 0x4000, 0x4000, CRC(bbf78e03) SHA1(06fee093e75e2611d00c076c2e0a681938fa8b74) )
ROM_REGION( 0x8000, "bgmaps", 0 )
ROM_LOAD( "kungfu-7.u98", 0x0000, 0x8000, CRC(1d3f0c79) SHA1(0a33798b69fbdc0fb7c47c51f5759e42acd2c608) ) // background maps, read by the CPU
ROM_REGION( 0x100, "proms", 0 )
ROM_LOAD( "kungfu.u38", 0x000, 0x100, CRC(2074f729) SHA1(eb9a60dec57a029ae6d3fc53aa7bc78e8ac34392) )
ROM_REGION( 0x1000, "plds", 0 ) // TODO: convert with jedutil
ROM_LOAD( "kungfu.u46", 0x000, 0xde1, CRC(5d4aacaf) SHA1(733546ce0585c40833e1c34504c33219a2bea0a9) )
ROM_LOAD( "kungfu.u47", 0x000, 0xaee, CRC(5c7e25b5) SHA1(7d37e4abfe1256bd9cb168e0f02e651118dfb304) )
ROM_LOAD( "kungfu.u48", 0x000, 0xde1, CRC(5d4aacaf) SHA1(733546ce0585c40833e1c34504c33219a2bea0a9) )
ROM_END
} // anonymous namespace
GAME( 1992, cabaret, 0, cabaret, cabaret, cabaret_state, init_cabaret, ROT0, "AMT Co. Ltd.", "Cabaret Show", MACHINE_NOT_WORKING )
GAME( 1992, cabaret, 0, cabaret, cabaret, cabaret_state, init_cabaret, ROT0, "AMT Co. Ltd.", "Cabaret Show", MACHINE_NOT_WORKING )
GAME( 1992, double8l, 0, cabaret, cabaret, cabaret_state, init_double8l, ROT0, "AMT Co. Ltd.", "Double 8 Lines", MACHINE_NOT_WORKING ) // missing internal ROM dump
GAME( 1992, kungfua, kungfu, cabaret, cabaret, cabaret_state, init_kungfua, ROT0, "IGS", "Kung Fu Fighters (IGS, v100)", MACHINE_NOT_WORKING ) // missing internal ROM dump

View File

@ -125,7 +125,6 @@ public:
void init_cpoker300us();
void init_igs_ncs2();
void init_cpokerpk();
void init_kungfua();
int hopper_r();
@ -2964,76 +2963,7 @@ void igspoker_state::init_pktet346()
rom[0xbb0c] = 0xc3;
}
/*
Cherry master looking board
Big chip with no markings at U80 stickered KUNG FU
V1.0
1992
Board silkscreend on top PCB NO.0013-B
.45 27010 stickered 6
.44 27010 stickered 5
.43 27010 stickered 4
.42 27128 stickered 3
.41 27128 stickered 2
.40 27128 stickered 1
.98 27256 stickered 7 couldn't read chip, but board was silkscreened 27c256
.97 27512 stickered ? looked like Japanese writing
.38 74s287
.46 18cv8 <--- same checksum as .48
.47 pal16l8a <--- checksum was 0
.48 18cv8 <--- same checksum as .46
unknown 24 pin chip @ u29
open 24 pin socket @ u54
12 MHz crystal
5 x DSW8
3 x NEC D8255AC
*/
ROM_START( kungfua )
ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 )
// u97 contains leftover x86 code at 0-3fff (compiled with Borland Turbo-C).
// You can rename the rom to kungfu.exe and run it (DOS MZ executable)!
// The rest is Z80 code, so the CPU at u80 is probably a variant with internal ROM.
ROM_LOAD( "kungfu-internal.u80", 0x00000, 0x04000, NO_DUMP )
ROM_LOAD( "kungfu.u97", 0x00000, 0x10000, CRC(5c8e16de) SHA1(4af3795753d6e08f528b861d3a771c782e173556) )
ROM_LOAD( "kungfu-7.u98", 0x10000, 0x08000, CRC(1d3f0c79) SHA1(0a33798b69fbdc0fb7c47c51f5759e42acd2c608) )
ROM_REGION( 0x60000, "gfx1", 0 )
ROM_LOAD( "kungfu-4.u43", 0x00000, 0x20000, CRC(df4afedb) SHA1(56ab18c46a199653c284417a8e9edc9f32374318) )
ROM_LOAD( "kungfu-5.u44", 0x20000, 0x20000, CRC(25c9c98e) SHA1(2d3a399d8d53ee5cb8106d2b35d1ab1778439f81) )
ROM_LOAD( "kungfu-6.u45", 0x40000, 0x20000, CRC(f1ec5f0d) SHA1(0aa888e13312ed5d98953c81f03a61c6175c7fec) )
ROM_REGION( 0x30000, "gfx2", ROMREGION_ERASE00 )
ROM_LOAD( "kungfu-1.u40", 0x00000, 0x4000, CRC(abaada6b) SHA1(a6b910db7451e8ca737f43f32dfc8fc5ecf865f4) )
ROM_LOAD( "kungfu-2.u41", 0x10000, 0x4000, CRC(927b3060) SHA1(a780ea5aaee04287cc9533c2d258dc18f8426530) )
ROM_LOAD( "kungfu-3.u42", 0x20000, 0x4000, CRC(bbf78e03) SHA1(06fee093e75e2611d00c076c2e0a681938fa8b74) )
ROM_REGION( 0x1000, "plds", 0 )
ROM_LOAD( "kungfu.u38", 0x000, 0x100, CRC(2074f729) SHA1(eb9a60dec57a029ae6d3fc53aa7bc78e8ac34392) )
ROM_LOAD( "kungfu.u46", 0x000, 0xde1, CRC(5d4aacaf) SHA1(733546ce0585c40833e1c34504c33219a2bea0a9) )
ROM_LOAD( "kungfu.u47", 0x000, 0xaee, CRC(5c7e25b5) SHA1(7d37e4abfe1256bd9cb168e0f02e651118dfb304) )
ROM_LOAD( "kungfu.u48", 0x000, 0xde1, CRC(5d4aacaf) SHA1(733546ce0585c40833e1c34504c33219a2bea0a9) )
ROM_END
void igspoker_state::init_kungfua()
{
uint8_t *rom = memregion("maincpu")->base();
for (int A = 0x4000; A < 0x10000; A++)
{
rom[A] = rom[A] ^ 0x01;
}
memset( &rom[0xf000], 0, 0x1000);
}
} // Anonymous namespace
} // anonymous namespace
GAMEL( 1993?,cpoker, 0, igspoker, cpoker, igspoker_state, init_cpoker, ROT0, "IGS", "Champion Poker (v220I)", 0, layout_igspoker )
@ -3068,5 +2998,3 @@ GAMEL( 1998, stellecu, 0, number10, number10, igspoker_state, empty_in
GAMEL( 1993?,pktet346, 0, pktetris, pktet346, igspoker_state, init_pktet346, ROT0, "IGS", "PK Tetris (v346I)", 0, layout_igspoker )
GAMEL( 199?, igstet341, pktet346, pktetris, igstet341,igspoker_state, init_tet341, ROT0, "IGS", "Tetris (v341R)", 0, layout_igspoker )
GAMEL( 199?, igstet342, pktet346, pktetris, igstet341,igspoker_state, init_tet341, ROT0, "IGS", "Tetris (v342R)", 0, layout_igspoker )
GAMEL( 1992, kungfua, kungfu, igspoker, cpoker, igspoker_state, init_kungfua, ROT0, "IGS", "Kung Fu Fighters (IGS, v100)", MACHINE_NOT_WORKING, layout_igspoker ) // missing internal ROM dump

View File

@ -17535,6 +17535,7 @@ realbrkk // "600" Billiard Academy Real Break 1998 (Korea
realbrko // "600" Billiard Academy Real Break 1998 (Europe)
@source:dynax/royalmah.cpp
akamj // bootleg
cafebrk // "528" Mahjong Cafe Break (C) 1999 Nakanihon / Dynax
cafedoll // "76" (c) 1993 Dynax
cafedollg // "76" (c) 1993 Dynax
@ -17550,7 +17551,7 @@ janoh // (c) 1984 Toaplan
janoha // (c) 1984 Toaplan
janptr96 // "503" (c) 1996 Dynax
janptrsp // "511" (c) 1997 Dynax
janputer // (c) 1982 Taito
janputer // bootleg
jansou // (c) 1985 Dyna
jansoua // (c) 1985 Dyna
janyoup2 // Falcon bootleg
@ -19959,6 +19960,8 @@ zoofari // (c) 2006 ICE/Play Mechanix
@source:igs/cabaret.cpp
cabaret // (c) 1992 AMT
double8l // (c) 1992 AMT
kungfua // (c) 1992 IGS
@source:igs/dunhuang.cpp
dunhuang // (c) 1995
@ -20306,7 +20309,6 @@ igs_ncs // (c) 198? IGS
igs_ncs2 // (c) 2000 IGS
igstet341 // (c) 199? IGS
igstet342 // (c) 199? IGS
kungfua // (c) 1992 IGS
number10 // (c) IGS (Board labeled Playmark Srl)
numbr10l // (c) IGS (Board labeled Playmark Srl)
pktet346 // (c) 199? IGS
@ -29142,7 +29144,8 @@ castrev // Revolution
@source:misc/cb2001.cpp
cb2001 // (c) 2001 Dyna Electronics
ndongmul2 // (c) 1999 Dyna Electronics
scherrym // (c) 2001? Dyna Electronics
scherrym // (c) 1997 Dyna Electronics
scherrymp // (c) 1997 Dyna Electronics
@source:misc/chameleonrx1.cpp
chamrx1 // 2003
@ -41897,6 +41900,7 @@ boo1000
@source:skeleton/boramz80.cpp
pkboram
tpkboram
tpkborama
@source:skeleton/bpmmicro.cpp
bp1200 // (c) 1991 BP Microsystems

View File

@ -1079,6 +1079,19 @@ ROM_START( scherrym ) // DYNA D9702 PCB; DYNA PLUS V1.6 in bookkeeping screen
ROM_LOAD( "n82s135-2.bin", 0x200, 0x100, CRC(a19821db) SHA1(62dda90dd67dfbc0b96f161f1f2b7a46a5805eae) )
ROM_END
ROM_START( scherrymp ) // DYNA D9702 PCB; DYNA PLUS V1.0U in bookkeeping screen
ROM_REGION16_LE( 0x040000, "boot_prg", 0 )
ROM_LOAD16_WORD( "m27c2001.bin", 0x000000, 0x40000, CRC(6e797b3f) SHA1(cc333e3dc2d416f1059559ce958bfe25a3869fc8) )
ROM_REGION( 0x080000, "gfx", ROMREGION_ERASEFF )
// this board uses an unmarked MASK ROM at 12c, 12a is unpopulated. Size unknown. The bootleg PCB uses an mx29f1610ml, so possibly the same or compatible
ROM_LOAD( "gfx.12c", 0x000000, 0x80000, NO_DUMP )
ROM_REGION( 0x400, "proms", 0 )
ROM_LOAD( "82s147.9b", 0x000, 0x200, CRC(dcf976d2) SHA1(73a08e4587f3516d694a8060b79470cf71df3925) )
ROM_LOAD( "82s147.11b", 0x200, 0x200, CRC(a67e7a63) SHA1(b23e0eb9af13e57bbc8602ddc7fb381ba5c8267e) )
ROM_END
/* New DongmulDongmul 2 (뉴 동물동물 2, New AnimalAnimal 2) runs on slightly different hardware, but with same CPU, custom and I/O.
Video from the real hardware: https://youtu.be/1K9e_7RzeiM
_______________________________________________________________________________
@ -1138,7 +1151,8 @@ ROM_END
} // anonymous namespace
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS
GAME( 2001, cb2001, 0, cb2001, cb2001, cb2001_state, empty_init, ROT0, "Dyna", "Cherry Bonus 2001", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1999, ndongmul2, 0, ndongmul2, ndongmul2, cb2001_state, empty_init, ROT0, "Dyna", "New DongmulDongmul 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // goes into the weeds at various point, due to either missing MCU dump or incomplete decryption. Bad reels GFX.
GAME( 2001, scherrym, 0, cb2001, cb2001, cb2001_state, empty_init, ROT0, "Dyna", "Super Cherry Master", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // 2001 version? (we have bootlegs running on z80 hw of a 1996 version)
// YEAR NAME PARENT MACHINE INPUT CLASS INIT ROT COMPANY FULLNAME FLAGS
GAME( 2001, cb2001, 0, cb2001, cb2001, cb2001_state, empty_init, ROT0, "Dyna", "Cherry Bonus 2001", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE )
GAME( 1999, ndongmul2, 0, ndongmul2, ndongmul2, cb2001_state, empty_init, ROT0, "Dyna", "New DongmulDongmul 2", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // goes into the weeds at various point, due to either missing MCU dump or incomplete decryption. Bad reels GFX.
GAME( 1997, scherrym, 0, cb2001, cb2001, cb2001_state, empty_init, ROT0, "Dyna", "Super Cherry Master", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // 2001 version? (we have bootlegs running on z80 hw of a 1996 version)
GAME( 1997, scherrymp, 0, cb2001, cb2001, cb2001_state, empty_init, ROT0, "Dyna", "Super Cherry Master Plus", MACHINE_NOT_WORKING | MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) //

View File

@ -46,6 +46,8 @@ public:
void pk(machine_config &config) ATTR_COLD;
void init_tpkborama();
protected:
virtual void video_start() override ATTR_COLD;
@ -261,8 +263,50 @@ ROM_START( tpkboram )
ROM_LOAD( "10.pg8", 0x38000, 0x8000, CRC(4a293afa) SHA1(be532e6a476f78638e7f558bf8093e1914bc3688) )
ROM_END
// this runs on a newer ATPK-BORAM 0500 PCB. Given all GFX match tpkboram, it's probably a newer revision.
// code is encrypted
ROM_START( tpkborama )
ROM_REGION( 0x8000, "maincpu", 0 )
ROM_LOAD( "223.rom", 0x0000, 0x8000, CRC(1d776d37) SHA1(6918cddb0b47d28cf8145823f869dfd2296c0eed) )
ROM_REGION( 0x4000, "chars", 0 ) // these are same as tpkboram
ROM_LOAD( "1.cg1", 0x0000, 0x2000, CRC(69f44d04) SHA1(2f98805e4b70ce3426078f35ff260a3bc97fab86) )
ROM_LOAD( "2.cg2", 0x2000, 0x2000, CRC(c1adf009) SHA1(0d5d8b39d40c807b9b5ed7418ba871c4d683286a) )
ROM_REGION( 0x40000, "tiles", 0 ) // these are all 1st and 2nd half identical, but same as tpkboram if split
ROM_LOAD( "3.pg1", 0x00000, 0x8000, CRC(612c5b39) SHA1(9682167b1fbbcd34b71c2628641b646a2993f61b) )
ROM_IGNORE( 0x8000 )
ROM_LOAD( "4.pg2", 0x08000, 0x8000, CRC(14ee6437) SHA1(a046b3efb14a400d201f7ce1c3ee0e01badb46a6) )
ROM_IGNORE( 0x8000 )
ROM_LOAD( "5.pg3", 0x10000, 0x8000, CRC(ce87f0c5) SHA1(96379856182bb0c81c805906551ec2e4aa2eb1d5) )
ROM_IGNORE( 0x8000 )
ROM_LOAD( "6.pg4", 0x18000, 0x8000, CRC(0a8a6106) SHA1(ac88f1ef2eb39cd24a236b2f18e85367c0736ae8) )
ROM_IGNORE( 0x8000 )
ROM_LOAD( "7.pg5", 0x20000, 0x8000, CRC(484a0eec) SHA1(6e32da2d4d78fb4c4bae2d2da945a71231051d5f) )
ROM_IGNORE( 0x8000 )
ROM_LOAD( "8.pg6", 0x28000, 0x8000, CRC(772d8996) SHA1(bd0412d0656a26a80b0f00ff5d6bcff2c4adb6c7) )
ROM_IGNORE( 0x8000 )
ROM_LOAD( "9.pg7", 0x30000, 0x8000, CRC(ff052a99) SHA1(7523ab2eeef1e44107710c8a68897daa7bf2ce12) )
ROM_IGNORE( 0x8000 )
ROM_LOAD( "10.pg8", 0x38000, 0x8000, CRC(61a4e0f3) SHA1(8d9f0efd3b691eaf93c933c63ba6aa34ebad71b1) )
ROM_IGNORE( 0x8000 )
ROM_END
void boramz80_state::init_tpkborama()
{
uint8_t *rom = memregion("maincpu")->base();
for (int i = 0; i < 0x8000; i++)
{
// TODO
rom[i] = rom[i];
}
}
} // anonymous namespace
GAME( 1987, pkboram, 0, pk, pkboram, boramz80_state, empty_init, ROT0, "Boram", "PK - New Exciting Poker!", MACHINE_IS_SKELETON ) // PK-BORAM 0211 aug.04.1987. BORAM CORP
GAME( 1988, tpkboram, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "Turbo PK", MACHINE_IS_SKELETON ) // PK-TURBO jan.29.1988. BORAM CORP.
GAME( 1987, pkboram, 0, pk, pkboram, boramz80_state, empty_init, ROT0, "Boram", "PK - New Exciting Poker!", MACHINE_IS_SKELETON ) // PK-BORAM 0211 aug.04.1987. BORAM CORP
GAME( 1988, tpkboram, 0, pk, tpkboram, boramz80_state, empty_init, ROT0, "Boram", "Turbo PK", MACHINE_IS_SKELETON ) // PK-TURBO jan.29.1988. BORAM CORP.
GAME( 1998, tpkborama, tpkboram, pk, tpkboram, boramz80_state, init_tpkborama, ROT0, "Boram", "Turbo PK (Ver 2.3B2, encrypted)", MACHINE_IS_SKELETON ) // dep inctype-23B1998 0519Ver 2.3B2