From 14d11c479ecd7fbc4bc833b9d8e6366557bba399 Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Thu, 13 Mar 2025 18:14:09 +0100 Subject: [PATCH] New systems marked not working ------------------------------ Flower World 3 (V118CN) [little0, XingXing] New clones marked not working ----------------------------- Super Star 97 / Ming Xing 97 Jianan Ban [little0] Tumble Pop (Electronic Devices bootleg) [Hammy] - neogeo/neogeo.cpp: updated documentation [JacKc] - various drivers: identified manufacturers for some bootlegs [Hammy] - devices/cpu/alto2/a2disp.cpp: removed use of memset on non-trivial object --- src/devices/cpu/alto2/a2disp.cpp | 2 +- src/devices/cpu/alto2/a2disp.h | 11 ++ src/mame/bordun/skylncr.cpp | 14 ++ src/mame/capcom/cps1.cpp | 2 +- src/mame/edevices/diverboy.cpp | 161 +++++++++++-------- src/mame/igs/igs_m027_033vid.cpp | 256 +++++++++++++++++++++++++++++++ src/mame/igs/pgmcrypt.cpp | 23 +++ src/mame/igs/pgmcrypt.h | 1 + src/mame/mame.lst | 5 + src/mame/neogeo/neogeo.cpp | 8 +- src/mame/nmk/nmk16.cpp | 2 +- src/mame/seibu/goal92.cpp | 2 +- src/mame/skeleton/vgame.cpp | 8 +- src/mame/taito/taito_f2.cpp | 2 +- src/mame/toaplan/fixeight.cpp | 2 +- 15 files changed, 427 insertions(+), 72 deletions(-) create mode 100644 src/mame/igs/igs_m027_033vid.cpp diff --git a/src/devices/cpu/alto2/a2disp.cpp b/src/devices/cpu/alto2/a2disp.cpp index 216542cfd67..c2e1c2455a0 100644 --- a/src/devices/cpu/alto2/a2disp.cpp +++ b/src/devices/cpu/alto2/a2disp.cpp @@ -499,7 +499,7 @@ void alto2_cpu_device::f2_late_evenfield() */ void alto2_cpu_device::init_disp() { - memset(&m_dsp, 0, sizeof(m_dsp)); + m_dsp.clear(); save_item(NAME(m_dsp.state)); save_item(NAME(m_dsp.hlc)); save_item(NAME(m_dsp.setmode)); diff --git a/src/devices/cpu/alto2/a2disp.h b/src/devices/cpu/alto2/a2disp.h index eee5af359b2..ad9d1112c92 100644 --- a/src/devices/cpu/alto2/a2disp.h +++ b/src/devices/cpu/alto2/a2disp.h @@ -193,6 +193,17 @@ #ifndef MAME_CPU_ALTO2_A2DISP_H #define MAME_CPU_ALTO2_A2DISP_H struct { + + void clear() + { + state = hlc = setmode = inverse = scanline = 0; + halfclock = vblank = false; + std::fill(std::begin(fifo), std::end(fifo), 0); + wa = ra = a63 = a66 = 0; + dht_blocks = dwt_blocks = curt_blocks = curt_wakeup = false; + xpreg = csr = 0; + } + uint32_t state; //!< current state of the display_state_machine() uint32_t hlc; //!< horizontal line counter uint32_t setmode; //!< value written by last SETMODE<- diff --git a/src/mame/bordun/skylncr.cpp b/src/mame/bordun/skylncr.cpp index 3498bc73c19..d891b215bb9 100644 --- a/src/mame/bordun/skylncr.cpp +++ b/src/mame/bordun/skylncr.cpp @@ -2137,6 +2137,19 @@ ROM_START( sstar97a ) ROM_LOAD16_BYTE( "105.u22", 0x40001, 0x20000, CRC(ca17a632) SHA1(d491310ccdbe9b59a1e607f9254646f20700d79d) ) ROM_END + +// PCB has a Z84C0008PEC, 2x 82C55AC-2, AT89C2051 MCU, ATF1508AS EEPLD, 24C04AN, JFC 95101 (AY-8910 clone), Altera EPM7032LC44-15 +ROM_START( sstar97jb ) + ROM_REGION( 0x20000, "maincpu", ROMREGION_ERASE00 ) + ROM_LOAD( "star97jianan.u6", 0x00000, 0x20000, CRC(23904300) SHA1(8d4c9478250aaa1f7abdc2fd84a1e83be61723a0) ) // encrypted, address line based + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "star97jianan.u8", 0x00000, 0x80000, CRC(644f6ca8) SHA1(7d0b8c2c488f4169018e5bf861dc73eaeef9d9df) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD( "star97jianan.u9", 0x00000, 0x80000, CRC(31289532) SHA1(27243de8e79c552ba71aa8ea0ee7197228b55528) ) +ROM_END + /* 蝴蝶梦 97 (Húdié Mèng 97) Game is encrypted and needs better decoded graphics. @@ -2587,6 +2600,7 @@ GAME( 199?, miaction, 0, skylncr, skylncr, skylncr_state, init_miacti GAME( 199?, tigerslt, 0, skylncr, skylncr, skylncr_state, init_miaction, ROT0, "bootleg", "Tiger (slot)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 199?, sstar97, 0, sstar97, sstar97, skylncr_state, empty_init, ROT0, "Bordun International", "Super Star 97 / Ming Xing 97 (version V153B)", MACHINE_SUPPORTS_SAVE ) GAME( 199?, sstar97a, sstar97, sstar97, sstar97, skylncr_state, init_sstar97a, ROT0, "Bordun International", "Super Star 97 / Ming Xing 97 (version V168A)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +GAME( 199?, sstar97jb, sstar97, sstar97, sstar97, skylncr_state, empty_init, ROT0, "Bordun International", "Super Star 97 / Ming Xing 97 Jianan Ban", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // needs decryption GAME( 1995, bdream97, 0, bdream97, skylncr, skylncr_state, empty_init, ROT0, "bootleg (KKK)", "Hudie Meng 97", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) GAME( 2000?,olymp, 0, olymp, skylncr, skylncr_state, init_olymp, ROT0, "Z Games", "Olympus (Z Games, version 10)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Still has Bordun International 1992 strings GAME( 2000, sonikfig, 0, skylncr, sonikfig, skylncr_state, init_sonikfig, ROT0, "Z Games", "Sonik Fighter (version 02, encrypted)", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/capcom/cps1.cpp b/src/mame/capcom/cps1.cpp index 2f5d18934a1..1a77f2ac80b 100644 --- a/src/mame/capcom/cps1.cpp +++ b/src/mame/capcom/cps1.cpp @@ -15024,7 +15024,7 @@ GAME( 1991, 3wondersr1, 3wonders, cps1_10MHz, 3wonders, cps_state, init_cps1, GAME( 1991, 3wondersu, 3wonders, cps1_10MHz, 3wonders, cps_state, init_cps1, ROT0, "Capcom", "Three Wonders (USA 910520)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, wonder3, 3wonders, cps1_10MHz, 3wonders, cps_state, init_cps1, ROT0, "Capcom", "Wonder 3 (Japan 910520)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, 3wondersb, 3wonders, cps1_10MHz, 3wonders, cps_state, init_cps1, ROT0, "bootleg", "Three Wonders (bootleg)", MACHINE_SUPPORTS_SAVE ) // 910520 - based on World version -GAME( 1991, 3wondersbi, 3wonders, cps1_10MHz, 3wonders, cps_state, init_cps1, ROT0, "bootleg (Impeuropex)", "Three Wonders (Italian bootleg)", MACHINE_NOT_WORKING |MACHINE_SUPPORTS_SAVE ) // 910520 - based on World version +GAME( 1991, 3wondersbi, 3wonders, cps1_10MHz, 3wonders, cps_state, init_cps1, ROT0, "bootleg (Electronic Devices)", "Three Wonders (Italian bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // 910520 - based on World version GAME( 1991, 3wondersh, 3wonders, cps1_10MHz, 3wonders, cps_state, init_cps1, ROT0, "bootleg", "Three Wonders (hack)", MACHINE_SUPPORTS_SAVE ) // 910520 - based on World version GAME( 1991, kod, 0, cps1_10MHz, kod, cps_state, init_cps1, ROT0, "Capcom", "The King of Dragons (World 910805)", MACHINE_SUPPORTS_SAVE ) // "ETC" GAME( 1991, kodr1, kod, cps1_10MHz, kodr1, cps_state, init_cps1, ROT0, "Capcom", "The King of Dragons (World 910711)", MACHINE_SUPPORTS_SAVE ) // "ETC" diff --git a/src/mame/edevices/diverboy.cpp b/src/mame/edevices/diverboy.cpp index d8d30917c7e..2537cf4f36c 100644 --- a/src/mame/edevices/diverboy.cpp +++ b/src/mame/edevices/diverboy.cpp @@ -1,5 +1,6 @@ // license:BSD-3-Clause -// copyright-holders:David Haywood +// copyright-holders: David Haywood + /* Diver Boy (c)1992 Device Electronics @@ -46,13 +47,16 @@ * 5th coin : adds 1 credit * 6th coin : adds 1 credit ... +TODO: tumblebed uses more GFX features, which need implementing */ #include "emu.h" -#include "cpu/z80/z80.h" + #include "cpu/m68000/m68000.h" +#include "cpu/z80/z80.h" #include "machine/gen_latch.h" #include "sound/okim6295.h" + #include "emupal.h" #include "screen.h" #include "speaker.h" @@ -71,68 +75,57 @@ public: m_oki(*this, "oki"), m_gfxdecode(*this, "gfxdecode"), m_screen(*this, "screen"), - m_palette(*this, "palette"), - m_soundlatch(*this, "soundlatch") + m_palette(*this, "palette") { } - void diverboy(machine_config &config); + void diverboy(machine_config &config) ATTR_COLD; + void tumblebed(machine_config &config) ATTR_COLD; private: - /* memory pointers */ required_shared_ptr m_spriteram; - /* devices */ required_device m_maincpu; required_device m_audiocpu; required_device m_oki; required_device m_gfxdecode; required_device m_screen; required_device m_palette; - required_device m_soundlatch; - void soundcmd_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); void okibank_w(uint8_t data); - virtual void machine_start() override ATTR_COLD; - virtual void video_start() override ATTR_COLD; - uint32_t screen_update_diverboy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); - void draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ); + uint32_t screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect); void diverboy_map(address_map &map) ATTR_COLD; + void tumblebed_map(address_map &map) ATTR_COLD; void snd_map(address_map &map) ATTR_COLD; }; -void diverboy_state::video_start() -{ -} - -void diverboy_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &cliprect ) +void diverboy_state::draw_sprites(bitmap_ind16 &bitmap, const rectangle &cliprect) { uint16_t *source = m_spriteram; - uint16_t *finish = source + (m_spriteram.bytes() / 2); + uint16_t const *finish = source + (m_spriteram.bytes() / 2); while (source < finish) { - int16_t xpos, ypos, number, colr, bank, flash; - - ypos = source[4]; - xpos = source[0]; - colr = (source[1] & 0x00f0) >> 4; - number = source[3]; - flash = source[1] & 0x1000; + int16_t ypos = source[4]; + int16_t const xpos = source[0]; + int16_t colr = (source[1] & 0x00f0) >> 4; + int16_t const number = source[3]; + int16_t const flash = source[1] & 0x1000; colr |= ((source[1] & 0x000c) << 2); ypos = 0x100 - ypos; - bank = (source[1] & 0x0002) >> 1; + int16_t const bank = (source[1] & 0x0002) >> 1; if (!flash || (m_screen->frame_number() & 1)) { - m_gfxdecode->gfx(bank)->transpen(bitmap,cliprect, + m_gfxdecode->gfx(bank)->transpen(bitmap, cliprect, number, colr, - 0,0, - xpos,ypos, + 0, 0, + xpos, ypos, (source[1] & 0x0008) ? -1 : 0); } @@ -140,7 +133,7 @@ void diverboy_state::draw_sprites( bitmap_ind16 &bitmap, const rectangle &clipr } } -uint32_t diverboy_state::screen_update_diverboy(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +uint32_t diverboy_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) { // bitmap.fill(m_palette->black_pen(), cliprect); draw_sprites(bitmap, cliprect); @@ -148,19 +141,10 @@ uint32_t diverboy_state::screen_update_diverboy(screen_device &screen, bitmap_in } -void diverboy_state::soundcmd_w(offs_t offset, uint16_t data, uint16_t mem_mask) -{ - if (ACCESSING_BITS_0_7) - { - m_soundlatch->write(data & 0xff); - m_audiocpu->set_input_line(0, HOLD_LINE); - } -} - void diverboy_state::okibank_w(uint8_t data) { - /* bit 2 might be reset */ -// popmessage("%02x",data); + // bit 2 might be reset +// popmessage("%02x", data); m_oki->set_rom_bank(data & 3); } @@ -171,7 +155,7 @@ void diverboy_state::diverboy_map(address_map &map) map(0x000000, 0x03ffff).rom(); map(0x040000, 0x04ffff).ram(); map(0x080000, 0x083fff).ram().share("spriteram"); - map(0x100000, 0x100001).w(FUNC(diverboy_state::soundcmd_w)); + map(0x100001, 0x100001).w("soundlatch", FUNC(generic_latch_8_device::write)); map(0x140000, 0x1407ff).w(m_palette, FUNC(palette_device::write16)).share("palette"); map(0x180000, 0x180001).portr("P1_P2"); map(0x180002, 0x180003).portr("DSW"); @@ -184,13 +168,32 @@ void diverboy_state::diverboy_map(address_map &map) // map(0x340002, 0x340003).nopw(); } +void diverboy_state::tumblebed_map(address_map &map) +{ + map(0x000000, 0x07ffff).rom(); + map(0x080000, 0x083fff).ram().share("spriteram"); + map(0x100001, 0x100001).w("soundlatch", FUNC(generic_latch_8_device::write)); + map(0x120000, 0x123fff).ram(); + map(0x140000, 0x1407ff).w(m_palette, FUNC(palette_device::write16)).share("palette"); + map(0x1a0000, 0x1a07ff).ram(); + map(0x180000, 0x180001).portr("P1_P2"); + map(0x180002, 0x180003).portr("DSW"); + map(0x180008, 0x180009).portr("COINS"); +// map(0x18000a, 0x18000b).nopr(); +// map(0x18000c, 0x18000d).nopw(); + map(0x320000, 0x3207ff).nopw(); /* ?? */ + map(0x322000, 0x3227ff).nopw(); /* ?? */ +// map(0x340000, 0x340001).nopw(); +// map(0x340002, 0x340003).nopw(); +} + void diverboy_state::snd_map(address_map &map) { map(0x0000, 0x7fff).rom(); map(0x8000, 0x87ff).ram(); map(0x9000, 0x9000).w(FUNC(diverboy_state::okibank_w)); map(0x9800, 0x9800).rw(m_oki, FUNC(okim6295_device::read), FUNC(okim6295_device::write)); - map(0xa000, 0xa000).r(m_soundlatch, FUNC(generic_latch_8_device::read)); + map(0xa000, 0xa000).r("soundlatch", FUNC(generic_latch_8_device::read)); } @@ -258,13 +261,9 @@ static GFXDECODE_START( gfx_diverboy ) GFXDECODE_END -void diverboy_state::machine_start() -{ -} - void diverboy_state::diverboy(machine_config &config) { - M68000(config, m_maincpu, 12000000); /* guess */ + M68000(config, m_maincpu, 12000000); // guess m_maincpu->set_addrmap(AS_PROGRAM, &diverboy_state::diverboy_map); m_maincpu->set_vblank_int("screen", FUNC(diverboy_state::irq6_line_hold)); @@ -279,7 +278,7 @@ void diverboy_state::diverboy(machine_config &config) m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(0)); m_screen->set_size(64*8, 32*8); m_screen->set_visarea(0*8+4, 40*8+1, 2*8, 32*8-1); - m_screen->set_screen_update(FUNC(diverboy_state::screen_update_diverboy)); + m_screen->set_screen_update(FUNC(diverboy_state::screen_update)); m_screen->set_palette(m_palette); PALETTE(config, m_palette).set_format(palette_device::xBGR_444, 0x400); @@ -287,14 +286,21 @@ void diverboy_state::diverboy(machine_config &config) SPEAKER(config, "mono").front_center(); - GENERIC_LATCH_8(config, m_soundlatch); + GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline(m_audiocpu, 0); OKIM6295(config, m_oki, 1320000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.50); // clock frequency & pin 7 not verified } +void diverboy_state::tumblebed(machine_config &config) +{ + diverboy(config); + + m_maincpu->set_addrmap(AS_PROGRAM, &diverboy_state::tumblebed_map); +} + /* -both program roms contain the following string (at the same location) +both program ROMs contain the following string (at the same location) This Game is programmed by the freelance group GAMART. ADRESS: C\SAnt Ramon,11 08130-STA PERPETUA DE MOGODA - BARCELONA (SPAIN) @@ -304,36 +310,69 @@ Fax (93) 574 18 34 */ ROM_START( diverboy ) - ROM_REGION( 0x40000, "maincpu", 0 ) /* 68000 Code */ + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 Code ROM_LOAD16_BYTE( "db_01.bin", 0x00000, 0x20000, CRC(6aa11366) SHA1(714c8a4a64c18632825a734a76a2d1b031106d76) ) ROM_LOAD16_BYTE( "db_02.bin", 0x00001, 0x20000, CRC(45f8a673) SHA1(4eea1374cafacb4a2e0b623fcb802deb5fca1b3a) ) - ROM_REGION( 0x10000, "audiocpu", 0 ) /* z80 */ - ROM_LOAD( "db_05.bin", 0x00000, 0x8000, CRC(ffeb49ec) SHA1(911b13897ff4ace3940bfff4ab88584a93796c24) ) /* this part is empty */ - ROM_CONTINUE( 0x0000, 0x8000 ) /* this part contains the code */ + ROM_REGION( 0x10000, "audiocpu", 0 ) // z80 + ROM_LOAD( "db_05.bin", 0x00000, 0x8000, CRC(ffeb49ec) SHA1(911b13897ff4ace3940bfff4ab88584a93796c24) ) // this part is empty + ROM_CONTINUE( 0x0000, 0x8000 ) // this part contains the code - ROM_REGION( 0x100000, "gfx1", 0 ) /* GFX */ + ROM_REGION( 0x100000, "gfx1", 0 ) ROM_LOAD16_BYTE( "db_08.bin", 0x000000, 0x80000, CRC(7bb96220) SHA1(671b3f218106e594b13ae5f2e680cf2e2cfc5501) ) ROM_LOAD16_BYTE( "db_09.bin", 0x000001, 0x80000, CRC(12b15476) SHA1(400a5b846f70567de137e0b95586dd9cfc27becb) ) - ROM_REGION( 0x180000, "gfx2", 0 ) /* GFX */ + ROM_REGION( 0x180000, "gfx2", 0 ) ROM_LOAD16_BYTE( "db_07.bin", 0x000000, 0x20000, CRC(18485741) SHA1(a8edceaf34a98f2aa2bfada9d6e06fb82639a4e0) ) ROM_LOAD16_BYTE( "db_10.bin", 0x000001, 0x20000, CRC(c381d1cc) SHA1(88b97d8893c500951cfe8e7e7f0b547b36bbe2c0) ) ROM_LOAD16_BYTE( "db_06.bin", 0x040000, 0x20000, CRC(21b4e352) SHA1(a553de67e5dc751ea81ec4739724e0e46e8c5fab) ) ROM_LOAD16_BYTE( "db_11.bin", 0x040001, 0x20000, CRC(41d29c81) SHA1(448fd5c1b16159d03436b8bd71ffe871c8daf7fa) ) - ROM_REGION( 0x100000, "oki", 0 ) /* Sound */ + ROM_REGION( 0x100000, "oki", 0 ) ROM_LOAD( "db_03.bin", 0x00000, 0x20000, CRC(50457505) SHA1(faf1c055ec56d2ed7f5e6993cc04d3317bf1c3cc) ) ROM_CONTINUE( 0x40000, 0x20000 ) ROM_CONTINUE( 0x80000, 0x20000 ) ROM_CONTINUE( 0xc0000, 0x20000 ) - ROM_LOAD( "db_04.bin", 0x20000, 0x20000, CRC(01b81da0) SHA1(914802f3206dc59a720af9d57eb2285bc8ba822b) ) /* same as tumble pop?, is this used? */ + ROM_LOAD( "db_04.bin", 0x20000, 0x20000, CRC(01b81da0) SHA1(914802f3206dc59a720af9d57eb2285bc8ba822b) ) // same as Tumble Pop?, is this used? ROM_RELOAD( 0x60000, 0x20000 ) ROM_RELOAD( 0xa0000, 0x20000 ) ROM_RELOAD( 0xe0000, 0x20000 ) ROM_END +ROM_START( tumblebed ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD16_BYTE ("3.ep1", 0x00000, 0x20000, CRC(8b6950ec) SHA1(b55a84df208822084304109bf85a17ccee210e25) ) + ROM_LOAD16_BYTE( "4.ep0", 0x00001, 0x20000, CRC(8199c74d) SHA1(7436a4bebc85ff5e47eae93353ab8fcb98c2fd30) ) + ROM_LOAD16_BYTE ("2.ep3", 0x40000, 0x20000, CRC(cb27d9ca) SHA1(d105e6397efa4d5d31faad7d7e574f21d3bc14b5) ) + ROM_LOAD16_BYTE( "5.ep2", 0x40001, 0x20000, CRC(3a9ad326) SHA1(7d2078e8e98fa4ae6d251ff100792b36c0506e86) ) + + ROM_REGION( 0x8000, "audiocpu", 0 ) + ROM_LOAD( "1.u4", 0x0000, 0x8000, CRC(ffeb49ec) SHA1(911b13897ff4ace3940bfff4ab88584a93796c24) ) // 011xxxxxxxxxxxxx = 0xFF + ROM_CONTINUE( 0x0000, 0x8000 ) + + ROM_REGION( 0x100000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "10.u33", 0x00000, 0x80000, CRC(631b8d08) SHA1(4cb9b314209d863361d04683a881c92614640344) ) + ROM_LOAD16_BYTE( "11.u34", 0x00001, 0x80000, CRC(b686cf86) SHA1(9fe83abc5bd687056d814bce36d93564fb99256f) ) + + ROM_REGION( 0x180000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "9.u35", 0x00000, 0x20000, CRC(d3227e05) SHA1(2d11b5feae84545c3d3e48c55f7d9f4feac7a481) ) + ROM_LOAD16_BYTE( "12.u36", 0x00001, 0x20000, CRC(0c468815) SHA1(9cc086e252851c6e461a85549019fb3113912ce0) ) + ROM_LOAD16_BYTE( "8.u37", 0x40000, 0x20000, CRC(9a7f7866) SHA1(0f275d6f5696b064fbee1ce93bf7623d9d3d3738) ) + ROM_LOAD16_BYTE( "13.u38", 0x40001, 0x20000, CRC(effa3b5d) SHA1(e33b221f77f05ac7808d4b056f7a46efa4957837) ) + + ROM_REGION( 0x100000, "oki", 0 ) + ROM_LOAD( "7.u11", 0x00000, 0x20000, CRC(50457505) SHA1(faf1c055ec56d2ed7f5e6993cc04d3317bf1c3cc) ) + ROM_CONTINUE( 0x40000, 0x20000 ) + ROM_CONTINUE( 0x80000, 0x20000 ) + ROM_CONTINUE( 0xc0000, 0x20000 ) + ROM_LOAD( "6.u22", 0x20000, 0x20000, CRC(01b81da0) SHA1(914802f3206dc59a720af9d57eb2285bc8ba822b) ) + ROM_RELOAD( 0x60000, 0x20000 ) + ROM_RELOAD( 0xa0000, 0x20000 ) + ROM_RELOAD( 0xe0000, 0x20000 ) +ROM_END + } // anonymous namespace -GAME( 1992, diverboy, 0, diverboy, diverboy, diverboy_state, empty_init, ORIENTATION_FLIP_X, "Gamart (Electronic Devices Italy license)", "Diver Boy", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, diverboy, 0, diverboy, diverboy, diverboy_state, empty_init, ORIENTATION_FLIP_X, "Gamart (Electronic Devices Italy license)", "Diver Boy", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, tumblebed, tumblep, tumblebed, diverboy, diverboy_state, empty_init, ORIENTATION_FLIP_X, "bootleg (Electronic Devices)", "Tumble Pop (Electronic Devices bootleg)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/igs/igs_m027_033vid.cpp b/src/mame/igs/igs_m027_033vid.cpp new file mode 100644 index 00000000000..d5afe6d5d3f --- /dev/null +++ b/src/mame/igs/igs_m027_033vid.cpp @@ -0,0 +1,256 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +IGS ARM7 (IGS027A) based mahjong / gambling platform(s), +with IGS 033 custom video chip. + +Main components for the IGS PCB-0405-02-FZ are: +- IGS 027A (ARM7-based MCU) +- 24 MHz XTAL +- IGS 033 graphics chip +- 82C55 2K15 PPI +- K668 ADPCM chip (M6295 clone) +- 3 banks of 8 DIP switches + +*/ + +#include "emu.h" + +#include "igs027a.h" +#include "pgmcrypt.h" + +#include "machine/i8255.h" +#include "machine/nvram.h" +#include "machine/ticket.h" +#include "machine/timer.h" +#include "sound/okim6295.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" + +#include "endianness.h" + +#include + + +namespace { + +class igs_m027_033vid_state : public driver_device +{ +public: + igs_m027_033vid_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_external_rom(*this, "user1"), + m_nvram(*this, "nvram"), + m_maincpu(*this, "maincpu"), + m_screen(*this, "screen"), + m_palette(*this, "palette") + //m_video(*this, "igs033") + { } + + void m027_033vid(machine_config &config) ATTR_COLD; + + void init_flowerw3() ATTR_COLD; + + +protected: + virtual void machine_start() override ATTR_COLD; + virtual void machine_reset() override ATTR_COLD; + virtual void video_start() override ATTR_COLD; + +private: + required_region_ptr m_external_rom; + required_shared_ptr m_nvram; + + required_device m_maincpu; + required_device m_screen; + required_device m_palette; + //required_device m_video; + + u32 m_xor_table[0x100]; + + u32 external_rom_r(offs_t offset); + void xor_table_w(offs_t offset, u8 data); + + u32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); + void screen_vblank(int state); + + void m027_map(address_map &map) ATTR_COLD; +}; + + +void igs_m027_033vid_state::machine_start() +{ + std::fill(std::begin(m_xor_table), std::end(m_xor_table), 0); + + save_item(NAME(m_xor_table)); +} + +void igs_m027_033vid_state::machine_reset() +{ +} + +void igs_m027_033vid_state::video_start() +{ +} + +u32 igs_m027_033vid_state::screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect) +{ + return 0; +} + +void igs_m027_033vid_state::screen_vblank(int state) +{ +} + + +/*************************************************************************** + + Memory Maps + +***************************************************************************/ + +void igs_m027_033vid_state::m027_map(address_map &map) // TODO: everything to be verified +{ + map(0x0800'0000, 0x0807'ffff).r(FUNC(igs_m027_033vid_state::external_rom_r)); // Game ROM + + map(0x1800'0000, 0x1800'7fff).ram().share(m_nvram); + + map(0x2800'0000, 0x2800'0fff).ram(); + + map(0x3800'0000, 0x3800'7fff).noprw(); // TODO: IGS033 + map(0x38a0'0000, 0x38a0'11ff).ram().w(m_palette, FUNC(palette_device::write32)).share("palette"); + + map(0x5000'0000, 0x5000'03ff).umask32(0x0000'00ff).w(FUNC(igs_m027_033vid_state::xor_table_w)); // uploads XOR table to external ROM here +} + + +/*************************************************************************** + + Input Ports + +***************************************************************************/ + +INPUT_PORTS_START( flowerw3 ) + PORT_START("IN0") + PORT_BIT(0xffff, IP_ACTIVE_LOW, IPT_UNKNOWN) + + PORT_START("DSW1") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW1:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8") + + PORT_START("DSW2") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW2:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW2:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW2:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW2:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW2:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW2:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW2:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW2:8") + + PORT_START("DSW3") + PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW3:1") + PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW3:2") + PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW3:3") + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW3:4") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW3:5") + PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW3:6") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW3:7") + PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW3:8") +INPUT_PORTS_END + + +/*************************************************************************** + + Machine Drivers + +***************************************************************************/ + + +u32 igs_m027_033vid_state::external_rom_r(offs_t offset) +{ + return m_external_rom[offset] ^ m_xor_table[offset & 0x00ff]; +} + +void igs_m027_033vid_state::xor_table_w(offs_t offset, u8 data) +{ + m_xor_table[offset] = (u32(data) << 24) | (u32(data) << 8); +} + + +void igs_m027_033vid_state::m027_033vid(machine_config &config) +{ + IGS027A(config, m_maincpu, 24_MHz_XTAL); + m_maincpu->set_addrmap(AS_PROGRAM, &igs_m027_033vid_state::m027_map); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + SCREEN(config, m_screen, SCREEN_TYPE_RASTER); + m_screen->set_refresh_hz(60); + m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(1000)); + m_screen->set_size(512, 256); + m_screen->set_visarea(0, 448-1, 0, 224-1); + m_screen->set_screen_update(FUNC(igs_m027_033vid_state::screen_update)); + m_screen->set_palette(m_palette); + m_screen->screen_vblank().set(FUNC(igs_m027_033vid_state::screen_vblank)); + + PALETTE(config, m_palette).set_format(palette_device::xRGB_555, 0x1200/2); + + // IGS033_VIDEO(config, m_video, 0); + + // sound hardware + SPEAKER(config, "mono").front_center(); + + OKIM6295(config, "oki", 24_MHz_XTAL / 24, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.5); // divider and pin 7 not verified +} + + +/*************************************************************************** + + ROMs Loading + +***************************************************************************/ + + +// IGS PCB-0405-02-FZ +// SP and IGS027A ROMs have original labels with '花花世界3' +ROM_START( flowerw3 ) + ROM_REGION( 0x4000, "maincpu", 0 ) + // Internal rom of IGS027A ARM based MCU + ROM_LOAD( "f8_027a.bin", 0x0000, 0x4000, CRC(4662f015) SHA1(c10889964b675f5c11ea1571332f3eec418c9a28) ) + + ROM_REGION32_LE( 0x80000, "user1", ROMREGION_ERASEFF ) // external ARM data / prg + ROM_LOAD( "v118.u12", 0x00000, 0x80000, CRC(c2729fbe) SHA1(2153675a1161bd6aea6367c55fcf801c7fb0dd3a) ) + + ROM_REGION( 0x80000, "igs033", 0 ) + ROM_LOAD( "7e.u20", 0x000000, 0x080000, CRC(a7b65af6) SHA1(bef13d38eb793b2860c2922f0cfb4b011fd9991b) ) + + ROM_REGION( 0x80000, "oki", 0 ) + ROM_LOAD( "sp.3", 0x00000, 0x80000, CRC(06b70fe9) SHA1(5df34f870d32893b5c3095fb9653954209712cdb) ) +ROM_END + + +void igs_m027_033vid_state::init_flowerw3() +{ + flowerw3_decrypt(machine()); +} + +} // anonymous namespace + + +/*************************************************************************** + + Game Drivers + +***************************************************************************/ + +GAME( 200?, flowerw3, 0, m027_033vid, flowerw3, igs_m027_033vid_state, init_flowerw3, ROT0, "IGS", "Flower World 3 (V118CN)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // title to be adjusted once it works diff --git a/src/mame/igs/pgmcrypt.cpp b/src/mame/igs/pgmcrypt.cpp index 055248cef51..5600d78e4cd 100644 --- a/src/mame/igs/pgmcrypt.cpp +++ b/src/mame/igs/pgmcrypt.cpp @@ -1969,3 +1969,26 @@ void mxsqy_decrypt(running_machine &machine) src[i] ^= x; } } + +void flowerw3_decrypt(running_machine &machine) +{ + memory_region *const region = machine.root_device().memregion("user1"); + auto const src = util::little_endian_cast(reinterpret_cast(region->base())); + auto const rom_size = region->bytes(); + + for (int i = 0; i < rom_size / 2; i++) + { + uint16_t x = 0; + + IGS27_CRYPT1_ALT + IGS27_CRYPT2_ALT + IGS27_CRYPT3 + IGS27_CRYPT4 + IGS27_CRYPT5_ALT + IGS27_CRYPT6 + IGS27_CRYPT7 + IGS27_CRYPT8 + + src[i] ^= x; + } +} diff --git a/src/mame/igs/pgmcrypt.h b/src/mame/igs/pgmcrypt.h index ae070639f32..cc38abc0f94 100644 --- a/src/mame/igs/pgmcrypt.h +++ b/src/mame/igs/pgmcrypt.h @@ -64,5 +64,6 @@ void extradrw_decrypt(running_machine &machine) ATTR_COLD; void cjddzlf_decrypt(running_machine &machine) ATTR_COLD; void cjtljp_decrypt(running_machine& machine) ATTR_COLD; void mxsqy_decrypt(running_machine& machine) ATTR_COLD; +void flowerw3_decrypt(running_machine& machine) ATTR_COLD; #endif // MAME_IGS_PGMCRYPT_H diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 80f50797250..2693f132a86 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -15195,6 +15195,7 @@ speedway speedwaya sstar97 sstar97a +sstar97jb superb2k tigerslt @@ -17792,6 +17793,7 @@ cgenienz @source:edevices/diverboy.cpp diverboy +tumblebed @source:edevices/fantland.cpp borntofi @@ -20589,6 +20591,9 @@ zhongguo @source:igs/igs_m027_023vid.cpp mxsqy +@source:igs/igs_m027_033vid.cpp +flowerw3 + @source:igs/igs_m027_link.cpp cjslh cjsll diff --git a/src/mame/neogeo/neogeo.cpp b/src/mame/neogeo/neogeo.cpp index 1928efd4e1b..f3f93ffe06a 100644 --- a/src/mame/neogeo/neogeo.cpp +++ b/src/mame/neogeo/neogeo.cpp @@ -4728,6 +4728,7 @@ ROM_START( aof ) /* MVS AND AES VERSION */ ROM_REGION( 0x400000, "cslot1:ymsnd:adpcma", 0 ) ROM_LOAD( "044-v2.v2", 0x000000, 0x200000, CRC(3ec632ea) SHA1(e3f413f580b57f70d2dae16dbdacb797884d3fce) ) /* TC5316200 */ ROM_LOAD( "044-v4.v4", 0x200000, 0x200000, CRC(4b0f8e23) SHA1(105da0cc5ba19869c7147fba8b177500758c232b) ) /* TC5316200 */ + /* Also found MVS set with different label: 044-v2.v1 and 044-v4.v2 */ ROM_REGION( 0x800000, "cslot1:sprites", 0 ) ROM_LOAD16_BYTE( "044-c1.c1", 0x000000, 0x100000, CRC(ddab98a7) SHA1(f20eb81ec431268798c142c482146c1545af1c24) ) /* Plane 0,1 */ /* TC5316200 */ @@ -4858,6 +4859,7 @@ ROM_END ID-0047 . NGM-047 NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA42G-1 + NEO-MVS PROG-G2 (SNK-9201) / NEO-MVS CHA42G-2 . NGH-047 NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2B NEO-AEG PROG-G2 (PRO-CT0) / NEO-AEG CHA42G-2 @@ -4866,7 +4868,7 @@ ROM_END ROM_START( fatfury2 ) /* MVS AND AES VERSION */ ROM_REGION( 0x100000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT ) ROM_LOAD16_WORD_SWAP( "047-p1.p1", 0x000000, 0x100000, CRC(ecfdbb69) SHA1(59e2f137c6eaf043df4ddae865a9159a10265c60) ) /* TC538200 */ - /* The original P1 is 8mbit; also found sets with P1 / P2 4mbit on eprom. */ + /* The original P1 is 8mbit; also found sets with EP1 / EP2 4mbit on eprom. */ NEO_SFIX_128K( "047-s1.s1", CRC(d7dbbf39) SHA1(29253e596f475ebd41a6e3bb53952e3a0ccd2eed) ) /* TC531000 */ @@ -5286,6 +5288,7 @@ ROM_START( fatfursp ) /* MVS AND AES VERSION */ ROM_REGION( 0x180000, "cslot1:maincpu", ROMREGION_BE|ROMREGION_16BIT ) ROM_LOAD16_WORD_SWAP( "058-p1.p1", 0x000000, 0x100000, CRC(2f585ba2) SHA1(429b4bf43fb9b1082c15d645ca328f9d175b976b) ) /* mask rom TC538200 */ ROM_LOAD16_WORD_SWAP( "058-p2.sp2", 0x100000, 0x080000, CRC(d7c71a6b) SHA1(b3428063031a2e5857da40a5d2ffa87fb550c1bb) ) /* mask rom TC534200 */ + /* also found MVS set with EP1 / EP2 / SP2 on eprom; correct chip label unknown */ NEO_SFIX_128K( "058-s1.s1", CRC(2df03197) SHA1(24083cfc97e720ac9e131c9fe37df57e27c49294) ) /* mask rom TC531000 */ @@ -5416,6 +5419,7 @@ ROM_END ID-0061 . NGM-061 NEO-MVS PROGGSC / NEO-MVS CHA256 + NEO-MVS PROGGSC / NEO-MVS CHA256B NEO-MVS PROGTOP / NEO-MVS CHA256 NEO-MVS PROG 4096 B / NEO-MVS CHA256 . NGH-061 @@ -6073,6 +6077,7 @@ ROM_END NEO-MVS PROGBK1 / NEO-MVS CHA256 NEO-MVS PROGTOP / NEO-MVS CHA256B NEO-MVS PROG 4096 B / NEO-MVS CHA 42G-3 + NEO-MVS PROGGSC / NEO-MVS CHA 42G-3B . NGH-082 NEO-AEG PROGTOP2 / NEO-AEG CHA256 B ****************************************/ @@ -7851,6 +7856,7 @@ ROM_END ID-0233 . NGM-2330 NEO-MVS PROGBK1 / NEO-MVS CHA256 + NEO-MVS PROGBK1 / NEO-MVS CHA256B . NGH-2330 NEO-AEG PROGBK1Y / NEO-AEG CHA256RY ****************************************/ diff --git a/src/mame/nmk/nmk16.cpp b/src/mame/nmk/nmk16.cpp index c9f14e329c9..6ffdec810df 100644 --- a/src/mame/nmk/nmk16.cpp +++ b/src/mame/nmk/nmk16.cpp @@ -10604,7 +10604,7 @@ GAME( 1993, powerinspu, powerins, powerins, powerinj, nmk16_state, GAME( 1993, powerinspj, powerins, powerins, powerinj, nmk16_state, empty_init, ROT0, "Atlus", "Gouketsuji Ichizoku (Japan, prototype)", MACHINE_SUPPORTS_SAVE ) // boots as 93.10.20 just like the other sets, but code is different GAME( 1993, powerinsa, powerins, powerinsa, powerins, nmk16_state, init_powerinsa, ROT0, "bootleg", "Power Instinct (USA, bootleg set 1)", MACHINE_SUPPORTS_SAVE ) GAME( 1993, powerinsb, powerins, powerinsb, powerins, nmk16_state, empty_init, ROT0, "bootleg", "Power Instinct (USA, bootleg set 2)", MACHINE_SUPPORTS_SAVE ) -GAME( 1993, powerinsc, powerins, powerinsc, powerins, nmk16_state, empty_init, ROT0, "bootleg", "Power Instinct (USA, bootleg set 3)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // different sprites' format not implemented +GAME( 1993, powerinsc, powerins, powerinsc, powerins, nmk16_state, empty_init, ROT0, "bootleg (Electronic Devices)", "Power Instinct (USA, bootleg set 3)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // different sprites' format not implemented // Non NMK boards diff --git a/src/mame/seibu/goal92.cpp b/src/mame/seibu/goal92.cpp index 21742d2a9f1..ff534cd94e0 100644 --- a/src/mame/seibu/goal92.cpp +++ b/src/mame/seibu/goal92.cpp @@ -620,4 +620,4 @@ ROM_END } // anonymous namespace -GAME( 1992, goal92, cupsoc, goal92, goal92, goal92_state, empty_init, ROT0, "bootleg", "Goal! '92", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) +GAME( 1992, goal92, cupsoc, goal92, goal92, goal92_state, empty_init, ROT0, "bootleg (Electronic Devices)", "Goal! '92", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/skeleton/vgame.cpp b/src/mame/skeleton/vgame.cpp index 3c2724d2545..fab8cde244d 100644 --- a/src/mame/skeleton/vgame.cpp +++ b/src/mame/skeleton/vgame.cpp @@ -120,7 +120,7 @@ GFXDECODE_END void vgame_state::vgame(machine_config &config) { - ARM7(config, m_maincpu, 44_MHz_XTAL); // CPU core and divider unknown; ROMs seem to contain at least some ARM or Thumb code + ARM7(config, m_maincpu, 44_MHz_XTAL); // CPU core unknown; ROMs seem to contain at least some ARM or Thumb code m_maincpu->set_addrmap(AS_PROGRAM, &vgame_state::program_map); // m_maincpu->set_vblank_int("screen", FUNC(vgame_state::irq0_line_hold)); @@ -139,7 +139,7 @@ void vgame_state::vgame(machine_config &config) SPEAKER(config, "mono").front_center(); - OKIM6295(config, "oki", 44_MHz_XTAL / 44, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); // pin 7 and clock not verified + OKIM6295(config, "oki", 44_MHz_XTAL / 44, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); } // VGAME-0030-02-AI PCB @@ -181,7 +181,7 @@ same text font but with a simpler modern design using mostly surface-mounted par similar format to IGS PCBs. It is possible VGAME is an IGS company or it was run by ex-IGS employees who set up their own company doing the same thing using knowledge gained from working at IGS. -The CPU is a QFP128 which is an unusual footprint for a CPU and appears to be similar (bot not identical) to +The CPU is a QFP128 which is an unusual footprint for a CPU and appears to be similar (but not identical) to the special IGS027A used by lhzb3sjb. The same pin that was found to be the serial port when trojaning lhzb3sjb goes to a connector on the edge of the board and appears to be the debug/programming port. When the program ROM is removed the message that shows on screen from the internal ROM is very similar to the messages @@ -224,7 +224,7 @@ Notes: "VGAME-007" - Chao Ji Dou Niu 007 also seen on Mahjong School 2 and Chaoji Laizi Dou Dizhu so these might use the same internal ROM. VGAME-003 - QFP240 Custom Graphics Chip. Possibly similar to IGS023 or IGS031. Chip has additional - logic and other functions such providing the 1MHz clock for the M6295. + logic and other functions such as providing the 1MHz clock for the M6295. The same type of chip exists on Mahjong School 2 and Chaoji Laizi Dou Dizhu marked "VGAME-008" 6295 - OKI M6295 4-Channel ADPCM Voice Synthesis LSI. Clock Input 1.000MHz [44/44]. Pin 7 HIGH 1MHz clock comes from VGAME-003. diff --git a/src/mame/taito/taito_f2.cpp b/src/mame/taito/taito_f2.cpp index 12919d25c87..18535603f9a 100644 --- a/src/mame/taito/taito_f2.cpp +++ b/src/mame/taito/taito_f2.cpp @@ -5685,4 +5685,4 @@ GAME( 1993, qcrayon2, 0, qcrayon2, qcrayon2, taitof2_state, empty_i GAME( 1991, driftout, 0, driftout, driftout, dondokod_state, empty_init, ROT270, "Visco", "Drift Out (Europe)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, driftoutct, driftout, driftoutct,driftoutct, cameltry_state, empty_init, ROT270, "Visco", "Drift Out (Europe, Cameltry conversion)", MACHINE_SUPPORTS_SAVE ) GAME( 1991, driftoutj, driftout, driftout, driftout, dondokod_state, empty_init, ROT270, "Visco", "Drift Out (Japan)", MACHINE_SUPPORTS_SAVE ) -GAME( 1991, driveout, driftout, driveout, driftout, driveout_state, empty_init, ROT270, "bootleg", "Drive Out (bootleg of Drift Out)", MACHINE_SUPPORTS_SAVE ) +GAME( 1991, driveout, driftout, driveout, driftout, driveout_state, empty_init, ROT270, "bootleg (Electronic Devices)", "Drive Out (bootleg of Drift Out)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/toaplan/fixeight.cpp b/src/mame/toaplan/fixeight.cpp index 5ffc92219ba..0d62d056d49 100644 --- a/src/mame/toaplan/fixeight.cpp +++ b/src/mame/toaplan/fixeight.cpp @@ -771,4 +771,4 @@ GAME( 1992, fixeightat, fixeight, fixeight, fixeight, fixeight_state, empty GAME( 1992, fixeightut, fixeight, fixeight, fixeight, fixeight_state, empty_init, ROT270, "Toaplan (Taito license)", "FixEight (USA, Taito license)", MACHINE_SUPPORTS_SAVE ) GAME( 1992, fixeightjt, fixeight, fixeight, fixeight, fixeight_state, empty_init, ROT270, "Toaplan (Taito license)", "FixEight - Jigoku no Eiyuu Densetsu (Japan, Taito license)", MACHINE_SUPPORTS_SAVE ) -GAME( 1992, fixeightbl, fixeight, fixeightbl, fixeightbl, fixeight_bootleg_state, init_fixeightbl, ROT270, "bootleg", "FixEight (Korea, bootleg)", MACHINE_SUPPORTS_SAVE ) +GAME( 1992, fixeightbl, fixeight, fixeightbl, fixeightbl, fixeight_bootleg_state, init_fixeightbl, ROT270, "bootleg (Shine)", "FixEight (Korea, bootleg)", MACHINE_SUPPORTS_SAVE )