New working clones

------------------
Cherry Bonus III (ver.1.40, set 6) [Hammy]
New Lucky 8 Lines (set 12, W-4, encrypted) [Hammy]

- excellent/lastbank.cpp: used ioport_array instead of live tags
This commit is contained in:
Ivan Vangelista 2024-08-30 19:07:49 +02:00
parent 84a6393434
commit ae3bfa13f1
4 changed files with 155 additions and 23 deletions

View File

@ -46,6 +46,7 @@ public:
, m_maincpu(*this, "maincpu")
, m_oki(*this, "oki")
, m_essnd(*this, "essnd")
, m_key{ { *this, "P1_KEY%u", 0U }, { *this, "P2_KEY%u", 0U } }
{ }
void lastbank(machine_config &config);
@ -65,6 +66,8 @@ private:
required_device<okim6295_device> m_oki;
required_device<es8712_device> m_essnd;
required_ioport_array<5> m_key[2];
uint8_t m_key_select = 0;
uint8_t m_sound_flags = 0;
@ -72,7 +75,7 @@ private:
void output_w(offs_t offset, uint8_t data);
uint8_t key_matrix_r();
template <uint8_t Player> uint8_t key_matrix_r();
void key_select_w(uint8_t data);
TIMER_DEVICE_CALLBACK_MEMBER(irq_scanline);
@ -108,21 +111,16 @@ void lastbank_state::screen_vblank(int state)
}
template <uint8_t Player>
uint8_t lastbank_state::key_matrix_r()
{
const char *const keynames[2][5] = {
{"P1_KEY0", "P1_KEY1", "P1_KEY2", "P1_KEY3", "P1_KEY4"},
{"P2_KEY0", "P2_KEY1", "P2_KEY2", "P2_KEY3", "P2_KEY4"} };
uint8_t res;
int i;
uint8_t res = 0xff;
res = 0xff;
for(i=0;i<5;i++)
{
if(m_key_select & 1 << i)
res = ioport(keynames[0][i])->read();
}
if (BIT(m_key_select, 0)) res &= m_key[Player][0]->read();
if (BIT(m_key_select, 1)) res &= m_key[Player][1]->read();
if (BIT(m_key_select, 2)) res &= m_key[Player][2]->read();
if (BIT(m_key_select, 3)) res &= m_key[Player][3]->read();
if (BIT(m_key_select, 4)) res &= m_key[Player][4]->read();
return res;
}
@ -186,8 +184,8 @@ void lastbank_state::main_map(address_map &map)
map(0xa805, 0xa805).w("soundlatch1", FUNC(generic_latch_8_device::write));
map(0xa806, 0xa806).w("soundlatch2", FUNC(generic_latch_8_device::write));
map(0xa807, 0xa807).nopw(); // hopper?
map(0xa808, 0xa808).r(FUNC(lastbank_state::key_matrix_r));
map(0xa80c, 0xa80c).r(FUNC(lastbank_state::key_matrix_r));
map(0xa808, 0xa808).r(FUNC(lastbank_state::key_matrix_r<0>));
map(0xa80c, 0xa80c).r(FUNC(lastbank_state::key_matrix_r<1>));
map(0xa81c, 0xa81c).portr("DSW1");
map(0xa81d, 0xa81d).portr("DSW2");
map(0xa81e, 0xa81e).portr("DSW3");
@ -292,6 +290,22 @@ static INPUT_PORTS_START( lastbank )
PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_KEYPAD ) PORT_NAME("2-3") PORT_CODE(KEYCODE_A)
PORT_BIT( 0xc0, IP_ACTIVE_LOW, IPT_UNKNOWN )
// TODO
PORT_START("P2_KEY0")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P2_KEY1")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P2_KEY2")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P2_KEY3")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("P2_KEY4")
PORT_BIT( 0xff, IP_ACTIVE_LOW, IPT_UNUSED )
PORT_START("DSW1")
PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW1:1")
PORT_DIPSETTING( 0x01, DEF_STR( Off ) )
@ -555,7 +569,7 @@ INPUT_PORTS_END
TIMER_DEVICE_CALLBACK_MEMBER(lastbank_state::irq_scanline)
{
int scanline = param;
int const scanline = param;
if (scanline == 240 && (m_maincpu->irq_enable() & 4))
{
@ -571,7 +585,7 @@ TIMER_DEVICE_CALLBACK_MEMBER(lastbank_state::irq_scanline)
void lastbank_state::lastbank(machine_config &config)
{
// basic machine hardware
TC0091LVC(config, m_maincpu, XTAL(14'318'181) / 4); //!!! TC0091LVC !!!
TC0091LVC(config, m_maincpu, 14.318181_MHz_XTAL / 4);
m_maincpu->set_addrmap(AS_PROGRAM, &lastbank_state::main_map);
m_maincpu->set_tilemap_xoffs(0,192); // TODO: correct?
@ -579,7 +593,7 @@ void lastbank_state::lastbank(machine_config &config)
NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0);
z80_device &audiocpu(Z80(config, "audiocpu", XTAL(14'318'181) / 4));
z80_device &audiocpu(Z80(config, "audiocpu", 14.318181_MHz_XTAL / 4));
audiocpu.set_addrmap(AS_PROGRAM, &lastbank_state::audio_map);
audiocpu.set_addrmap(AS_IO, &lastbank_state::audio_io);
// yes, we have no interrupts
@ -602,7 +616,7 @@ void lastbank_state::lastbank(machine_config &config)
GENERIC_LATCH_8(config, "soundlatch1");
GENERIC_LATCH_8(config, "soundlatch2");
OKIM6295(config, m_oki, 1'000'000, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
OKIM6295(config, m_oki, 1_MHz_XTAL, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 0.75);
ES8712(config, m_essnd, 0);
m_essnd->msm_write_handler().set("msm", FUNC(msm6585_device::data_w));
@ -642,7 +656,7 @@ ROM_START( lastbank )
ROM_LOAD( "7.u60", 0x00000, 0x80000, CRC(41be7146) SHA1(00f1c0d5809efccf888e27518a2a5876c4b633d8) )
ROM_END
ROM_START( fever13 ) // ES-9410 PCB (TC0090LVC marked ES9402LA, Z80, ES8712,14'318'181 MHz XTAL, OKI M6295 with 1000J resonator, MSM6585 with 640J resonator)
ROM_START( fever13 ) // ES-9410 PCB (TC0090LVC marked ES9402LA, Z80, ES8712, 14'318'181 MHz XTAL, OKI M6295 with 1000J resonator, MSM6585 with 640J resonator)
ROM_REGION( 0x40000, "maincpu", 0 )
ROM_LOAD( "9.u9", 0x00000, 0x40000, CRC(a17a6a9c) SHA1(b2bff250d1ea879bcdd9bea92537975a168babc8) )
@ -662,5 +676,5 @@ ROM_END
} // Anonymous namespace
GAME( 1994, lastbank, 0, lastbank, lastbank, lastbank_state, empty_init, ROT0, "Excellent System", "Last Bank (v1.16)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, fever13, 0, lastbank, fever13, fever13_state, empty_init, ROT0, "Excellent System", "Fever 13 (Japan, v1.3)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // missing GFX dump
GAME( 1994, lastbank, 0, lastbank, lastbank, lastbank_state, empty_init, ROT0, "Excellent System", "Last Bank (v1.16)", MACHINE_SUPPORTS_SAVE )
GAME( 1995, fever13, 0, lastbank, fever13, fever13_state, empty_init, ROT0, "Excellent System", "Fever 13 (Japan, v1.3)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE | MACHINE_NO_COCKTAIL ) // missing GFX ROM dump

View File

@ -579,5 +579,5 @@ ROM_END
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, double8l, 0, cabaret, cabaret, cabaret_state, init_double8l, ROT0, "AMT Co. Ltd.", "Double 8 Line", 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

@ -523,6 +523,7 @@ public:
void init_lucky8a();
void init_lucky8f();
void init_lucky8l();
void init_lucky8m();
void init_magoddsc();
void init_flaming7();
void init_flam7_tw();
@ -582,6 +583,7 @@ public:
void init_cb3c();
void init_cb3e();
void init_cb3f();
void init_cb3g();
void init_cherrys();
void init_chrygld();
void init_chry10();
@ -12115,6 +12117,36 @@ ROM_START( cb3f ) // original Wing W4 PCB + subboard with Z80, ROM, RAM and encr
ROM_LOAD( "dm74s288.d12", 0x0000, 0x0020, CRC(6df3f972) SHA1(0096a7f7452b70cac6c0752cb62e24b643015b5c) )
ROM_END
// original Wing W4 PCB + Dyna D9005 subboard with Z80, ROM, RAM and Dyna DP 1200-5 custom. GFX ROMs are identical to many other sets.
ROM_START( cb3g )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "cb3-s4.ic5", 0x00000, 0x10000, CRC(ad0fa0b7) SHA1(29b43e764ca2712406b37d24d942c90992ea46e1) ) // encrypted, on subboard
ROM_REGION( 0x18000, "gfx1", 0 )
ROM_LOAD( "cb3-5.7h", 0x00000, 0x08000, CRC(83650a94) SHA1(e79420ab559d3f74013708767ca3f238fd333fb7) )
ROM_LOAD( "cb3-6.8h", 0x08000, 0x08000, CRC(2f46a3f5) SHA1(3e6022ee8f84039e48f41aea5e68ee28aabdc556) )
ROM_LOAD( "cb3-7.10h", 0x10000, 0x08000, CRC(dcf97517) SHA1(0a29696e0464c8878c499b1786a17080fd088a72) )
ROM_REGION( 0x8000, "gfx2", 0 )
ROM_LOAD( "cb3-1.1h", 0x00000, 0x02000, CRC(7cc6d26b) SHA1(de33e8985affce7bd3ead89463117c9aaa93d5e4) )
ROM_LOAD( "cb3-2.3h", 0x02000, 0x02000, CRC(e73ea4e3) SHA1(c9fd56461f6986d6bc170403d298fcc408a524e9) )
ROM_LOAD( "cb3-3.4h", 0x04000, 0x02000, CRC(91162010) SHA1(3acc21e7074602b247f2f392eb181802092d2f21) )
ROM_LOAD( "cb3-4.5h", 0x06000, 0x02000, CRC(cbcc6bfb) SHA1(5bafc934fef1f50d8c182c39d3a7ce795c89d175) )
// all the PROMs weren't dumped for this set, marking bad as precaution
ROM_REGION( 0x0200, "proms", 0 )
ROM_LOAD_NIB_LOW( "n82s129.13g", 0x0000, 0x0100, BAD_DUMP CRC(59ac98e4) SHA1(5fc0f1a48c49c956cdb8826e20663dc57a9175e4) ) // 1st bank colors, low 4 bits.
ROM_LOAD_NIB_HIGH( "n82s129.14g", 0x0000, 0x0100, BAD_DUMP CRC(0d8f35bd) SHA1(0c2a0145cdaaf9beabdce241731a36b0c65f18a2) ) // 1st bank colors, high 4 bits.
ROM_LOAD( "dm74s288.13d", 0x0080, 0x0020, BAD_DUMP CRC(77a85e21) SHA1(3b41e0ab7cc55c5d78914d23e8289383f5bd5654) ) // 2nd bank colors
ROM_REGION( 0x100, "unkprom", 0 )
ROM_LOAD( "82s129.f3", 0x0000, 0x0100, BAD_DUMP CRC(1d668d4a) SHA1(459117f78323ea264d3a29f1da2889bbabe9e4be) )
ROM_REGION( 0x20, "unkprom2", 0 )
ROM_LOAD( "dm74s288.d12", 0x0000, 0x0020, BAD_DUMP CRC(6df3f972) SHA1(0096a7f7452b70cac6c0752cb62e24b643015b5c) )
ROM_END
/* Cherry Gold I (bootleg)
It runs in CB3e similar hardware...
@ -14454,6 +14486,38 @@ ROM_START( lucky8l )
ROM_LOAD( "w4.d12", 0x0000, 0x0117, CRC(41b55fb0) SHA1(f31a31dc2c0789d08957785e8c8f804690133450) ) // GAL16V8D
ROM_END
// original Wing PCB with a small riser board for CPU, logic and 2 8-DIP banks. GFX ROMs are identical to many other sets.
ROM_START( lucky8m )
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "28r.b12", 0x0000, 0x4000, CRC(9d7bc7f8) SHA1(93c0297dbe1579b6326d43d743d2b95264e7e0aa) )
ROM_LOAD( "29r.b14", 0x4000, 0x4000, CRC(7b2b0c0c) SHA1(1acb20be5fbfdf6813f8a5257f9bd771b37504ea) )
ROM_REGION( 0x18000, "gfx1", 0 )
ROM_LOAD( "eagle-5.h7", 0x00000, 0x8000, CRC(59026af3) SHA1(3d7f7e78968ca26275635aeaa0e994468a3da575) )
ROM_LOAD( "eagle-6.h8", 0x08000, 0x8000, CRC(67a073c1) SHA1(36194d57d0dc0601fa1fdf2e6806f11b2ea6da36) )
ROM_LOAD( "eagle-7.h10", 0x10000, 0x8000, CRC(c415b9d0) SHA1(fd558fe8a116c33bbd712a639224d041447a45c1) )
ROM_REGION( 0x8000, "gfx2", 0 )
ROM_LOAD( "eagle-1.h1", 0x0000, 0x2000, CRC(29d6f197) SHA1(1542ca457594f6b7fe8f28f7d78023edd7021bc8) )
ROM_LOAD( "eagle-2.h3", 0x2000, 0x2000, CRC(5f812e65) SHA1(70d9ea82f9337936bf21f82b6961768d436f3a6f) )
ROM_LOAD( "eagle-3.h4", 0x4000, 0x2000, CRC(898b9ed5) SHA1(11b7d1cfcf425d00d086c74e0dbcb72068dda9fe) )
ROM_LOAD( "eagle-4.h5", 0x6000, 0x2000, CRC(4f7cfb35) SHA1(0617cf4419be00d9bacc78724089cb8af4104d68) )
// all the PROMs weren't dumped for this set, marking bad as precaution
ROM_REGION( 0x200, "proms", 0 )
ROM_LOAD( "d12", 0x0000, 0x0100, BAD_DUMP CRC(23e81049) SHA1(78071dae70fad870e972d944642fb3a2374be5e4) )
ROM_LOAD( "prom4", 0x0100, 0x0100, BAD_DUMP CRC(526cf9d3) SHA1(eb779d70f2507d0f26d225ac8f5de8f2243599ca) )
ROM_REGION( 0x20, "proms2", 0 )
ROM_LOAD( "d13", 0x0000, 0x0020, BAD_DUMP CRC(c6b41352) SHA1(d7c3b5aa32e4e456c9432a13bede1db6d62eb270) )
ROM_REGION( 0x100, "unkprom", 0 )
ROM_LOAD( "g14", 0x0000, 0x0100, BAD_DUMP CRC(bd48de71) SHA1(e4fa1e774af1499bc568be5b2deabb859d8c8172) )
ROM_REGION( 0x20, "unkprom2", 0 )
ROM_LOAD( "g13", 0x0000, 0x0020, BAD_DUMP CRC(6df3f972) SHA1(0096a7f7452b70cac6c0752cb62e24b643015b5c) )
ROM_END
ROM_START( animalw ) // according to the dumper: runs on the same HW as lucky8 but at the two 8255 has some shorts
ROM_REGION( 0x10000, "maincpu", 0 )
ROM_LOAD( "rom8.bin", 0x0000, 0x8000, CRC(8826e4e7) SHA1(70cff8c5ce75ab0f568e8cdf39ef9165b73fa2c0) )
@ -21256,6 +21320,44 @@ void wingco_state::init_lucky8l()
m_palette->update();
}
void wingco_state::init_lucky8m()
{
uint8_t *rom = memregion("maincpu")->base();
for (int i = 0; i < 0x8000; i++)
{
m_decrypted_opcodes[i] = rom[i];
// only the opcodes in the first 0x400 bytes and over 0x6200 are encrypted
if (i < 0x400 || (i >= 0x6200 && i < 0x6400) || i >= 0x7c00)
{
uint8_t x = rom[i];
switch(i & 0x1e)
{
case 0x00: x = bitswap<8>(x ^ 0x72, 5, 3, 7, 2, 6, 4, 0, 1); break;
case 0x02: x = bitswap<8>(x ^ 0x14, 0, 2, 1, 6, 4, 3, 5, 7); break;
case 0x04: x = bitswap<8>(x ^ 0x7e, 5, 6, 7, 4, 3, 2, 0, 1); break;
case 0x06: x = bitswap<8>(x ^ 0x5c, 0, 6, 1, 4, 3, 2, 5, 7); break;
case 0x08: x = bitswap<8>(x ^ 0xd9, 7, 4, 1, 6, 3, 2, 5, 0); break;
case 0x0a: x = bitswap<8>(x ^ 0x02, 1, 6, 7, 4, 3, 2, 0, 5); break;
case 0x0c: x = bitswap<8>(x ^ 0xd9, 7, 4, 1, 6, 3, 2, 5, 0); break;
case 0x0e: x = bitswap<8>(x ^ 0x02, 1, 6, 7, 4, 3, 2, 0, 5); break;
case 0x10: x = bitswap<8>(x ^ 0x50, 7, 3, 5, 2, 6, 4, 1, 0); break;
case 0x12: x = bitswap<8>(x ^ 0x14, 7, 2, 5, 6, 4, 3, 1, 0); break;
case 0x14: x = bitswap<8>(x ^ 0x5c, 7, 6, 5, 4, 3, 2, 1, 0); break;
case 0x16: x = bitswap<8>(x ^ 0x5c, 7, 6, 5, 4, 3, 2, 1, 0); break;
case 0x18: x = bitswap<8>(x ^ 0xd9, 7, 4, 1, 6, 3, 2, 5, 0); break;
case 0x1a: x = bitswap<8>(x ^ 0x02, 1, 6, 7, 4, 3, 2, 0, 5); break;
case 0x1c: x = bitswap<8>(x ^ 0xd9, 7, 4, 1, 6, 3, 2, 5, 0); break;
case 0x1e: x = bitswap<8>(x ^ 0x02, 1, 6, 7, 4, 3, 2, 0, 5); break;
}
m_decrypted_opcodes[i] = x;
}
}
}
void wingco_state::init_nd8lines()
{
uint8_t *rom = memregion("maincpu")->base();
@ -21723,6 +21825,18 @@ void cb3_state::init_cb3f()
rom[i] = cb3f_decrypt(rom[i], i);
}
void cb3_state::init_cb3g()
{
uint8_t *rom = memregion("maincpu")->base();
std::vector<uint8_t> buffer(0x10000);
memcpy(&buffer[0], rom, 0x10000);
for (int i = 0; i < 0x10000; i++)
rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 13, 12, 14, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)];
}
/* todo: remove these patches! */
void unkch_state::init_unkch1()
{
@ -22079,6 +22193,7 @@ GAME( 199?, cb3c, ncb3, cb3c, chrygld, cb3_state, init_cb3c
GAMEL( 199?, cb3d, ncb3, ncb3, ncb3, cb3_state, empty_init, ROT0, "bootleg", "Cherry Bonus III (set 3)", 0, layout_cherryb3 )
GAMEL( 199?, cb3e, ncb3, cb3e, chrygld, cb3_state, init_cb3e, ROT0, "bootleg", "Cherry Bonus III (set 4, encrypted bootleg)", 0, layout_chrygld )
GAMEL( 199?, cb3f, ncb3, ncb3, ncb3, cb3_state, init_cb3f, ROT0, "bootleg (Cleco)", "Cherry Bonus III (set 5, encrypted bootleg)", MACHINE_NOT_WORKING, layout_chrygld ) // partially decrypted, stops at 'call attendant'
GAMEL( 199?, cb3g, ncb3, ncb3, ncb3, cb3_state, init_cb3g, ROT0, "Dyna", "Cherry Bonus III (ver.1.40, set 6)", 0, layout_cherryb3 )
GAMEL( 199?, chryglda, ncb3, cb3e, chrygld, cb3_state, init_cb3e, ROT0, "bootleg", "Cherry Gold I (set 2, encrypted bootleg)", 0, layout_chrygld ) // Runs in CB3e hardware.
GAME( 1994, chryangla, ncb3, chryangla,ncb3, cb3_state, init_chryangl, ROT0, "bootleg (G.C.I.)", "Cherry Angel (encrypted, W-4 hardware)", MACHINE_NOT_WORKING ) // DYNA CB3 V1.40 string, decrypted but only test screens work
@ -22165,6 +22280,7 @@ GAMEL( 1989, lucky8i, lucky8, lucky8, lucky8, wingco_state, empty_ini
GAMEL( 199?, lucky8j, lucky8, lucky8, lucky8, wingco_state, empty_init, ROT0, "<unknown>", "New Lucky 8 Lines Crown Turbo (Hack)", MACHINE_NOT_WORKING, layout_lucky8 ) // 2 control sets...
GAMEL( 1989, lucky8k, lucky8, lucky8k, lucky8, wingco_state, empty_init, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 10, W-4, encrypted NEC D315-5136)", 0, layout_lucky8 ) // 2 control sets...
GAMEL( 1989, lucky8l, lucky8, lucky8, lucky8, wingco_state, init_lucky8l, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 11, W-4)", MACHINE_WRONG_COLORS, layout_lucky8 ) // uses a strange mix of PLDs and PROMs for colors
GAMEL( 1989, lucky8m, lucky8, lucky8f, lucky8, wingco_state, init_lucky8m, ROT0, "Wing Co., Ltd.", "New Lucky 8 Lines (set 12, W-4, encrypted)", 0, layout_lucky8 )
GAMEL( 198?, ns8lines, 0, lucky8, lucky8b, wingco_state, empty_init, ROT0, "<unknown>", "New Lucky 8 Lines / New Super 8 Lines (W-4)", 0, layout_lucky8p1 ) // only 1 control set...
GAMEL( 1985, ns8linesa, ns8lines, lucky8, lucky8b, wingco_state, empty_init, ROT0, "Yamate (bootleg)", "New Lucky 8 Lines / New Super 8 Lines (W-4, Lucky97 HW)", 0, layout_lucky8p1 ) // only 1 control set...
GAMEL( 198?, ns8linew, ns8lines, lucky8, ns8linew, wingco_state, empty_init, ROT0, "<unknown>", "New Lucky 8 Lines / New Super 8 Lines (F-5, Witch Bonus)", 0, layout_lucky8 ) // 2 control sets...

View File

@ -19992,6 +19992,7 @@ cb3c // (c) 199? Dyna Electronics
cb3d // (c) 199? Dyna Electronics
cb3e // 199? bootleg
cb3f // 199? bootleg
cb3g // (c) 199? Dyna Electronics
cherry96 // bootleg
chry10 // bootleg
chryangl // (c) 199? Dyna Electronics
@ -20079,6 +20080,7 @@ lucky8i // 199?, Eagle, licensed by Wing
lucky8j // 199?, hack
lucky8k // (c) 1989 Wing. With CPU NEC D315-5136
lucky8l // (c) 1989 Wing Co. Ltd
lucky8m // (c) 1989 Wing Co. Ltd
luckybar // unknown
luckylad // (c) 1985 Wing Co. Ltd
magodds // 198? (c) Micro Manufacturing Ltd.