From c3da58a25426f3fe7661d5d54f57e58ca102295d Mon Sep 17 00:00:00 2001 From: Ivan Vangelista Date: Mon, 3 Mar 2025 20:07:22 +0100 Subject: New working systems ------------------- Lian Huan Pao - ATT II [dyq, little0, Guru] Lian Huan Pao - ATT III [dyq, little0, Guru] Xingyun Dou Dizhu [dyq, little0, Guru] New clones marked not working ----------------------------- Chaoji Dou Dizhu (V213CN) [dyq, little0, Guru] Heart of Antony (0252526, US) [Dam0, Heihachi_73] Mr Woo (30215311, NSW/ACT) [Dam0, Heihachi_73] - bmc/popobear.cpp: redumped one GFX ROM for qiwang [dyq, little0, Guru] --- src/mame/aristocrat/aristmk6.cpp | 62 +- src/mame/bmc/bmcpokr.cpp | 213 +++- src/mame/bmc/popobear.cpp | 92 +- src/mame/bordun/att.cpp | 666 ++++++++++ src/mame/bordun/skylncr.cpp | 2519 ++++++++++++++++++++++++++++++++++++++ src/mame/igs/igs_m027.cpp | 46 +- src/mame/mame.lst | 59 +- src/mame/misc/ddz.cpp | 8 +- src/mame/misc/skylncr.cpp | 2519 -------------------------------------- 9 files changed, 3585 insertions(+), 2599 deletions(-) create mode 100644 src/mame/bordun/att.cpp create mode 100644 src/mame/bordun/skylncr.cpp delete mode 100644 src/mame/misc/skylncr.cpp diff --git a/src/mame/aristocrat/aristmk6.cpp b/src/mame/aristocrat/aristmk6.cpp index c3333ef88a0..f2bdf13b6f2 100644 --- a/src/mame/aristocrat/aristmk6.cpp +++ b/src/mame/aristocrat/aristmk6.cpp @@ -588,10 +588,10 @@ typically at around 0x3100-0x3200, 0x3600-0x3700 for Left/Right BIOS dumps (2 fi ROM_LOAD32_WORD_BIOS( 1, "21012901_right.u83", 0x0000000, 0x0200000, CRC(757618f2) SHA1(43f9a3e7d544979f8c6974945914d9e099b02abd) ) /* From lucky88 & redbara6 */ \ ROM_LOAD32_WORD_BIOS( 1, "21012901_left.u70", 0x0000002, 0x0200000, CRC(0d271470) SHA1(5cd4b604bfe2fd7e9a8d08e1c7c97f17ae068479) ) \ ROM_SYSTEM_BIOS( 2, "au-nsw3", "Aristocrat MK6 Base (19012801, NSW/ACT)" ) \ - ROM_LOAD32_WORD_BIOS( 2, "19012801_right.u83", 0x0000000, 0x0200000, CRC(5b20a96c) SHA1(5fd916b7cc2cdd51bf7dd212c1114f94dc9c7926) ) /* From cactusco & cmtonig & heartveg & moonwalt */ \ + ROM_LOAD32_WORD_BIOS( 2, "19012801_right.u83", 0x0000000, 0x0200000, CRC(5b20a96c) SHA1(5fd916b7cc2cdd51bf7dd212c1114f94dc9c7926) ) /* From cactusco, cmtonig, heartveg & moonwalt */ \ ROM_LOAD32_WORD_BIOS( 2, "19012801_left.u70", 0x0000002, 0x0200000, CRC(b03bd17c) SHA1(f281e80f6dda5b727ed71d2deebe3b0ff548773f) ) \ ROM_SYSTEM_BIOS( 3, "au-nsw4", "Aristocrat MK6 Base (13012001, NSW/ACT)" ) \ - ROM_LOAD32_WORD_BIOS( 3, "13012001_right.u83", 0x0000000, 0x0200000, CRC(e627dbfa) SHA1(4fedbe0975ceb7dc0ebebf18a7708d78984db9b7) ) /* From grizzly & qnilea6 */ \ + ROM_LOAD32_WORD_BIOS( 3, "13012001_right.u83", 0x0000000, 0x0200000, CRC(e627dbfa) SHA1(4fedbe0975ceb7dc0ebebf18a7708d78984db9b7) ) /* From grizzly, mrwoo & qnilea6 */ \ ROM_LOAD32_WORD_BIOS( 3, "13012001_left.u70", 0x0000002, 0x0200000, CRC(38e8f659) SHA1(88c6acba99b0aca023c6f4d27c061c231490e9e0) ) \ ROM_SYSTEM_BIOS( 4, "au-nsw5", "Aristocrat MK6 Base (11011901, NSW/ACT)" ) \ ROM_LOAD32_WORD_BIOS( 4, "11011901_right.u83", 0x0000000, 0x0200000, CRC(73dcb11c) SHA1(69ae4f32a0c9141b2a82ff3935b0cd20333d2964) ) \ @@ -674,7 +674,7 @@ typically at around 0x3100-0x3200, 0x3600-0x3700 for Left/Right BIOS dumps (2 fi ROM_LOAD32_WORD_BIOS( 27, "01.04.11_right.u83", 0x0000000, 0x0200000, CRC(2dae8ca0) SHA1(7a0fb38b4c1ac7195d15bdab6f0cfb16c78430f0) ) /* From centrion */ \ ROM_LOAD32_WORD_BIOS( 27, "01.04.11_left.u70", 0x0000002, 0x0200000, CRC(787f2b07) SHA1(2548289e44f4b935346b759afb5383bdbac04c3e) ) \ ROM_SYSTEM_BIOS( 28, "us2", "Aristocrat MK6 Base (01.04.10, US)" ) \ - ROM_LOAD32_WORD_BIOS( 28, "01.04.10_right.u83", 0x0000000, 0x0200000, CRC(82ce2fcc) SHA1(4c8fb3db084a67e99d1420b3f895a06ce9ef5ec2) ) \ + ROM_LOAD32_WORD_BIOS( 28, "01.04.10_right.u83", 0x0000000, 0x0200000, CRC(82ce2fcc) SHA1(4c8fb3db084a67e99d1420b3f895a06ce9ef5ec2) ) /* From hrtantny */ \ ROM_LOAD32_WORD_BIOS( 28, "01.04.10_left.u70", 0x0000002, 0x0200000, CRC(9d9d52c1) SHA1(b957220cdbedd516c219d1bfc28807ce466df93f) ) \ ROM_SYSTEM_BIOS( 29, "us3", "Aristocrat MK6 Base (01.04.08, US)" ) \ ROM_LOAD32_WORD_BIOS( 29, "01.04.08_right.u83", 0x0000000, 0x0200000, CRC(95333304) SHA1(7afe49d6c5e4d6820f349778557daa88c5366a51) ) /* From bobdolly, also u10 on EPROM expansion board */ \ @@ -2998,6 +2998,30 @@ ROM_START( grizzly ) ROM_END +// 0252526 / MV4237 +// Heart Of Antony / Local / C - 05/23/05 +// Variations (% and NO): +// 87.920% 99 +// 90.128% 01 +// 91.921% 02 +// 94.916% 03 +// 97.058% 04 +ROM_START( hrtantny ) + ARISTMK6_BIOS + ROM_REGION64_LE( 0x4000000, "game_rom", ROMREGION_ERASEFF) + /* + 0252526-U86 Series:01 M27V322 Mk6USA Heart of Antony A79H1P14 1F62-BCA6 / 1EDB1DAE / 989A156E Copyright © 2004-2005 Aristocrat Technologies, Inc. + 0252526-U73 Series:01 M27V322 Mk6USA Heart of Antony B26H6UAC D1B6-27A4 / 1EBB0279 / 8A72A1A7 Copyright © 2004-2005 Aristocrat Technologies, Inc. + 0252526-U85 Series:01 M27V322 Mk6USA Heart of Antony 0PF54346 7A98-D033 / 067E3EC3 / 2F2F160F Copyright © 2004-2005 Aristocrat Technologies, Inc. + 0252526-U72 Series:01 M27V322 Mk6USA Heart of Antony D5AC1C2H 36D3-50DD / 064B641C / 210FC3DA Copyright © 2004-2005 Aristocrat Technologies, Inc. + */ + ROM_LOAD32_WORD("0252526.u86", 0x0000000, 0x0400000, CRC(88cfa3fc) SHA1(852a9db95246f9e39c29c231894d27c4f8bbc9ab) ) + ROM_LOAD32_WORD("0252526.u73", 0x0000002, 0x0400000, CRC(24e233af) SHA1(63e9886478e9d5790e7babe868a31071f81ef17f) ) + ROM_LOAD32_WORD("0252526.u85", 0x0800000, 0x0400000, CRC(3deb3b1c) SHA1(f5b80193bda500edb1049b1decacfaa43a391862) ) + ROM_LOAD32_WORD("0252526.u72", 0x0800002, 0x0400000, CRC(78c92f0e) SHA1(93690fcb6983876022a180ea633b7bea4519da1d) ) +ROM_END + + // 20169511 / 717/2 // Heart of Gold / Local / A - 15/09/03 // Variations (% and NO): @@ -3892,11 +3916,37 @@ ROM_START( mchilliq ) ROM_END +// 30215311 / 810 +// MR WOO / Local / K - 12/07/06 +// Variations (% and NO): +// 87.83% 99 +// 85.08% 01 +// 89.38% 02 +ROM_START( mrwoo ) + ARISTMK6_BIOS + ROM_REGION64_LE( 0x4000000, "game_rom", ROMREGION_ERASEFF) + /* + 30215311 NSW MR WOO 810 4MB 6 eproms Aristocrat © 2006 P U86 + 30215311 NSW MR WOO 810 4MB 6 eproms Aristocrat © 2006 P U73 + 30215311 NSW MR WOO 810 4MB 6 eproms Aristocrat © 2006 P U85 + 30215311 NSW MR WOO 810 4MB 6 eproms Aristocrat © 2006 P U72 + 30215311 NSW MR WOO 810 4MB 6 eproms Aristocrat © 2006 P U84 + 30215311 NSW MR WOO 810 4MB 6 eproms Aristocrat © 2006 P U71 + */ + ROM_LOAD32_WORD("30215311.u86", 0x0000000, 0x0400000, CRC(674a187d) SHA1(d4c38fff6c3ba43284b51ec13f98c2b1badc7b98) ) + ROM_LOAD32_WORD("30215311.u73", 0x0000002, 0x0400000, CRC(be90b4d1) SHA1(b49002389abbcc5db625d8eaffd2b4616cd4cdc2) ) + ROM_LOAD32_WORD("30215311.u85", 0x0800000, 0x0400000, CRC(7e9ed3eb) SHA1(b74aff123187c61c59195770b4cd70d9d691d666) ) + ROM_LOAD32_WORD("30215311.u72", 0x0800002, 0x0400000, CRC(20097531) SHA1(af733cbd85a0da8fccd7d1063f4be53086a4aa4a) ) + ROM_LOAD32_WORD("30215311.u84", 0x1000000, 0x0400000, CRC(6d306fc4) SHA1(06688a14c4094f0638543c29683f5c51f877d310) ) + ROM_LOAD32_WORD("30215311.u71", 0x1000002, 0x0400000, CRC(21373aeb) SHA1(34eec46f8912ace47cce7f856b07d7a7900aa125) ) +ROM_END + + // 0252599 / MV4276 // MR WOO / Local / N/A // Variations (% and NO): // 80.314% 99 -ROM_START( mrwoo ) +ROM_START( mrwoou ) ARISTMK6_BIOS ROM_REGION64_LE( 0x4000000, "game_rom", ROMREGION_ERASEFF) /* @@ -6713,6 +6763,7 @@ GAME( 2002, goldpym, qnilese, aristmk6, aristmk6, aristmk6_state, empty_init GAME( 2007, goldsam, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Golden Samurai (10247811, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 832, A - 31/07/07 GAME( 2002, gbmoney, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "The Good, The Bad & The Money (0351016, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // US023, B - 09/11/02 GAME( 2006, grizzly, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Grizzly (10214711, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 780, C - 12/04/06 +GAME( 2005, hrtantny, antcleo, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Heart of Antony (0252526, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4237, C - 05/23/05 GAME( 2003, heartgld, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Heart of Gold (20169511, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 717/2, A - 15/09/03 GAME( 2004, heartglda, heartgld, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Heart of Gold (10184211, ASP)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 717/2, B - 10/03/04 GAME( 2006, heartveg, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Heart of Vegas (10232911, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 717/4, C - 27/06/06 @@ -6763,7 +6814,8 @@ GAME( 2000, mnytree, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init GAME( 2001, mnytreea, mnytree, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Money Tree (10122211, ASP)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 657, F - 14/03/01 GAME( 2004, moonfire, indream, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Moon Fire - Jackpot Carnival (30164211, Queensland)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 628/3, E - 27/01/04 GAME( 2007, moonwalt, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Moonlight Waltz (10227611, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 814/1, B - 11/01/07 -GAME( 200?, mrwoo, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Mr Woo (0252599, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4276, (no data) +GAME( 2006, mrwoo, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Mr Woo (30215311, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 810, K - 12/07/06 +GAME( 200?, mrwoou, mrwoo, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Mr Woo (0252599, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // MV4276, (no data) GAME( 2005, mskitty, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Miss Kitty (10216611, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 778, C - 18/04/05 GAME( 2002, mystarr, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Mystic Arrow (0151009, US)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // US005, A - 01/07/02 GAME( 2001, mysteycm, aristmk6, aristmk6, aristmk6, aristmk6_state, empty_init, ROT0, "Aristocrat", "Mystic Eyes - Mr. Cashman (10008111, NSW/ACT)", MACHINE_NOT_WORKING | MACHINE_NO_SOUND ) // 675, A- 09/05/01 diff --git a/src/mame/bmc/bmcpokr.cpp b/src/mame/bmc/bmcpokr.cpp index 511d059b754..84dd63d7022 100644 --- a/src/mame/bmc/bmcpokr.cpp +++ b/src/mame/bmc/bmcpokr.cpp @@ -17,6 +17,7 @@ TODO: * Hopper hookup doesn't work properly. MAME counts far more "tickets dispensed" than the number of coins/tickets the games are supposed to pay out. + * xyddzhh: Hook up mahjong-style inputs and improve DSW definitions ***************************************************************************/ @@ -60,13 +61,14 @@ public: int hopper_r(); - void bmcpokr(machine_config &config); - void fengyunh(machine_config &config); - void mjmaglmp(machine_config &config); - void shendeng(machine_config &config); + void bmcpokr(machine_config &config) ATTR_COLD; + void fengyunh(machine_config &config) ATTR_COLD; + void mjmaglmp(machine_config &config) ATTR_COLD; + void shendeng(machine_config &config) ATTR_COLD; + void xyddzhh(machine_config &config) ATTR_COLD; protected: - virtual void device_post_load() override; + virtual void device_post_load() override ATTR_COLD; virtual void machine_start() override ATTR_COLD; virtual void video_start() override ATTR_COLD; @@ -88,6 +90,7 @@ private: uint16_t bmcpokr_prot_r(); uint16_t fengyunh_prot_r(); uint16_t shendeng_prot_r(); + uint16_t xyddzhh_prot_r(); void prot_w(offs_t offset, uint16_t data, uint16_t mem_mask = ~0); uint16_t unk_r(); @@ -100,6 +103,7 @@ private: uint16_t dsw_r(); uint16_t mjmaglmp_dsw_r(); uint16_t mjmaglmp_key_r(); + uint16_t xyddzhh_dsw_r(); // Interrupts uint8_t m_irq_enable = 0; @@ -126,6 +130,7 @@ private: void mjmaglmp_map(address_map &map) ATTR_COLD; void ramdac_map(address_map &map) ATTR_COLD; void shendeng_map(address_map &map) ATTR_COLD; + void xyddzhh_map(address_map &map) ATTR_COLD; }; /*************************************************************************** @@ -352,6 +357,17 @@ uint16_t bmcpokr_state::shendeng_prot_r() return 0x00 << 8; } +uint16_t bmcpokr_state::xyddzhh_prot_r() +{ + switch (m_prot_val >> 8) + { + case 0x00: return 0x56 << 8; + // TODO: other cases, if they exist + } + logerror("unk prot r %x %x\n", m_prot_val, m_maincpu->pcbase()); + return 0x00 << 8; +} + void bmcpokr_state::prot_w(offs_t offset, uint16_t data, uint16_t mem_mask) { COMBINE_DATA(&m_prot_val); @@ -446,6 +462,27 @@ void bmcpokr_state::bmcpokr_mem(address_map &map) map(0x3b0000, 0x3b0001).portr("INPUTS2"); } +uint16_t bmcpokr_state::xyddzhh_dsw_r() +{ + switch ((m_mux >> 4) & 3) + { + case 0x00: return m_dsw[3]->read() << 8; + case 0x01: return m_dsw[2]->read() << 8; + case 0x02: return m_dsw[1]->read() << 8; + case 0x03: return m_dsw[0]->read() << 8; + } + return 0xff << 8; +} + +void bmcpokr_state::xyddzhh_map(address_map &map) +{ + bmcpokr_mem(map); + + map(0x330000, 0x330001).r(FUNC(bmcpokr_state::xyddzhh_prot_r)); + map(0x340009, 0x340009).lr8(NAME([] () -> uint8_t { return 0xff; })); // andi.b #$7f, so returning 0x00 stops it from working + map(0x360000, 0x360001).r(FUNC(bmcpokr_state::xyddzhh_dsw_r)); +} + uint16_t bmcpokr_state::mjmaglmp_dsw_r() { @@ -1090,6 +1127,136 @@ static INPUT_PORTS_START( shendeng ) // Coin Cash Out | Cash Out Coin INPUT_PORTS_END +static INPUT_PORTS_START( xyddzhh ) + PORT_START("INPUTS") + // Entertainment controls: + PORT_BIT( 0x0001, IP_ACTIVE_LOW, IPT_START1 ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0002, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0004, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0008, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0010, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0020, IP_ACTIVE_LOW, IPT_BUTTON1 ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // choose + PORT_BIT( 0x0040, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0080, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0100, IP_ACTIVE_LOW, IPT_OTHER ) PORT_NAME("Pay Out") PORT_CODE(KEYCODE_O) // PAY // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0200, IP_ACTIVE_HIGH,IPT_CUSTOM ) PORT_READ_LINE_MEMBER(FUNC(bmcpokr_state::hopper_r)) // TODO: verify? + PORT_SERVICE_NO_TOGGLE( 0x0400, IP_ACTIVE_LOW ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x0800, IP_ACTIVE_LOW, IPT_SERVICE1 ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x1000, IP_ACTIVE_LOW, IPT_UNUSED ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // no effect in test mode + PORT_BIT( 0x2000, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) + PORT_BIT( 0x4000, IP_ACTIVE_LOW, IPT_BUTTON2 ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) // pass + PORT_BIT( 0x8000, IP_ACTIVE_LOW, IPT_COIN1 ) // PORT_CONDITION("DSW2",0x01,EQUALS,0x00) PORT_IMPULSE(5) + + // TODO: Mahjong controls: + + PORT_START("INPUTS2") + PORT_BIT( 0xffff, IP_ACTIVE_LOW, IPT_UNUSED ) + + // Maximum Bet is fixed to 40 according to test mode (no DIP determines it) + PORT_START("DSW1") + PORT_DIPNAME( 0x01, 0x00, DEF_STR( Demo_Sounds ) ) PORT_DIPLOCATION("DIP1:1") + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPSETTING( 0x01, DEF_STR( No ) ) + PORT_DIPNAME( 0x02, 0x02, "Key Out Table as" ) PORT_DIPLOCATION("DIP1:2") + PORT_DIPSETTING( 0x00, "Coin" ) + PORT_DIPSETTING( 0x02, "Key In" ) + PORT_DIPNAME( 0x04, 0x04, "Coin Out" ) PORT_DIPLOCATION("DIP1:3") + PORT_DIPSETTING( 0x04, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x08, 0x08, "Alarm Sound Effect" ) PORT_DIPLOCATION("DIP1:4") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x08, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Automatic Pass" ) PORT_DIPLOCATION("DIP1:5") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0xe0, 0xe0, "Performance Breaking Table" ) PORT_DIPLOCATION("DIP1:6,7,8") + PORT_DIPSETTING( 0xc0, "5000" ) + PORT_DIPSETTING( 0xe0, "10000" ) + PORT_DIPSETTING( 0xa0, "15000" ) + PORT_DIPSETTING( 0x80, "20000" ) + PORT_DIPSETTING( 0x60, "25000" ) + PORT_DIPSETTING( 0x40, "30000" ) + PORT_DIPSETTING( 0x20, "40000" ) + PORT_DIPSETTING( 0x00, "50000" ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x01, 0x00, "Controls" ) PORT_DIPLOCATION("DIP2:1") + PORT_DIPSETTING( 0x01, "Mahjong" ) + PORT_DIPSETTING( 0x00, "Entertainment" ) + PORT_DIPNAME( 0x06, 0x06, "Play Expiration" ) PORT_DIPLOCATION("DIP2:2,3") + PORT_DIPSETTING( 0x06, "3000" ) + PORT_DIPSETTING( 0x04, "4000" ) + PORT_DIPSETTING( 0x02, "5000" ) + PORT_DIPSETTING( 0x01, "6000" ) + PORT_DIPNAME( 0x08, 0x08, "Accumulated Bonus" ) PORT_DIPLOCATION("DIP2:4") + PORT_DIPSETTING( 0x08, "300" ) + PORT_DIPSETTING( 0x00, "400" ) + PORT_DIPNAME( 0x70, 0x70, "Continuing Play Rate" ) PORT_DIPLOCATION("DIP2:5,6,7") + PORT_DIPSETTING( 0x60, "92" ) + PORT_DIPSETTING( 0x50, "93" ) + PORT_DIPSETTING( 0x40, "94" ) + PORT_DIPSETTING( 0x70, "95" ) + PORT_DIPSETTING( 0x30, "96" ) + PORT_DIPSETTING( 0x20, "97" ) + PORT_DIPSETTING( 0x10, "98" ) + PORT_DIPSETTING( 0x00, "99" ) + PORT_DIPNAME( 0x80, 0x80, "Continue Play" ) PORT_DIPLOCATION("DIP2:8") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x80, DEF_STR( On ) ) + + PORT_START("DSW3") + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage) ) PORT_DIPLOCATION("DIP3:1,2,3") + PORT_DIPSETTING( 0x06, "1" ) + PORT_DIPSETTING( 0x05, "2" ) + PORT_DIPSETTING( 0x04, "5" ) + PORT_DIPSETTING( 0x03, "10" ) + PORT_DIPSETTING( 0x02, "15" ) + PORT_DIPSETTING( 0x01, "50" ) + PORT_DIPSETTING( 0x07, "100" ) + PORT_DIPSETTING( 0x00, "200" ) + PORT_DIPNAME( 0x38, 0x38, "Key In" ) PORT_DIPLOCATION("DIP3:4,5,6") + PORT_DIPSETTING( 0x30, "40" ) + PORT_DIPSETTING( 0x28, "50" ) + PORT_DIPSETTING( 0x38, "100" ) + PORT_DIPSETTING( 0x20, "200" ) + PORT_DIPSETTING( 0x18, "300" ) + PORT_DIPSETTING( 0x10, "500" ) + PORT_DIPSETTING( 0x08, "1000" ) + PORT_DIPSETTING( 0x00, "2000" ) + PORT_DIPNAME( 0x40, 0x40, "Points Limit" ) PORT_DIPLOCATION("DIP3:7") + PORT_DIPSETTING( 0x00, "10000" ) + PORT_DIPSETTING( 0x40, "99000" ) + PORT_DIPNAME( 0x80, 0x80, "Card Type" ) PORT_DIPLOCATION("DIP3:8") + PORT_DIPSETTING( 0x80, DEF_STR ( Normal ) ) + PORT_DIPSETTING( 0x00, "Graphics" ) + + PORT_START("DSW4") + PORT_DIPNAME( 0x07, 0x07, "Min Bet" ) PORT_DIPLOCATION("DIP4:1,2,3") + PORT_DIPSETTING( 0x06, "1" ) + PORT_DIPSETTING( 0x05, "2" ) + PORT_DIPSETTING( 0x04, "3" ) + PORT_DIPSETTING( 0x07, "5" ) + PORT_DIPSETTING( 0x03, "10" ) + PORT_DIPSETTING( 0x02, "15" ) + PORT_DIPSETTING( 0x01, "20" ) + PORT_DIPSETTING( 0x00, "40" ) + PORT_DIPNAME( 0x38, 0x38, "Game Odds" ) PORT_DIPLOCATION("DIP4:4,5,6") + PORT_DIPSETTING( 0x30, "90" ) + PORT_DIPSETTING( 0x28, "91" ) + PORT_DIPSETTING( 0x20, "92" ) + PORT_DIPSETTING( 0x18, "93" ) + PORT_DIPSETTING( 0x38, "94" ) + PORT_DIPSETTING( 0x10, "95" ) + PORT_DIPSETTING( 0x08, "96" ) + PORT_DIPSETTING( 0x00, "97" ) + PORT_DIPNAME( 0x40, 0x40, "Market Setting" ) PORT_DIPLOCATION("DIP4:7") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x40, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "System Breakdown" ) PORT_DIPLOCATION("DIP4:8") + PORT_DIPSETTING( 0x00, "50000" ) + PORT_DIPSETTING( 0x80, "100000" ) +INPUT_PORTS_END + /*************************************************************************** Graphics Layout @@ -1189,6 +1356,12 @@ void bmcpokr_state::shendeng(machine_config &config) m_maincpu->set_addrmap(AS_PROGRAM, &bmcpokr_state::shendeng_map); } +void bmcpokr_state::xyddzhh(machine_config &config) +{ + bmcpokr(config); + m_maincpu->set_addrmap(AS_PROGRAM, &bmcpokr_state::xyddzhh_map); +} + /*************************************************************************** ROMs Loading ***************************************************************************/ @@ -1386,6 +1559,27 @@ ROM_START( bmcpokr ) ROM_LOAD( "ch-m-701.u10", 0x00000, 0x40000, CRC(e01be644) SHA1(b68682786d5b40cb5672cfd7f717adcfb8fac7d3) ) ROM_END +/* +幸运斗地主 (Xìngyùn Dòu Dìzhǔ - Lucky Dou Dizhu), Herb Home, 2006 +PCB Number: BMC-A81210 +PCB is identical to BMC-A81212 (documented) +*/ + +ROM_START( xyddzhh ) + ROM_REGION( 0x40000, "maincpu", 0 ) // 68000 Code + ROM_LOAD16_BYTE( "c1-a-601.u13", 0x000000, 0x20000, CRC(7f06ba9f) SHA1(747110ebc674867f858348d41f3e5b8b8167a816) ) + ROM_LOAD16_BYTE( "c1-a-501.u12", 0x000001, 0x20000, CRC(1522fe48) SHA1(7636c00f8735ec031b0218a2ed348c7d4fa3f66d) ) + + ROM_REGION( 0x200000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "c4-a-101.u39", 0x000000, 0x80000, CRC(28e945b6) SHA1(cee74fa35234d7b2d19ca4354b17a4223f28a153) ) + ROM_LOAD16_BYTE( "c4-a-201.u40", 0x000001, 0x80000, CRC(b2730f93) SHA1(f002cf6e632ce46ce3a5a2293748dfc2f5b47563) ) + ROM_LOAD16_BYTE( "c4-a-301.u45", 0x100000, 0x80000, CRC(02dd38d5) SHA1(bc563b6f556c790667efef6e6af09fb76cae50e6) ) + ROM_LOAD16_BYTE( "c4-a-401.u29", 0x100001, 0x80000, CRC(24c2f883) SHA1(275fb3d47447d524994ca5ee26be8c8a2b69608c) ) + + ROM_REGION( 0x80000, "oki", 0 ) // Samples + ROM_LOAD( "c4-a-701.u10", 0x00000, 0x80000, CRC(f22dacfe) SHA1(0a085419b04a6eba0d30064fae4678e1523e4e15) ) +ROM_END + /*************************************************************************** Mahou no Lamp (BMC, 2000) @@ -1442,7 +1636,8 @@ ROM_END } // anonymous namespace -GAME( 1998, fengyunh, 0, fengyunh, fengyunh, bmcpokr_state, empty_init, ROT0, "BMC", "Fengyun Hui", MACHINE_SUPPORTS_SAVE ) -GAME( 1998, shendeng, mjmaglmp, shendeng, shendeng, bmcpokr_state, empty_init, ROT0, "BMC", "Pili Shen Deng", MACHINE_SUPPORTS_SAVE ) -GAME( 1999, bmcpokr, 0, bmcpokr, bmcpokr, bmcpokr_state, empty_init, ROT0, "BMC", "Dongfang Shenlong", MACHINE_SUPPORTS_SAVE ) -GAME( 2000, mjmaglmp, 0, mjmaglmp, mjmaglmp, bmcpokr_state, empty_init, ROT0, "BMC", "Mahou no Lamp (v. JAA02)", MACHINE_SUPPORTS_SAVE ) +GAME( 1998, fengyunh, 0, fengyunh, fengyunh, bmcpokr_state, empty_init, ROT0, "BMC", "Fengyun Hui", MACHINE_SUPPORTS_SAVE ) +GAME( 1998, shendeng, mjmaglmp, shendeng, shendeng, bmcpokr_state, empty_init, ROT0, "BMC", "Pili Shen Deng", MACHINE_SUPPORTS_SAVE ) +GAME( 1999, bmcpokr, 0, bmcpokr, bmcpokr, bmcpokr_state, empty_init, ROT0, "BMC", "Dongfang Shenlong", MACHINE_SUPPORTS_SAVE ) +GAME( 2000, mjmaglmp, 0, mjmaglmp, mjmaglmp, bmcpokr_state, empty_init, ROT0, "BMC", "Mahou no Lamp (v. JAA02)", MACHINE_SUPPORTS_SAVE ) +GAME( 2006, xyddzhh, 0, xyddzhh, xyddzhh, bmcpokr_state, empty_init, ROT0, "Herb Home", "Xingyun Dou Dizhu", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/bmc/popobear.cpp b/src/mame/bmc/popobear.cpp index 1d29d2fdc2c..b69cee41ac1 100644 --- a/src/mame/bmc/popobear.cpp +++ b/src/mame/bmc/popobear.cpp @@ -17,31 +17,55 @@ TODO: =================================================================================================== -Popo Bear - BMC-A00211 -(c) 2000 - Bao Ma Technology Co., LTD - -|-----------------------------------------| -| DIP2 DIP4 UM3567(YM2413) |J -| DIP1 DIP3 |A -| TA-A-901 |M -| EN-A-701 EN-A-801 U6295(OKI) |M -| EN-A-501 EN-A-601 |A -| EN-A-301 EN-A-401 | -| |C -| AIA90610 |O -| BMC-68pin AIA90423 |N -| plcc (68k) BMC-160pin |N -| |E -| OSC |C -| 42.000 |T -|-----------------------------------------| - -1 - BMC AIA90423 - 160-Pin ASIC, FPGA, Video? -1 - BMC AIA90610 - 68 Pin CPU (Likely 16 MHz, 68-lead plastic LCC 68000) -1 - UM3567 (YM2413) Sound -1 - U6295 (OKI6295) Sound -1 - 42.000MHz XTAL -4 - 8 Position DIP switches +Qi Wang (2010, Herb Home). English title is 'Chess King' +Popo Bear (2000, Bao Ma Technology Co., LTD) +Hardware Info by Guru +--------------------- + +BMC-A00211 +|---------------------------------------------| +| 42MHz TR5116258 241024 241024 T518 556 SC | +| TR5116258 241024 241024 SW | +| U10 | +| |--------| |-------| 6264 6264 | +| | BMC | | BMC | | +| |AIA90423| |AIA90610 | +|J | | | | 2 1 | +|A | | |-------| | +|M |--------| MJ-04.U4 A-3.U3 | +|M PLCC44 | +|A MJ-68.U6 MJ-57.U5 | +| | +| 8 7 | +| ULN2003 | +| MJ-09.U9 DIP3 DIP1| +| 7805 6295 | +| TDA2003 VOL LM324 UM3567 DIP4 DIP2| +|---------------------------------------------| +Notes: + AIA90610 - Rebadged 68000 CPU. Clock 10.500MHz [42/4] + AIA90423 - BMC Custom Graphics Chip + UM3567 - Yamaha YM2413-compatible Sound Chip. Clock 3.500MHz [42/12] + 6295 - Oki M6295 ADPCM Sample Player. Clock 1.000MHz [42/42]. Pin 7 HIGH. + TR5116258 - 256kB x16-bit DRAM, equivalent to HM514260 \ + 241024 - Winbond W241024 128kB x8-bit SRAM / connected to graphics chip + 6264 - 8kB x8-bit SRAM (68000 RAM). Both RAMs are tied to the Super Cap. + PLCC44 - 44 pin CPLD (surface scratched) + 1,2,7,8 - Empty Sockets + T518 - Mitsumi PST518A Master Reset IC + 556 - NE556 Dual Timer + SC - 5.5V 0.1F Super Capacitor + SW - Reset Switch / NVRAM Memory Clear + U10 - Unpopulated position for a 32Mbit/64Mbit TSOP48 Flash ROM (jumper-selectable) + ROMs - U5/U6 are 27C801 EPROM, other ROMs are 27C010. + ROM U5 is unique to this set (only ROM fill change), other ROMs match existing qiwang dump. + DIP1-4 - 8-position DIP Switch + TDA2003 - ST TDA2003 10W Audio Amplifier + LM324 - LM324 Quad Op-Amp + 7805 - LM7805 5V Linear Regulator + ULN2003 - 7-Channel Darlington Transistor Array + V-Sync 59.6377Hz + H-Sync 15.6248kHz JAMMA CONNECTOR Component Side A B Solder Side @@ -594,12 +618,12 @@ TIMER_DEVICE_CALLBACK_MEMBER(popobear_state::scanline_cb) void popobear_state::popobear(machine_config &config) { - M68000(config, m_maincpu, XTAL(42'000'000) / 4); // divisor guessed + M68000(config, m_maincpu, 42_MHz_XTAL / 4); m_maincpu->set_addrmap(AS_PROGRAM, &popobear_state::main_map); TIMER(config, "scantimer").configure_scanline(FUNC(popobear_state::scanline_cb), "screen", 0, 1); SCREEN(config, m_screen, SCREEN_TYPE_RASTER); - m_screen->set_refresh_hz(60); + m_screen->set_refresh_hz(59.64); m_screen->set_vblank_time(ATTOSECONDS_IN_USEC(2500)); // not accurate m_screen->set_screen_update(FUNC(popobear_state::screen_update)); m_screen->set_palette(m_palette); @@ -612,9 +636,9 @@ void popobear_state::popobear(machine_config &config) GFXDECODE(config, m_gfxdecode, m_palette, gfx_popobear); - YM2413(config, "ymsnd", XTAL(42'000'000) / 16).add_route(ALL_OUTPUTS, "mono", 1.0); // divisor guessed + YM2413(config, "ymsnd", 42_MHz_XTAL / 12).add_route(ALL_OUTPUTS, "mono", 1.0); - OKIM6295(config, "oki", XTAL(42'000'000) / 32, okim6295_device::PIN7_LOW).add_route(ALL_OUTPUTS, "mono", 1.0); // divisor guessed + OKIM6295(config, "oki", 42_MHz_XTAL / 42, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); } void popobear_state::qiwang(machine_config &config) @@ -626,14 +650,14 @@ void popobear_state::qiwang(machine_config &config) ROM_START( popobear ) ROM_REGION( 0x040000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "popobear_en-a-301_1.6.u3", 0x000001, 0x020000, CRC(b934adf6) SHA1(93431c7a19af812b549aad35cc1176a81805ffab) ) ROM_LOAD16_BYTE( "popobear_en-a-401_1.6.u4", 0x000000, 0x020000, CRC(0568af9c) SHA1(920531dbc4bbde2d1db062bd5c48b97dd50b7185) ) + ROM_LOAD16_BYTE( "popobear_en-a-301_1.6.u3", 0x000001, 0x020000, CRC(b934adf6) SHA1(93431c7a19af812b549aad35cc1176a81805ffab) ) ROM_REGION16_BE( 0x400000, "gfx_data", 0 ) - ROM_LOAD16_BYTE( "popobear_en-a-501.u5", 0x000001, 0x100000, CRC(185901a9) SHA1(7ff82b5751645df53435eaa66edce589684cc5c7) ) ROM_LOAD16_BYTE( "popobear_en-a-601.u6", 0x000000, 0x100000, CRC(84fa9f3f) SHA1(34dd7873f88b0dae5fb81fe84e82d2b6b49f7332) ) - ROM_LOAD16_BYTE( "popobear_en-a-701.u7", 0x200001, 0x100000, CRC(45eba6d0) SHA1(0278602ed57ac45040619d590e6cc85e2cfeed31) ) + ROM_LOAD16_BYTE( "popobear_en-a-501.u5", 0x000001, 0x100000, CRC(185901a9) SHA1(7ff82b5751645df53435eaa66edce589684cc5c7) ) ROM_LOAD16_BYTE( "popobear_en-a-801.u8", 0x200000, 0x100000, CRC(2760f2e6) SHA1(58af59f486c9df930f7c124f89154f8f389a5bd7) ) + ROM_LOAD16_BYTE( "popobear_en-a-701.u7", 0x200001, 0x100000, CRC(45eba6d0) SHA1(0278602ed57ac45040619d590e6cc85e2cfeed31) ) ROM_REGION( 0x040000, "oki", 0 ) ROM_LOAD( "popobear_ta-a-901.u9", 0x00000, 0x40000, CRC(f1e94926) SHA1(f4d6f5b5811d90d0069f6efbb44d725ff0d07e1c) ) @@ -643,13 +667,13 @@ ROM_END // All labels have 棋王 prepended to what's below, with the exception of mj-57 which has a sticker 'BMC 棋王' on the upper part of the label ROM_START( qiwang ) ROM_REGION( 0x040000, "maincpu", 0 ) - ROM_LOAD16_BYTE( "mj-03.u3", 0x000001, 0x020000, CRC(3cf3ff12) SHA1(dd4347b44a45822e7bfddffb0afadd65d398bea6) ) ROM_LOAD16_BYTE( "mj-04.u4", 0x000000, 0x020000, CRC(03a0d290) SHA1(d8fb1e6780d31ebf8cdc6ae14301d1f8c25380c6) ) + ROM_LOAD16_BYTE( "mj-03.u3", 0x000001, 0x020000, CRC(3cf3ff12) SHA1(dd4347b44a45822e7bfddffb0afadd65d398bea6) ) // u1 and u2 not populated ROM_REGION16_BE( 0x400000, "gfx_data", ROMREGION_ERASE00 ) - ROM_LOAD16_BYTE( "mj-57.u5", 0x000001, 0x100000, CRC(50871b0c) SHA1(01279d844cae699eb76a90b8c4b3915ae538c12e) ) ROM_LOAD16_BYTE( "mj-68.u6", 0x000000, 0x100000, CRC(9692bb92) SHA1(6282054a41eda1b1fc1de5096bc2440a386d9f99) ) + ROM_LOAD16_BYTE( "mj-57.u5", 0x000001, 0x100000, CRC(d442e579) SHA1(86d840ce9cd2623f13658f75336847f5df306531) ) // u7 and u8 not populated ROM_REGION( 0x040000, "oki", 0 ) diff --git a/src/mame/bordun/att.cpp b/src/mame/bordun/att.cpp new file mode 100644 index 00000000000..1b4f01d9638 --- /dev/null +++ b/src/mame/bordun/att.cpp @@ -0,0 +1,666 @@ +// license:BSD-3-Clause +// copyright-holders: + +/* +Bordun poker games on ATT / ATT III PCBs + + +TODO: +* this is basically misc/skylncr.cpp without reels and PPIs and with more advanced sound. Merge? +* outputs +* lianhp3: title screen says 2003TM but PCB is from 2010? Was this really released in 2003? +* NVRAM at 0x8000-0x8777 +*/ + + +#include "emu.h" + +#include "cpu/z80/z80.h" +#include "machine/gen_latch.h" +#include "machine/nvram.h" +#include "sound/okim6295.h" +#include "sound/ymopl.h" +#include "video/ramdac.h" + +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + + +namespace { + +class att_state : public driver_device +{ +public: + att_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_videoram(*this, "videoram"), + m_colorram(*this, "colorram") + { } + + void att(machine_config &config) ATTR_COLD; + void att3(machine_config &config) ATTR_COLD; + +protected: + virtual void video_start() override ATTR_COLD; + +private: + required_device m_maincpu; + required_device m_gfxdecode; + + required_shared_ptr m_videoram; + required_shared_ptr m_colorram; + + tilemap_t *m_tilemap = nullptr; + + void videoram_w(offs_t offset, uint8_t data); + void colorram_w(offs_t offset, uint8_t data); + TILE_GET_INFO_MEMBER(get_tile_info); + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + + void program_map(address_map &map) ATTR_COLD; + void att_io_map(address_map &map) ATTR_COLD; + void att3_io_map(address_map &map) ATTR_COLD; + void att_audio_program_map(address_map &map) ATTR_COLD; + void att_audio_io_map(address_map &map) ATTR_COLD; + void ramdac_map(address_map &map) ATTR_COLD; +}; + + +void att_state::videoram_w(offs_t offset, uint8_t data) +{ + m_videoram[offset] = data; + m_tilemap->mark_tile_dirty(offset); +} + +void att_state::colorram_w(offs_t offset, uint8_t data) +{ + m_colorram[offset] = data; + m_tilemap->mark_tile_dirty(offset); +} + + +TILE_GET_INFO_MEMBER(att_state::get_tile_info) +{ + uint16_t const code = m_videoram[tile_index] + (m_colorram[tile_index] << 8); + int const pal = (code & 0x8000) >> 15; + tileinfo.set(0, code, pal ^ 1, TILE_FLIPYX( 0 )); +} + +uint32_t att_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(rgb_t::black(), cliprect); + + m_tilemap->draw(screen, bitmap, cliprect, 0, 0); + + return 0; +} + +void att_state::video_start() +{ + m_tilemap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(att_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 64, 32); +} + + +void att_state::program_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0x87ff).ram().share("nvram"); + map(0x8800, 0x8fff).ram().w(FUNC(att_state::videoram_w)).share(m_videoram); + map(0x9000, 0x97ff).ram().w(FUNC(att_state::colorram_w)).share(m_colorram); +} + +void att_state::att_io_map(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + + map(0x00, 0x00).portr("IN0"); + map(0x01, 0x01).portr("IN1"); + map(0x02, 0x02).portr("DSW3"); + map(0x03, 0x03).portr("DSW2"); + map(0x10, 0x10).portr("DSW4"); + map(0x11, 0x11).portr("IN2"); + map(0x12, 0x12).portr("DSW1"); + // map(0x20, 0x20) // TODO: coin counter / outputs? + map(0x40, 0x40).w("ramdac", FUNC(ramdac_device::index_w)); + map(0x41, 0x41).w("ramdac", FUNC(ramdac_device::pal_w)); + map(0x42, 0x42).w("ramdac", FUNC(ramdac_device::mask_w)); + map(0x70, 0x70).nopw(); // TODO: NMI clear? NOPed for now as it spams the log + map(0xd0, 0xd0).w("soundlatch", FUNC(generic_latch_8_device::write)); +} + +void att_state::att3_io_map(address_map &map) +{ + map.global_mask(0xff); + map.unmap_value_high(); + + map(0x00, 0x00).portr("IN0"); + map(0x01, 0x01).portr("IN1"); + map(0x02, 0x02).portr("DSW3"); + map(0x03, 0x03).portr("DSW2"); + map(0x10, 0x10).portr("DSW4"); + map(0x11, 0x11).portr("IN2"); + map(0x12, 0x12).portr("DSW1"); + // map(0x20, 0x20) // TODO: coin counter / outputs? + map(0x40, 0x40).w("ramdac", FUNC(ramdac_device::index_w)); + map(0x41, 0x41).w("ramdac", FUNC(ramdac_device::pal_w)); + map(0x42, 0x42).w("ramdac", FUNC(ramdac_device::mask_w)); + map(0x70, 0x70).nopw(); // TODO: NMI clear? NOPed for now as it spams the log + // map(0xf6, 0xf6).w // TODO: Oki bank select? + map(0xf7, 0xf7).rw("oki", FUNC(okim6295_device::read), FUNC(okim6295_device::write)); +} + +void att_state::att_audio_program_map(address_map &map) +{ + map(0x0000, 0x3fff).rom(); + map(0x4000, 0x41ff).ram(); + map(0xf800, 0xffff).ram(); +} + +void att_state::att_audio_io_map(address_map &map) +{ + // TODO: lots of reads / writes + map.global_mask(0xff); + + map(0x84, 0x84).r("soundlatch", FUNC(generic_latch_8_device::read)); + map(0x90, 0x91).w("ym2413", FUNC(ym2413_device::write)); +} + + +void att_state::ramdac_map(address_map &map) +{ + map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); +} + + +static INPUT_PORTS_START( lianhp2 ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) + PORT_BIT( 0x40, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // active high or it stops after RAM check + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) + + PORT_START("IN1") + PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_LOW ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(4) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(4) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(4) + + // SW1 on PCB is the reset button and SW2-5 are the DIP switches + // test mode shows SW1-4 for the DIPs + // thus to avoid user confusion let's follow the test mode + + PORT_START("DSW1") + PORT_DIPNAME( 0x03, 0x03, "Max Bet" ) PORT_DIPLOCATION("SW1:8,7") // hard-coded to 100? + PORT_DIPSETTING( 0x03, "100" ) + PORT_DIPSETTING( 0x02, "100 (duplicate)" ) + PORT_DIPSETTING( 0x01, "100 (duplicate)" ) + PORT_DIPSETTING( 0x00, "100 (duplicate)" ) + PORT_DIPNAME( 0x04, 0x04, "Clear Point As" ) PORT_DIPLOCATION("SW1:6") + PORT_DIPSETTING( 0x04, "Create Point" ) + PORT_DIPSETTING( 0x00, "Coin" ) + PORT_DIPNAME( 0x08, 0x08, "Bonus Rate" ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING( 0x00, "32" ) + PORT_DIPSETTING( 0x08, "48" ) + PORT_DIPNAME( 0x10, 0x10, "Straight Double Up" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Double Up" ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Card Type" ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x40, "Poker" ) + PORT_DIPSETTING( 0x00, "Animals" ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1") // not shown in test mode + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x03, 0x03, "Begin Bonus" ) PORT_DIPLOCATION("SW2:8,7") + PORT_DIPSETTING( 0x03, "2000" ) + PORT_DIPSETTING( 0x02, "4000" ) + PORT_DIPSETTING( 0x01, "6000" ) + PORT_DIPSETTING( 0x00, "8000" ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6") // not shown in test mode + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5") // not shown in test mode + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4") // not shown in test mode + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:3,2,1") + PORT_DIPSETTING( 0xe0, "1" ) + PORT_DIPSETTING( 0xc0, "5" ) + PORT_DIPSETTING( 0xa0, "10" ) + PORT_DIPSETTING( 0x80, "25" ) + PORT_DIPSETTING( 0x60, "50" ) + PORT_DIPSETTING( 0x40, "100" ) + PORT_DIPSETTING( 0x20, "250" ) + PORT_DIPSETTING( 0x00, "500" ) + + PORT_START("DSW3") + PORT_DIPNAME( 0x03, 0x03, "Min Bet" ) PORT_DIPLOCATION("SW3:8,7") + PORT_DIPSETTING( 0x03, "1" ) + PORT_DIPSETTING( 0x02, "2" ) + PORT_DIPSETTING( 0x01, "4" ) + PORT_DIPSETTING( 0x00, "10" ) + PORT_DIPNAME( 0x1c, 0x1c, "Double Up Rate" ) PORT_DIPLOCATION("SW3:6,5,4") + PORT_DIPSETTING( 0x00, "86" ) + PORT_DIPSETTING( 0x04, "87" ) + PORT_DIPSETTING( 0x08, "88" ) + PORT_DIPSETTING( 0x0c, "89" ) + PORT_DIPSETTING( 0x10, "90" ) + PORT_DIPSETTING( 0x14, "91" ) + PORT_DIPSETTING( 0x18, "92" ) + PORT_DIPSETTING( 0x1c, "93" ) + PORT_DIPNAME( 0xe0, 0xe0, "Play Rate" ) PORT_DIPLOCATION("SW3:3,2,1") // hard-coded to 100? + PORT_DIPSETTING( 0xe0, "100" ) + PORT_DIPSETTING( 0xc0, "100 (duplicate)" ) + PORT_DIPSETTING( 0xa0, "100 (duplicate)" ) + PORT_DIPSETTING( 0x80, "100 (duplicate)" ) + PORT_DIPSETTING( 0x60, "100 (duplicate)" ) + PORT_DIPSETTING( 0x40, "100 (duplicate)" ) + PORT_DIPSETTING( 0x20, "100 (duplicate)" ) + PORT_DIPSETTING( 0x00, "100 (duplicate)" ) + + PORT_START("DSW4") + PORT_DIPNAME( 0x03, 0x03, "4 K Rate" ) PORT_DIPLOCATION("SW4:8,7") + PORT_DIPSETTING( 0x00, "70 (duplicate)" ) + PORT_DIPSETTING( 0x01, "70" ) + PORT_DIPSETTING( 0x02, "80" ) + PORT_DIPSETTING( 0x03, "90" ) + PORT_DIPNAME( 0x0c, 0x0c, "S F Rate" ) PORT_DIPLOCATION("SW4:6,5") + PORT_DIPSETTING( 0x00, "70 (duplicate)" ) + PORT_DIPSETTING( 0x04, "70" ) + PORT_DIPSETTING( 0x08, "80" ) + PORT_DIPSETTING( 0x0c, "90" ) + PORT_DIPNAME( 0x30, 0x30, "R S Rate" ) PORT_DIPLOCATION("SW4:4,3") + PORT_DIPSETTING( 0x00, "70 (duplicate)" ) + PORT_DIPSETTING( 0x10, "70" ) + PORT_DIPSETTING( 0x20, "80" ) + PORT_DIPSETTING( 0x30, "90" ) + PORT_DIPNAME( 0xc0, 0xc0, "5 K Rate" ) PORT_DIPLOCATION("SW4:2,1") + PORT_DIPSETTING( 0x00, "70 (duplicate)" ) + PORT_DIPSETTING( 0x40, "70" ) + PORT_DIPSETTING( 0x80, "80" ) + PORT_DIPSETTING( 0xc0, "90" ) +INPUT_PORTS_END + +static INPUT_PORTS_START( lianhp3 ) + PORT_START("IN0") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD1 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_DEAL ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_HOLD2 ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_POKER_HOLD3 ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_POKER_HOLD4 ) + + PORT_START("IN1") + PORT_SERVICE_NO_TOGGLE( 0x01, IP_ACTIVE_LOW ) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_POKER_HOLD5 ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_POKER_CANCEL ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) + + PORT_START("IN2") + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON2 ) PORT_PLAYER(4) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_GAMBLE_LOW ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_BUTTON3 ) PORT_PLAYER(4) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_BUTTON4 ) PORT_PLAYER(4) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_BUTTON5 ) PORT_PLAYER(4) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_BUTTON6 ) PORT_PLAYER(4) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON7 ) PORT_PLAYER(4) + + // SW1 on PCB is the reset button and SW2-5 are the DIP switches + // test mode shows SW1-4 for the DIPs + // thus to avoid user confusion let's follow the test mode + + PORT_START("DSW1") + PORT_DIPNAME( 0x03, 0x03, "Max Bet" ) PORT_DIPLOCATION("SW1:8,7") + PORT_DIPSETTING( 0x03, "100" ) + PORT_DIPSETTING( 0x02, "500" ) + PORT_DIPSETTING( 0x01, "1000" ) + PORT_DIPSETTING( 0x00, "1500" ) + PORT_DIPNAME( 0x04, 0x04, "Clear Point As" ) PORT_DIPLOCATION("SW1:6") + PORT_DIPSETTING( 0x04, "Coin" ) + PORT_DIPSETTING( 0x00, "Create Point" ) + PORT_DIPNAME( 0x08, 0x08, "Bonus Rate" ) PORT_DIPLOCATION("SW1:5") + PORT_DIPSETTING( 0x00, "32" ) + PORT_DIPSETTING( 0x08, "48" ) + PORT_DIPNAME( 0x10, 0x10, "Straight Double Up" ) PORT_DIPLOCATION("SW1:4") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x10, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Double Up" ) PORT_DIPLOCATION("SW1:3") + PORT_DIPSETTING( 0x00, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x20, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, "Card Type" ) PORT_DIPLOCATION("SW1:2") + PORT_DIPSETTING( 0x40, "Poker" ) + PORT_DIPSETTING( 0x00, "Animals" ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW1:1") // not shown in test mode + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW2") + PORT_DIPNAME( 0x03, 0x03, "Begin Bonus" ) PORT_DIPLOCATION("SW2:8,7") + PORT_DIPSETTING( 0x03, "2000" ) + PORT_DIPSETTING( 0x02, "4000" ) + PORT_DIPSETTING( 0x01, "6000" ) + PORT_DIPSETTING( 0x00, "8000" ) + PORT_DIPNAME( 0x04, 0x04, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:6") // not shown in test mode + PORT_DIPSETTING( 0x04, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:5") // not shown in test mode + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) PORT_DIPLOCATION("SW2:4") // not shown in test mode + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xe0, 0xe0, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW2:3,2,1") + PORT_DIPSETTING( 0xe0, "10" ) + PORT_DIPSETTING( 0xc0, "50" ) + PORT_DIPSETTING( 0xa0, "100" ) + PORT_DIPSETTING( 0x80, "250" ) + PORT_DIPSETTING( 0x60, "500" ) + PORT_DIPSETTING( 0x40, "1000" ) + PORT_DIPSETTING( 0x20, "2500" ) + PORT_DIPSETTING( 0x00, "5000" ) + + PORT_START("DSW3") + PORT_DIPNAME( 0x03, 0x03, "Min Bet" ) PORT_DIPLOCATION("SW3:8,7") + PORT_DIPSETTING( 0x03, "10" ) + PORT_DIPSETTING( 0x02, "20" ) + PORT_DIPSETTING( 0x01, "40" ) + PORT_DIPSETTING( 0x00, "50" ) + PORT_DIPNAME( 0x1c, 0x1c, "Double Up Rate" ) PORT_DIPLOCATION("SW3:6,5,4") + PORT_DIPSETTING( 0x00, "86" ) + PORT_DIPSETTING( 0x04, "87" ) + PORT_DIPSETTING( 0x08, "88" ) + PORT_DIPSETTING( 0x0c, "89" ) + PORT_DIPSETTING( 0x10, "90" ) + PORT_DIPSETTING( 0x14, "91" ) + PORT_DIPSETTING( 0x18, "92" ) + PORT_DIPSETTING( 0x1c, "93" ) + PORT_DIPNAME( 0xe0, 0xe0, "Play Rate" ) PORT_DIPLOCATION("SW3:3,2,1") + PORT_DIPSETTING( 0xe0, "0" ) + PORT_DIPSETTING( 0xc0, "1" ) + PORT_DIPSETTING( 0xa0, "10" ) + PORT_DIPSETTING( 0x80, "11" ) + PORT_DIPSETTING( 0x60, "100" ) + PORT_DIPSETTING( 0x40, "101" ) + PORT_DIPSETTING( 0x20, "110" ) + PORT_DIPSETTING( 0x00, "111" ) + + PORT_START("DSW4") + PORT_DIPNAME( 0x03, 0x03, "4 K Rate" ) PORT_DIPLOCATION("SW4:8,7") + PORT_DIPSETTING( 0x00, "70 (duplicate)" ) + PORT_DIPSETTING( 0x01, "70" ) + PORT_DIPSETTING( 0x02, "80" ) + PORT_DIPSETTING( 0x03, "90" ) + PORT_DIPNAME( 0x0c, 0x0c, "S F Rate" ) PORT_DIPLOCATION("SW4:6,5") + PORT_DIPSETTING( 0x00, "70 (duplicate)" ) + PORT_DIPSETTING( 0x04, "70" ) + PORT_DIPSETTING( 0x08, "80" ) + PORT_DIPSETTING( 0x0c, "90" ) + PORT_DIPNAME( 0x30, 0x30, "R S Rate" ) PORT_DIPLOCATION("SW4:4,3") + PORT_DIPSETTING( 0x00, "70 (duplicate)" ) + PORT_DIPSETTING( 0x10, "70" ) + PORT_DIPSETTING( 0x20, "80" ) + PORT_DIPSETTING( 0x30, "90" ) + PORT_DIPNAME( 0xc0, 0xc0, "5 K Rate" ) PORT_DIPLOCATION("SW4:2,1") + PORT_DIPSETTING( 0x00, "70 (duplicate)" ) + PORT_DIPSETTING( 0x40, "70" ) + PORT_DIPSETTING( 0x80, "80" ) + PORT_DIPSETTING( 0xc0, "90" ) +INPUT_PORTS_END + + +static const gfx_layout layout8x8x8 = +{ + 8,8, + RGN_FRAC(1,2), + 8, + { STEP8(0,1) }, + { + 8*0,8*1, + RGN_FRAC(1,2)+8*0,RGN_FRAC(1,2)+8*1, + 8*2,8*3, + RGN_FRAC(1,2)+8*2,RGN_FRAC(1,2)+8*3 + }, + { STEP8(0,8*4) }, + 8*8*4 +}; + + +static GFXDECODE_START( gfx_att ) + GFXDECODE_ENTRY( "tiles", 0, layout8x8x8, 0, 1 ) +GFXDECODE_END + +static GFXDECODE_START( gfx_att3 ) + GFXDECODE_ENTRY( "tiles", 0, gfx_8x8x8_raw, 0, 1 ) +GFXDECODE_END + + +void att_state::att(machine_config &config) +{ + Z80(config, m_maincpu, 12_MHz_XTAL / 4); + m_maincpu->set_addrmap(AS_PROGRAM, &att_state::program_map); + m_maincpu->set_addrmap(AS_IO, &att_state::att_io_map); + m_maincpu->set_vblank_int("screen", FUNC(att_state::nmi_line_pulse)); + + z80_device &audiocpu(Z80(config, "audiocpu", 12_MHz_XTAL / 4)); + audiocpu.set_addrmap(AS_PROGRAM, &att_state::att_audio_program_map); + audiocpu.set_addrmap(AS_IO, &att_state::att_audio_io_map); + audiocpu.set_periodic_int(FUNC(att_state::irq0_line_hold), attotime::from_hz(4 * 60)); // TODO: find IRQ source + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + 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(0, 512-1, 0, 256-1); + screen.set_screen_update(FUNC(att_state::screen_update)); + + GFXDECODE(config, "gfxdecode", "palette", gfx_att); + + PALETTE(config, "palette").set_entries(0x100); + + ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, "palette")); + ramdac.set_addrmap(0, &att_state::ramdac_map); + + GENERIC_LATCH_8(config, "soundlatch").data_pending_callback().set_inputline("audiocpu", INPUT_LINE_NMI); + + SPEAKER(config, "mono").front_center(); + + YM2413(config, "ym2413", 3.579545_MHz_XTAL).add_route(ALL_OUTPUTS, "mono", 1.0); +} + +void att_state::att3(machine_config &config) +{ + Z80(config, m_maincpu, 12_MHz_XTAL / 2); + m_maincpu->set_addrmap(AS_PROGRAM, &att_state::program_map); + m_maincpu->set_addrmap(AS_IO, &att_state::att3_io_map); + m_maincpu->set_vblank_int("screen", FUNC(att_state::nmi_line_pulse)); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + 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(0, 512-1, 0, 256-1); + screen.set_screen_update(FUNC(att_state::screen_update)); + + GFXDECODE(config, "gfxdecode", "palette", gfx_att3); + + PALETTE(config, "palette").set_entries(0x100); + + ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, "palette")); + ramdac.set_addrmap(0, &att_state::ramdac_map); + + SPEAKER(config, "mono").front_center(); + + OKIM6295(config, "oki", 12_MHz_XTAL / 12, okim6295_device::PIN7_HIGH).add_route(ALL_OUTPUTS, "mono", 1.0); +} + + +/* +Lian Huan Pao, ATT III, 2010 +Hardware Info By Guru +--------------------- + +ATT + |--------------------------------| +|-| LM386 VOL 61256 Z80A| +|1 78L05 | +|0 GAL GAL | +|W SW4 D32-06 | +|A SW3 UM70C171-08 +|Y SW2 3.579545MHz | +|-| SW1 | + | YM2413 D32-05 | + | ULN2003S | + | D32-04 | +|-| | +|2 D32-03 | +|2 | +|W D32-02 | +|A T518B | +|Y 61256| +| 12MHz EPM7128 | +|-| D32-01 61256| + | BATT | + |BUTTON 6116 Z80B| + |--------------------------------| +Notes: + Z80A - Sharp LH0080A Z80A CPU. Clock Input 3.000MHz [12/4] + Z80B - Sharp LH0080B Z80B CPU. Clock Input 3.000MHz [12/4] + YM2413 - Yamaha YM2413 OPLL FM Sound Chip. Clock Input 3.579545MHz + LM386 - LM386 0.5W Audio Power Amplifier + 61256 - 32kB x8-bit SRAM + 6116 - 6116 2kB x8-bit SRAM (Battery-Backed) + 78L05 - 5V Linear Regulator (TO92) + T518B - Mitsumi T518B Reset Chip + BUTTON - Push Button Reset and Clear NVRAM + D32* - ROMs + ULN2003S - 7-Channel Darlington Transistor Array (SOIC16) + UM70C171 - UMC UM70C171-80 Color Palette With Triple 6-Bit DAC + SW1-4 - 8-Position DIP Switch + EPM7128 - Altera MAX EPM7128 CPLD + BATT - CR2032 Coin Cell +*/ + +ROM_START( lianhp2 ) + ROM_REGION( 0x8000, "maincpu", 0 ) + ROM_LOAD( "d32-01-.u32", 0x0000, 0x8000, CRC(7f6f1b84) SHA1(daee04a8f77580e8aad99498bbbed14d7b0cde22) ) + + ROM_REGION( 0x8000, "audiocpu", 0 ) + ROM_LOAD( "d32-06-.u12", 0x0000, 0x8000, CRC(988515b1) SHA1(e833077885784c420c96903e46217a4292c9e783) ) // 1xxxxxxxxxxxxxx = 0xFF + + ROM_REGION( 0x80000, "tiles", 0 ) + ROM_LOAD16_BYTE( "d32-02-.u4", 0x00000, 0x20000, CRC(867258ad) SHA1(f4047d3c921263d0df34d4357203b3e15c8c8de2) ) // 1xxxxxxxxxxxxxxxxx = 0xFF + ROM_IGNORE( 0x20000 ) + ROM_LOAD16_BYTE( "d32-03-.u5", 0x00001, 0x20000, CRC(93574235) SHA1(0e82b52f4169e146d1b4386a68a1a023d31da6fd) ) // 1xxxxxxxxxxxxxxxxx = 0xFF + ROM_IGNORE( 0x20000 ) + ROM_LOAD16_BYTE( "d32-04-.u6", 0x40000, 0x20000, CRC(72915ae7) SHA1(8dedcb4f7c57896bf27743f96afbdcc298e06a47) ) // 1xxxxxxxxxxxxxxxxx = 0xFF + ROM_IGNORE( 0x20000 ) + ROM_LOAD16_BYTE( "d32-05-.u7", 0x40001, 0x20000, CRC(aab2bd04) SHA1(18dcb9a2d7338bb98b5399c30cfd6ad8ed750cce) ) // 1xxxxxxxxxxxxxxxxx = 0xFF + ROM_IGNORE( 0x20000 ) +ROM_END + +/* +Lian Huan Pao 3, Bordun, 2003? +Hardware Info By Guru +--------------------- + +TAIWAN ATT III +2010.12.18 +030514 + |--------------------------------| +|-| UPC1241H VOL ATT_III_1| +|1 C1815 78L05 | +|0 6295 | +|W 86171 | +|A ATT_III_2| +|Y A1117_3.3 | +|-| | + | | + | | + | 12MHz |---------| | +|-| | | | +|2 | ACTEL | | +|2 ULN2003 |A54SX16A | | +|W JC817 |-F QFP208| | +|A JC817 |---------| | +|Y JC817 SW2 | +| JC817 SW3 | +|-|JC817 Z80 24257 SW4 | + | SW1 6116 SW5 | + | BATT ATT_III_3 T518B | + |--------------------------------| +Notes: + Z80 - Toshiba TMPZ84C000AP-6 Z80B CPU. Clock Input 6.000MHz [12/2] + 6295 - Oki M6295 ADPCM Sample Player. Clock Input 1.000MHz [12/12]. Pin 7 HIGH + UPC1241H - NEC uPC1241H 7W Audio Power Amplifier + 24257 - Winbond W24257ak-15 32kB x8-bit SRAM + 6116 - 6116 2kB x8-bit SRAM (Battery-Backed) + 78L05 - 5V Linear Regulator (TO92) + T518B - Mitsumi T518B Reset Chip + ATT_III* - ROMs; 3=Z80 Program, 2=Graphics, 1=Oki Samples + ULN2003 - 7-Channel Darlington Transistor Array + 86171 - HMC HM86171-80 Color Palette With Triple 6-Bit DAC + SW1 - Push Button Reset and Clear NVRAM + SW2-5 - 8-Position DIP Switch + ACTEL - Actel A54SX16A-F QFP208 FPGA + BATT - 3.6V Nicad Barrel Battery + C1815 - 2SC1815 General-Purpose NPN Transistor + A1117_3.3 - 3.3V Linear Regulator for powering FPGA + JC817 - Kento JC817 Photo-Coupler (equivalent to Sharp PC817X) +*/ + +ROM_START( lianhp3 ) + ROM_REGION( 0x8000, "maincpu", 0 ) + ROM_LOAD( "att-iii_3.bin", 0x0000, 0x8000, CRC(9041bfa9) SHA1(047046f8c533ed00a06e2d3cb6328a517ba1e6c2) ) + + ROM_REGION( 0x80000, "tiles", 0 ) + ROM_LOAD( "att-iii_2.bin", 0x00000, 0x80000, CRC(53baa37b) SHA1(548a9d6e01d31d65bd2c35be16778cbc5a315b54) ) + + ROM_REGION( 0x80000, "oki", 0 ) + ROM_LOAD( "att-iii_1.bin", 0x00000, 0x80000, CRC(05b3974c) SHA1(70feb9c9fc8d7619838319696e10d65ef55dadfc) ) +ROM_END + +} // anonymous namespace + + +GAME( 200?, lianhp2, 0, att, lianhp2, att_state, empty_init, ROT0, "Bordun", "Lian Huan Pao - ATT II", MACHINE_IMPERFECT_SOUND | MACHINE_SUPPORTS_SAVE ) // audio IRQ timing +GAME( 2003, lianhp3, 0, att3, lianhp3, att_state, empty_init, ROT0, "Bordun", "Lian Huan Pao - ATT III", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/bordun/skylncr.cpp b/src/mame/bordun/skylncr.cpp new file mode 100644 index 00000000000..2a044cd44c8 --- /dev/null +++ b/src/mame/bordun/skylncr.cpp @@ -0,0 +1,2519 @@ +// license:BSD-3-Clause +// copyright-holders:Roberto Fresca, David Haywood +/*************************************************************************************************** + + Sky Lancer / Butterfly / Mad Zoo / Super Star 97 and others... + Bordun International. + + Original preliminary driver by Luca Elia. + Additional Work: Roberto Fresca & David Haywood. + +**************************************************************************************************** + + Notes: + + - There are at least 3 different PCBs: Rolla, Sky and Cleco. + + - Some of the tiles look badly scaled down, and others appear to have columns swapped. + This might actually be correct due to different gfx encoding for different PCBs. + + - Skylncr and madzoo can run with the same program roms, they're basically graphics swaps. + + - To enter the Service Mode, press F2. All the game settings are there. + Change regular values using DIP switches, and jackpot value using STOP2 and STOP3. + To exit the mode, press START. You must reset the machine (F3) to update the changes. + + - Press key 0 to navigate between statistics pages. Press START to exit the mode. + +**************************************************************************************************** + + Settings: + + Pressing F2, you can enter the DIP switches settings. + Here the translated items: + + .---------------------------------------. + | DIP Switches Settings | + | | + | Main Game % Double-Up % | + | Clown % Reels Speed | + | Coin Scores Key In Scores | + | Payout Limit Key Out Score | + | Max Bet Min Bet | + | Special Bonus % Super Star % | + | Bonus Base Max Win Bonus | + | Double-Up Y/N Bonus Scores | + | | + '---------------------------------------' + + 'Special Bonus' and 'Super Star' appearance, are per 1000. + You also can find the MAME DIP switches menu already translated. + The items still need translation. + + Press START (key 1) to exit the mode. + + + Bookkeeping: + + Pressing BOOKKEEPING (key 0), you enter the Record Mode. + Here the translated items: + + .---------------------------------------. + | Record Menu | + | | + | Play Scores Key In Total | + | Win Scores Key Out Total | + | Play Times Coin In Total | + | Win Times Coin Out Total | + | Bonus Scores Short Total | + | Double Play Special Times | + | Double Win Super Show Up | + | Win Times Power On Times | + | Loss Times Working Time H M | + | | + | Version XXXXX | + '---------------------------------------' + + Pressing BOOKKEEPING key again, you can find 2 screens showing + all statistics and the whole history by winning hand. + + Press START (key 1) to exit the mode. + +**************************************************************************************************** + + Game specific notes... + + * Sonik Fighter + + The game is encrypted, and runs with an obfuscated daughterboard in place of the CPU. + Even when I have the attract working, accepting coins, getting sounds and accurate inputs, + the game is still not working. Once coined, there's no way to start a game. + + The PPI0 port B, D5 input line behaves like a reset, when the Attract/Girls DSW is set OFF. + Need more investigation about... + + Colors are wrong due to can't find a way to set the palette. + + * Magical Butterfly + + Some of the inputs are merged, and there is an extra output port that seems to handle lamps and + a rather simple form of protection that also involves one of the PPI1 input lines. + + To enter the Service Mode or Bookkeeping Menu, hold down Stop Reel 2/Up and Take along with the + specific inputs. + + * 蝴蝶梦 97 (Húdié Mèng 97) + + The program code has trivial opcode encryption which has been broken. However, the inputs tend + to act out of control at many times. This may have to do with the large number of unknown reads + and writes to an I/O port at $66. + +**************************************************************************************************** + + TODO: + + - Proper M5M82C255 device emulation. + - Colors: Find the palette in the Z Games' sets. + +***************************************************************************************************/ + +#include "emu.h" +#include "cpu/z80/z80.h" +#include "machine/i8255.h" +#include "machine/nvram.h" +#include "machine/ticket.h" +#include "sound/ay8910.h" +#include "video/ramdac.h" +#include "emupal.h" +#include "screen.h" +#include "speaker.h" +#include "tilemap.h" + +#include + + +namespace { + +class skylncr_state : public driver_device +{ +public: + skylncr_state(const machine_config &mconfig, device_type type, const char *tag) : + driver_device(mconfig, type, tag), + m_videoram(*this, "videoram"), + m_colorram(*this, "colorram"), + m_reeltiles_ram(*this, "reeltiles_ram.%u", 0U), + m_reeltileshigh_ram(*this, "rthigh_ram.%u", 0U), + m_reelscroll(*this, "reelscroll.%u", 0U), + m_maincpu(*this, "maincpu"), + m_gfxdecode(*this, "gfxdecode"), + m_palette(*this, "palette"), + m_hopper(*this, "hopper"), + m_lamps(*this, "lamp%u", 1U), + m_decrypted_opcodes(*this, "decrypted_opcodes") + { } + + void neraidou(machine_config &config); + void sstar97(machine_config &config); + void bdream97(machine_config &config); + void skylncr(machine_config &config); + void mbutrfly(machine_config &config); + void olymp(machine_config &config); + + void init_blshark(); + void init_butrfly(); + void init_leadera(); + void init_mbutrfly() { save_item(NAME(m_mbutrfly_prot)); } + void init_miaction(); + void init_olymp(); + void init_sonikfig(); + void init_speedway(); + void init_speedwaya(); + void init_superb2k(); + + int mbutrfly_prot_r(); + +protected: + virtual void machine_start() override ATTR_COLD; + virtual void video_start() override ATTR_COLD; + +private: + void videoram_w(offs_t offset, uint8_t data); + void colorram_w(offs_t offset, uint8_t data); + template void reeltiles_w(offs_t offset, uint8_t data); + template void reeltileshigh_w(offs_t offset, uint8_t data); + template void reelscroll_w(offs_t offset, uint8_t data); + void coin_w(uint8_t data); + uint8_t ret_ff() { return 0xff; } + [[maybe_unused]] uint8_t ret_00() { return 0x00; } + void nmi_enable_w(uint8_t data); + void mbutrfly_prot_w(uint8_t data); + uint8_t bdream97_opcode_r(offs_t offset); + + TILE_GET_INFO_MEMBER(get_tile_info); + template TILE_GET_INFO_MEMBER(get_reel_tile_info); + uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + INTERRUPT_GEN_MEMBER(vblank_interrupt); + void bdream97_opcode_map(address_map &map) ATTR_COLD; + void olymp_opcode_map(address_map &map) ATTR_COLD; + void io_map_mbutrfly(address_map &map) ATTR_COLD; + void io_map_skylncr(address_map &map) ATTR_COLD; + void mem_map(address_map &map) ATTR_COLD; + void ramdac2_map(address_map &map) ATTR_COLD; + void ramdac_map(address_map &map) ATTR_COLD; + + tilemap_t *m_tmap = nullptr; + required_shared_ptr m_videoram; + required_shared_ptr m_colorram; + required_shared_ptr_array m_reeltiles_ram; + required_shared_ptr_array m_reeltileshigh_ram; + tilemap_t *m_reel_tilemap[4]{}; + required_shared_ptr_array m_reelscroll; + uint8_t m_nmi_enable = 0; + bool m_mbutrfly_prot = false; + required_device m_maincpu; + required_device m_gfxdecode; + required_device m_palette; + required_device m_hopper; + output_finder<7> m_lamps; + optional_shared_ptr m_decrypted_opcodes; +}; + + +/************************************** +* Video Hardware * +**************************************/ + +void skylncr_state::videoram_w(offs_t offset, uint8_t data) +{ + m_videoram[offset] = data; + m_tmap->mark_tile_dirty(offset); +} + +void skylncr_state::colorram_w(offs_t offset, uint8_t data) +{ + m_colorram[offset] = data; + m_tmap->mark_tile_dirty(offset); +} + + +TILE_GET_INFO_MEMBER(skylncr_state::get_tile_info) +{ + uint16_t code = m_videoram[tile_index] + (m_colorram[tile_index] << 8); + int pal = (code & 0x8000) >> 15; + tileinfo.set(0, code, pal^1, TILE_FLIPYX( 0 )); +} + +template +TILE_GET_INFO_MEMBER(skylncr_state::get_reel_tile_info) +{ + uint16_t code = m_reeltiles_ram[Which][tile_index] + (m_reeltileshigh_ram[Which][tile_index] << 8); + int pal = (code & 0x8000) >> 15; + tileinfo.set(1, Which == 0 ? code & 0x7fff : code, pal^1, TILE_FLIPYX( 0 )); +} + + +void skylncr_state::machine_start() +{ + m_lamps.resolve(); + + save_item(NAME(m_nmi_enable)); + + m_nmi_enable = 0; +} + +void skylncr_state::video_start() +{ + m_tmap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 0x40, 0x20 ); + + m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 ); + m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_reel_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 ); + m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_reel_tile_info<2>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 ); + m_reel_tilemap[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_reel_tile_info<3>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 ); + + m_reel_tilemap[1]->set_scroll_cols(0x40); + m_reel_tilemap[2]->set_scroll_cols(0x40); + m_reel_tilemap[3]->set_scroll_cols(0x40); + + m_reel_tilemap[1]->set_transparent_pen(0); + m_reel_tilemap[2]->set_transparent_pen(0); + m_reel_tilemap[3]->set_transparent_pen(0); + + + m_tmap->set_transparent_pen(0); +} + + +uint32_t skylncr_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) +{ + bitmap.fill(rgb_t::black(), cliprect); + m_reel_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0); + + // are these hardcoded, or registers? + const rectangle visible1(0*8, (16+48)*8-1, 4*8, (4+7)*8-1); + const rectangle visible2(0*8, (16+48)*8-1, 12*8, (12+7)*8-1); + const rectangle visible3(0*8, (16+48)*8-1, 20*8, (20+7)*8-1); + + for (int i= 0;i < 64;i++) + { + m_reel_tilemap[1]->set_scrolly(i, m_reelscroll[1][i]); + m_reel_tilemap[2]->set_scrolly(i, m_reelscroll[2][i]); + m_reel_tilemap[3]->set_scrolly(i, m_reelscroll[3][i]); + } + + m_reel_tilemap[1]->draw(screen, bitmap, visible1, 0, 0); + m_reel_tilemap[2]->draw(screen, bitmap, visible2, 0, 0); + m_reel_tilemap[3]->draw(screen, bitmap, visible3, 0, 0); + + + m_tmap->draw(screen, bitmap, cliprect, 0, 0); + return 0; +} + +template +void skylncr_state::reeltiles_w(offs_t offset, uint8_t data) +{ + m_reeltiles_ram[Which][offset] = data; + m_reel_tilemap[Which]->mark_tile_dirty(offset); +} + +template +void skylncr_state::reeltileshigh_w(offs_t offset, uint8_t data) +{ + m_reeltileshigh_ram[Which][offset] = data; + m_reel_tilemap[Which]->mark_tile_dirty(offset); +} + +template +void skylncr_state::reelscroll_w(offs_t offset, uint8_t data) +{ + m_reelscroll[Which][offset] = data; +} + + +/************************************ +* Other Handlers * +************************************/ + +void skylncr_state::coin_w(uint8_t data) +{ + machine().bookkeeping().coin_counter_w(0, data & 0x04); + m_hopper->motor_w(data & 0x20); +} + +void skylncr_state::nmi_enable_w(uint8_t data) +{ + m_nmi_enable = data & 0x10; +} + +void skylncr_state::mbutrfly_prot_w(uint8_t data) +{ + m_lamps[0] = BIT(data, 0); // Slot Stop 2 + m_lamps[1] = BIT(data, 1); // Slot Stop 1 + m_lamps[2] = BIT(data, 2); // Take + m_lamps[3] = BIT(data, 3); // Bet + m_lamps[4] = BIT(data, 4); // Slot Stop 3 + m_lamps[5] = BIT(data, 5); // Start + m_lamps[6] = BIT(data, 6); // Payout + m_mbutrfly_prot = BIT(data, 7); +} + +int skylncr_state::mbutrfly_prot_r() +{ + return m_mbutrfly_prot; +} + +uint8_t skylncr_state::bdream97_opcode_r(offs_t offset) +{ + auto dis = machine().disable_side_effects(); + return m_maincpu->space(AS_PROGRAM).read_byte(offset) ^ 0x80; +} + + +/************************************** +* Memory Map * +**************************************/ + +void skylncr_state::mem_map(address_map &map) +{ + map(0x0000, 0x7fff).rom(); + map(0x8000, 0x87ff).ram().share("nvram"); + + map(0x8800, 0x8fff).ram().w(FUNC(skylncr_state::videoram_w)).share(m_videoram); + map(0x9000, 0x97ff).ram().w(FUNC(skylncr_state::colorram_w)).share(m_colorram); + + map(0x9800, 0x99ff).ram().w(FUNC(skylncr_state::reeltiles_w<0>)).share(m_reeltiles_ram[0]); + map(0x9a00, 0x9bff).ram().w(FUNC(skylncr_state::reeltiles_w<1>)).share(m_reeltiles_ram[1]); + map(0x9c00, 0x9dff).ram().w(FUNC(skylncr_state::reeltiles_w<2>)).share(m_reeltiles_ram[2]); + map(0x9e00, 0x9fff).ram().w(FUNC(skylncr_state::reeltiles_w<3>)).share(m_reeltiles_ram[3]); + map(0xa000, 0xa1ff).ram().w(FUNC(skylncr_state::reeltileshigh_w<0>)).share(m_reeltileshigh_ram[0]); + map(0xa200, 0xa3ff).ram().w(FUNC(skylncr_state::reeltileshigh_w<1>)).share(m_reeltileshigh_ram[1]); + map(0xa400, 0xa5ff).ram().w(FUNC(skylncr_state::reeltileshigh_w<2>)).share(m_reeltileshigh_ram[2]); + map(0xa600, 0xa7ff).ram().w(FUNC(skylncr_state::reeltileshigh_w<3>)).share(m_reeltileshigh_ram[3]); + + map(0xaa55, 0xaa55).r(FUNC(skylncr_state::ret_ff)); + + map(0xb000, 0xb03f).mirror(0x1c0).ram().w(FUNC(skylncr_state::reelscroll_w<0>)).share(m_reelscroll[0]); + map(0xb200, 0xb23f).mirror(0x1c0).ram().w(FUNC(skylncr_state::reelscroll_w<1>)).share(m_reelscroll[1]); + map(0xb400, 0xb43f).mirror(0x1c0).ram().w(FUNC(skylncr_state::reelscroll_w<2>)).share(m_reelscroll[2]); + map(0xb600, 0xb63f).mirror(0x1c0).ram().w(FUNC(skylncr_state::reelscroll_w<3>)).share(m_reelscroll[3]); + + map(0xc000, 0xffff).rom(); +} + + +void skylncr_state::io_map_skylncr(address_map &map) +{ + map.global_mask(0xff); + + map(0x00, 0x03).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); // Input Ports + map(0x10, 0x13).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); // Input Ports + + map(0x20, 0x20).w(FUNC(skylncr_state::coin_w)); + + map(0x30, 0x31).w("aysnd", FUNC(ay8910_device::address_data_w)); + map(0x31, 0x31).r("aysnd", FUNC(ay8910_device::data_r)); + + map(0x40, 0x40).w("ramdac", FUNC(ramdac_device::index_w)); + map(0x41, 0x41).w("ramdac", FUNC(ramdac_device::pal_w)); + map(0x42, 0x42).w("ramdac", FUNC(ramdac_device::mask_w)); + + map(0x50, 0x50).w("ramdac2", FUNC(ramdac_device::index_w)); + map(0x51, 0x51).w("ramdac2", FUNC(ramdac_device::pal_w)); + map(0x52, 0x52).w("ramdac2", FUNC(ramdac_device::mask_w)); + + map(0x70, 0x70).w(FUNC(skylncr_state::nmi_enable_w)); +} + + +void skylncr_state::io_map_mbutrfly(address_map &map) +{ + map.global_mask(0xff); + io_map_skylncr(map); + map(0x60, 0x60).w(FUNC(skylncr_state::mbutrfly_prot_w)); +} + + +void skylncr_state::bdream97_opcode_map(address_map &map) +{ + map(0x0000, 0xffff).r(FUNC(skylncr_state::bdream97_opcode_r)); +} + +void skylncr_state::olymp_opcode_map(address_map &map) +{ + map(0x0000, 0xffff).rom().share(m_decrypted_opcodes); +} + +void skylncr_state::ramdac_map(address_map &map) +{ + map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); +} + + +void skylncr_state::ramdac2_map(address_map &map) +{ + map(0x000, 0x3ff).rw("ramdac2", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); +} + + + +/*************************************** +* Graphics Layouts * +***************************************/ + +static const gfx_layout layout8x8x8 = +{ + 8,8, + RGN_FRAC(1,2), + 8, + { STEP8(0,1) }, + { + 8*0,8*1, + RGN_FRAC(1,2)+8*0,RGN_FRAC(1,2)+8*1, + 8*2,8*3, + RGN_FRAC(1,2)+8*2,RGN_FRAC(1,2)+8*3 + }, + { STEP8(0,8*4) }, + 8*8*4 +}; + +static const gfx_layout layout8x8x8_alt = // for sstar97 +{ + 8,8, + RGN_FRAC(1,2), + 8, + { STEP8(0,1) }, + { + 8*0,RGN_FRAC(1,2)+8*0, + 8*1,RGN_FRAC(1,2)+8*1, + 8*2,RGN_FRAC(1,2)+8*2, + 8*3,RGN_FRAC(1,2)+8*3 + }, + { STEP8(0,8*4) }, + 8*8*4 +}; + +static const gfx_layout layout8x8x8_bdream97 = // for bdream97 +{ + 8,8, + RGN_FRAC(1,2), + 8, + { STEP8(0,1) }, + { + 8*0,RGN_FRAC(1,2)+8*0, + RGN_FRAC(1,2)+8*1,8*1, + 8*2,RGN_FRAC(1,2)+8*2, + RGN_FRAC(1,2)+8*3,8*3 + }, + { STEP8(0,8*4) }, + 8*8*4 +}; + +static const gfx_layout layout8x32x8 = +{ + 8,32, + RGN_FRAC(1,2), + 8, + { STEP8(0,1) }, + { + 8*0, 8*1, + RGN_FRAC(1,2)+8*0, RGN_FRAC(1,2)+8*1, + 8*2, 8*3, + RGN_FRAC(1,2)+8*2, RGN_FRAC(1,2)+8*3 + }, + { + STEP16(0,8*4), + STEP16(16*8*4,8*4) + }, + 8*32*8/2 +}; + +/* this will decode the big x2 x3 'correctly' however, maybe they're + simply not meant to appear correct? */ +static const gfx_layout layout8x32x8_rot = +{ + 8,32, + RGN_FRAC(1,2), + 8, + { STEP8(0,1) }, + { + 8*0, 8*1, + RGN_FRAC(1,2)+8*1, RGN_FRAC(1,2)+8*0, + 8*2, 8*3, + RGN_FRAC(1,2)+8*3, RGN_FRAC(1,2)+8*2 + }, + { + STEP16(0,8*4), + STEP16(16*8*4,8*4) + }, + 8*32*8/2 +}; + +static const gfx_layout layout8x32x8_alt = // for sstar97 +{ + 8,32, + RGN_FRAC(1,2), + 8, + { STEP8(0,1) }, + { + RGN_FRAC(1,2)+8*1, 8*1, + 8*0, RGN_FRAC(1,2)+8*0, + RGN_FRAC(1,2)+8*3, 8*3, + 8*2, RGN_FRAC(1,2)+8*2 + }, + { + STEP16(0,8*4), + STEP16(16*8*4,8*4) + }, + 8*32*8/2 +}; + +static const gfx_layout layout8x32x8_alt2 = // for neraidov +{ + 8,32, + RGN_FRAC(1,2), + 8, + { STEP8(0,1) }, + { + RGN_FRAC(1,2)+8*1, 8*1, + RGN_FRAC(1,2)+8*0, 8*0, + RGN_FRAC(1,2)+8*3, 8*3, + RGN_FRAC(1,2)+8*2, 8*2 + }, + { + STEP16(0,8*4), + STEP16(16*8*4,8*4) + }, + 8*32*8/2 +}; + +static const gfx_layout layout8x32x8_bdream97 = // for bdream97 +{ + 8,32, + RGN_FRAC(1,2), + 8, + { STEP8(0,1) }, + { + 8*1, RGN_FRAC(1,2)+8*1, + 8*0, RGN_FRAC(1,2)+8*0, + 8*3, RGN_FRAC(1,2)+8*3, + 8*2, RGN_FRAC(1,2)+8*2 + }, + { + STEP16(0,8*4), + STEP16(16*8*4,8*4) + }, + 8*32*8/2 +}; + + +/************************************** +* Graphics Decode * +**************************************/ + +static GFXDECODE_START( gfx_skylncr ) + GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8, 0, 2 ) + GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8, 0, 2 ) + GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_rot, 0, 2 ) +GFXDECODE_END + +static GFXDECODE_START( gfx_neraidou ) + GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_alt, 0, 2 ) + GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt2, 0, 2 ) +// GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0x100, 1 ) +GFXDECODE_END + +static GFXDECODE_START( gfx_sstar97 ) + GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_alt, 0, 2 ) + GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0, 2 ) + GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0x100, 1 ) +GFXDECODE_END + +static GFXDECODE_START( gfx_bdream97 ) + GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_bdream97, 0, 2 ) + GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_bdream97, 0, 2 ) + GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_bdream97, 0x100, 1 ) +GFXDECODE_END + + +/*********************************** +* Input Ports * +***********************************/ + +static INPUT_PORTS_START( skylncr ) + PORT_START("IN1") // $00 (PPI0 port A) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) + 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") // $01 (PPI0 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") + 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("IN3") // $11 (PPI1 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") + + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") + + PORT_START("IN4") // $12 (PPI1 port C) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START("DSW1") // $02 (PPI0 port C) + PORT_DIPNAME( 0x11, 0x11, "D-UP Percentage" ) + PORT_DIPSETTING( 0x11, "60%" ) + PORT_DIPSETTING( 0x01, "70%" ) + PORT_DIPSETTING( 0x10, "80%" ) + PORT_DIPSETTING( 0x00, "90%" ) + PORT_DIPNAME( 0x0e, 0x0e, "Main Game Percentage" ) + PORT_DIPSETTING( 0x0e, "75%" ) + PORT_DIPSETTING( 0x0c, "78%" ) + PORT_DIPSETTING( 0x0a, "81%" ) + PORT_DIPSETTING( 0x08, "84%" ) + PORT_DIPSETTING( 0x06, "87%" ) + PORT_DIPSETTING( 0x04, "90%" ) + PORT_DIPSETTING( 0x02, "93%" ) + PORT_DIPSETTING( 0x00, "96%" ) + PORT_DIPNAME( 0x20, 0x20, "Reels Speed" ) + PORT_DIPSETTING( 0x20, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + PORT_DIPNAME( 0x40, 0x40, "Bonus Score" ) + PORT_DIPSETTING( 0x40, "32" ) + PORT_DIPSETTING( 0x00, "24" ) + PORT_DIPNAME( 0x80, 0x00, "Key Out" ) + PORT_DIPSETTING( 0x00, "x1" ) + PORT_DIPSETTING( 0x80, "x100" ) + + PORT_START("DSW2") // $10 (PPI1 port A) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x18, 0x08, "Payout Limit" ) + PORT_DIPSETTING( 0x00, "0" ) + PORT_DIPSETTING( 0x18, "1000" ) + PORT_DIPSETTING( 0x10, "2000" ) + PORT_DIPSETTING( 0x08, "5000" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xc0, 0xc0, "Clown Percentage" ) + PORT_DIPSETTING( 0xc0, "60%" ) + PORT_DIPSETTING( 0x80, "70%" ) + PORT_DIPSETTING( 0x40, "80%" ) + PORT_DIPSETTING( 0x00, "90%" ) + + PORT_START("DSW3") // AY8910 port A + PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) + PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) + PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) + PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) + PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) + PORT_DIPSETTING( 0x20, "10000" ) + PORT_DIPSETTING( 0x00, "20000" ) + PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) + PORT_DIPSETTING( 0xc0, "0" ) + PORT_DIPSETTING( 0x80, "8" ) + PORT_DIPSETTING( 0x40, "16" ) + PORT_DIPSETTING( 0x00, "32" ) + + PORT_START("DSW4") // AY8910 port B + PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) + PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) + PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) + PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) + PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) + PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) + PORT_DIPNAME( 0x18, 0x00, "Max Bet" ) + PORT_DIPSETTING( 0x18, "32" ) + PORT_DIPSETTING( 0x10, "64" ) + PORT_DIPSETTING( 0x08, "72" ) + PORT_DIPSETTING( 0x00, "80" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( mbutrfly ) + PORT_INCLUDE(skylncr) + + PORT_MODIFY("IN1") // $00 (PPI0 port A) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) + + PORT_MODIFY("IN2") // $01 (PPI0 port B) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP3) PORT_NAME("Stop Reel 3, Down/Low") + + PORT_MODIFY("IN3") // $11 (PPI1 port B) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP2) PORT_NAME("Stop Reel 2, Up/High") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SLOT_STOP1) PORT_NAME("Stop Reel 1, Double Up") + + PORT_MODIFY("IN4") // $12 (PPI1 port C) + PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_MEMBER(FUNC(skylncr_state::mbutrfly_prot_r)) +INPUT_PORTS_END + + +static INPUT_PORTS_START( leader ) + PORT_START("IN1") // $00 (PPI0 port A) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) + 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") // $01 (PPI0 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet/Throttle") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") + 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("IN3") // $11 (PPI1 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") + + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") + + PORT_START("IN4") // $12 (PPI1 port C) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START("DSW1") // $02 (PPI0 port C) + PORT_DIPNAME( 0x11, 0x11, "Butterfly Max Mul" ) PORT_DIPLOCATION("DSW-A:!4,!5") + PORT_DIPSETTING( 0x11, "5" ) + PORT_DIPSETTING( 0x01, "7" ) + PORT_DIPSETTING( 0x10, "8" ) + PORT_DIPSETTING( 0x00, "12" ) + PORT_DIPNAME( 0x0e, 0x00, "Main Win Rate" ) PORT_DIPLOCATION("DSW-A:!6,!7,!8") + PORT_DIPSETTING( 0x0e, "55%" ) + PORT_DIPSETTING( 0x0c, "60%" ) + PORT_DIPSETTING( 0x0a, "65%" ) + PORT_DIPSETTING( 0x08, "70%" ) + PORT_DIPSETTING( 0x06, "75%" ) + PORT_DIPSETTING( 0x04, "80%" ) + PORT_DIPSETTING( 0x02, "85%" ) + PORT_DIPSETTING( 0x00, "90%" ) + PORT_DIPNAME( 0x20, 0x00, "Reels Speed" ) PORT_DIPLOCATION("DSW-A:!3") + PORT_DIPSETTING( 0x20, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + PORT_DIPNAME( 0x40, 0x00, "Bonus Score" ) PORT_DIPLOCATION("DSW-A:!2") + PORT_DIPSETTING( 0x40, "24" ) + PORT_DIPSETTING( 0x00, "32" ) + PORT_DIPNAME( 0x80, 0x00, "Key Out" ) PORT_DIPLOCATION("DSW-A:!1") + PORT_DIPSETTING( 0x00, "x1" ) + PORT_DIPSETTING( 0x80, "x100" ) + + PORT_START("DSW2") // $10 (PPI1 port A) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-B:1") + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-B:2") + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) PORT_DIPLOCATION("DSW-B:3") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x18, 0x18, "Refund Coin Limit" ) PORT_DIPLOCATION("DSW-B:4,5") + PORT_DIPSETTING( 0x00, "0" ) + PORT_DIPSETTING( 0x18, "1000" ) + PORT_DIPSETTING( 0x10, "2000" ) + PORT_DIPSETTING( 0x08, "5000" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-B:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xc0, 0xc0, "Butterfly Win Rate" ) PORT_DIPLOCATION("DSW-B:7,8") + PORT_DIPSETTING( 0xc0, "15%" ) + PORT_DIPSETTING( 0x80, "20%" ) + PORT_DIPSETTING( 0x40, "25%" ) + PORT_DIPSETTING( 0x00, "30%" ) + + PORT_START("DSW3") // AY8910 port A + PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) PORT_DIPLOCATION("DSW-D:1,2,3") + PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) + PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) + PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) + PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) + PORT_DIPNAME( 0x18, 0x00, "Credit Limit" ) PORT_DIPLOCATION("DSW-D:4,5") + PORT_DIPSETTING( 0x00, "120000" ) + PORT_DIPSETTING( 0x08, "100000" ) + PORT_DIPSETTING( 0x10, "80000" ) + PORT_DIPSETTING( 0x18, "50000" ) + PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) PORT_DIPLOCATION("DSW-D:6") + PORT_DIPSETTING( 0x20, "10000" ) + PORT_DIPSETTING( 0x00, "20000" ) + PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) PORT_DIPLOCATION("DSW-D:7,8") + PORT_DIPSETTING( 0xc0, "8" ) + PORT_DIPSETTING( 0x80, "16" ) + PORT_DIPSETTING( 0x40, "32" ) + PORT_DIPSETTING( 0x00, "64" ) + + PORT_START("DSW4") // AY8910 port B + PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) PORT_DIPLOCATION("DSW-C:1,2,3") + PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) + PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) + PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) + PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) + PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) + PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) + PORT_DIPNAME( 0x18, 0x18, "High Bet Limit" ) PORT_DIPLOCATION("DSW-C:4,5") + PORT_DIPSETTING( 0x18, "32" ) + PORT_DIPSETTING( 0x10, "50" ) + PORT_DIPSETTING( 0x08, "72" ) + PORT_DIPSETTING( 0x00, "96" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-C:6") + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-C:7") + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, "Coin Lock" ) PORT_DIPLOCATION("DSW-C:8") + PORT_DIPSETTING( 0x80, "Locked" ) + PORT_DIPSETTING( 0x00, "Normal" ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( neraidou ) + PORT_START("IN1") // $00 (PPI0 port A) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) + 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") // $01 (PPI0 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet/Throttle") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") + 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("IN3") // $11 (PPI1 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") + + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") + + PORT_START("IN4") // $12 (PPI1 port C) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START("DSW1") // $02 (PPI0 port C) + PORT_DIPNAME( 0x01, 0x01, "Hardware Type (could be inverted)" ) // leave it off, otherwise the game works bad and resets + PORT_DIPSETTING( 0x01, "Rolla" ) + PORT_DIPSETTING( 0x00, "Sky" ) + PORT_DIPNAME( 0x0e, 0x0e, "Main Game Percentage" ) + PORT_DIPSETTING( 0x0e, "91%" ) + PORT_DIPSETTING( 0x0c, "92%" ) + PORT_DIPSETTING( 0x0a, "93%" ) + PORT_DIPSETTING( 0x08, "94%" ) + PORT_DIPSETTING( 0x06, "95%" ) + PORT_DIPSETTING( 0x04, "96%" ) + PORT_DIPSETTING( 0x02, "97%" ) + PORT_DIPSETTING( 0x00, "98%" ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Reels Speed" ) + PORT_DIPSETTING( 0x20, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + PORT_DIPNAME( 0x40, 0x40, "Bonus Rate" ) + PORT_DIPSETTING( 0x40, "20" ) + PORT_DIPSETTING( 0x00, "40" ) + PORT_DIPNAME( 0x80, 0x00, "Key Out" ) + PORT_DIPSETTING( 0x00, "x1" ) + PORT_DIPSETTING( 0x80, "x100" ) + + PORT_START("DSW2") // $10 (PPI1 port A) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xc0, 0xc0, "Butterfly Win Rate" ) + PORT_DIPSETTING( 0xc0, "25%" ) + PORT_DIPSETTING( 0x80, "30%" ) + PORT_DIPSETTING( 0x40, "40%" ) + PORT_DIPSETTING( 0x00, "50%" ) + + PORT_START("DSW3") // AY8910 port A + PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) + PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) + PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) + PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) + PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) + PORT_DIPNAME( 0x18, 0x18, "Credit Limit" ) + PORT_DIPSETTING( 0x00, "120000" ) + PORT_DIPSETTING( 0x08, "100000" ) + PORT_DIPSETTING( 0x10, "80000" ) + PORT_DIPSETTING( 0x18, "50000" ) + PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) + PORT_DIPSETTING( 0x20, "10000" ) + PORT_DIPSETTING( 0x00, "20000" ) + PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) + PORT_DIPSETTING( 0xc0, "8" ) + PORT_DIPSETTING( 0x80, "16" ) + PORT_DIPSETTING( 0x40, "32" ) + PORT_DIPSETTING( 0x00, "64" ) + + PORT_START("DSW4") // AY8910 port B + PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) + PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) + PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) + PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) + PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) + PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) + PORT_DIPNAME( 0x18, 0x00, "High Bet Limit" ) + PORT_DIPSETTING( 0x18, "104" ) + PORT_DIPSETTING( 0x10, "120" ) + PORT_DIPSETTING( 0x08, "160" ) + PORT_DIPSETTING( 0x00, "240" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Bonus? (Left Side)" ) + PORT_DIPSETTING( 0x80, "x3" ) + PORT_DIPSETTING( 0x00, "No Bonus" ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( gallag50 ) + PORT_START("IN1") // $00 (PPI0 port A) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) + 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") // $01 (PPI0 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet/Throttle") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") + 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("IN3") // $11 (PPI1 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") + + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") + + PORT_START("IN4") // $12 (PPI1 port C) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START("DSW1") // $02 (PPI0 port C) + PORT_DIPNAME( 0x01, 0x01, "Hardware Type (could be inverted)" ) // leave it off, otherwise the game works bad and resets + PORT_DIPSETTING( 0x01, "Rolla" ) + PORT_DIPSETTING( 0x00, "Sky" ) + PORT_DIPNAME( 0x0e, 0x0e, "Main Game Percentage" ) + PORT_DIPSETTING( 0x0e, "91%" ) + PORT_DIPSETTING( 0x0c, "92%" ) + PORT_DIPSETTING( 0x0a, "93%" ) + PORT_DIPSETTING( 0x08, "94%" ) + PORT_DIPSETTING( 0x06, "95%" ) + PORT_DIPSETTING( 0x04, "96%" ) + PORT_DIPSETTING( 0x02, "97%" ) + PORT_DIPSETTING( 0x00, "98%" ) + PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x20, 0x20, "Reels Speed" ) + PORT_DIPSETTING( 0x20, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + PORT_DIPNAME( 0x40, 0x40, "Bonus Rate" ) + PORT_DIPSETTING( 0x40, "24" ) + PORT_DIPSETTING( 0x00, "32" ) + PORT_DIPNAME( 0x80, 0x00, "Key Out" ) + PORT_DIPSETTING( 0x00, "x1" ) + PORT_DIPSETTING( 0x80, "x100" ) + + PORT_START("DSW2") // $10 (PPI1 port A) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x08, 0x00, "Rolla GFX" ) + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x00, "Title" ) + PORT_DIPSETTING( 0x10, "Petalouda (Greek for Butterfly)" ) + PORT_DIPSETTING( 0x00, "Gallag" ) + PORT_DIPNAME( 0x20, 0x20, "Alt GFX Decode (For different HW)" ) // could be a mix with 08 'Rolla GFX' + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xc0, 0xc0, "Butterfly Win Rate" ) + PORT_DIPSETTING( 0xc0, "15%" ) + PORT_DIPSETTING( 0x80, "20%" ) + PORT_DIPSETTING( 0x40, "25%" ) + PORT_DIPSETTING( 0x00, "30%" ) + + PORT_START("DSW3") // AY8910 port A + PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) + PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) + PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) + PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) + PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) + PORT_DIPNAME( 0x18, 0x18, "Credit Limit" ) + PORT_DIPSETTING( 0x00, "120000" ) + PORT_DIPSETTING( 0x08, "100000" ) + PORT_DIPSETTING( 0x10, "80000" ) + PORT_DIPSETTING( 0x18, "50000" ) + PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) + PORT_DIPSETTING( 0x20, "10000" ) + PORT_DIPSETTING( 0x00, "20000" ) + PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) + PORT_DIPSETTING( 0xc0, "8" ) + PORT_DIPSETTING( 0x80, "16" ) + PORT_DIPSETTING( 0x40, "32" ) + PORT_DIPSETTING( 0x00, "64" ) + + PORT_START("DSW4") // AY8910 port B + PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) + PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) + PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) + PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) + PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) + PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) + PORT_DIPNAME( 0x18, 0x00, "High Bet Limit" ) + PORT_DIPSETTING( 0x18, "32" ) + PORT_DIPSETTING( 0x10, "50" ) + PORT_DIPSETTING( 0x08, "72" ) + PORT_DIPSETTING( 0x00, "99" ) + PORT_DIPNAME( 0x20, 0x00, "Rolla HW" ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, "Unknown Feature" ) + PORT_DIPSETTING( 0x80, "Full Cutted" ) + PORT_DIPSETTING( 0x00, "Full Open" ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( sstar97 ) + PORT_START("IN1") // $00 (PPI0 port A) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) + 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") // $01 (PPI0 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") + 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("IN3") // $11 (PPI1 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") + + PORT_START("IN4") // $12 (PPI1 port C) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START("DSW1") // $02 (PPI0 port C) + PORT_DIPNAME( 0x11, 0x11, "D-UP Percentage" ) + PORT_DIPSETTING( 0x11, "60%" ) + PORT_DIPSETTING( 0x01, "70%" ) + PORT_DIPSETTING( 0x10, "80%" ) + PORT_DIPSETTING( 0x00, "90%" ) + PORT_DIPNAME( 0x0e, 0x0e, "Special Bonus Appearance (per 1000)" ) + PORT_DIPSETTING( 0x0e, "5" ) + PORT_DIPSETTING( 0x0c, "6" ) + PORT_DIPSETTING( 0x0a, "7" ) + PORT_DIPSETTING( 0x08, "8" ) + PORT_DIPSETTING( 0x06, "9" ) + PORT_DIPSETTING( 0x04, "10" ) + PORT_DIPSETTING( 0x02, "11" ) + PORT_DIPSETTING( 0x00, "12" ) + PORT_DIPNAME( 0x20, 0x20, "Reels Speed" ) + PORT_DIPSETTING( 0x20, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + PORT_DIPNAME( 0x40, 0x40, "Bonus Score" ) + PORT_DIPSETTING( 0x00, "24" ) + PORT_DIPSETTING( 0x40, "32" ) + PORT_DIPNAME( 0x80, 0x00, "Key Out" ) + PORT_DIPSETTING( 0x00, "x1" ) + PORT_DIPSETTING( 0x80, "x100" ) + + PORT_START("DSW2") // $10 (PPI1 port A) + PORT_DIPNAME( 0x03, 0x03, "Main Game Percentage" ) + PORT_DIPSETTING( 0x03, "60%" ) + PORT_DIPSETTING( 0x02, "70%" ) + PORT_DIPSETTING( 0x01, "80%" ) + PORT_DIPSETTING( 0x00, "90%" ) + PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x18, 0x18, "Payout Limit" ) + PORT_DIPSETTING( 0x00, "0" ) + PORT_DIPSETTING( 0x18, "1000" ) + PORT_DIPSETTING( 0x10, "2000" ) + PORT_DIPSETTING( 0x08, "5000" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0xc0, 0xc0, "Clown Percentage" ) + PORT_DIPSETTING( 0xc0, "60%" ) + PORT_DIPSETTING( 0x80, "70%" ) + PORT_DIPSETTING( 0x40, "80%" ) + PORT_DIPSETTING( 0x00, "90%" ) + + PORT_START("DSW3") // AY8910 port A + PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) + PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) + PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) + PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) + PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) + PORT_DIPNAME( 0x18, 0x18, "Base Bonus (Bonus Bottom)" ) + PORT_DIPSETTING( 0x18, "200" ) + PORT_DIPSETTING( 0x10, "400" ) + PORT_DIPSETTING( 0x08, "600" ) + PORT_DIPSETTING( 0x00, "800" ) + PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) + PORT_DIPSETTING( 0x20, "10000" ) + PORT_DIPSETTING( 0x00, "20000" ) + PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) + PORT_DIPSETTING( 0xc0, "0" ) + PORT_DIPSETTING( 0x80, "8" ) + PORT_DIPSETTING( 0x40, "16" ) + PORT_DIPSETTING( 0x00, "32" ) + + PORT_START("DSW4") // AY8910 port B + PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) + PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) + PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) + PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) + PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) + PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) + PORT_DIPNAME( 0x18, 0x18, "Max Bet" ) + PORT_DIPSETTING( 0x18, "32" ) + PORT_DIPSETTING( 0x10, "64" ) + PORT_DIPSETTING( 0x08, "72" ) + PORT_DIPSETTING( 0x00, "80" ) + PORT_DIPNAME( 0xe0, 0xe0, "Super Star Appearance (per 1000)" ) + PORT_DIPSETTING( 0xe0, "6" ) + PORT_DIPSETTING( 0xc0, "8" ) + PORT_DIPSETTING( 0xa0, "10" ) + PORT_DIPSETTING( 0x80, "12" ) + PORT_DIPSETTING( 0x60, "14" ) + PORT_DIPSETTING( 0x40, "16" ) + PORT_DIPSETTING( 0x20, "18" ) + PORT_DIPSETTING( 0x00, "20" ) +INPUT_PORTS_END + + +static INPUT_PORTS_START( sonikfig ) + PORT_START("IN1") // $00 (PPI0 port A) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) PORT_NAME("IN1-02") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) PORT_NAME("IN1-08") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G) PORT_NAME("IN1-20") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H) PORT_NAME("IN1-40") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) PORT_NAME("IN1-80") + + PORT_START("IN2") // $01 (PPI0 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K) PORT_NAME("IN2-02") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L) PORT_NAME("IN2-08") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") // OK + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_T) PORT_NAME("Reset #2") // Behaves like a reset, only when attract DSW is off... + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y) PORT_NAME("IN2-40") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U) PORT_NAME("IN2-80") + + PORT_START("IN3") // $11 (PPI1 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) // OK + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) // OK + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) // OK + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // OK + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I) PORT_NAME("IN3-40") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") + + PORT_START("IN4") // $12 (PPI1 port C) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("IN4-01") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset #1") // OK + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats") + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings OK + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("IN4-10") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("IN4-20") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("IN4-40") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START("DSW1") // $02 (PPI0 port C) + PORT_DIPNAME( 0x11, 0x00, "D-UP Percentage" ) // OK + PORT_DIPSETTING( 0x11, "40%" ) // OK + PORT_DIPSETTING( 0x01, "50%" ) // OK + PORT_DIPSETTING( 0x10, "60%" ) // OK + PORT_DIPSETTING( 0x00, "70%" ) // OK + PORT_DIPNAME( 0x0e, 0x00, "Main Game Percentage" ) // OK + PORT_DIPSETTING( 0x0e, "55%" ) // OK + PORT_DIPSETTING( 0x0c, "60%" ) // OK + PORT_DIPSETTING( 0x0a, "65%" ) // OK + PORT_DIPSETTING( 0x08, "70%" ) // OK + PORT_DIPSETTING( 0x06, "75%" ) // OK + PORT_DIPSETTING( 0x04, "80%" ) // OK + PORT_DIPSETTING( 0x02, "85%" ) // OK + PORT_DIPSETTING( 0x00, "90%" ) // OK + PORT_DIPNAME( 0x20, 0x00, "Reels Speed" ) // OK + PORT_DIPSETTING( 0x20, "Low" ) // OK + PORT_DIPSETTING( 0x00, "Hi" ) // OK + PORT_DIPNAME( 0x40, 0x00, "Bonus Score" ) // OK + PORT_DIPSETTING( 0x40, "32" ) // OK + PORT_DIPSETTING( 0x00, "24" ) // OK + PORT_DIPNAME( 0x80, 0x00, "Payout" ) // OK + PORT_DIPSETTING( 0x00, "x1" ) // OK + PORT_DIPSETTING( 0x80, "x100" ) // OK + + PORT_START("DSW2") // $10 (PPI1 port A) + PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) // OK + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) // OK + PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) // OK + PORT_DIPNAME( 0x18, 0x18, "Payout Limit" ) // OK + PORT_DIPSETTING( 0x00, "0" ) // OK + PORT_DIPSETTING( 0x18, "1000" ) // OK + PORT_DIPSETTING( 0x10, "2000" ) // OK + PORT_DIPSETTING( 0x08, "5000" ) // OK + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW3") // AY8910 port A + PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) // OK on test + PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) // OK on test, always 1c-1c in game... + PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) // OK on test, always 1c-1c in game... + PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) // OK on test, always 1c-1c in game... + PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) // OK on test, always 1c-1c in game... + PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) // OK on test, always 1c-1c in game... + PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) // OK on test, always 1c-1c in game... + PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) // OK on test, always 1c-1c in game... + PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) // OK on test, always 1c-1c in game... + PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // This input should be turned ON, otherwise you can't enter the setup (F2) + PORT_DIPNAME( 0x10, 0x00, "Attract / Girls" ) // OK... Could be either or both. Need the game working to check it. + PORT_DIPSETTING( 0x10, DEF_STR( No ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x20, 0x20, "Max Bonus" ) // OK + PORT_DIPSETTING( 0x20, "10000" ) // OK + PORT_DIPSETTING( 0x00, "20000" ) // OK + PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) // OK + PORT_DIPSETTING( 0xc0, "0" ) // OK + PORT_DIPSETTING( 0x80, "8" ) // OK + PORT_DIPSETTING( 0x40, "16" ) // OK + PORT_DIPSETTING( 0x00, "32" ) // OK + + PORT_START("DSW4") // AY8910 port B + PORT_DIPNAME( 0x07, 0x00, "Key In" ) // OK on test + PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) // OK on test, always 1 credit in game... + PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) // OK on test, always 1 credit in game... + PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) // OK on test, always 1 credit in game... + PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) // OK on test, always 1 credit in game... + PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) // OK on test, always 1 credit in game... + PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) // OK on test, always 1 credit in game... + PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) // OK on test, always 1 credit in game... + PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) // OK on test, always 1 credit in game... + PORT_DIPNAME( 0x18, 0x00, "Max Bet" ) // OK + PORT_DIPSETTING( 0x18, "64" ) // OK + PORT_DIPSETTING( 0x10, "72" ) // OK + PORT_DIPSETTING( 0x08, "80" ) // OK + PORT_DIPSETTING( 0x00, "96" ) // OK + PORT_DIPNAME( 0x20, 0x00, "Lit" ) // OK + PORT_DIPSETTING( 0x20, DEF_STR( No ) ) // OK + PORT_DIPSETTING( 0x00, "Yes (50.000)" ) // OK, 50.000 + PORT_DIPNAME( 0x40, 0x00, "Control" ) // OK + PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) // OK + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) // OK + PORT_DIPNAME( 0x80, 0x00, "Reel Cover" ) // OK + PORT_DIPSETTING( 0x80, DEF_STR( No ) ) // OK + PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // OK +INPUT_PORTS_END + +static INPUT_PORTS_START( score5 ) // TODO: verify inputs when game works (copied from sonikfig for now), dips are taken from manual so presumed correct + PORT_START("IN1") // $00 (PPI0 port A) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) PORT_NAME("IN1-02") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) PORT_NAME("IN1-08") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G) PORT_NAME("IN1-20") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H) PORT_NAME("IN1-40") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) PORT_NAME("IN1-80") + + PORT_START("IN2") // $01 (PPI0 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K) PORT_NAME("IN2-02") + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") PORT_CODE(KEYCODE_S) + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L) PORT_NAME("IN2-08") + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") // OK + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_T) PORT_NAME("Reset #2") // Behaves like a reset, only when attract DSW is off... + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y) PORT_NAME("IN2-40") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U) PORT_NAME("IN2-80") + + PORT_START("IN3") // $11 (PPI1 port B) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) // OK + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) // OK + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) // OK + PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // OK + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") PORT_CODE(KEYCODE_A) + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I) PORT_NAME("IN3-40") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") + + PORT_START("IN4") // $12 (PPI1 port C) + PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("IN4-01") + PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset #1") // OK + PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats") + PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings OK + PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("IN4-10") + PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("IN4-20") + PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("IN4-40") + PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) + + PORT_START("DSW1") // $02 (PPI0 port C) + PORT_DIPNAME( 0x07, 0x07, "Percent" ) PORT_DIPLOCATION("DSW1:1,2,3") + PORT_DIPSETTING( 0x07, "55%" ) + PORT_DIPSETTING( 0x06, "60%" ) + PORT_DIPSETTING( 0x05, "65%" ) + PORT_DIPSETTING( 0x04, "70%" ) + PORT_DIPSETTING( 0x03, "75%" ) + PORT_DIPSETTING( 0x02, "80%" ) + PORT_DIPSETTING( 0x01, "85%" ) + PORT_DIPSETTING( 0x00, "90%" ) + PORT_DIPNAME( 0x08, 0x08, "Break" ) PORT_DIPLOCATION("DSW1:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x10, 0x10, "Speed" ) PORT_DIPLOCATION("DSW1:5") + PORT_DIPSETTING( 0x10, "Slow" ) + PORT_DIPSETTING( 0x00, "Fast" ) + PORT_DIPNAME( 0xe0, 0xe0, "Payout" ) PORT_DIPLOCATION("DSW1:6,7,8") + PORT_DIPSETTING( 0xe0, "1" ) + PORT_DIPSETTING( 0xc0, "2" ) + PORT_DIPSETTING( 0xa0, "5" ) + PORT_DIPSETTING( 0x80, "7" ) + PORT_DIPSETTING( 0x60, "9" ) + PORT_DIPSETTING( 0x40, "12" ) + PORT_DIPSETTING( 0x20, "15" ) + PORT_DIPSETTING( 0x00, "20" ) + + PORT_START("DSW2") // $10 (PPI1 port A) + PORT_DIPNAME( 0x01, 0x01, "Win Mode" ) PORT_DIPLOCATION("DSW2:1") + PORT_DIPSETTING( 0x01, "Line" ) + PORT_DIPSETTING( 0x00, "Square" ) + PORT_DIPNAME( 0x02, 0x02, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW2:2") + PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) + PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) + PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) PORT_DIPLOCATION("DSW2:3") + PORT_DIPSETTING( 0x00, DEF_STR( No ) ) + PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) + PORT_DIPNAME( 0x08, 0x08, "Control" ) PORT_DIPLOCATION("DSW2:4") + PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x30, 0x30, "Res." ) PORT_DIPLOCATION("DSW2:5,6") + PORT_DIPSETTING( 0x30, DEF_STR (Off) ) + PORT_DIPSETTING( 0x20, "10%" ) + PORT_DIPSETTING( 0x10, "20%" ) + PORT_DIPSETTING( 0x00, "30%" ) + PORT_DIPNAME( 0x40, 0x40, "Bonus" ) PORT_DIPLOCATION("DSW2:7") + PORT_DIPSETTING( 0x40, "100" ) + PORT_DIPSETTING( 0x00, "200" ) + PORT_DIPNAME( 0x80, 0x80, "Cycle Bonus" ) PORT_DIPLOCATION("DSW2:8") + PORT_DIPSETTING( 0x80, "1" ) + PORT_DIPSETTING( 0x00, "2" ) + + PORT_START("DSW3") // AY8910 port A + PORT_DIPNAME( 0x01, 0x01, "Limit" ) PORT_DIPLOCATION("DSW3:1") + PORT_DIPSETTING( 0x01, "300" ) + PORT_DIPSETTING( 0x00, "500" ) + PORT_DIPNAME( 0x06, 0x06, "Limit In" ) + PORT_DIPSETTING( 0x06, DEF_STR( Off ) ) PORT_DIPLOCATION("DSW3:2,3") + PORT_DIPSETTING( 0x04, "10" ) + PORT_DIPSETTING( 0x02, "20" ) + PORT_DIPSETTING( 0x00, "30" ) + PORT_DIPNAME( 0x18, 0x18, "Min Bet" ) PORT_DIPLOCATION("DSW3:4,5") + PORT_DIPSETTING( 0x18, "1" ) + PORT_DIPSETTING( 0x10, "5" ) + PORT_DIPSETTING( 0x08, "9" ) + PORT_DIPSETTING( 0x00, "12" ) + PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW3:6") // marked as reserved and off in manual + PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW3:7") // marked as reserved and off in manual + PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + PORT_DIPNAME( 0x80, 0x00, "Memo Safe" ) PORT_DIPLOCATION("DSW3:8") // marked as on in manual + PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) + PORT_DIPSETTING( 0x00, DEF_STR( On ) ) + + PORT_START("DSW4") // AY8910 port B + PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW4:1,2,3") + PORT_DIPSETTING( 0x07, DEF_STR( 1C_5C ) ) + PORT_DIPSETTING( 0x06, "1 Coin / 10 Credits" ) + PORT_DIPSETTING( 0x05, "1 Coin / 20 Credits" ) + PORT_DIPSETTING( 0x04, "1 Coin / 50 Credits" ) + PORT_DIPSETTING( 0x03, "1 Coin / 100 Credits" ) + PORT_DIPSETTING( 0x02, "1 Coin / 200 Credits" ) + PORT_DIPSETTING( 0x01, "1 Coin / 500 Credits" ) + PORT_DIPSETTING( 0x00, "1 Coin / 1000 Credits" ) + PORT_DIPNAME( 0x38, 0x38, "Key In" ) PORT_DIPLOCATION("DSW4:4,5,6") + PORT_DIPSETTING( 0x38, "1 Pulse / 5 Credits" ) + PORT_DIPSETTING( 0x30, "1 Pulse / 10 Credits" ) + PORT_DIPSETTING( 0x28, "1 Pulse / 20 Credits" ) + PORT_DIPSETTING( 0x20, "1 Pulse / 50 Credits" ) + PORT_DIPSETTING( 0x18, "1 Pulse / 100 Credits" ) + PORT_DIPSETTING( 0x10, "1 Pulse / 200 Credits" ) + PORT_DIPSETTING( 0x08, "1 Pulse / 500 Credits" ) + PORT_DIPSETTING( 0x00, "1 Pulse / 1000 Credits" ) + PORT_DIPNAME( 0xc0, 0xc0, "Key Out" ) PORT_DIPLOCATION("DSW4:7,8") + PORT_DIPSETTING( 0xc0, "1" ) + PORT_DIPSETTING( 0x80, "5" ) + PORT_DIPSETTING( 0x40, "10" ) + PORT_DIPSETTING( 0x00, "100" ) +INPUT_PORTS_END + +// It runs in IM 0, thus needs an opcode on the data bus +INTERRUPT_GEN_MEMBER(skylncr_state::vblank_interrupt) +{ + if (m_nmi_enable) device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero); +} + + +/************************************* +* Machine Driver * +*************************************/ + +void skylncr_state::skylncr(machine_config &config) +{ + // basic machine hardware + Z80(config, m_maincpu, 12_MHz_XTAL/4); + m_maincpu->set_addrmap(AS_PROGRAM, &skylncr_state::mem_map); + m_maincpu->set_addrmap(AS_IO, &skylncr_state::io_map_skylncr); + m_maincpu->set_vblank_int("screen", FUNC(skylncr_state::vblank_interrupt)); + + NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); + + // 1x M5M82C255, or 2x PPI8255 + i8255_device &ppi0(I8255A(config, "ppi8255_0")); + ppi0.in_pa_callback().set_ioport("IN1"); + ppi0.in_pb_callback().set_ioport("IN2"); + ppi0.in_pc_callback().set_ioport("DSW1"); + + i8255_device &ppi1(I8255A(config, "ppi8255_1")); + ppi1.in_pa_callback().set_ioport("DSW2"); + ppi1.in_pb_callback().set_ioport("IN3"); + ppi1.in_pc_callback().set_ioport("IN4"); + + TICKET_DISPENSER(config, m_hopper, attotime::from_msec(50)); // duration guessed + + // 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(0, 512-1, 0, 256-1); + screen.set_screen_update(FUNC(skylncr_state::screen_update)); + + GFXDECODE(config, m_gfxdecode, m_palette, gfx_skylncr); + PALETTE(config, m_palette).set_entries(0x200); + + ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); + ramdac.set_addrmap(0, &skylncr_state::ramdac_map); + ramdac.set_color_base(0); + + ramdac_device &ramdac2(RAMDAC(config, "ramdac2", 0, m_palette)); + ramdac2.set_addrmap(0, &skylncr_state::ramdac2_map); + ramdac2.set_color_base(0x100); + + // sound hardware + SPEAKER(config, "mono").front_center(); + ay8910_device &aysnd(AY8910(config, "aysnd", 12_MHz_XTAL/8)); + aysnd.port_a_read_callback().set_ioport("DSW3"); + aysnd.port_b_read_callback().set_ioport("DSW4"); + aysnd.add_route(ALL_OUTPUTS, "mono", 1.0); +} + + +void skylncr_state::mbutrfly(machine_config &config) +{ + skylncr(config); + + m_maincpu->set_addrmap(AS_IO, &skylncr_state::io_map_mbutrfly); +} + + +void skylncr_state::neraidou(machine_config &config) +{ + skylncr(config); + + m_gfxdecode->set_info(gfx_neraidou); +} + + +void skylncr_state::sstar97(machine_config &config) +{ + skylncr(config); + + m_gfxdecode->set_info(gfx_sstar97); +} + + +void skylncr_state::bdream97(machine_config &config) +{ + skylncr(config); + + // basic machine hardware + m_maincpu->set_addrmap(AS_OPCODES, &skylncr_state::bdream97_opcode_map); + + m_gfxdecode->set_info(gfx_bdream97); +} + + +void skylncr_state::olymp(machine_config &config) +{ + skylncr(config); + + // basic machine hardware + m_maincpu->set_addrmap(AS_OPCODES, &skylncr_state::olymp_opcode_map); +} + + +/********************************** +* ROM Load * +**********************************/ +/* + +Sky Lancer PCB Layout +--------------------- + + |--------------------------------------------| + _| ROM.U33 | +| | +| ROM.U32 | +| WF19054 | +| | +|_ | + | 6264 | + | |------| 6116 | + _| DSW4(8) |ACTEL | | +| DSW3(8) |A1010B| | +| DSW2(8) | | 6264 | +| DSW1(8) |------| | +| 6264 | +| M5M82C255 | +| | +| ROM.U35 | +|3.6V_BATT | +|_ 6116 Z80 12MHz | + |--------------------------------------------| +Notes: + Z80 @ 3.0MHz [12/4] + WF19054 = AY-3-8910 @ 1.5MHz [12/8] +*/ + +ROM_START( skylncr ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "27512.u35", 0x00000, 0x10000, CRC(98b1c9fe) SHA1(9ca1706d25038a078fb07ba5c2e6681ed468bc88) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "574200.u32", 0x00000, 0x80000, CRC(b36f11fe) SHA1(1d8660ac1ca44e33976ac14210e4a3a201f8f3c4) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD( "574200.u33", 0x00000, 0x80000, CRC(19b25221) SHA1(2f32d337125a9fd0bc7f50713b05e564fd4f81b2) ) +ROM_END + +ROM_START( butrfly ) // this has original Bordun copyright in ROMs and test mode in Chinese + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "sub-pcb.bin", 0x00000, 0x10000, CRC(f5618f8e) SHA1(390b238821b195f444e69c45786617524e6f5394) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(2ff775ea) SHA1(2219c75cbac2969485607446ab116587bdee7278) ) + ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(029d2214) SHA1(cf8256157db0b297ed457b3da6b6517907128843) ) + ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(37bad677) SHA1(c077f0c07b097b376a01e5637446e4c4f82d9e28) ) + ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(d14c7713) SHA1(c229ef64f3b0a04ff8e27bc56cff6a55ca34b80c) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) ) + ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) ) + ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(226cb483) SHA1(89efa0e11700bcab0024a6058a5f1ee6b4a09953) ) + ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(a69b5994) SHA1(f7f849c752740089a49dc6693822466d73010ea0) ) +ROM_END + +ROM_START( butrflybl ) // this has Bordun copyright removed and test mode in English + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "butterfly.prg", 0x00000, 0x10000, CRC(b35b289c) SHA1(5a02bfb6e1fb608099b9f491c10795ef888a3b36) ) // Mata Electronic / Sen Xing Trading copyright instead of Bordun + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(2ff775ea) SHA1(2219c75cbac2969485607446ab116587bdee7278) ) + ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(029d2214) SHA1(cf8256157db0b297ed457b3da6b6517907128843) ) + ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(37bad677) SHA1(c077f0c07b097b376a01e5637446e4c4f82d9e28) ) + ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(d14c7713) SHA1(c229ef64f3b0a04ff8e27bc56cff6a55ca34b80c) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) // u56 and u58 are slightly modified to erase the Bordun copyright on the title screen + ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) ) + ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) ) + ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(a53daaef) SHA1(7b88bb986bd5e47576163d6999f8770c720c5bfc) ) + ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) +ROM_END + +ROM_START( mbutrfly ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "magical_butterfy_x4_cleco.bin", 0x00000, 0x10000, CRC(2391778f) SHA1(f82ee9fb571547fda70867e091317779e2fe6e80) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "mb.u29", 0x00000, 0x20000, CRC(294b1cc5) SHA1(56f143d7d96b9ace0973d7001a13e7e55967e70a) ) + ROM_LOAD16_BYTE( "mb.u31", 0x00001, 0x20000, CRC(c6f4e629) SHA1(97334c7dcfea9a405996c06a79cf3c34a360f807) ) + ROM_LOAD16_BYTE( "mb.u33", 0x40000, 0x20000, CRC(72d22790) SHA1(d7a995e95f17bd4324f02aa16d23bfd78f95b5c5) ) + ROM_LOAD16_BYTE( "mb.u35", 0x40001, 0x20000, CRC(fdaa2288) SHA1(199323c2bd2af0d9b1d254a330670e2845f21dd9) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "mb.u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) ) // identical to butterfly. + ROM_LOAD16_BYTE( "mb.u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) ) // identical to butterfly. + ROM_LOAD16_BYTE( "mb.u56", 0x40000, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) // this one is straight fixed for reel tiles 6C-DF. + ROM_LOAD16_BYTE( "mb.u58", 0x40001, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) // identical to butterfly. +ROM_END + +ROM_START( gallag50 ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "27512.u9", 0x00000, 0x10000, CRC(355f8c3b) SHA1(d419fcb96bf936eaf7afb1a4b38a9e1d2a191686) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "27c301.u29", 0x00000, 0x20000, CRC(adf3208a) SHA1(251e94efe90b8250cb8d75255bd5b58a6b7825a7) ) + ROM_LOAD16_BYTE( "27c301.u31", 0x00001, 0x20000, CRC(24f20819) SHA1(a6fd1febe061f84e2bf3609bbf7c95912a04db70) ) + ROM_LOAD16_BYTE( "27c301.u33", 0x40000, 0x20000, CRC(7ec63f5a) SHA1(47e91f21a674a949b0085cf2d8463da245328db3) ) + ROM_LOAD16_BYTE( "27c301.u35", 0x40001, 0x20000, CRC(68c186d6) SHA1(6e8b5d489c4ba2a65dadf3a8cb3c07c2fedc1cb1) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "27c301.u52", 0x00000, 0x20000, CRC(f3de59f4) SHA1(3b70a8677647a54333049a59cf01ba2c63c33d87) ) + ROM_LOAD16_BYTE( "27c301.u54", 0x00001, 0x20000, CRC(f399751b) SHA1(2b7f3ed4181d654b67154b9587ee971ee881f35c) ) + ROM_LOAD16_BYTE( "27c301.u56", 0x40000, 0x20000, CRC(7eec4edf) SHA1(897fbbcda8d1c42b3a59f0f2f68e295e054d062d) ) + ROM_LOAD16_BYTE( "27c301.u58", 0x40001, 0x20000, CRC(afd0d391) SHA1(cc024d37cc23f94ef09a8a543cb1604e3f82c306) ) +ROM_END + +/* + +Mad Zoo PCB Layout +------------------ + +|-----| |------| |---------------------------| +| |--| |--|ROM.U29 ROM.U52 | +| | +| DSW3(8) ROM.U31 ROM.U54 | +| KC89C72 | +| DSW4(8) ROM.U33 ROM.U56 | +|_ | + | PAL ROM.U35 ROM.U58 | + | |-------| | + _| |LATTICE| 6116 | +| 12MHz |1016 | | +| | | 6116 | +| 8255 |-------| | +| 6116 | +| DSW1(8) DSW2(8) | +| 8255 PAL ROM.U9 6116 | +| | +| 6264 Z80 6116 6116 | +|_ 6264 PAL BATTERY| + |--------------------------------------------| +Notes: + Z80 @ 3.0MHz [12/4] + KC89C72 = AY-3-8910 @ 1.5MHz [12/8] +*/ + +ROM_START( madzoo ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "27512.u9", 0x00000, 0x10000, CRC(98b1c9fe) SHA1(9ca1706d25038a078fb07ba5c2e6681ed468bc88) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "27c301.u29", 0x00000, 0x20000, CRC(44645bb8) SHA1(efaf88d63e09029aa023ddaf72dbd9ee1df10315) ) + ROM_LOAD16_BYTE( "27c301.u31", 0x00001, 0x20000, CRC(58267dbc) SHA1(dd64e4b44d10e2d93ded255622891f058b2b8bb9) ) + ROM_LOAD16_BYTE( "27c301.u33", 0x40000, 0x20000, CRC(6adb1c2c) SHA1(d782a778a34e6240a3ae09cd11124790864a9149) ) + ROM_LOAD16_BYTE( "27c301.u35", 0x40001, 0x20000, CRC(a8d3a174) SHA1(b668bb1db1d27aff52e808aa9b972f24693161b3) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "27c301.u52", 0x00000, 0x20000, CRC(dd1997ed) SHA1(9197a0b4a0b6284ae7eeb6364c87589f6f8a614d) ) + ROM_LOAD16_BYTE( "27c301.u54", 0x00001, 0x20000, CRC(a654a6df) SHA1(54292953df1103ad830e1f40fdf96c48e0e13be7) ) + ROM_LOAD16_BYTE( "27c301.u56", 0x40000, 0x20000, CRC(f2e3c394) SHA1(8e09516fe822d7c125be57b154c896ab3e024f98) ) + ROM_LOAD16_BYTE( "27c301.u58", 0x40001, 0x20000, CRC(65d2015b) SHA1(121494a2684276276e2504d6f853718e93f4d458) ) +ROM_END + +ROM_START( leader ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "leader.prg", 0x00000, 0x10000, CRC(1a6e1129) SHA1(639f687e7720bab89628b377dca0475f17a35041) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "leadergfx1.dmp11", 0x00000, 0x20000, CRC(08acae31) SHA1(8b93066a2159e56607499fe1b1748a70a73a326c) ) + ROM_LOAD16_BYTE( "leadergfx1.dmp21", 0x00001, 0x20000, CRC(88cd7a49) SHA1(f7187c7e3e584180de03998f376001f8d5966882) ) + ROM_LOAD16_BYTE( "leadergfx1.dmp12", 0x40000, 0x20000, CRC(e57e145e) SHA1(3f6169ed1d907de3438787c02dc53c73ca6bdb73) ) + ROM_LOAD16_BYTE( "leadergfx1.dmp22", 0x40001, 0x20000, CRC(e8368d29) SHA1(19e7d7d6e320f5f06e91013cb4c92b3987dbe24e) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "leadergfx2.dmp11", 0x00000, 0x20000, CRC(1d62edf4) SHA1(7ba43bf0d0d0cadd5c7fcbe940ecf3fab5c9127b) ) + ROM_LOAD16_BYTE( "leadergfx2.dmp21", 0x00001, 0x20000, CRC(57b9d159) SHA1(ee98aea160653d55017bd893cc253d23c7b1faf4) ) + ROM_LOAD16_BYTE( "leadergfx2.dmp12", 0x40000, 0x20000, CRC(91e73bf9) SHA1(90a9c1119ae05bbd66a4d3c2266ec02cc53969bd) ) + ROM_LOAD16_BYTE( "leadergfx2.dmp22", 0x40001, 0x20000, CRC(04cc0118) SHA1(016ccbe7daf8c4676830aadcc906a64e2826d11a) ) +ROM_END + +ROM_START( leadera ) // this has the same GFX ROMs as butrfly, with different program + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "leader 2ka.bin", 0x00000, 0x10000, CRC(2664db55) SHA1(de4c07a8ba8fab772441395b6d05272ee54d9614) ) // on sub board with Altera EPM7032 + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(2ff775ea) SHA1(2219c75cbac2969485607446ab116587bdee7278) ) + ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(029d2214) SHA1(cf8256157db0b297ed457b3da6b6517907128843) ) + ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(37bad677) SHA1(c077f0c07b097b376a01e5637446e4c4f82d9e28) ) + ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(d14c7713) SHA1(c229ef64f3b0a04ff8e27bc56cff6a55ca34b80c) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) ) + ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) ) + ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(a53daaef) SHA1(7b88bb986bd5e47576163d6999f8770c720c5bfc) ) + ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) +ROM_END + +/* + Neraidoula + + There is a complete screen of the game Out Run + inside the graphics ROMs. + Maybe it's a leftover, or it's a sort of stealth game. +*/ +ROM_START( neraidou ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "aepi.prg", 0x00000, 0x10000, CRC(7ac74830) SHA1(1e3322341711e329b40d94ac6ec25fbafb1d4d62) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "ldrbfl4.bin", 0x00000, 0x20000, CRC(9424c24d) SHA1(4fcf66b641db14b5096d0de75a134d2d35c6eb9b) ) + ROM_LOAD16_BYTE( "ldrbfl2.bin", 0x00001, 0x20000, CRC(467dd56b) SHA1(5c64ee7ff2f4cc127b57342daf63c392c5155344) ) + ROM_LOAD16_BYTE( "ldrbfl3.bin", 0x40000, 0x20000, CRC(810ac7f5) SHA1(f0e680a1813d01e4ca4da97c3c45e9373361620b) ) + ROM_LOAD16_BYTE( "ldrbfl1.bin", 0x40001, 0x20000, CRC(c3bd4dc0) SHA1(2696321846e09359122447e6b60db29c5742a36a) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "ldrbfl8.bin", 0x00000, 0x20000, CRC(74992877) SHA1(f10f90f844198bba49fc3c74b1e8f40821cd1b56) ) + ROM_LOAD16_BYTE( "ldrbfl6.bin", 0x00001, 0x20000, CRC(4b9fb756) SHA1(21d5abbc19a7e3277316d0ac616bdf0819e563b7) ) + ROM_LOAD16_BYTE( "ldrbfl7.bin", 0x40000, 0x20000, CRC(a1842082) SHA1(0790c1c1c268fe13f2613e594fdf09daae19bbd0) ) + ROM_LOAD16_BYTE( "ldrbfl5.bin", 0x40001, 0x20000, CRC(aa0a9b4e) SHA1(e09e6d3c5283ace1f1c6999cdc97e7dde9105338) ) +ROM_END + +/* + Missing In Action. + from Vegas. + + People call it Ypovrixio (Submarine). + But is not the real title. +*/ +ROM_START( miaction ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "27c512_sub_board_miaction.bin", 0x00000, 0x10000, CRC(4865a6de) SHA1(cfa23eef004f9a29d462676d9b9b94a1e84064d6) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "u29.bin", 0x00000, 0x20000, CRC(14d2a342) SHA1(5745a4db5af55072e49de80fdc29a33dd78af68e) ) + ROM_LOAD16_BYTE( "u31.bin", 0x00001, 0x20000, CRC(9079a3d2) SHA1(b4c624cf7bf45d7879118dac7d999d36717e0395) ) + ROM_LOAD16_BYTE( "u33.bin", 0x40000, 0x20000, CRC(9cf17008) SHA1(9fe1d1522ef0ca271cbe4105f79c55462cec9078) ) + ROM_LOAD16_BYTE( "u35.bin", 0x40001, 0x20000, CRC(e04d0ae8) SHA1(36ae96302225e7485882ec911b04e24cc2bd9e8d) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "u52.bin", 0x00000, 0x20000, CRC(e02ed758) SHA1(a90a3889522f3a8b3f1a4642c191dea8ec6cad21) ) + ROM_LOAD16_BYTE( "u54.bin", 0x00001, 0x20000, CRC(4724f35b) SHA1(a8117adf903238a1aca16c1e1468d0684a1d5b95) ) + ROM_LOAD16_BYTE( "u56.bin", 0x40000, 0x20000, CRC(62ca6bc8) SHA1(2aa2a04c18bf25da509e18de7a32d945a084f37a) ) + ROM_LOAD16_BYTE( "u58.bin", 0x40001, 0x20000, CRC(54e49fa5) SHA1(31e7fb65b78ddf429c794fe94ff63fe5650a9787) ) +ROM_END + +/* + Tiger (slot). + Unknown manufacturer. + + Encrypted program. + Program seems close to Missing In Action. + +*/ +ROM_START( tigerslt ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "27c512_sub_board_tiger.bin", 0x00000, 0x10000, CRC(3c4181bf) SHA1(afc4fcd7ec9a48406242fe7e01a32e1a20216330) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "27c301.u29", 0x00000, 0x20000, CRC(adfdc5d6) SHA1(cdbdf43c081fe5bf6c5435fcd68329930f486b9b) ) + ROM_LOAD16_BYTE( "27c301.u31", 0x00001, 0x20000, CRC(e5054f16) SHA1(c6652fd48cf9ec0dde7ab67da24938e5a845e62f) ) + ROM_LOAD16_BYTE( "27c301.u33", 0x40000, 0x20000, CRC(8f162664) SHA1(1777262177820f0be91e5a77e8ff4c3dae819049) ) + ROM_LOAD16_BYTE( "27c301.u35", 0x40001, 0x20000, CRC(c46d51b6) SHA1(340a627d33433791d3b17736c04267fb3b53d12b) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "27c301.u52", 0x00000, 0x20000, CRC(fba16aa8) SHA1(750a462c507363eca6e9dbcdf5fa07581165758a) ) + ROM_LOAD16_BYTE( "27c301.u54", 0x00001, 0x20000, CRC(6631f487) SHA1(9ac5c2bc177479297b605c4c54ad91fc2e3358e6) ) + ROM_LOAD16_BYTE( "27c301.u56", 0x40000, 0x20000, CRC(9168854f) SHA1(2b9b9b9aa23cb5521b4b25b878911e5029506e47) ) + ROM_LOAD16_BYTE( "27c301.u58", 0x40001, 0x20000, CRC(1d4e4ae8) SHA1(0a1a0b68174bb8954e302f75200fbd642d5275da) ) +ROM_END + + +/* + 明星 97 (Ming Xing 97) / Super Star 97 + Bordun International. + + For amusement only (as seen in the title). + PCB looks similar to Sky Lancer. + + 1x M5M82C255ASP for I/O, + 1x daughterboard with Z80 CPU, + 1x AY-3-8910A + + 1x Xilinx XC2064-33 CPLD... + + 1x 12.000 Mhz crystal + + 2x UM70C171-66 + 1x HM6116LP-4 + 5x HM6116L-120 + + Unfortunately, one extra ROM (u48) is blank. + Seems to be the one that store the palette at offset $C000. + + BP 170 to see the palette registers... + +*/ +ROM_START( sstar97 ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "27256.u15", 0x0000, 0x8000, CRC(a5da4f92) SHA1(82ac70bd379649f130db017aa226d0247db0f3cd) ) + ROM_LOAD( "unknown.u48", 0x8000, 0x8000, BAD_DUMP CRC(9f4c02e3) SHA1(05975184130ea7dd3bb5d32eff77b585bd53e6b5) ) // palette borrowed from other game + + ROM_REGION( 0x80000, "gfx1", 0 ) // All ROMs are 28-pins mask ROMs dumped as Fujitsu MB831000 or TC531000 (mask ROM). + ROM_LOAD16_BYTE( "bor_dun_4.u23", 0x00000, 0x20000, CRC(d0d0ead1) SHA1(00bfe691cb9020c5d7e21d80a1e059ea2155aad8) ) + ROM_LOAD16_BYTE( "bor_dun_2.u25", 0x00001, 0x20000, CRC(2b0f07b5) SHA1(9bcde623e53697c4b68d2f083f6254596aee64eb) ) + ROM_LOAD16_BYTE( "bor_dun_3.u24", 0x40000, 0x20000, CRC(3c7da3f1) SHA1(8098b33a779fb697984b97f2d7edb9874e6e19d9) ) + ROM_LOAD16_BYTE( "bor_dun_1.u26", 0x40001, 0x20000, CRC(36efdca6) SHA1(e614fbba77e5c7a1e7a1d2970b4f945ee0468196) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) // All ROMs are 28-pins mask ROMs dumped as Fujitsu MB831000 or TC531000 (mask ROM). + ROM_LOAD16_BYTE( "bor_dun_8.u19", 0x00000, 0x20000, CRC(adf0b7ce) SHA1(41d9fb16eb20e1fd2960117b7e4ea23a97b88961) ) + ROM_LOAD16_BYTE( "bor_dun_6.u21", 0x00001, 0x20000, CRC(37be2cbe) SHA1(78acda58aab605cb992c3b9fbaf18d38f768ed1a) ) + ROM_LOAD16_BYTE( "bor_dun_7.u20", 0x40000, 0x20000, CRC(43908665) SHA1(41b9cee0723d9da6934ab7934012fb1625a8f080) ) + ROM_LOAD16_BYTE( "bor_dun_5.u22", 0x40001, 0x20000, CRC(ca17a632) SHA1(d491310ccdbe9b59a1e607f9254646f20700d79d) ) +ROM_END + +/* + 蝴蝶梦 97 (Húdié Mèng 97) + Game is encrypted and needs better decoded graphics. +*/ +ROM_START( bdream97 ) + ROM_REGION( 0x10000, "maincpu", 0 ) + ROM_LOAD( "27c512_subboard.bin", 0x00000, 0x08000, CRC(b0056324) SHA1(8299198d5e7ed50967f380ba0fddff5a39eee857) ) + ROM_CONTINUE( 0x0c000, 0x04000 ) + ROM_CONTINUE( 0x08000, 0x04000 ) + + ROM_REGION( 0x80000, "gfx1", 0 ) // All ROMs are 27010. + ROM_LOAD16_BYTE( "27c010.u20", 0x00000, 0x20000, CRC(df1fd438) SHA1(8da4d116e768a3c269a2031db6bf38a5b7707029) ) + ROM_LOAD16_BYTE( "27c010.u22", 0x00001, 0x20000, CRC(e66910eb) SHA1(454dc47caf4ae9408c3d0b759f4a32d346f86ffe) ) + ROM_LOAD16_BYTE( "27c010.u21", 0x40000, 0x20000, CRC(b984f5bd) SHA1(9a21b46d6d497271cd589e01af3f3143946980b1) ) + ROM_LOAD16_BYTE( "27c010.u23", 0x40001, 0x20000, CRC(2b6e6fd7) SHA1(cf0c66c90c6ab3ebc69ebe1e4f29b69b72edfdc2) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) // All ROMs are 27010. + ROM_LOAD16_BYTE( "27c010.u24", 0x00000, 0x20000, CRC(b77f3fc5) SHA1(63f7b46ed19f256a6d84624e191dc1719a57cbed) ) + ROM_LOAD16_BYTE( "27c010.u26", 0x00001, 0x20000, CRC(27cd64ef) SHA1(6b39b2919aca967f72fa16cd61b1641d0fb98d88) ) + ROM_LOAD16_BYTE( "27c010.u25", 0x40000, 0x20000, CRC(bdebdf35) SHA1(245247b23ddeded32519608f4696205bb5541ccc) ) + ROM_LOAD16_BYTE( "27c010.u27", 0x40001, 0x20000, CRC(0a266de4) SHA1(0ff9ad793e77d5419bd446cb73d4968e42305353) ) +ROM_END + +/* + Sonik Fighter. + Greek Version By ZBOUNOS (Z GAMES). + Year 2000. + + Multiple Butterfly type with naked girls. + + new features and hold a pair. + + jackpot. + + tetris game?. + + Program ROM is encrypted. +*/ +ROM_START( sonikfig ) + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "subboard_27c512.bin", 0x00000, 0x10000, CRC(f9b5b03e) SHA1(3832a7d70b41052f9dca46faa6f311ccc5a817b7) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "1__am27c100.u29", 0x00000, 0x20000, CRC(69824294) SHA1(a221ab3e5d50435c10e3cd4601cfda1c87038a74) ) + ROM_LOAD16_BYTE( "2__am27c100.u31", 0x00001, 0x20000, CRC(5224ed08) SHA1(3ba9af7557f13bf31c529bff7b2b8cfd6e71552c) ) + ROM_LOAD16_BYTE( "3__am27c100.u33", 0x40000, 0x20000, CRC(38fef15c) SHA1(00f7578bac395421fa3289748f85cf3b9d80e04b) ) + ROM_LOAD16_BYTE( "4__am27c100.u35", 0x40001, 0x20000, CRC(6193d30d) SHA1(390b3f451224eb4236c6c921d34b25b702d366e0) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "5__am27c100.u52", 0x00000, 0x20000, CRC(56921033) SHA1(25086b0f5978df04b28b60a30e271f4364112c96) ) + ROM_LOAD16_BYTE( "6__am27c100.u54", 0x00001, 0x20000, CRC(72802c6c) SHA1(c552d438399fb8c983e995d5e78e591982ef96e5) ) + ROM_LOAD16_BYTE( "7__am27c100.u56", 0x40000, 0x20000, CRC(90a09327) SHA1(3bb1150ec397627cc04b46d2bf07538c55e7f116) ) + ROM_LOAD16_BYTE( "8__am27c100.u58", 0x40001, 0x20000, CRC(b02ed0ce) SHA1(ec8ab64210a1b10cdba5ee179e46fc8d6a1a67b6) ) +ROM_END + +/* +PCB marked 'ROLLA REV. 1' and 'CTE 001 94V-0 0205' + +1 Winbond W77E58P on a small sub board (beefed up 8052 with undumped internal EPROM) +1 ispLSI 1016E +1 JFC 95101 (AY8910 compatible) +4 8-dip banks +1 24.00 MHz XTAL (on the daughterboard) + +Has Random Games in GFX, possibly pointing to superb2k (same producer) also using a 8052 derived CPU under the epoxy block +*/ + +ROM_START( rolla ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "545a", 0x0000, 0x8000, NO_DUMP ) // internal flash EPROM, security bit set + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "4w s1.u29", 0x00000, 0x20000, CRC(8b02800e) SHA1(22ae265e8d0bca403be4b4a82b43c526d9407dcf) ) + ROM_LOAD16_BYTE( "4w s2.u31", 0x00001, 0x20000, CRC(efa631ca) SHA1(c924277c64fc20e0d841be8fd1e2a4718dd229f1) ) + ROM_LOAD16_BYTE( "4w s3.u33", 0x40000, 0x20000, CRC(8fdc2d33) SHA1(61cc36caf52487ac863dbec1c40f3ef93e57a505) ) + ROM_LOAD16_BYTE( "4w s4.u35", 0x40001, 0x20000, CRC(9e86abfa) SHA1(fe7e8222051810fd5e0a584967764d71d99bf8fe) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "4w g1.u52", 0x00000, 0x20000, CRC(88036f9e) SHA1(fa93bce2c6eccf70ee23fdd320ee56dcdb6d99e3) ) + ROM_LOAD16_BYTE( "4w g2.u54", 0x00001, 0x20000, CRC(0142ba31) SHA1(e9aed07f112f68fb598bbc841666d5516479b06c) ) + ROM_LOAD16_BYTE( "4w g3.u56", 0x40000, 0x20000, CRC(4324d5c0) SHA1(9c57385eda6a069e455b8cd9fb45db90f1966ecf) ) + ROM_LOAD16_BYTE( "4w g4.u58", 0x40001, 0x20000, CRC(1cce85f1) SHA1(f35709b29a13917fe3c69240b4ab03aa6bdc3a3b) ) +ROM_END + +// this runs on a Rolla PCB with a Z80 + logic on a daughterboard +ROM_START( score5 ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "27c512_suboard.bin", 0x00000, 0x10000, CRC(a0670df0) SHA1(66c7f990141411c71978ec4500ea5a92264576e0) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "1_am27c100.u29", 0x00000, 0x20000, CRC(42b03f90) SHA1(490ca43284e58931b8334ddeae3242cfd0a7a700) ) + ROM_LOAD16_BYTE( "2_am27c100.u31", 0x00001, 0x20000, CRC(12ab7866) SHA1(5d608a9d569b5a7ebd2cb0cf2b2c95463c421c87) ) + ROM_LOAD16_BYTE( "3_am27c100.u33", 0x40000, 0x20000, CRC(ffb88d0a) SHA1(b14147c96d81e5838bccf3c3df08fc26b3e917ad) ) + ROM_LOAD16_BYTE( "4_am27c100.u35", 0x40001, 0x20000, CRC(91176aac) SHA1(18aab2578f4db1f04fb0570be685aa28a511d099) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "5_am27c100.u52", 0x00000, 0x20000, CRC(d4d8e699) SHA1(5ba9e8c634fde06e55362f47fbd49503a9da2ed3) ) + ROM_LOAD16_BYTE( "6_am27c100.u54", 0x00001, 0x20000, CRC(59631eaf) SHA1(a7f8dfc6737e6db6be8311e054f1e07b65792a93) ) + ROM_LOAD16_BYTE( "7_am27c100.u56", 0x40000, 0x20000, CRC(801881a4) SHA1(fe0914db7d178c6d689682cb6e2af4ba782eaf8e) ) + ROM_LOAD16_BYTE( "8_am27c100.u58", 0x40001, 0x20000, CRC(db20c424) SHA1(537c3b4dfb532473955042a58d204aebf60e950e) ) +ROM_END + +// this runs on a Rolla PCB with an unverified CPU enclosed in an epoxy block. GFX ROMs are half sized if compared to all the other supported sets. +ROM_START( superb2k ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "v5.u9", 0x00000, 0x10000, CRC(dbbc3062) SHA1(fd020571a610ea60ef207fd709e737506bf9300a) ) // ROM was outside the epoxy block + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "u29", 0x00000, 0x10000, CRC(b876a2a4) SHA1(e52020b71cf8e98f8d5f5caf98ec3bb2a0cd09f8) ) + ROM_LOAD16_BYTE( "u31", 0x00001, 0x10000, CRC(ab994cab) SHA1(7f50534a4c875049c8e80ec734ff4c5343f40d96) ) + ROM_LOAD16_BYTE( "u33", 0x40000, 0x10000, CRC(bbe554d4) SHA1(18b59b25d59f94a06ed59908b7d03f1adda8d90e) ) + ROM_LOAD16_BYTE( "u35", 0x40001, 0x10000, CRC(bbef9385) SHA1(f8aa5787ef6c510617c847a231c7e4cf59d7003f) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "u52", 0x00000, 0x10000, CRC(b0bb947a) SHA1(6822dd82b9be72b47ecaa412de4e070b372be170) ) + ROM_LOAD16_BYTE( "u54", 0x00001, 0x10000, CRC(065aa631) SHA1(ae5e8a952bd0a6b052ab7636240e0ebc495f09aa) ) + ROM_LOAD16_BYTE( "u56", 0x40000, 0x10000, CRC(b9121b69) SHA1(9a46444a63977d45392c6513550d132e5d2da365) ) + ROM_LOAD16_BYTE( "u58", 0x40001, 0x10000, CRC(0a7023aa) SHA1(2efdb4ad2acd90fff39144e08b012e39b571a682) ) +ROM_END + +ROM_START( olymp ) + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "v1.bin", 0x00000, 0x10000, CRC(3b49a550) SHA1(b3add0affba091eb6e1ad9a680de41226885fcec) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(26a83503) SHA1(84ed7b0c2552f2c7b4ef9b5b4f0303b9183a3a26) ) + ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(fe5bde82) SHA1(0925d230b4773eeb8caf5e12a4c30ac8607ae358) ) + ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(a33209f7) SHA1(f43cab5c78bb6a63c9633ba85a84c8ba1e2b1d2b) ) + ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(2f665877) SHA1(8eb779a87319e04f28ccc8165fdef7ac643b3602) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(17f77640) SHA1(570407e6fe282ad3a96ad43c8ff36a06ddb43579) ) + ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(c626aa6c) SHA1(145e35fe687a8b028d7fbdc08ce608ebdbe3fb46) ) + ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(312d1dda) SHA1(88b6214fff700698093591cdce052f36b2a4014f) ) + ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(f939f3f0) SHA1(0a089f78ca66d1e660cb854bbf5b0eb38e317a19) ) +ROM_END + +ROM_START( speedway ) // runs on a Rolla PCB with small sub board with main CPU, ROM and Altera EPM. Hack of Leader, extremely similar and still has Leader strings. + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "v3.bin", 0x00000, 0x10000, CRC(ef777180) SHA1(f1a554677543082eb7df2e204d0d4c987b7c6bbb) ) //TMS 27C512 + + ROM_REGION( 0x80000, "gfx1", 0 ) // all HN27C301AG + ROM_LOAD16_BYTE( "1.u29", 0x00000, 0x20000, CRC(72e001fe) SHA1(dbb02f8425c175d5ee401754e6c11ce4d429e621) ) + ROM_LOAD16_BYTE( "2.u31", 0x00001, 0x20000, CRC(a491bdcf) SHA1(793faa829de50f67a44541136b66407ee9744971) ) + ROM_LOAD16_BYTE( "3.u33", 0x40000, 0x20000, CRC(935fc941) SHA1(12e5f7fea932a86298928b70b342e0825a3caca1) ) + ROM_LOAD16_BYTE( "4.u35", 0x40001, 0x20000, CRC(aa8164ce) SHA1(027fa9743ad9d80bd86e59d684180f75dc6d60a0) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) // all HN27C301AG. Still has Bordun and Butterfly GFX in here. + ROM_LOAD16_BYTE( "5.u52", 0x00000, 0x20000, CRC(df984dbc) SHA1(7ea27465f9fd537fbdc1e13ca5842f656cbc2897) ) + ROM_LOAD16_BYTE( "6.u54", 0x00001, 0x20000, CRC(37fbdc4d) SHA1(8db83c43e7c43c2da5a39b86edff416c35fa275e) ) + ROM_LOAD16_BYTE( "7.u56", 0x40000, 0x20000, CRC(328f7912) SHA1(7f05217a18cfb316972cf96711276205e8098ee6) ) + ROM_LOAD16_BYTE( "8.u58", 0x40001, 0x20000, CRC(b93b221f) SHA1(efd6962a0f5e150c60d258fea116d726228dc39c) ) +ROM_END + +ROM_START( speedwaya ) // runs on a Rolla PCB with small sub board with main CPU, ROM and Altera EPM. All ROMs differ quite a bit from the other set. + ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) + ROM_LOAD( "sub.bin", 0x00000, 0x10000, CRC(78a6a047) SHA1(15b7b7e90ff2d2821edb081880be71fee4e222a8) ) //27C512 + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "1 sw.u29", 0x00000, 0x20000, CRC(998afc41) SHA1(509c70eee12a461b660abdc74a9dc8db181b76bd) ) + ROM_LOAD16_BYTE( "2 sw.u31", 0x00001, 0x20000, CRC(f143376a) SHA1(83913a31c89f5e06cebb686e89246762753131b9) ) + ROM_LOAD16_BYTE( "3 sw.u33", 0x40000, 0x20000, CRC(dea9a31c) SHA1(108dbee2a36ee2591a18be9a4336a1994370d612) ) + ROM_LOAD16_BYTE( "4 sw.u35", 0x40001, 0x20000, CRC(3bc35ea6) SHA1(eafd67c2abec810d4a86564f4d5d34059013e6e9) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "5 sw.u52", 0x00000, 0x20000, CRC(03af0672) SHA1(87fe8036ab270a5431751cfcccb4094372650173) ) + ROM_LOAD16_BYTE( "6 sw.u54", 0x00001, 0x20000, CRC(5cc4c0a8) SHA1(4cf01c5f34674ab26834ed8f32751e74fe1df1e7) ) + ROM_LOAD16_BYTE( "7 sw.u56", 0x40000, 0x20000, CRC(3adf8590) SHA1(7704e6b90567602497c52550bbd8831e876d1e5d) ) + ROM_LOAD16_BYTE( "8 sw.u58", 0x40001, 0x20000, CRC(da21a487) SHA1(6bf7b97e682da9b97f3165a4d718cfdeeb3d956e) ) +ROM_END + +ROM_START( seadevil ) // on a POCKBOY REV.0 PCB + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "v42 scr scm.u13", 0x00000, 0x10000, CRC(23b6eb48) SHA1(469d9f766ce96d2c850d611cd9a8b48545c71aaf) ) // on sub PCB, M27C512 + + ROM_REGION( 0x80000, "gfx1", 0 ) // all AM27C010 + ROM_LOAD16_BYTE( "1.u26", 0x00000, 0x20000, CRC(e032f4f7) SHA1(accf48ce1447931ca7f7fdabe1684cabed03fe5f) ) + ROM_LOAD16_BYTE( "2.u28", 0x00001, 0x20000, CRC(b8aa9742) SHA1(6c22ab987db6c10c8ae6c0278a5edc88b22fcb3a) ) + ROM_LOAD16_BYTE( "3.u22", 0x40000, 0x20000, CRC(84a09db8) SHA1(6487e5bf97f43c6478c5b986587399213d7ff724) ) + ROM_LOAD16_BYTE( "4.u24", 0x40001, 0x20000, CRC(d02354b9) SHA1(934663853c7d831eb4038c5f511acf2801b8be81) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) // all AM27C010 + ROM_LOAD16_BYTE( "5.u32", 0x00000, 0x20000, CRC(d079830f) SHA1(f12fad5c69545096255a9f79b1cf94bccf85320b) ) + ROM_LOAD16_BYTE( "6.u36", 0x00001, 0x20000, CRC(4db80352) SHA1(21ebd6e0e9fc712ee2c9bc61d2493b4208410260) ) + ROM_LOAD16_BYTE( "7.u30", 0x40000, 0x20000, CRC(64997653) SHA1(4328892974cbd2b42b864b01cd5d621a4a550bc6) ) + ROM_LOAD16_BYTE( "8.u34", 0x40001, 0x20000, CRC(469f8fe2) SHA1(5d271ed0925eceff0d5d095d2443c666de69a58e) ) +ROM_END + +ROM_START( spcliner ) // on a ROLLA PCB, might actually be another title, won't know until palette is fixed. GFX ROM loading is wrong. + ROM_REGION( 0x80000, "maincpu", 0 ) + ROM_LOAD( "9.sub", 0x00000, 0x10000, CRC(80f65def) SHA1(a0716d57ae4935a79d32971d0bcb9f40dd9f1d54) ) // on sub PCB + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD16_BYTE( "5.u22", 0x40000, 0x20000, CRC(522132fb) SHA1(395530f137e19c177a276b6159f14fad66f25f75) ) + ROM_LOAD16_BYTE( "6.u24", 0x40001, 0x20000, CRC(0ad80e17) SHA1(3a22f19d5aa329e666cc9a5f856723deaa575413) ) + ROM_LOAD16_BYTE( "7.u26", 0x00000, 0x20000, CRC(1ab7559d) SHA1(57f93fa8da50f5fb6099f6fe0be656accc3eacb1) ) + ROM_LOAD16_BYTE( "8.u28", 0x00001, 0x20000, CRC(2bdcb2e6) SHA1(08834ff52791934b705b77e59d0b12b3904d27cf) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD16_BYTE( "1.u30", 0x40000, 0x20000, CRC(700831b4) SHA1(6b129a0f16bbae2b0d789ee4023db4e3af2c6b71) ) + ROM_LOAD16_BYTE( "2.u32", 0x00000, 0x20000, CRC(8b770912) SHA1(89cfcc6f1d76c00b970cadfcc106f0fcd738ffa1) ) + ROM_LOAD16_BYTE( "3.u34", 0x40001, 0x20000, CRC(c8e64ae1) SHA1(cd5859e857a7771b3b11215f120567eef53f72cb) ) + ROM_LOAD16_BYTE( "4.u36", 0x00001, 0x20000, CRC(315e7e28) SHA1(c25ca2c9e4bf973cfe9e56a8dc849e53bdc1ebe3) ) +ROM_END + +ROM_START( blshark ) + ROM_REGION( 0x80000, "maincpu", 0 ) // on sub PCB + ROM_LOAD( "sub", 0x00000, 0x10000, CRC(ed005267) SHA1(b20c62d76d4d49ee42e1f2f922015bec3cbbd25d) ) + + ROM_REGION( 0x80000, "gfx1", 0 ) + ROM_LOAD( "u32", 0x00000, 0x80000, CRC(3f2f06f1) SHA1(eb1d29da6a454cf45e182f4ce0c8eab66d1d1713) ) + + ROM_REGION( 0x80000, "gfx2", 0 ) + ROM_LOAD( "u33", 0x00000, 0x80000, CRC(e7f53af5) SHA1(49a722e97e384056d36dfa2d4bf754e90505befe) ) +ROM_END + +/********************************** +* Driver Init * +**********************************/ + +void skylncr_state::init_sonikfig() +/* + Encryption: For each 8 bytes group, + swap byte #1 with #4 and #3 with #6. + + SWAPPED + / \ + 00 01 02 03 04 05 06 07 + \ / + SWAPPED + + 00 01 02 03 04 05 06 07 + \ \ / / + \ X / + \ / \ / + \ / \ / + X X + / \ / \ + / \ / \ + / X \ + / / \ \ + 00 04 02 06 01 05 03 07 +*/ +{ + uint8_t *const ROM = memregion("maincpu")->base(); + for (unsigned x = 0; x < 0x10000; x += 8) + { + std::swap(ROM[x + 1], ROM[x + 4]); + std::swap(ROM[x + 3], ROM[x + 6]); + } +} + +void skylncr_state::init_miaction() +/* + Encryption: + + 0000-0006 ---> unencrypted + 0007-4485 ---> xor'ed with 0x19 + 4486-7fff ---> xor'ed with 0x44 + 8000-bfff ---> seems unencrypted + c000-d25f ---> xor'ed with 0x44 + d260-dfff ---> seems unencrypted + e000-ffff ---> xor'ed with 0x19 + +*/ +{ + uint8_t *const ROM = memregion("maincpu")->base(); + + for (int x = 0x0007; x < 0x4485; x++) + { + ROM[x] = ROM[x] ^ 0x19; + } + + for (int x = 0x4486; x < 0x7fff; x++) + { + ROM[x] = ROM[x] ^ 0x44; + } + + for (int x = 0xc000; x < 0xd25f; x++) + { + ROM[x] = ROM[x] ^ 0x44; + } + + for (int x = 0xe000; x < 0xffff; x++) + { + ROM[x] = ROM[x] ^ 0x19; + } +} + +void skylncr_state::init_olymp() // very weird, needs to be checked / finished, putting RAM in the 0xac00-0xac3f range gets in game +{ + uint8_t *const ROM = memregion("maincpu")->base(); + + for (int x = 0x0000; x < 0x0007; x++) // this range doesn't seem encrypted + m_decrypted_opcodes[x] = ROM[x]; + + for (int x = 0x0007; x < 0x6500; x++) // in this range both data and opcodes appear to be xor'ed 0x40 + { + ROM[x] ^= 0x40; + m_decrypted_opcodes[x] = ROM[x]; + } + + for (int x = 0x6500; x < 0x10000; x++) // in this range data seems untouched and opcodes appear to be xor'ed 0x18 + m_decrypted_opcodes[x] = ROM[x] ^ 0x18; +} + +void skylncr_state::init_superb2k() // TODO: very preliminary, just enough to read some strings +{ + uint8_t *const rom = memregion("maincpu")->base(); + std::vector buffer(0x10000); + + memcpy(&buffer[0], rom, 0x10000); + + // descramble addresses. At a first glance, swaps seem to change if address line bits 13 or 14 are set (possibly 15 too, but not verified yet) + // the scrambled address line bits appear to be 1, 3, 6, 9 and 12 + // it's possible XORs and data lines swaps are involved, too, at least for opcodes + for (int i = 0x00000; i < 0x10000; i++) + { + switch (i & 0x6000) + { + case 0x0000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)]; break; // TODO: everything + case 0x2000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 1, 11, 10, 9, 8, 7, 3, 5, 4, 12, 2, 6, 0)]; break; // TODO: 0x200 blocks are good (see 0x3e00-0x3fff), rest to be determined + case 0x4000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 1, 11, 10, 3, 8, 7, 6, 5, 4, 9, 2, 12, 0)]; break; // TODO: 0x40 blocks are good, there's still at least a wrong swap (see 0x5200-0x52ff) + case 0x6000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 3, 11, 10, 1, 8, 7, 9, 5, 4, 12, 2, 6, 0)]; break; // TODO: 0x20 blocks are good (see 0x7fa0-0x7fbf) + } + } +} + +void skylncr_state::init_speedway() // TODO: complete this. These XORs and ranges have been derived by comparing this dump with leader, of which it's clearly a hack. +{ + uint8_t *const ROM = memregion("maincpu")->base(); + + for (int x = 0x0000; x < 0x10000; x++) + m_decrypted_opcodes[x] = ROM[x]; + + for (int x = 0x000d; x < 0x5000; x++) + { + ROM[x] = ROM[x] ^ 0x41; + m_decrypted_opcodes[x] = ROM[x]; + } + + for (int x = 0x5000; x < 0x53c2; x++) + m_decrypted_opcodes[x] = ROM[x] ^ 0x12; + + for (int x = 0x5400; x < 0x8000; x++) + { + ROM[x] = ROM[x] ^ 0x41; + m_decrypted_opcodes[x] = ROM[x]; + } + + for (int x = 0xc000; x < 0xc300; x++) + { + ROM[x] = ROM[x] ^ 0x08; + m_decrypted_opcodes[x] = ROM[x]; + } + + for (int x = 0xc300; x < 0xc368; x++) + m_decrypted_opcodes[x] = ROM[x] ^ 0x12; + + for (int x = 0xf690; x < 0xf74f; x++) + m_decrypted_opcodes[x] = ROM[x] ^ 0x12; + + for (int x = 0xf74f; x < 0x10000; x++) + { + ROM[x] = ROM[x] ^ 0x08; + m_decrypted_opcodes[x] = ROM[x]; + } +} + +void skylncr_state::init_speedwaya() // this was done by comparing with an ICE dump, should be correct. +{ + uint8_t *const ROM = memregion("maincpu")->base(); + + for (int x = 0x0000; x < 0x6500; x++) + ROM[x] ^= 0x40; + + // 0x6500 - 0xffff isn't xored +} + +void skylncr_state::init_leadera() +{ + uint8_t *const ROM = memregion("maincpu")->base(); + + for (int x = 0x000d; x < 0x4000; x++) + ROM[x] ^= 0x08; + + for (int x = 0x4000; x < 0x8000; x++) + ROM[x] ^= 0x10; + + for (int x = 0xc000; x < 0x10000; x++) + ROM[x] ^= 0x40; + + ROM[0x762a] = ROM[0x762b] = 0x00; // TODO: some minor protection? bypass for now +} + +void skylncr_state::init_butrfly() +{ + uint8_t *const ROM = memregion("maincpu")->base(); + + for (int x = 0x0000; x < 0x10000; x++) + ROM[x] = bitswap<8>(ROM[x] ^ 0x1b, 4, 2, 6, 7, 1, 5, 3, 0); +} + +void skylncr_state::init_blshark() // done by comparing code to skylancr, may be missing something +{ + uint8_t *const rom = memregion("maincpu")->base(); + std::vector buffer(0x10000); + + memcpy(&buffer[0], rom, 0x10000); + + for (int x = 0x00000; x < 0x10000; x++) + { + rom[x] = buffer[bitswap<24>(x, 23, 22, 21, 20, 19, 18, 17, 16, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0)]; + + if (x >= 0x0b) + rom[x] ^= 0xff; + } +} + +} // anonymous namespace + + +/**************************************************** +* Game Drivers * +****************************************************/ + +// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS +GAME( 1995, skylncr, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Bordun International", "Sky Lancer (Bordun, version U450C)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, butrfly, 0, skylncr, skylncr, skylncr_state, init_butrfly, ROT0, "Bordun International", "Butterfly Video Game (version A00)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, butrflybl, butrfly, skylncr, skylncr, skylncr_state, empty_init, ROT0, "bootleg", "Butterfly Video Game (version U350C)", MACHINE_SUPPORTS_SAVE ) +GAME( 1999, mbutrfly, 0, mbutrfly, mbutrfly, skylncr_state, init_mbutrfly, ROT0, "Bordun International", "Magical Butterfly (version U350C, protected)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, madzoo, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Bordun International", "Mad Zoo (version U450C)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, leader, 0, skylncr, leader, skylncr_state, empty_init, ROT0, "bootleg", "Leader (version Z 2E, Greece)", MACHINE_SUPPORTS_SAVE ) +GAME( 1995, leadera, leader, skylncr, leader, skylncr_state, init_leadera, ROT0, "bootleg", "Leader (version Z 2F, Greece)", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE ) // Needs correct protection emulation instead of ROM patch +GAME( 199?, speedway, 0, olymp, leader, skylncr_state, init_speedway, ROT0, "hack (Drivers)", "Speedway (set 1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Incomplete decryption (?) +GAME( 199?, speedwaya, speedway, skylncr, leader, skylncr_state, init_speedwaya, ROT0, "hack", "Speedway (set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Decryption should be correct (unless ICE dump was bad), but doesn't boot +GAME( 199?, gallag50, 0, skylncr, gallag50, skylncr_state, empty_init, ROT0, "bootleg", "Gallag Video Game / Petalouda (Butterfly, x50)", MACHINE_SUPPORTS_SAVE ) +GAME( 199?, neraidou, 0, neraidou, neraidou, skylncr_state, empty_init, ROT0, "bootleg", "Neraidoula", MACHINE_SUPPORTS_SAVE ) +GAME( 199?, miaction, 0, skylncr, skylncr, skylncr_state, init_miaction, ROT0, "Vegas", "Missing In Action", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) +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( 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 ) +GAME( 2000, spcliner, 0, skylncr, sonikfig, skylncr_state, init_sonikfig, ROT0, "Z Games", "Space Liner", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // game runs but screen is completely black due to palette mishandling +GAME( 199?, rolla, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Random Games", "unknown 'Rolla' slot machine", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // internal CPU ROM not dumped +GAME( 2000?,score5, 0, skylncr, score5, skylncr_state, init_sonikfig, ROT0, "Z Games", "Score 5", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // game runs but screen is completely black due to palette mishandling +GAME( 2000?,superb2k, 0, skylncr, skylncr, skylncr_state, init_superb2k, ROT0, "Random Games", "Super Butterfly 2000", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // encrypted / different CPU type ? +GAME( 2000, seadevil, 0, skylncr, score5, skylncr_state, init_sonikfig, ROT0, "Z Games", "Sea Devil", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // GFX ROM loading is wrong, causing severe GFX glitches +GAME( 2000, blshark, 0, skylncr, skylncr, skylncr_state, init_blshark, ROT0, "MDS Hellas", "Blue Shark (MDS Hellas)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // protection? diff --git a/src/mame/igs/igs_m027.cpp b/src/mame/igs/igs_m027.cpp index ffd350264e5..57e93d7f0cd 100644 --- a/src/mame/igs/igs_m027.cpp +++ b/src/mame/igs/igs_m027.cpp @@ -2830,7 +2830,7 @@ ROM_START( cjddz ) // PCB-0489-05-FM-1 ROM_LOAD16_WORD_SWAP( "m3.u27", 0x000000, 0x80000, CRC(520dc392) SHA1(0ab2620f20af8253806b6ff4e1d9d77a694da17c) ) ROM_REGION( 0x400000, "igs017_igs031:sprites", 0 ) - ROM_LOAD( "m4.u28", 0x000000, 0x400000, CRC(72487508) SHA1(9f4bbc858960ddaae403e4a3330b2345f6fd6cb3)) + ROM_LOAD( "m4.u28", 0x000000, 0x400000, CRC(72487508) SHA1(9f4bbc858960ddaae403e4a3330b2345f6fd6cb3) ) // OKI, sample tables are every 0x20000 starting at 0x40000 // 00000-1ffff and 20000-3ffff are likely music, always mapped at 20000 for any of the above banks @@ -2850,7 +2850,7 @@ ROM_START( cjddz217cn ) // PCB-0489-05-FM-1 ROM_LOAD16_WORD_SWAP( "text.u27", 0x000000, 0x80000, CRC(520dc392) SHA1(0ab2620f20af8253806b6ff4e1d9d77a694da17c) ) ROM_REGION( 0x400000, "igs017_igs031:sprites", 0 ) - ROM_LOAD( "igs_w05005w32m_f9ce_1d10.u28", 0x000000, 0x400000, CRC(72487508) SHA1(9f4bbc858960ddaae403e4a3330b2345f6fd6cb3)) + ROM_LOAD( "igs_w05005w32m_f9ce_1d10.u28", 0x000000, 0x400000, CRC(72487508) SHA1(9f4bbc858960ddaae403e4a3330b2345f6fd6cb3) ) // OKI, sample tables are every 0x20000 starting at 0x40000 // 00000-1ffff and 20000-3ffff are likely music, always mapped at 20000 for any of the above banks @@ -2870,7 +2870,7 @@ ROM_START( cjddz215cn ) ROM_LOAD16_WORD_SWAP( "ddz_text.u27", 0x000000, 0x80000, CRC(520dc392) SHA1(0ab2620f20af8253806b6ff4e1d9d77a694da17c) ) ROM_REGION( 0x400000, "igs017_igs031:sprites", 0 ) - ROM_LOAD( "ddz_ani.u28", 0x000000, 0x400000, CRC(72487508) SHA1(9f4bbc858960ddaae403e4a3330b2345f6fd6cb3)) + ROM_LOAD( "ddz_ani.u28", 0x000000, 0x400000, CRC(72487508) SHA1(9f4bbc858960ddaae403e4a3330b2345f6fd6cb3) ) // OKI, sample tables are every 0x20000 starting at 0x40000 // 00000-1ffff and 20000-3ffff are likely music, always mapped at 20000 for any of the above banks @@ -2878,6 +2878,45 @@ ROM_START( cjddz215cn ) ROM_LOAD( "ddz_sp.u4", 0x00000, 0x200000, CRC(7ef65d95) SHA1(345c587cd449d6d06908e9687480be76b2cb2d28) ) ROM_END +/* +Chaoji Dou Dizhu (V213CN) +IGS, 2004 + +PCB: IGS PCB-0489-07-FM-1 + +Main program ROM is missing. +SP-1 same as cjddz215cn and several others +TEXT same as cjddz215cn and several others +CG unique to this set +Main program ROM from cjddz215cn was put onto this board and works fine. + +IGS027 Sticker: Q1 +ROM String: WED NOV 3 17:21:49 2004 + FIGHT_213CN + +Oki Clock (from PAL): 1.000MHz [22/22] +Oki Pin 7: High +*/ +ROM_START( cjddz213cn ) + ROM_REGION( 0x04000, "maincpu", 0 ) + // Internal ROM of IGS027A ARM based MCU + ROM_LOAD( "q1_igs027a", 0x00000, 0x4000, CRC(124f4bee) SHA1(bf9785516ef36290c2a7bac307bb2d849f2045ae) ) + + ROM_REGION32_LE( 0x80000, "user1", 0 ) // external ARM data / prg + ROM_LOAD( "213cn.u17", 0x000000, 0x80000, NO_DUMP ) + + ROM_REGION( 0x80000, "igs017_igs031:tilemaps", 0 ) + ROM_LOAD16_WORD_SWAP( "text.u27", 0x000000, 0x80000, CRC(520dc392) SHA1(0ab2620f20af8253806b6ff4e1d9d77a694da17c) ) + + ROM_REGION( 0x400000, "igs017_igs031:sprites", 0 ) + ROM_LOAD( "cg.u28", 0x000000, 0x400000, CRC(168720a0) SHA1(edcd727e25386469c32d6fd117dd76eeb48ce0a6) ) + + // OKI, sample tables are every 0x20000 starting at 0x40000 + // 00000-1ffff and 20000-3ffff are likely music, always mapped at 20000 for any of the above banks + ROM_REGION( 0x200000, "oki", 0 ) + ROM_LOAD( "sp-1.u5", 0x00000, 0x200000, CRC(7ef65d95) SHA1(345c587cd449d6d06908e9687480be76b2cb2d28) ) +ROM_END + // 超级斗地主 加强版 (Chāojí Dòu Dìzhǔ Jiāqiáng Bǎn) ROM_START( cjddzp ) ROM_REGION( 0x04000, "maincpu", 0 ) @@ -3352,6 +3391,7 @@ GAMEL( 1999, fruitpar206us, fruitpar, oceanpar, fruitpar206us, igs_m027_stat GAME( 2004, cjddz, 0, cjddz, cjddz, igs_m027_state, init_cjddz, ROT0, "IGS", "Chaoji Dou Dizhu (V219CN)", 0 ) // 2004 date in internal ROM GAME( 2004, cjddz217cn, cjddz, cjddz, cjddz, igs_m027_state, init_cjddz, ROT0, "IGS", "Chaoji Dou Dizhu (V217CN)", 0 ) // 2004 date in internal ROM GAME( 2004, cjddz215cn, cjddz, cjddz, cjddz, igs_m027_state, init_cjddz, ROT0, "IGS", "Chaoji Dou Dizhu (V215CN)", 0 ) // 2004 date in internal ROM +GAME( 2004, cjddz213cn, cjddz, cjddz, cjddz, igs_m027_state, init_cjddz, ROT0, "IGS", "Chaoji Dou Dizhu (V213CN)", MACHINE_NOT_WORKING ) // missing external program ROM. 2004 date in internal ROM GAME( 2004, cjddzp, 0, cjddz, cjddzp, igs_m027_state, init_cjddzp, ROT0, "IGS", "Chaoji Dou Dizhu Jiaqiang Ban (S300CN)", MACHINE_NODEVICE_LAN ) // 2004 date in internal ROM GAME( 2005, cjddzlf, 0, cjddz, cjddz, igs_m027_state, init_cjddzlf, ROT0, "IGS", "Chaoji Dou Dizhu Liang Fu Pai (V109CN)", 0 ) // 2005 date in internal ROM GAME( 2005, cjtljp, 0, cjtljp, lhzb4, igs_m027_state, init_cjtljp, ROT0, "IGS", "Chaoji Tuolaji Jiaqiang Ban (V206CN)", 0 ) // 2005 date in internal ROM diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 0b5d2bb54d2..99a76a877c9 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -1251,6 +1251,7 @@ holdrma6 holdrma6a househrt househrta +hrtantny incachf indream indreama @@ -1292,6 +1293,7 @@ mnytreea moonfire moonwalt mrwoo +mrwoou mskitty mystarr mysteycm @@ -15143,6 +15145,7 @@ bmcpokr fengyunh mjmaglmp shendeng +xyddzhh @source:bmc/koftball.cpp jxzh @@ -15165,6 +15168,36 @@ bw2 @source:booth/apexc.cpp apexc +@source:bordun/att.cpp +lianhp2 +lianhp3 + +@source:bordun/skylncr.cpp +bdream97 +blshark +butrfly +butrflybl +gallag50 +leader +leadera +madzoo +mbutrfly +miaction +neraidou +olymp +rolla +score5 +seadevil +skylncr +sonikfig +spcliner +speedway +speedwaya +sstar97 +superb2k +tigerslt + + @source:brother/ax145.cpp ax145 @@ -20491,6 +20524,7 @@ amazonia amazonkp chessc2 cjddz +cjddz213cn cjddz215cn cjddz217cn cjddzlf @@ -32387,31 +32421,6 @@ skimaxx @source:misc/skyarmy.cpp skyarmy -@source:misc/skylncr.cpp -bdream97 -blshark -butrfly -butrflybl -gallag50 -leader -leadera -madzoo -mbutrfly -miaction -neraidou -olymp -rolla -score5 -seadevil -skylncr -sonikfig -spcliner -speedway -speedwaya -sstar97 -superb2k -tigerslt - @source:misc/sliver.cpp sliver slivera diff --git a/src/mame/misc/ddz.cpp b/src/mame/misc/ddz.cpp index 603befcb829..d736879d1df 100644 --- a/src/mame/misc/ddz.cpp +++ b/src/mame/misc/ddz.cpp @@ -3,7 +3,7 @@ /**************************************************************************** - 招级疯斗 - "Zhaoji Fengdou" - "Crazy Class" HW + 招级疯斗 - "Chaoji Fengdou" - "Crazy Class" HW driver by Angelo Salese, based off original ddz.cpp by ElSemi @@ -144,7 +144,7 @@ ROM_START( ddz ) ROM_LOAD("ddz.003.rom", 0x800000, 0x400000, CRC(61c9b5c9) SHA1(0438417398403456a1c49408881797a94aa86f49) ) ROM_END -/* "Zhaoji Fengdou" PCB +/* "Chaoji Fengdou" PCB ______________________________________________________________ | _________ ____________________ | __| HD74HC245P |ROM1 H28F320BDJ-TTL80 | @@ -171,7 +171,7 @@ ROM_END | _____ ___ JAMMA _____ Switch | |______| |_|_| | |_|_|_|_|_|_|_|_|_|_|_|_| |_________| */ -ROM_START( crzclass ) +ROM_START( crzclass ) // 超级疯斗 ROM_REGION32_LE( 0x1000000, "ipl", ROMREGION_ERASEFF ) ROM_REGION( 0x1000000, "enc_data", ROMREGION_ERASEFF ) @@ -228,7 +228,7 @@ void ddz_state::init_ddz() GAME( 200?, ddz, 0, ddz, ddz, ddz_state, init_ddz, ROT0, "IGS?", "Dou Dizhu", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) -GAME( 200?, crzclass, 0, ddz, ddz, ddz_state, init_ddz, ROT0, "TJF", "Zhaoji Fengdou", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // 'Crazy Class' +GAME( 200?, crzclass, 0, ddz, ddz, ddz_state, init_ddz, ROT0, "TJF", "Chaoji Fengdou", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // 'Crazy Class' GAME( 200?, baibians, 0, ddz, ddz, ddz_state, init_ddz, ROT0, "TJF", "Baibian Shuangkou", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) GAME( 200?, cjmx, 0, ddz, ddz, ddz_state, init_ddz, ROT0, "TJF", "Chaoji Mingxing", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) GAME( 2005, btlfront, 0, ddz, ddz, ddz_state, empty_init, ROT0, "TJF", "BattleFront", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // encrypted, V133F? diff --git a/src/mame/misc/skylncr.cpp b/src/mame/misc/skylncr.cpp deleted file mode 100644 index 2a044cd44c8..00000000000 --- a/src/mame/misc/skylncr.cpp +++ /dev/null @@ -1,2519 +0,0 @@ -// license:BSD-3-Clause -// copyright-holders:Roberto Fresca, David Haywood -/*************************************************************************************************** - - Sky Lancer / Butterfly / Mad Zoo / Super Star 97 and others... - Bordun International. - - Original preliminary driver by Luca Elia. - Additional Work: Roberto Fresca & David Haywood. - -**************************************************************************************************** - - Notes: - - - There are at least 3 different PCBs: Rolla, Sky and Cleco. - - - Some of the tiles look badly scaled down, and others appear to have columns swapped. - This might actually be correct due to different gfx encoding for different PCBs. - - - Skylncr and madzoo can run with the same program roms, they're basically graphics swaps. - - - To enter the Service Mode, press F2. All the game settings are there. - Change regular values using DIP switches, and jackpot value using STOP2 and STOP3. - To exit the mode, press START. You must reset the machine (F3) to update the changes. - - - Press key 0 to navigate between statistics pages. Press START to exit the mode. - -**************************************************************************************************** - - Settings: - - Pressing F2, you can enter the DIP switches settings. - Here the translated items: - - .---------------------------------------. - | DIP Switches Settings | - | | - | Main Game % Double-Up % | - | Clown % Reels Speed | - | Coin Scores Key In Scores | - | Payout Limit Key Out Score | - | Max Bet Min Bet | - | Special Bonus % Super Star % | - | Bonus Base Max Win Bonus | - | Double-Up Y/N Bonus Scores | - | | - '---------------------------------------' - - 'Special Bonus' and 'Super Star' appearance, are per 1000. - You also can find the MAME DIP switches menu already translated. - The items still need translation. - - Press START (key 1) to exit the mode. - - - Bookkeeping: - - Pressing BOOKKEEPING (key 0), you enter the Record Mode. - Here the translated items: - - .---------------------------------------. - | Record Menu | - | | - | Play Scores Key In Total | - | Win Scores Key Out Total | - | Play Times Coin In Total | - | Win Times Coin Out Total | - | Bonus Scores Short Total | - | Double Play Special Times | - | Double Win Super Show Up | - | Win Times Power On Times | - | Loss Times Working Time H M | - | | - | Version XXXXX | - '---------------------------------------' - - Pressing BOOKKEEPING key again, you can find 2 screens showing - all statistics and the whole history by winning hand. - - Press START (key 1) to exit the mode. - -**************************************************************************************************** - - Game specific notes... - - * Sonik Fighter - - The game is encrypted, and runs with an obfuscated daughterboard in place of the CPU. - Even when I have the attract working, accepting coins, getting sounds and accurate inputs, - the game is still not working. Once coined, there's no way to start a game. - - The PPI0 port B, D5 input line behaves like a reset, when the Attract/Girls DSW is set OFF. - Need more investigation about... - - Colors are wrong due to can't find a way to set the palette. - - * Magical Butterfly - - Some of the inputs are merged, and there is an extra output port that seems to handle lamps and - a rather simple form of protection that also involves one of the PPI1 input lines. - - To enter the Service Mode or Bookkeeping Menu, hold down Stop Reel 2/Up and Take along with the - specific inputs. - - * 蝴蝶梦 97 (Húdié Mèng 97) - - The program code has trivial opcode encryption which has been broken. However, the inputs tend - to act out of control at many times. This may have to do with the large number of unknown reads - and writes to an I/O port at $66. - -**************************************************************************************************** - - TODO: - - - Proper M5M82C255 device emulation. - - Colors: Find the palette in the Z Games' sets. - -***************************************************************************************************/ - -#include "emu.h" -#include "cpu/z80/z80.h" -#include "machine/i8255.h" -#include "machine/nvram.h" -#include "machine/ticket.h" -#include "sound/ay8910.h" -#include "video/ramdac.h" -#include "emupal.h" -#include "screen.h" -#include "speaker.h" -#include "tilemap.h" - -#include - - -namespace { - -class skylncr_state : public driver_device -{ -public: - skylncr_state(const machine_config &mconfig, device_type type, const char *tag) : - driver_device(mconfig, type, tag), - m_videoram(*this, "videoram"), - m_colorram(*this, "colorram"), - m_reeltiles_ram(*this, "reeltiles_ram.%u", 0U), - m_reeltileshigh_ram(*this, "rthigh_ram.%u", 0U), - m_reelscroll(*this, "reelscroll.%u", 0U), - m_maincpu(*this, "maincpu"), - m_gfxdecode(*this, "gfxdecode"), - m_palette(*this, "palette"), - m_hopper(*this, "hopper"), - m_lamps(*this, "lamp%u", 1U), - m_decrypted_opcodes(*this, "decrypted_opcodes") - { } - - void neraidou(machine_config &config); - void sstar97(machine_config &config); - void bdream97(machine_config &config); - void skylncr(machine_config &config); - void mbutrfly(machine_config &config); - void olymp(machine_config &config); - - void init_blshark(); - void init_butrfly(); - void init_leadera(); - void init_mbutrfly() { save_item(NAME(m_mbutrfly_prot)); } - void init_miaction(); - void init_olymp(); - void init_sonikfig(); - void init_speedway(); - void init_speedwaya(); - void init_superb2k(); - - int mbutrfly_prot_r(); - -protected: - virtual void machine_start() override ATTR_COLD; - virtual void video_start() override ATTR_COLD; - -private: - void videoram_w(offs_t offset, uint8_t data); - void colorram_w(offs_t offset, uint8_t data); - template void reeltiles_w(offs_t offset, uint8_t data); - template void reeltileshigh_w(offs_t offset, uint8_t data); - template void reelscroll_w(offs_t offset, uint8_t data); - void coin_w(uint8_t data); - uint8_t ret_ff() { return 0xff; } - [[maybe_unused]] uint8_t ret_00() { return 0x00; } - void nmi_enable_w(uint8_t data); - void mbutrfly_prot_w(uint8_t data); - uint8_t bdream97_opcode_r(offs_t offset); - - TILE_GET_INFO_MEMBER(get_tile_info); - template TILE_GET_INFO_MEMBER(get_reel_tile_info); - uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); - INTERRUPT_GEN_MEMBER(vblank_interrupt); - void bdream97_opcode_map(address_map &map) ATTR_COLD; - void olymp_opcode_map(address_map &map) ATTR_COLD; - void io_map_mbutrfly(address_map &map) ATTR_COLD; - void io_map_skylncr(address_map &map) ATTR_COLD; - void mem_map(address_map &map) ATTR_COLD; - void ramdac2_map(address_map &map) ATTR_COLD; - void ramdac_map(address_map &map) ATTR_COLD; - - tilemap_t *m_tmap = nullptr; - required_shared_ptr m_videoram; - required_shared_ptr m_colorram; - required_shared_ptr_array m_reeltiles_ram; - required_shared_ptr_array m_reeltileshigh_ram; - tilemap_t *m_reel_tilemap[4]{}; - required_shared_ptr_array m_reelscroll; - uint8_t m_nmi_enable = 0; - bool m_mbutrfly_prot = false; - required_device m_maincpu; - required_device m_gfxdecode; - required_device m_palette; - required_device m_hopper; - output_finder<7> m_lamps; - optional_shared_ptr m_decrypted_opcodes; -}; - - -/************************************** -* Video Hardware * -**************************************/ - -void skylncr_state::videoram_w(offs_t offset, uint8_t data) -{ - m_videoram[offset] = data; - m_tmap->mark_tile_dirty(offset); -} - -void skylncr_state::colorram_w(offs_t offset, uint8_t data) -{ - m_colorram[offset] = data; - m_tmap->mark_tile_dirty(offset); -} - - -TILE_GET_INFO_MEMBER(skylncr_state::get_tile_info) -{ - uint16_t code = m_videoram[tile_index] + (m_colorram[tile_index] << 8); - int pal = (code & 0x8000) >> 15; - tileinfo.set(0, code, pal^1, TILE_FLIPYX( 0 )); -} - -template -TILE_GET_INFO_MEMBER(skylncr_state::get_reel_tile_info) -{ - uint16_t code = m_reeltiles_ram[Which][tile_index] + (m_reeltileshigh_ram[Which][tile_index] << 8); - int pal = (code & 0x8000) >> 15; - tileinfo.set(1, Which == 0 ? code & 0x7fff : code, pal^1, TILE_FLIPYX( 0 )); -} - - -void skylncr_state::machine_start() -{ - m_lamps.resolve(); - - save_item(NAME(m_nmi_enable)); - - m_nmi_enable = 0; -} - -void skylncr_state::video_start() -{ - m_tmap = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_tile_info)), TILEMAP_SCAN_ROWS, 8, 8, 0x40, 0x20 ); - - m_reel_tilemap[0] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_reel_tile_info<0>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 ); - m_reel_tilemap[1] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_reel_tile_info<1>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 ); - m_reel_tilemap[2] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_reel_tile_info<2>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 ); - m_reel_tilemap[3] = &machine().tilemap().create(*m_gfxdecode, tilemap_get_info_delegate(*this, FUNC(skylncr_state::get_reel_tile_info<3>)), TILEMAP_SCAN_ROWS, 8, 32, 64, 8 ); - - m_reel_tilemap[1]->set_scroll_cols(0x40); - m_reel_tilemap[2]->set_scroll_cols(0x40); - m_reel_tilemap[3]->set_scroll_cols(0x40); - - m_reel_tilemap[1]->set_transparent_pen(0); - m_reel_tilemap[2]->set_transparent_pen(0); - m_reel_tilemap[3]->set_transparent_pen(0); - - - m_tmap->set_transparent_pen(0); -} - - -uint32_t skylncr_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect) -{ - bitmap.fill(rgb_t::black(), cliprect); - m_reel_tilemap[0]->draw(screen, bitmap, cliprect, 0, 0); - - // are these hardcoded, or registers? - const rectangle visible1(0*8, (16+48)*8-1, 4*8, (4+7)*8-1); - const rectangle visible2(0*8, (16+48)*8-1, 12*8, (12+7)*8-1); - const rectangle visible3(0*8, (16+48)*8-1, 20*8, (20+7)*8-1); - - for (int i= 0;i < 64;i++) - { - m_reel_tilemap[1]->set_scrolly(i, m_reelscroll[1][i]); - m_reel_tilemap[2]->set_scrolly(i, m_reelscroll[2][i]); - m_reel_tilemap[3]->set_scrolly(i, m_reelscroll[3][i]); - } - - m_reel_tilemap[1]->draw(screen, bitmap, visible1, 0, 0); - m_reel_tilemap[2]->draw(screen, bitmap, visible2, 0, 0); - m_reel_tilemap[3]->draw(screen, bitmap, visible3, 0, 0); - - - m_tmap->draw(screen, bitmap, cliprect, 0, 0); - return 0; -} - -template -void skylncr_state::reeltiles_w(offs_t offset, uint8_t data) -{ - m_reeltiles_ram[Which][offset] = data; - m_reel_tilemap[Which]->mark_tile_dirty(offset); -} - -template -void skylncr_state::reeltileshigh_w(offs_t offset, uint8_t data) -{ - m_reeltileshigh_ram[Which][offset] = data; - m_reel_tilemap[Which]->mark_tile_dirty(offset); -} - -template -void skylncr_state::reelscroll_w(offs_t offset, uint8_t data) -{ - m_reelscroll[Which][offset] = data; -} - - -/************************************ -* Other Handlers * -************************************/ - -void skylncr_state::coin_w(uint8_t data) -{ - machine().bookkeeping().coin_counter_w(0, data & 0x04); - m_hopper->motor_w(data & 0x20); -} - -void skylncr_state::nmi_enable_w(uint8_t data) -{ - m_nmi_enable = data & 0x10; -} - -void skylncr_state::mbutrfly_prot_w(uint8_t data) -{ - m_lamps[0] = BIT(data, 0); // Slot Stop 2 - m_lamps[1] = BIT(data, 1); // Slot Stop 1 - m_lamps[2] = BIT(data, 2); // Take - m_lamps[3] = BIT(data, 3); // Bet - m_lamps[4] = BIT(data, 4); // Slot Stop 3 - m_lamps[5] = BIT(data, 5); // Start - m_lamps[6] = BIT(data, 6); // Payout - m_mbutrfly_prot = BIT(data, 7); -} - -int skylncr_state::mbutrfly_prot_r() -{ - return m_mbutrfly_prot; -} - -uint8_t skylncr_state::bdream97_opcode_r(offs_t offset) -{ - auto dis = machine().disable_side_effects(); - return m_maincpu->space(AS_PROGRAM).read_byte(offset) ^ 0x80; -} - - -/************************************** -* Memory Map * -**************************************/ - -void skylncr_state::mem_map(address_map &map) -{ - map(0x0000, 0x7fff).rom(); - map(0x8000, 0x87ff).ram().share("nvram"); - - map(0x8800, 0x8fff).ram().w(FUNC(skylncr_state::videoram_w)).share(m_videoram); - map(0x9000, 0x97ff).ram().w(FUNC(skylncr_state::colorram_w)).share(m_colorram); - - map(0x9800, 0x99ff).ram().w(FUNC(skylncr_state::reeltiles_w<0>)).share(m_reeltiles_ram[0]); - map(0x9a00, 0x9bff).ram().w(FUNC(skylncr_state::reeltiles_w<1>)).share(m_reeltiles_ram[1]); - map(0x9c00, 0x9dff).ram().w(FUNC(skylncr_state::reeltiles_w<2>)).share(m_reeltiles_ram[2]); - map(0x9e00, 0x9fff).ram().w(FUNC(skylncr_state::reeltiles_w<3>)).share(m_reeltiles_ram[3]); - map(0xa000, 0xa1ff).ram().w(FUNC(skylncr_state::reeltileshigh_w<0>)).share(m_reeltileshigh_ram[0]); - map(0xa200, 0xa3ff).ram().w(FUNC(skylncr_state::reeltileshigh_w<1>)).share(m_reeltileshigh_ram[1]); - map(0xa400, 0xa5ff).ram().w(FUNC(skylncr_state::reeltileshigh_w<2>)).share(m_reeltileshigh_ram[2]); - map(0xa600, 0xa7ff).ram().w(FUNC(skylncr_state::reeltileshigh_w<3>)).share(m_reeltileshigh_ram[3]); - - map(0xaa55, 0xaa55).r(FUNC(skylncr_state::ret_ff)); - - map(0xb000, 0xb03f).mirror(0x1c0).ram().w(FUNC(skylncr_state::reelscroll_w<0>)).share(m_reelscroll[0]); - map(0xb200, 0xb23f).mirror(0x1c0).ram().w(FUNC(skylncr_state::reelscroll_w<1>)).share(m_reelscroll[1]); - map(0xb400, 0xb43f).mirror(0x1c0).ram().w(FUNC(skylncr_state::reelscroll_w<2>)).share(m_reelscroll[2]); - map(0xb600, 0xb63f).mirror(0x1c0).ram().w(FUNC(skylncr_state::reelscroll_w<3>)).share(m_reelscroll[3]); - - map(0xc000, 0xffff).rom(); -} - - -void skylncr_state::io_map_skylncr(address_map &map) -{ - map.global_mask(0xff); - - map(0x00, 0x03).rw("ppi8255_0", FUNC(i8255_device::read), FUNC(i8255_device::write)); // Input Ports - map(0x10, 0x13).rw("ppi8255_1", FUNC(i8255_device::read), FUNC(i8255_device::write)); // Input Ports - - map(0x20, 0x20).w(FUNC(skylncr_state::coin_w)); - - map(0x30, 0x31).w("aysnd", FUNC(ay8910_device::address_data_w)); - map(0x31, 0x31).r("aysnd", FUNC(ay8910_device::data_r)); - - map(0x40, 0x40).w("ramdac", FUNC(ramdac_device::index_w)); - map(0x41, 0x41).w("ramdac", FUNC(ramdac_device::pal_w)); - map(0x42, 0x42).w("ramdac", FUNC(ramdac_device::mask_w)); - - map(0x50, 0x50).w("ramdac2", FUNC(ramdac_device::index_w)); - map(0x51, 0x51).w("ramdac2", FUNC(ramdac_device::pal_w)); - map(0x52, 0x52).w("ramdac2", FUNC(ramdac_device::mask_w)); - - map(0x70, 0x70).w(FUNC(skylncr_state::nmi_enable_w)); -} - - -void skylncr_state::io_map_mbutrfly(address_map &map) -{ - map.global_mask(0xff); - io_map_skylncr(map); - map(0x60, 0x60).w(FUNC(skylncr_state::mbutrfly_prot_w)); -} - - -void skylncr_state::bdream97_opcode_map(address_map &map) -{ - map(0x0000, 0xffff).r(FUNC(skylncr_state::bdream97_opcode_r)); -} - -void skylncr_state::olymp_opcode_map(address_map &map) -{ - map(0x0000, 0xffff).rom().share(m_decrypted_opcodes); -} - -void skylncr_state::ramdac_map(address_map &map) -{ - map(0x000, 0x3ff).rw("ramdac", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); -} - - -void skylncr_state::ramdac2_map(address_map &map) -{ - map(0x000, 0x3ff).rw("ramdac2", FUNC(ramdac_device::ramdac_pal_r), FUNC(ramdac_device::ramdac_rgb666_w)); -} - - - -/*************************************** -* Graphics Layouts * -***************************************/ - -static const gfx_layout layout8x8x8 = -{ - 8,8, - RGN_FRAC(1,2), - 8, - { STEP8(0,1) }, - { - 8*0,8*1, - RGN_FRAC(1,2)+8*0,RGN_FRAC(1,2)+8*1, - 8*2,8*3, - RGN_FRAC(1,2)+8*2,RGN_FRAC(1,2)+8*3 - }, - { STEP8(0,8*4) }, - 8*8*4 -}; - -static const gfx_layout layout8x8x8_alt = // for sstar97 -{ - 8,8, - RGN_FRAC(1,2), - 8, - { STEP8(0,1) }, - { - 8*0,RGN_FRAC(1,2)+8*0, - 8*1,RGN_FRAC(1,2)+8*1, - 8*2,RGN_FRAC(1,2)+8*2, - 8*3,RGN_FRAC(1,2)+8*3 - }, - { STEP8(0,8*4) }, - 8*8*4 -}; - -static const gfx_layout layout8x8x8_bdream97 = // for bdream97 -{ - 8,8, - RGN_FRAC(1,2), - 8, - { STEP8(0,1) }, - { - 8*0,RGN_FRAC(1,2)+8*0, - RGN_FRAC(1,2)+8*1,8*1, - 8*2,RGN_FRAC(1,2)+8*2, - RGN_FRAC(1,2)+8*3,8*3 - }, - { STEP8(0,8*4) }, - 8*8*4 -}; - -static const gfx_layout layout8x32x8 = -{ - 8,32, - RGN_FRAC(1,2), - 8, - { STEP8(0,1) }, - { - 8*0, 8*1, - RGN_FRAC(1,2)+8*0, RGN_FRAC(1,2)+8*1, - 8*2, 8*3, - RGN_FRAC(1,2)+8*2, RGN_FRAC(1,2)+8*3 - }, - { - STEP16(0,8*4), - STEP16(16*8*4,8*4) - }, - 8*32*8/2 -}; - -/* this will decode the big x2 x3 'correctly' however, maybe they're - simply not meant to appear correct? */ -static const gfx_layout layout8x32x8_rot = -{ - 8,32, - RGN_FRAC(1,2), - 8, - { STEP8(0,1) }, - { - 8*0, 8*1, - RGN_FRAC(1,2)+8*1, RGN_FRAC(1,2)+8*0, - 8*2, 8*3, - RGN_FRAC(1,2)+8*3, RGN_FRAC(1,2)+8*2 - }, - { - STEP16(0,8*4), - STEP16(16*8*4,8*4) - }, - 8*32*8/2 -}; - -static const gfx_layout layout8x32x8_alt = // for sstar97 -{ - 8,32, - RGN_FRAC(1,2), - 8, - { STEP8(0,1) }, - { - RGN_FRAC(1,2)+8*1, 8*1, - 8*0, RGN_FRAC(1,2)+8*0, - RGN_FRAC(1,2)+8*3, 8*3, - 8*2, RGN_FRAC(1,2)+8*2 - }, - { - STEP16(0,8*4), - STEP16(16*8*4,8*4) - }, - 8*32*8/2 -}; - -static const gfx_layout layout8x32x8_alt2 = // for neraidov -{ - 8,32, - RGN_FRAC(1,2), - 8, - { STEP8(0,1) }, - { - RGN_FRAC(1,2)+8*1, 8*1, - RGN_FRAC(1,2)+8*0, 8*0, - RGN_FRAC(1,2)+8*3, 8*3, - RGN_FRAC(1,2)+8*2, 8*2 - }, - { - STEP16(0,8*4), - STEP16(16*8*4,8*4) - }, - 8*32*8/2 -}; - -static const gfx_layout layout8x32x8_bdream97 = // for bdream97 -{ - 8,32, - RGN_FRAC(1,2), - 8, - { STEP8(0,1) }, - { - 8*1, RGN_FRAC(1,2)+8*1, - 8*0, RGN_FRAC(1,2)+8*0, - 8*3, RGN_FRAC(1,2)+8*3, - 8*2, RGN_FRAC(1,2)+8*2 - }, - { - STEP16(0,8*4), - STEP16(16*8*4,8*4) - }, - 8*32*8/2 -}; - - -/************************************** -* Graphics Decode * -**************************************/ - -static GFXDECODE_START( gfx_skylncr ) - GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8, 0, 2 ) - GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8, 0, 2 ) - GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_rot, 0, 2 ) -GFXDECODE_END - -static GFXDECODE_START( gfx_neraidou ) - GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_alt, 0, 2 ) - GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt2, 0, 2 ) -// GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0x100, 1 ) -GFXDECODE_END - -static GFXDECODE_START( gfx_sstar97 ) - GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_alt, 0, 2 ) - GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0, 2 ) - GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_alt, 0x100, 1 ) -GFXDECODE_END - -static GFXDECODE_START( gfx_bdream97 ) - GFXDECODE_ENTRY( "gfx1", 0, layout8x8x8_bdream97, 0, 2 ) - GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_bdream97, 0, 2 ) - GFXDECODE_ENTRY( "gfx2", 0, layout8x32x8_bdream97, 0x100, 1 ) -GFXDECODE_END - - -/*********************************** -* Input Ports * -***********************************/ - -static INPUT_PORTS_START( skylncr ) - PORT_START("IN1") // $00 (PPI0 port A) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) - 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") // $01 (PPI0 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") - 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("IN3") // $11 (PPI1 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") - - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") - - PORT_START("IN4") // $12 (PPI1 port C) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) - PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) - - PORT_START("DSW1") // $02 (PPI0 port C) - PORT_DIPNAME( 0x11, 0x11, "D-UP Percentage" ) - PORT_DIPSETTING( 0x11, "60%" ) - PORT_DIPSETTING( 0x01, "70%" ) - PORT_DIPSETTING( 0x10, "80%" ) - PORT_DIPSETTING( 0x00, "90%" ) - PORT_DIPNAME( 0x0e, 0x0e, "Main Game Percentage" ) - PORT_DIPSETTING( 0x0e, "75%" ) - PORT_DIPSETTING( 0x0c, "78%" ) - PORT_DIPSETTING( 0x0a, "81%" ) - PORT_DIPSETTING( 0x08, "84%" ) - PORT_DIPSETTING( 0x06, "87%" ) - PORT_DIPSETTING( 0x04, "90%" ) - PORT_DIPSETTING( 0x02, "93%" ) - PORT_DIPSETTING( 0x00, "96%" ) - PORT_DIPNAME( 0x20, 0x20, "Reels Speed" ) - PORT_DIPSETTING( 0x20, "Slow" ) - PORT_DIPSETTING( 0x00, "Fast" ) - PORT_DIPNAME( 0x40, 0x40, "Bonus Score" ) - PORT_DIPSETTING( 0x40, "32" ) - PORT_DIPSETTING( 0x00, "24" ) - PORT_DIPNAME( 0x80, 0x00, "Key Out" ) - PORT_DIPSETTING( 0x00, "x1" ) - PORT_DIPSETTING( 0x80, "x100" ) - - PORT_START("DSW2") // $10 (PPI1 port A) - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x18, 0x08, "Payout Limit" ) - PORT_DIPSETTING( 0x00, "0" ) - PORT_DIPSETTING( 0x18, "1000" ) - PORT_DIPSETTING( 0x10, "2000" ) - PORT_DIPSETTING( 0x08, "5000" ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, "Clown Percentage" ) - PORT_DIPSETTING( 0xc0, "60%" ) - PORT_DIPSETTING( 0x80, "70%" ) - PORT_DIPSETTING( 0x40, "80%" ) - PORT_DIPSETTING( 0x00, "90%" ) - - PORT_START("DSW3") // AY8910 port A - PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) - PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) - PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) - PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) - PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) - PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) - PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) - PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) - PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) - PORT_DIPSETTING( 0x20, "10000" ) - PORT_DIPSETTING( 0x00, "20000" ) - PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) - PORT_DIPSETTING( 0xc0, "0" ) - PORT_DIPSETTING( 0x80, "8" ) - PORT_DIPSETTING( 0x40, "16" ) - PORT_DIPSETTING( 0x00, "32" ) - - PORT_START("DSW4") // AY8910 port B - PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) - PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) - PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) - PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) - PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) - PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) - PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) - PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) - PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) - PORT_DIPNAME( 0x18, 0x00, "Max Bet" ) - PORT_DIPSETTING( 0x18, "32" ) - PORT_DIPSETTING( 0x10, "64" ) - PORT_DIPSETTING( 0x08, "72" ) - PORT_DIPSETTING( 0x00, "80" ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( mbutrfly ) - PORT_INCLUDE(skylncr) - - PORT_MODIFY("IN1") // $00 (PPI0 port A) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) - - PORT_MODIFY("IN2") // $01 (PPI0 port B) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP3) PORT_NAME("Stop Reel 3, Down/Low") - - PORT_MODIFY("IN3") // $11 (PPI1 port B) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP2) PORT_NAME("Stop Reel 2, Up/High") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_SLOT_STOP1) PORT_NAME("Stop Reel 1, Double Up") - - PORT_MODIFY("IN4") // $12 (PPI1 port C) - PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_CUSTOM) PORT_READ_LINE_MEMBER(FUNC(skylncr_state::mbutrfly_prot_r)) -INPUT_PORTS_END - - -static INPUT_PORTS_START( leader ) - PORT_START("IN1") // $00 (PPI0 port A) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) - 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") // $01 (PPI0 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet/Throttle") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") - 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("IN3") // $11 (PPI1 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") - - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") - - PORT_START("IN4") // $12 (PPI1 port C) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) - PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) - - PORT_START("DSW1") // $02 (PPI0 port C) - PORT_DIPNAME( 0x11, 0x11, "Butterfly Max Mul" ) PORT_DIPLOCATION("DSW-A:!4,!5") - PORT_DIPSETTING( 0x11, "5" ) - PORT_DIPSETTING( 0x01, "7" ) - PORT_DIPSETTING( 0x10, "8" ) - PORT_DIPSETTING( 0x00, "12" ) - PORT_DIPNAME( 0x0e, 0x00, "Main Win Rate" ) PORT_DIPLOCATION("DSW-A:!6,!7,!8") - PORT_DIPSETTING( 0x0e, "55%" ) - PORT_DIPSETTING( 0x0c, "60%" ) - PORT_DIPSETTING( 0x0a, "65%" ) - PORT_DIPSETTING( 0x08, "70%" ) - PORT_DIPSETTING( 0x06, "75%" ) - PORT_DIPSETTING( 0x04, "80%" ) - PORT_DIPSETTING( 0x02, "85%" ) - PORT_DIPSETTING( 0x00, "90%" ) - PORT_DIPNAME( 0x20, 0x00, "Reels Speed" ) PORT_DIPLOCATION("DSW-A:!3") - PORT_DIPSETTING( 0x20, "Slow" ) - PORT_DIPSETTING( 0x00, "Fast" ) - PORT_DIPNAME( 0x40, 0x00, "Bonus Score" ) PORT_DIPLOCATION("DSW-A:!2") - PORT_DIPSETTING( 0x40, "24" ) - PORT_DIPSETTING( 0x00, "32" ) - PORT_DIPNAME( 0x80, 0x00, "Key Out" ) PORT_DIPLOCATION("DSW-A:!1") - PORT_DIPSETTING( 0x00, "x1" ) - PORT_DIPSETTING( 0x80, "x100" ) - - PORT_START("DSW2") // $10 (PPI1 port A) - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-B:1") - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-B:2") - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) PORT_DIPLOCATION("DSW-B:3") - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x18, 0x18, "Refund Coin Limit" ) PORT_DIPLOCATION("DSW-B:4,5") - PORT_DIPSETTING( 0x00, "0" ) - PORT_DIPSETTING( 0x18, "1000" ) - PORT_DIPSETTING( 0x10, "2000" ) - PORT_DIPSETTING( 0x08, "5000" ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-B:6") - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, "Butterfly Win Rate" ) PORT_DIPLOCATION("DSW-B:7,8") - PORT_DIPSETTING( 0xc0, "15%" ) - PORT_DIPSETTING( 0x80, "20%" ) - PORT_DIPSETTING( 0x40, "25%" ) - PORT_DIPSETTING( 0x00, "30%" ) - - PORT_START("DSW3") // AY8910 port A - PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) PORT_DIPLOCATION("DSW-D:1,2,3") - PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) - PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) - PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) - PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) - PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) - PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) - PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) - PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) - PORT_DIPNAME( 0x18, 0x00, "Credit Limit" ) PORT_DIPLOCATION("DSW-D:4,5") - PORT_DIPSETTING( 0x00, "120000" ) - PORT_DIPSETTING( 0x08, "100000" ) - PORT_DIPSETTING( 0x10, "80000" ) - PORT_DIPSETTING( 0x18, "50000" ) - PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) PORT_DIPLOCATION("DSW-D:6") - PORT_DIPSETTING( 0x20, "10000" ) - PORT_DIPSETTING( 0x00, "20000" ) - PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) PORT_DIPLOCATION("DSW-D:7,8") - PORT_DIPSETTING( 0xc0, "8" ) - PORT_DIPSETTING( 0x80, "16" ) - PORT_DIPSETTING( 0x40, "32" ) - PORT_DIPSETTING( 0x00, "64" ) - - PORT_START("DSW4") // AY8910 port B - PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) PORT_DIPLOCATION("DSW-C:1,2,3") - PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) - PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) - PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) - PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) - PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) - PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) - PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) - PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) - PORT_DIPNAME( 0x18, 0x18, "High Bet Limit" ) PORT_DIPLOCATION("DSW-C:4,5") - PORT_DIPSETTING( 0x18, "32" ) - PORT_DIPSETTING( 0x10, "50" ) - PORT_DIPSETTING( 0x08, "72" ) - PORT_DIPSETTING( 0x00, "96" ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-C:6") - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) PORT_DIPLOCATION("DSW-C:7") - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, "Coin Lock" ) PORT_DIPLOCATION("DSW-C:8") - PORT_DIPSETTING( 0x80, "Locked" ) - PORT_DIPSETTING( 0x00, "Normal" ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( neraidou ) - PORT_START("IN1") // $00 (PPI0 port A) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) - 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") // $01 (PPI0 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet/Throttle") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") - 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("IN3") // $11 (PPI1 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") - - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") - - PORT_START("IN4") // $12 (PPI1 port C) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) - PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) - - PORT_START("DSW1") // $02 (PPI0 port C) - PORT_DIPNAME( 0x01, 0x01, "Hardware Type (could be inverted)" ) // leave it off, otherwise the game works bad and resets - PORT_DIPSETTING( 0x01, "Rolla" ) - PORT_DIPSETTING( 0x00, "Sky" ) - PORT_DIPNAME( 0x0e, 0x0e, "Main Game Percentage" ) - PORT_DIPSETTING( 0x0e, "91%" ) - PORT_DIPSETTING( 0x0c, "92%" ) - PORT_DIPSETTING( 0x0a, "93%" ) - PORT_DIPSETTING( 0x08, "94%" ) - PORT_DIPSETTING( 0x06, "95%" ) - PORT_DIPSETTING( 0x04, "96%" ) - PORT_DIPSETTING( 0x02, "97%" ) - PORT_DIPSETTING( 0x00, "98%" ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "Reels Speed" ) - PORT_DIPSETTING( 0x20, "Slow" ) - PORT_DIPSETTING( 0x00, "Fast" ) - PORT_DIPNAME( 0x40, 0x40, "Bonus Rate" ) - PORT_DIPSETTING( 0x40, "20" ) - PORT_DIPSETTING( 0x00, "40" ) - PORT_DIPNAME( 0x80, 0x00, "Key Out" ) - PORT_DIPSETTING( 0x00, "x1" ) - PORT_DIPSETTING( 0x80, "x100" ) - - PORT_START("DSW2") // $10 (PPI1 port A) - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x08, 0x08, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, "Butterfly Win Rate" ) - PORT_DIPSETTING( 0xc0, "25%" ) - PORT_DIPSETTING( 0x80, "30%" ) - PORT_DIPSETTING( 0x40, "40%" ) - PORT_DIPSETTING( 0x00, "50%" ) - - PORT_START("DSW3") // AY8910 port A - PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) - PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) - PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) - PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) - PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) - PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) - PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) - PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) - PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) - PORT_DIPNAME( 0x18, 0x18, "Credit Limit" ) - PORT_DIPSETTING( 0x00, "120000" ) - PORT_DIPSETTING( 0x08, "100000" ) - PORT_DIPSETTING( 0x10, "80000" ) - PORT_DIPSETTING( 0x18, "50000" ) - PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) - PORT_DIPSETTING( 0x20, "10000" ) - PORT_DIPSETTING( 0x00, "20000" ) - PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) - PORT_DIPSETTING( 0xc0, "8" ) - PORT_DIPSETTING( 0x80, "16" ) - PORT_DIPSETTING( 0x40, "32" ) - PORT_DIPSETTING( 0x00, "64" ) - - PORT_START("DSW4") // AY8910 port B - PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) - PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) - PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) - PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) - PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) - PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) - PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) - PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) - PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) - PORT_DIPNAME( 0x18, 0x00, "High Bet Limit" ) - PORT_DIPSETTING( 0x18, "104" ) - PORT_DIPSETTING( 0x10, "120" ) - PORT_DIPSETTING( 0x08, "160" ) - PORT_DIPSETTING( 0x00, "240" ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "Bonus? (Left Side)" ) - PORT_DIPSETTING( 0x80, "x3" ) - PORT_DIPSETTING( 0x00, "No Bonus" ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( gallag50 ) - PORT_START("IN1") // $00 (PPI0 port A) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) - 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") // $01 (PPI0 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) PORT_NAME("Bet/Throttle") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") - 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("IN3") // $11 (PPI1 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") - - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") - - PORT_START("IN4") // $12 (PPI1 port C) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) - PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) - - PORT_START("DSW1") // $02 (PPI0 port C) - PORT_DIPNAME( 0x01, 0x01, "Hardware Type (could be inverted)" ) // leave it off, otherwise the game works bad and resets - PORT_DIPSETTING( 0x01, "Rolla" ) - PORT_DIPSETTING( 0x00, "Sky" ) - PORT_DIPNAME( 0x0e, 0x0e, "Main Game Percentage" ) - PORT_DIPSETTING( 0x0e, "91%" ) - PORT_DIPSETTING( 0x0c, "92%" ) - PORT_DIPSETTING( 0x0a, "93%" ) - PORT_DIPSETTING( 0x08, "94%" ) - PORT_DIPSETTING( 0x06, "95%" ) - PORT_DIPSETTING( 0x04, "96%" ) - PORT_DIPSETTING( 0x02, "97%" ) - PORT_DIPSETTING( 0x00, "98%" ) - PORT_DIPNAME( 0x10, 0x10, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x10, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x20, 0x20, "Reels Speed" ) - PORT_DIPSETTING( 0x20, "Slow" ) - PORT_DIPSETTING( 0x00, "Fast" ) - PORT_DIPNAME( 0x40, 0x40, "Bonus Rate" ) - PORT_DIPSETTING( 0x40, "24" ) - PORT_DIPSETTING( 0x00, "32" ) - PORT_DIPNAME( 0x80, 0x00, "Key Out" ) - PORT_DIPSETTING( 0x00, "x1" ) - PORT_DIPSETTING( 0x80, "x100" ) - - PORT_START("DSW2") // $10 (PPI1 port A) - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x08, 0x00, "Rolla GFX" ) - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x00, "Title" ) - PORT_DIPSETTING( 0x10, "Petalouda (Greek for Butterfly)" ) - PORT_DIPSETTING( 0x00, "Gallag" ) - PORT_DIPNAME( 0x20, 0x20, "Alt GFX Decode (For different HW)" ) // could be a mix with 08 'Rolla GFX' - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, "Butterfly Win Rate" ) - PORT_DIPSETTING( 0xc0, "15%" ) - PORT_DIPSETTING( 0x80, "20%" ) - PORT_DIPSETTING( 0x40, "25%" ) - PORT_DIPSETTING( 0x00, "30%" ) - - PORT_START("DSW3") // AY8910 port A - PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) - PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) - PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) - PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) - PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) - PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) - PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) - PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) - PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) - PORT_DIPNAME( 0x18, 0x18, "Credit Limit" ) - PORT_DIPSETTING( 0x00, "120000" ) - PORT_DIPSETTING( 0x08, "100000" ) - PORT_DIPSETTING( 0x10, "80000" ) - PORT_DIPSETTING( 0x18, "50000" ) - PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) - PORT_DIPSETTING( 0x20, "10000" ) - PORT_DIPSETTING( 0x00, "20000" ) - PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) - PORT_DIPSETTING( 0xc0, "8" ) - PORT_DIPSETTING( 0x80, "16" ) - PORT_DIPSETTING( 0x40, "32" ) - PORT_DIPSETTING( 0x00, "64" ) - - PORT_START("DSW4") // AY8910 port B - PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) - PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) - PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) - PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) - PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) - PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) - PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) - PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) - PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) - PORT_DIPNAME( 0x18, 0x00, "High Bet Limit" ) - PORT_DIPSETTING( 0x18, "32" ) - PORT_DIPSETTING( 0x10, "50" ) - PORT_DIPSETTING( 0x08, "72" ) - PORT_DIPSETTING( 0x00, "99" ) - PORT_DIPNAME( 0x20, 0x00, "Rolla HW" ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, "Unknown Feature" ) - PORT_DIPSETTING( 0x80, "Full Cutted" ) - PORT_DIPSETTING( 0x00, "Full Open" ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( sstar97 ) - PORT_START("IN1") // $00 (PPI0 port A) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) - 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") // $01 (PPI0 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") - 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("IN3") // $11 (PPI1 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH ) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_UNKNOWN ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") - - PORT_START("IN4") // $12 (PPI1 port C) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_MEMORY_RESET ) - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) - PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_CUSTOM) PORT_READ_LINE_DEVICE_MEMBER("hopper", FUNC(ticket_dispenser_device::line_r)) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_GAMBLE_PAYOUT ) - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) - - PORT_START("DSW1") // $02 (PPI0 port C) - PORT_DIPNAME( 0x11, 0x11, "D-UP Percentage" ) - PORT_DIPSETTING( 0x11, "60%" ) - PORT_DIPSETTING( 0x01, "70%" ) - PORT_DIPSETTING( 0x10, "80%" ) - PORT_DIPSETTING( 0x00, "90%" ) - PORT_DIPNAME( 0x0e, 0x0e, "Special Bonus Appearance (per 1000)" ) - PORT_DIPSETTING( 0x0e, "5" ) - PORT_DIPSETTING( 0x0c, "6" ) - PORT_DIPSETTING( 0x0a, "7" ) - PORT_DIPSETTING( 0x08, "8" ) - PORT_DIPSETTING( 0x06, "9" ) - PORT_DIPSETTING( 0x04, "10" ) - PORT_DIPSETTING( 0x02, "11" ) - PORT_DIPSETTING( 0x00, "12" ) - PORT_DIPNAME( 0x20, 0x20, "Reels Speed" ) - PORT_DIPSETTING( 0x20, "Slow" ) - PORT_DIPSETTING( 0x00, "Fast" ) - PORT_DIPNAME( 0x40, 0x40, "Bonus Score" ) - PORT_DIPSETTING( 0x00, "24" ) - PORT_DIPSETTING( 0x40, "32" ) - PORT_DIPNAME( 0x80, 0x00, "Key Out" ) - PORT_DIPSETTING( 0x00, "x1" ) - PORT_DIPSETTING( 0x80, "x100" ) - - PORT_START("DSW2") // $10 (PPI1 port A) - PORT_DIPNAME( 0x03, 0x03, "Main Game Percentage" ) - PORT_DIPSETTING( 0x03, "60%" ) - PORT_DIPSETTING( 0x02, "70%" ) - PORT_DIPSETTING( 0x01, "80%" ) - PORT_DIPSETTING( 0x00, "90%" ) - PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x18, 0x18, "Payout Limit" ) - PORT_DIPSETTING( 0x00, "0" ) - PORT_DIPSETTING( 0x18, "1000" ) - PORT_DIPSETTING( 0x10, "2000" ) - PORT_DIPSETTING( 0x08, "5000" ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0xc0, 0xc0, "Clown Percentage" ) - PORT_DIPSETTING( 0xc0, "60%" ) - PORT_DIPSETTING( 0x80, "70%" ) - PORT_DIPSETTING( 0x40, "80%" ) - PORT_DIPSETTING( 0x00, "90%" ) - - PORT_START("DSW3") // AY8910 port A - PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) - PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) - PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) - PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) - PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) - PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) - PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) - PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) - PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) - PORT_DIPNAME( 0x18, 0x18, "Base Bonus (Bonus Bottom)" ) - PORT_DIPSETTING( 0x18, "200" ) - PORT_DIPSETTING( 0x10, "400" ) - PORT_DIPSETTING( 0x08, "600" ) - PORT_DIPSETTING( 0x00, "800" ) - PORT_DIPNAME( 0x20, 0x20, "Max Win Bonus" ) - PORT_DIPSETTING( 0x20, "10000" ) - PORT_DIPSETTING( 0x00, "20000" ) - PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) - PORT_DIPSETTING( 0xc0, "0" ) - PORT_DIPSETTING( 0x80, "8" ) - PORT_DIPSETTING( 0x40, "16" ) - PORT_DIPSETTING( 0x00, "32" ) - - PORT_START("DSW4") // AY8910 port B - PORT_DIPNAME( 0x07, 0x07, "Remote Credits" ) - PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) - PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) - PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) - PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) - PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) - PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) - PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) - PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) - PORT_DIPNAME( 0x18, 0x18, "Max Bet" ) - PORT_DIPSETTING( 0x18, "32" ) - PORT_DIPSETTING( 0x10, "64" ) - PORT_DIPSETTING( 0x08, "72" ) - PORT_DIPSETTING( 0x00, "80" ) - PORT_DIPNAME( 0xe0, 0xe0, "Super Star Appearance (per 1000)" ) - PORT_DIPSETTING( 0xe0, "6" ) - PORT_DIPSETTING( 0xc0, "8" ) - PORT_DIPSETTING( 0xa0, "10" ) - PORT_DIPSETTING( 0x80, "12" ) - PORT_DIPSETTING( 0x60, "14" ) - PORT_DIPSETTING( 0x40, "16" ) - PORT_DIPSETTING( 0x20, "18" ) - PORT_DIPSETTING( 0x00, "20" ) -INPUT_PORTS_END - - -static INPUT_PORTS_START( sonikfig ) - PORT_START("IN1") // $00 (PPI0 port A) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) PORT_NAME("IN1-02") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) PORT_NAME("IN1-08") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G) PORT_NAME("IN1-20") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H) PORT_NAME("IN1-40") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) PORT_NAME("IN1-80") - - PORT_START("IN2") // $01 (PPI0 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K) PORT_NAME("IN2-02") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") PORT_CODE(KEYCODE_S) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L) PORT_NAME("IN2-08") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") // OK - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_T) PORT_NAME("Reset #2") // Behaves like a reset, only when attract DSW is off... - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y) PORT_NAME("IN2-40") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U) PORT_NAME("IN2-80") - - PORT_START("IN3") // $11 (PPI1 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) // OK - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) // OK - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) // OK - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // OK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") PORT_CODE(KEYCODE_A) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I) PORT_NAME("IN3-40") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") - - PORT_START("IN4") // $12 (PPI1 port C) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("IN4-01") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset #1") // OK - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats") - PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings OK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("IN4-10") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("IN4-20") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("IN4-40") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) - - PORT_START("DSW1") // $02 (PPI0 port C) - PORT_DIPNAME( 0x11, 0x00, "D-UP Percentage" ) // OK - PORT_DIPSETTING( 0x11, "40%" ) // OK - PORT_DIPSETTING( 0x01, "50%" ) // OK - PORT_DIPSETTING( 0x10, "60%" ) // OK - PORT_DIPSETTING( 0x00, "70%" ) // OK - PORT_DIPNAME( 0x0e, 0x00, "Main Game Percentage" ) // OK - PORT_DIPSETTING( 0x0e, "55%" ) // OK - PORT_DIPSETTING( 0x0c, "60%" ) // OK - PORT_DIPSETTING( 0x0a, "65%" ) // OK - PORT_DIPSETTING( 0x08, "70%" ) // OK - PORT_DIPSETTING( 0x06, "75%" ) // OK - PORT_DIPSETTING( 0x04, "80%" ) // OK - PORT_DIPSETTING( 0x02, "85%" ) // OK - PORT_DIPSETTING( 0x00, "90%" ) // OK - PORT_DIPNAME( 0x20, 0x00, "Reels Speed" ) // OK - PORT_DIPSETTING( 0x20, "Low" ) // OK - PORT_DIPSETTING( 0x00, "Hi" ) // OK - PORT_DIPNAME( 0x40, 0x00, "Bonus Score" ) // OK - PORT_DIPSETTING( 0x40, "32" ) // OK - PORT_DIPSETTING( 0x00, "24" ) // OK - PORT_DIPNAME( 0x80, 0x00, "Payout" ) // OK - PORT_DIPSETTING( 0x00, "x1" ) // OK - PORT_DIPSETTING( 0x80, "x100" ) // OK - - PORT_START("DSW2") // $10 (PPI1 port A) - PORT_DIPNAME( 0x01, 0x01, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x01, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x02, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) // OK - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) // OK - PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) // OK - PORT_DIPNAME( 0x18, 0x18, "Payout Limit" ) // OK - PORT_DIPSETTING( 0x00, "0" ) // OK - PORT_DIPSETTING( 0x18, "1000" ) // OK - PORT_DIPSETTING( 0x10, "2000" ) // OK - PORT_DIPSETTING( 0x08, "5000" ) // OK - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x80, DEF_STR( Unknown ) ) - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("DSW3") // AY8910 port A - PORT_DIPNAME( 0x07, 0x07, "Coinage A, B & C" ) // OK on test - PORT_DIPSETTING( 0x00, "1 Coin / 1 Credit" ) // OK on test, always 1c-1c in game... - PORT_DIPSETTING( 0x01, "1 Coin / 5 Credits" ) // OK on test, always 1c-1c in game... - PORT_DIPSETTING( 0x02, "1 Coin / 10 Credits" ) // OK on test, always 1c-1c in game... - PORT_DIPSETTING( 0x03, "1 Coin / 20 Credits" ) // OK on test, always 1c-1c in game... - PORT_DIPSETTING( 0x04, "1 Coin / 30 Credits" ) // OK on test, always 1c-1c in game... - PORT_DIPSETTING( 0x05, "1 Coin / 40 Credits" ) // OK on test, always 1c-1c in game... - PORT_DIPSETTING( 0x06, "1 Coin / 50 Credits" ) // OK on test, always 1c-1c in game... - PORT_DIPSETTING( 0x07, "1 Coin / 100 Credit" ) // OK on test, always 1c-1c in game... - PORT_BIT( 0x08, IP_ACTIVE_HIGH, IPT_UNKNOWN ) // This input should be turned ON, otherwise you can't enter the setup (F2) - PORT_DIPNAME( 0x10, 0x00, "Attract / Girls" ) // OK... Could be either or both. Need the game working to check it. - PORT_DIPSETTING( 0x10, DEF_STR( No ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x20, 0x20, "Max Bonus" ) // OK - PORT_DIPSETTING( 0x20, "10000" ) // OK - PORT_DIPSETTING( 0x00, "20000" ) // OK - PORT_DIPNAME( 0xc0, 0xc0, "Minimum Bet" ) // OK - PORT_DIPSETTING( 0xc0, "0" ) // OK - PORT_DIPSETTING( 0x80, "8" ) // OK - PORT_DIPSETTING( 0x40, "16" ) // OK - PORT_DIPSETTING( 0x00, "32" ) // OK - - PORT_START("DSW4") // AY8910 port B - PORT_DIPNAME( 0x07, 0x00, "Key In" ) // OK on test - PORT_DIPSETTING( 0x00, "1 Pulse / 100 Credits" ) // OK on test, always 1 credit in game... - PORT_DIPSETTING( 0x01, "1 Pulse / 110 Credits" ) // OK on test, always 1 credit in game... - PORT_DIPSETTING( 0x02, "1 Pulse / 120 Credits" ) // OK on test, always 1 credit in game... - PORT_DIPSETTING( 0x03, "1 Pulse / 130 Credits" ) // OK on test, always 1 credit in game... - PORT_DIPSETTING( 0x04, "1 Pulse / 200 Credits" ) // OK on test, always 1 credit in game... - PORT_DIPSETTING( 0x05, "1 Pulse / 400 Credits" ) // OK on test, always 1 credit in game... - PORT_DIPSETTING( 0x06, "1 Pulse / 500 Credits" ) // OK on test, always 1 credit in game... - PORT_DIPSETTING( 0x07, "1 Pulse / 1000 Credits" ) // OK on test, always 1 credit in game... - PORT_DIPNAME( 0x18, 0x00, "Max Bet" ) // OK - PORT_DIPSETTING( 0x18, "64" ) // OK - PORT_DIPSETTING( 0x10, "72" ) // OK - PORT_DIPSETTING( 0x08, "80" ) // OK - PORT_DIPSETTING( 0x00, "96" ) // OK - PORT_DIPNAME( 0x20, 0x00, "Lit" ) // OK - PORT_DIPSETTING( 0x20, DEF_STR( No ) ) // OK - PORT_DIPSETTING( 0x00, "Yes (50.000)" ) // OK, 50.000 - PORT_DIPNAME( 0x40, 0x00, "Control" ) // OK - PORT_DIPSETTING( 0x40, DEF_STR( Yes ) ) // OK - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) // OK - PORT_DIPNAME( 0x80, 0x00, "Reel Cover" ) // OK - PORT_DIPSETTING( 0x80, DEF_STR( No ) ) // OK - PORT_DIPSETTING( 0x00, DEF_STR( Yes ) ) // OK -INPUT_PORTS_END - -static INPUT_PORTS_START( score5 ) // TODO: verify inputs when game works (copied from sonikfig for now), dips are taken from manual so presumed correct - PORT_START("IN1") // $00 (PPI0 port A) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_SLOT_STOP2) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_D) PORT_NAME("IN1-02") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_SLOT_STOP1) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_F) PORT_NAME("IN1-08") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_SLOT_STOP3) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_G) PORT_NAME("IN1-20") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_H) PORT_NAME("IN1-40") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_J) PORT_NAME("IN1-80") - - PORT_START("IN2") // $01 (PPI0 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_GAMBLE_BET) - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_K) PORT_NAME("IN2-02") - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_LOW) PORT_NAME("Down/Low") PORT_CODE(KEYCODE_S) - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_L) PORT_NAME("IN2-08") - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1) PORT_NAME("Start") // OK - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_T) PORT_NAME("Reset #2") // Behaves like a reset, only when attract DSW is off... - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_Y) PORT_NAME("IN2-40") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_U) PORT_NAME("IN2-80") - - PORT_START("IN3") // $11 (PPI1 port B) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_COIN1 ) PORT_IMPULSE(2) // OK - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_COIN2 ) PORT_IMPULSE(2) // OK - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_COIN3 ) PORT_IMPULSE(2) // OK - PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_GAMBLE_KEYIN ) // OK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_GAMBLE_HIGH) PORT_NAME("Up/High") PORT_CODE(KEYCODE_A) - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_GAMBLE_D_UP ) - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_I) PORT_NAME("IN3-40") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_TAKE ) PORT_NAME("Take Score") - - PORT_START("IN4") // $12 (PPI1 port C) - PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_1_PAD) PORT_NAME("IN4-01") - PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_SERVICE ) PORT_CODE(KEYCODE_R) PORT_NAME("Reset #1") // OK - PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_GAMBLE_BOOK ) PORT_NAME("Stats") - PORT_SERVICE_NO_TOGGLE( 0x08, IP_ACTIVE_LOW ) // Settings OK - PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_2_PAD) PORT_NAME("IN4-10") - PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_3_PAD) PORT_NAME("IN4-20") - PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_OTHER ) PORT_CODE(KEYCODE_4_PAD) PORT_NAME("IN4-40") - PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_GAMBLE_KEYOUT ) - - PORT_START("DSW1") // $02 (PPI0 port C) - PORT_DIPNAME( 0x07, 0x07, "Percent" ) PORT_DIPLOCATION("DSW1:1,2,3") - PORT_DIPSETTING( 0x07, "55%" ) - PORT_DIPSETTING( 0x06, "60%" ) - PORT_DIPSETTING( 0x05, "65%" ) - PORT_DIPSETTING( 0x04, "70%" ) - PORT_DIPSETTING( 0x03, "75%" ) - PORT_DIPSETTING( 0x02, "80%" ) - PORT_DIPSETTING( 0x01, "85%" ) - PORT_DIPSETTING( 0x00, "90%" ) - PORT_DIPNAME( 0x08, 0x08, "Break" ) PORT_DIPLOCATION("DSW1:4") - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x10, 0x10, "Speed" ) PORT_DIPLOCATION("DSW1:5") - PORT_DIPSETTING( 0x10, "Slow" ) - PORT_DIPSETTING( 0x00, "Fast" ) - PORT_DIPNAME( 0xe0, 0xe0, "Payout" ) PORT_DIPLOCATION("DSW1:6,7,8") - PORT_DIPSETTING( 0xe0, "1" ) - PORT_DIPSETTING( 0xc0, "2" ) - PORT_DIPSETTING( 0xa0, "5" ) - PORT_DIPSETTING( 0x80, "7" ) - PORT_DIPSETTING( 0x60, "9" ) - PORT_DIPSETTING( 0x40, "12" ) - PORT_DIPSETTING( 0x20, "15" ) - PORT_DIPSETTING( 0x00, "20" ) - - PORT_START("DSW2") // $10 (PPI1 port A) - PORT_DIPNAME( 0x01, 0x01, "Win Mode" ) PORT_DIPLOCATION("DSW2:1") - PORT_DIPSETTING( 0x01, "Line" ) - PORT_DIPSETTING( 0x00, "Square" ) - PORT_DIPNAME( 0x02, 0x02, DEF_STR( Difficulty ) ) PORT_DIPLOCATION("DSW2:2") - PORT_DIPSETTING( 0x02, DEF_STR( Normal ) ) - PORT_DIPSETTING( 0x00, DEF_STR( Hard ) ) - PORT_DIPNAME( 0x04, 0x04, "Double-Up" ) PORT_DIPLOCATION("DSW2:3") - PORT_DIPSETTING( 0x00, DEF_STR( No ) ) - PORT_DIPSETTING( 0x04, DEF_STR( Yes ) ) - PORT_DIPNAME( 0x08, 0x08, "Control" ) PORT_DIPLOCATION("DSW2:4") - PORT_DIPSETTING( 0x08, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x30, 0x30, "Res." ) PORT_DIPLOCATION("DSW2:5,6") - PORT_DIPSETTING( 0x30, DEF_STR (Off) ) - PORT_DIPSETTING( 0x20, "10%" ) - PORT_DIPSETTING( 0x10, "20%" ) - PORT_DIPSETTING( 0x00, "30%" ) - PORT_DIPNAME( 0x40, 0x40, "Bonus" ) PORT_DIPLOCATION("DSW2:7") - PORT_DIPSETTING( 0x40, "100" ) - PORT_DIPSETTING( 0x00, "200" ) - PORT_DIPNAME( 0x80, 0x80, "Cycle Bonus" ) PORT_DIPLOCATION("DSW2:8") - PORT_DIPSETTING( 0x80, "1" ) - PORT_DIPSETTING( 0x00, "2" ) - - PORT_START("DSW3") // AY8910 port A - PORT_DIPNAME( 0x01, 0x01, "Limit" ) PORT_DIPLOCATION("DSW3:1") - PORT_DIPSETTING( 0x01, "300" ) - PORT_DIPSETTING( 0x00, "500" ) - PORT_DIPNAME( 0x06, 0x06, "Limit In" ) - PORT_DIPSETTING( 0x06, DEF_STR( Off ) ) PORT_DIPLOCATION("DSW3:2,3") - PORT_DIPSETTING( 0x04, "10" ) - PORT_DIPSETTING( 0x02, "20" ) - PORT_DIPSETTING( 0x00, "30" ) - PORT_DIPNAME( 0x18, 0x18, "Min Bet" ) PORT_DIPLOCATION("DSW3:4,5") - PORT_DIPSETTING( 0x18, "1" ) - PORT_DIPSETTING( 0x10, "5" ) - PORT_DIPSETTING( 0x08, "9" ) - PORT_DIPSETTING( 0x00, "12" ) - PORT_DIPNAME( 0x20, 0x20, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW3:6") // marked as reserved and off in manual - PORT_DIPSETTING( 0x20, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x40, 0x40, DEF_STR( Unused ) ) PORT_DIPLOCATION("DSW3:7") // marked as reserved and off in manual - PORT_DIPSETTING( 0x40, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - PORT_DIPNAME( 0x80, 0x00, "Memo Safe" ) PORT_DIPLOCATION("DSW3:8") // marked as on in manual - PORT_DIPSETTING( 0x80, DEF_STR( Off ) ) - PORT_DIPSETTING( 0x00, DEF_STR( On ) ) - - PORT_START("DSW4") // AY8910 port B - PORT_DIPNAME( 0x07, 0x07, DEF_STR( Coinage ) ) PORT_DIPLOCATION("DSW4:1,2,3") - PORT_DIPSETTING( 0x07, DEF_STR( 1C_5C ) ) - PORT_DIPSETTING( 0x06, "1 Coin / 10 Credits" ) - PORT_DIPSETTING( 0x05, "1 Coin / 20 Credits" ) - PORT_DIPSETTING( 0x04, "1 Coin / 50 Credits" ) - PORT_DIPSETTING( 0x03, "1 Coin / 100 Credits" ) - PORT_DIPSETTING( 0x02, "1 Coin / 200 Credits" ) - PORT_DIPSETTING( 0x01, "1 Coin / 500 Credits" ) - PORT_DIPSETTING( 0x00, "1 Coin / 1000 Credits" ) - PORT_DIPNAME( 0x38, 0x38, "Key In" ) PORT_DIPLOCATION("DSW4:4,5,6") - PORT_DIPSETTING( 0x38, "1 Pulse / 5 Credits" ) - PORT_DIPSETTING( 0x30, "1 Pulse / 10 Credits" ) - PORT_DIPSETTING( 0x28, "1 Pulse / 20 Credits" ) - PORT_DIPSETTING( 0x20, "1 Pulse / 50 Credits" ) - PORT_DIPSETTING( 0x18, "1 Pulse / 100 Credits" ) - PORT_DIPSETTING( 0x10, "1 Pulse / 200 Credits" ) - PORT_DIPSETTING( 0x08, "1 Pulse / 500 Credits" ) - PORT_DIPSETTING( 0x00, "1 Pulse / 1000 Credits" ) - PORT_DIPNAME( 0xc0, 0xc0, "Key Out" ) PORT_DIPLOCATION("DSW4:7,8") - PORT_DIPSETTING( 0xc0, "1" ) - PORT_DIPSETTING( 0x80, "5" ) - PORT_DIPSETTING( 0x40, "10" ) - PORT_DIPSETTING( 0x00, "100" ) -INPUT_PORTS_END - -// It runs in IM 0, thus needs an opcode on the data bus -INTERRUPT_GEN_MEMBER(skylncr_state::vblank_interrupt) -{ - if (m_nmi_enable) device.execute().pulse_input_line(INPUT_LINE_NMI, attotime::zero); -} - - -/************************************* -* Machine Driver * -*************************************/ - -void skylncr_state::skylncr(machine_config &config) -{ - // basic machine hardware - Z80(config, m_maincpu, 12_MHz_XTAL/4); - m_maincpu->set_addrmap(AS_PROGRAM, &skylncr_state::mem_map); - m_maincpu->set_addrmap(AS_IO, &skylncr_state::io_map_skylncr); - m_maincpu->set_vblank_int("screen", FUNC(skylncr_state::vblank_interrupt)); - - NVRAM(config, "nvram", nvram_device::DEFAULT_ALL_0); - - // 1x M5M82C255, or 2x PPI8255 - i8255_device &ppi0(I8255A(config, "ppi8255_0")); - ppi0.in_pa_callback().set_ioport("IN1"); - ppi0.in_pb_callback().set_ioport("IN2"); - ppi0.in_pc_callback().set_ioport("DSW1"); - - i8255_device &ppi1(I8255A(config, "ppi8255_1")); - ppi1.in_pa_callback().set_ioport("DSW2"); - ppi1.in_pb_callback().set_ioport("IN3"); - ppi1.in_pc_callback().set_ioport("IN4"); - - TICKET_DISPENSER(config, m_hopper, attotime::from_msec(50)); // duration guessed - - // 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(0, 512-1, 0, 256-1); - screen.set_screen_update(FUNC(skylncr_state::screen_update)); - - GFXDECODE(config, m_gfxdecode, m_palette, gfx_skylncr); - PALETTE(config, m_palette).set_entries(0x200); - - ramdac_device &ramdac(RAMDAC(config, "ramdac", 0, m_palette)); - ramdac.set_addrmap(0, &skylncr_state::ramdac_map); - ramdac.set_color_base(0); - - ramdac_device &ramdac2(RAMDAC(config, "ramdac2", 0, m_palette)); - ramdac2.set_addrmap(0, &skylncr_state::ramdac2_map); - ramdac2.set_color_base(0x100); - - // sound hardware - SPEAKER(config, "mono").front_center(); - ay8910_device &aysnd(AY8910(config, "aysnd", 12_MHz_XTAL/8)); - aysnd.port_a_read_callback().set_ioport("DSW3"); - aysnd.port_b_read_callback().set_ioport("DSW4"); - aysnd.add_route(ALL_OUTPUTS, "mono", 1.0); -} - - -void skylncr_state::mbutrfly(machine_config &config) -{ - skylncr(config); - - m_maincpu->set_addrmap(AS_IO, &skylncr_state::io_map_mbutrfly); -} - - -void skylncr_state::neraidou(machine_config &config) -{ - skylncr(config); - - m_gfxdecode->set_info(gfx_neraidou); -} - - -void skylncr_state::sstar97(machine_config &config) -{ - skylncr(config); - - m_gfxdecode->set_info(gfx_sstar97); -} - - -void skylncr_state::bdream97(machine_config &config) -{ - skylncr(config); - - // basic machine hardware - m_maincpu->set_addrmap(AS_OPCODES, &skylncr_state::bdream97_opcode_map); - - m_gfxdecode->set_info(gfx_bdream97); -} - - -void skylncr_state::olymp(machine_config &config) -{ - skylncr(config); - - // basic machine hardware - m_maincpu->set_addrmap(AS_OPCODES, &skylncr_state::olymp_opcode_map); -} - - -/********************************** -* ROM Load * -**********************************/ -/* - -Sky Lancer PCB Layout ---------------------- - - |--------------------------------------------| - _| ROM.U33 | -| | -| ROM.U32 | -| WF19054 | -| | -|_ | - | 6264 | - | |------| 6116 | - _| DSW4(8) |ACTEL | | -| DSW3(8) |A1010B| | -| DSW2(8) | | 6264 | -| DSW1(8) |------| | -| 6264 | -| M5M82C255 | -| | -| ROM.U35 | -|3.6V_BATT | -|_ 6116 Z80 12MHz | - |--------------------------------------------| -Notes: - Z80 @ 3.0MHz [12/4] - WF19054 = AY-3-8910 @ 1.5MHz [12/8] -*/ - -ROM_START( skylncr ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "27512.u35", 0x00000, 0x10000, CRC(98b1c9fe) SHA1(9ca1706d25038a078fb07ba5c2e6681ed468bc88) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD( "574200.u32", 0x00000, 0x80000, CRC(b36f11fe) SHA1(1d8660ac1ca44e33976ac14210e4a3a201f8f3c4) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD( "574200.u33", 0x00000, 0x80000, CRC(19b25221) SHA1(2f32d337125a9fd0bc7f50713b05e564fd4f81b2) ) -ROM_END - -ROM_START( butrfly ) // this has original Bordun copyright in ROMs and test mode in Chinese - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "sub-pcb.bin", 0x00000, 0x10000, CRC(f5618f8e) SHA1(390b238821b195f444e69c45786617524e6f5394) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(2ff775ea) SHA1(2219c75cbac2969485607446ab116587bdee7278) ) - ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(029d2214) SHA1(cf8256157db0b297ed457b3da6b6517907128843) ) - ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(37bad677) SHA1(c077f0c07b097b376a01e5637446e4c4f82d9e28) ) - ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(d14c7713) SHA1(c229ef64f3b0a04ff8e27bc56cff6a55ca34b80c) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) ) - ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) ) - ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(226cb483) SHA1(89efa0e11700bcab0024a6058a5f1ee6b4a09953) ) - ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(a69b5994) SHA1(f7f849c752740089a49dc6693822466d73010ea0) ) -ROM_END - -ROM_START( butrflybl ) // this has Bordun copyright removed and test mode in English - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "butterfly.prg", 0x00000, 0x10000, CRC(b35b289c) SHA1(5a02bfb6e1fb608099b9f491c10795ef888a3b36) ) // Mata Electronic / Sen Xing Trading copyright instead of Bordun - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(2ff775ea) SHA1(2219c75cbac2969485607446ab116587bdee7278) ) - ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(029d2214) SHA1(cf8256157db0b297ed457b3da6b6517907128843) ) - ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(37bad677) SHA1(c077f0c07b097b376a01e5637446e4c4f82d9e28) ) - ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(d14c7713) SHA1(c229ef64f3b0a04ff8e27bc56cff6a55ca34b80c) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) // u56 and u58 are slightly modified to erase the Bordun copyright on the title screen - ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) ) - ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) ) - ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(a53daaef) SHA1(7b88bb986bd5e47576163d6999f8770c720c5bfc) ) - ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) -ROM_END - -ROM_START( mbutrfly ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "magical_butterfy_x4_cleco.bin", 0x00000, 0x10000, CRC(2391778f) SHA1(f82ee9fb571547fda70867e091317779e2fe6e80) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "mb.u29", 0x00000, 0x20000, CRC(294b1cc5) SHA1(56f143d7d96b9ace0973d7001a13e7e55967e70a) ) - ROM_LOAD16_BYTE( "mb.u31", 0x00001, 0x20000, CRC(c6f4e629) SHA1(97334c7dcfea9a405996c06a79cf3c34a360f807) ) - ROM_LOAD16_BYTE( "mb.u33", 0x40000, 0x20000, CRC(72d22790) SHA1(d7a995e95f17bd4324f02aa16d23bfd78f95b5c5) ) - ROM_LOAD16_BYTE( "mb.u35", 0x40001, 0x20000, CRC(fdaa2288) SHA1(199323c2bd2af0d9b1d254a330670e2845f21dd9) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "mb.u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) ) // identical to butterfly. - ROM_LOAD16_BYTE( "mb.u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) ) // identical to butterfly. - ROM_LOAD16_BYTE( "mb.u56", 0x40000, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) // this one is straight fixed for reel tiles 6C-DF. - ROM_LOAD16_BYTE( "mb.u58", 0x40001, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) // identical to butterfly. -ROM_END - -ROM_START( gallag50 ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "27512.u9", 0x00000, 0x10000, CRC(355f8c3b) SHA1(d419fcb96bf936eaf7afb1a4b38a9e1d2a191686) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "27c301.u29", 0x00000, 0x20000, CRC(adf3208a) SHA1(251e94efe90b8250cb8d75255bd5b58a6b7825a7) ) - ROM_LOAD16_BYTE( "27c301.u31", 0x00001, 0x20000, CRC(24f20819) SHA1(a6fd1febe061f84e2bf3609bbf7c95912a04db70) ) - ROM_LOAD16_BYTE( "27c301.u33", 0x40000, 0x20000, CRC(7ec63f5a) SHA1(47e91f21a674a949b0085cf2d8463da245328db3) ) - ROM_LOAD16_BYTE( "27c301.u35", 0x40001, 0x20000, CRC(68c186d6) SHA1(6e8b5d489c4ba2a65dadf3a8cb3c07c2fedc1cb1) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "27c301.u52", 0x00000, 0x20000, CRC(f3de59f4) SHA1(3b70a8677647a54333049a59cf01ba2c63c33d87) ) - ROM_LOAD16_BYTE( "27c301.u54", 0x00001, 0x20000, CRC(f399751b) SHA1(2b7f3ed4181d654b67154b9587ee971ee881f35c) ) - ROM_LOAD16_BYTE( "27c301.u56", 0x40000, 0x20000, CRC(7eec4edf) SHA1(897fbbcda8d1c42b3a59f0f2f68e295e054d062d) ) - ROM_LOAD16_BYTE( "27c301.u58", 0x40001, 0x20000, CRC(afd0d391) SHA1(cc024d37cc23f94ef09a8a543cb1604e3f82c306) ) -ROM_END - -/* - -Mad Zoo PCB Layout ------------------- - -|-----| |------| |---------------------------| -| |--| |--|ROM.U29 ROM.U52 | -| | -| DSW3(8) ROM.U31 ROM.U54 | -| KC89C72 | -| DSW4(8) ROM.U33 ROM.U56 | -|_ | - | PAL ROM.U35 ROM.U58 | - | |-------| | - _| |LATTICE| 6116 | -| 12MHz |1016 | | -| | | 6116 | -| 8255 |-------| | -| 6116 | -| DSW1(8) DSW2(8) | -| 8255 PAL ROM.U9 6116 | -| | -| 6264 Z80 6116 6116 | -|_ 6264 PAL BATTERY| - |--------------------------------------------| -Notes: - Z80 @ 3.0MHz [12/4] - KC89C72 = AY-3-8910 @ 1.5MHz [12/8] -*/ - -ROM_START( madzoo ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "27512.u9", 0x00000, 0x10000, CRC(98b1c9fe) SHA1(9ca1706d25038a078fb07ba5c2e6681ed468bc88) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "27c301.u29", 0x00000, 0x20000, CRC(44645bb8) SHA1(efaf88d63e09029aa023ddaf72dbd9ee1df10315) ) - ROM_LOAD16_BYTE( "27c301.u31", 0x00001, 0x20000, CRC(58267dbc) SHA1(dd64e4b44d10e2d93ded255622891f058b2b8bb9) ) - ROM_LOAD16_BYTE( "27c301.u33", 0x40000, 0x20000, CRC(6adb1c2c) SHA1(d782a778a34e6240a3ae09cd11124790864a9149) ) - ROM_LOAD16_BYTE( "27c301.u35", 0x40001, 0x20000, CRC(a8d3a174) SHA1(b668bb1db1d27aff52e808aa9b972f24693161b3) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "27c301.u52", 0x00000, 0x20000, CRC(dd1997ed) SHA1(9197a0b4a0b6284ae7eeb6364c87589f6f8a614d) ) - ROM_LOAD16_BYTE( "27c301.u54", 0x00001, 0x20000, CRC(a654a6df) SHA1(54292953df1103ad830e1f40fdf96c48e0e13be7) ) - ROM_LOAD16_BYTE( "27c301.u56", 0x40000, 0x20000, CRC(f2e3c394) SHA1(8e09516fe822d7c125be57b154c896ab3e024f98) ) - ROM_LOAD16_BYTE( "27c301.u58", 0x40001, 0x20000, CRC(65d2015b) SHA1(121494a2684276276e2504d6f853718e93f4d458) ) -ROM_END - -ROM_START( leader ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "leader.prg", 0x00000, 0x10000, CRC(1a6e1129) SHA1(639f687e7720bab89628b377dca0475f17a35041) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "leadergfx1.dmp11", 0x00000, 0x20000, CRC(08acae31) SHA1(8b93066a2159e56607499fe1b1748a70a73a326c) ) - ROM_LOAD16_BYTE( "leadergfx1.dmp21", 0x00001, 0x20000, CRC(88cd7a49) SHA1(f7187c7e3e584180de03998f376001f8d5966882) ) - ROM_LOAD16_BYTE( "leadergfx1.dmp12", 0x40000, 0x20000, CRC(e57e145e) SHA1(3f6169ed1d907de3438787c02dc53c73ca6bdb73) ) - ROM_LOAD16_BYTE( "leadergfx1.dmp22", 0x40001, 0x20000, CRC(e8368d29) SHA1(19e7d7d6e320f5f06e91013cb4c92b3987dbe24e) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "leadergfx2.dmp11", 0x00000, 0x20000, CRC(1d62edf4) SHA1(7ba43bf0d0d0cadd5c7fcbe940ecf3fab5c9127b) ) - ROM_LOAD16_BYTE( "leadergfx2.dmp21", 0x00001, 0x20000, CRC(57b9d159) SHA1(ee98aea160653d55017bd893cc253d23c7b1faf4) ) - ROM_LOAD16_BYTE( "leadergfx2.dmp12", 0x40000, 0x20000, CRC(91e73bf9) SHA1(90a9c1119ae05bbd66a4d3c2266ec02cc53969bd) ) - ROM_LOAD16_BYTE( "leadergfx2.dmp22", 0x40001, 0x20000, CRC(04cc0118) SHA1(016ccbe7daf8c4676830aadcc906a64e2826d11a) ) -ROM_END - -ROM_START( leadera ) // this has the same GFX ROMs as butrfly, with different program - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "leader 2ka.bin", 0x00000, 0x10000, CRC(2664db55) SHA1(de4c07a8ba8fab772441395b6d05272ee54d9614) ) // on sub board with Altera EPM7032 - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(2ff775ea) SHA1(2219c75cbac2969485607446ab116587bdee7278) ) - ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(029d2214) SHA1(cf8256157db0b297ed457b3da6b6517907128843) ) - ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(37bad677) SHA1(c077f0c07b097b376a01e5637446e4c4f82d9e28) ) - ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(d14c7713) SHA1(c229ef64f3b0a04ff8e27bc56cff6a55ca34b80c) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(15051537) SHA1(086c38c05c605f297a7bc470eb51763a7648e72c) ) - ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(8e34d029) SHA1(ae316f2f34768938a07d62db110ce59d2751abaa) ) - ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(a53daaef) SHA1(7b88bb986bd5e47576163d6999f8770c720c5bfc) ) - ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(21ca47f8) SHA1(b192be06a2eb817776309580dc64fd76772a8d50) ) -ROM_END - -/* - Neraidoula - - There is a complete screen of the game Out Run - inside the graphics ROMs. - Maybe it's a leftover, or it's a sort of stealth game. -*/ -ROM_START( neraidou ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "aepi.prg", 0x00000, 0x10000, CRC(7ac74830) SHA1(1e3322341711e329b40d94ac6ec25fbafb1d4d62) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "ldrbfl4.bin", 0x00000, 0x20000, CRC(9424c24d) SHA1(4fcf66b641db14b5096d0de75a134d2d35c6eb9b) ) - ROM_LOAD16_BYTE( "ldrbfl2.bin", 0x00001, 0x20000, CRC(467dd56b) SHA1(5c64ee7ff2f4cc127b57342daf63c392c5155344) ) - ROM_LOAD16_BYTE( "ldrbfl3.bin", 0x40000, 0x20000, CRC(810ac7f5) SHA1(f0e680a1813d01e4ca4da97c3c45e9373361620b) ) - ROM_LOAD16_BYTE( "ldrbfl1.bin", 0x40001, 0x20000, CRC(c3bd4dc0) SHA1(2696321846e09359122447e6b60db29c5742a36a) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "ldrbfl8.bin", 0x00000, 0x20000, CRC(74992877) SHA1(f10f90f844198bba49fc3c74b1e8f40821cd1b56) ) - ROM_LOAD16_BYTE( "ldrbfl6.bin", 0x00001, 0x20000, CRC(4b9fb756) SHA1(21d5abbc19a7e3277316d0ac616bdf0819e563b7) ) - ROM_LOAD16_BYTE( "ldrbfl7.bin", 0x40000, 0x20000, CRC(a1842082) SHA1(0790c1c1c268fe13f2613e594fdf09daae19bbd0) ) - ROM_LOAD16_BYTE( "ldrbfl5.bin", 0x40001, 0x20000, CRC(aa0a9b4e) SHA1(e09e6d3c5283ace1f1c6999cdc97e7dde9105338) ) -ROM_END - -/* - Missing In Action. - from Vegas. - - People call it Ypovrixio (Submarine). - But is not the real title. -*/ -ROM_START( miaction ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "27c512_sub_board_miaction.bin", 0x00000, 0x10000, CRC(4865a6de) SHA1(cfa23eef004f9a29d462676d9b9b94a1e84064d6) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "u29.bin", 0x00000, 0x20000, CRC(14d2a342) SHA1(5745a4db5af55072e49de80fdc29a33dd78af68e) ) - ROM_LOAD16_BYTE( "u31.bin", 0x00001, 0x20000, CRC(9079a3d2) SHA1(b4c624cf7bf45d7879118dac7d999d36717e0395) ) - ROM_LOAD16_BYTE( "u33.bin", 0x40000, 0x20000, CRC(9cf17008) SHA1(9fe1d1522ef0ca271cbe4105f79c55462cec9078) ) - ROM_LOAD16_BYTE( "u35.bin", 0x40001, 0x20000, CRC(e04d0ae8) SHA1(36ae96302225e7485882ec911b04e24cc2bd9e8d) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "u52.bin", 0x00000, 0x20000, CRC(e02ed758) SHA1(a90a3889522f3a8b3f1a4642c191dea8ec6cad21) ) - ROM_LOAD16_BYTE( "u54.bin", 0x00001, 0x20000, CRC(4724f35b) SHA1(a8117adf903238a1aca16c1e1468d0684a1d5b95) ) - ROM_LOAD16_BYTE( "u56.bin", 0x40000, 0x20000, CRC(62ca6bc8) SHA1(2aa2a04c18bf25da509e18de7a32d945a084f37a) ) - ROM_LOAD16_BYTE( "u58.bin", 0x40001, 0x20000, CRC(54e49fa5) SHA1(31e7fb65b78ddf429c794fe94ff63fe5650a9787) ) -ROM_END - -/* - Tiger (slot). - Unknown manufacturer. - - Encrypted program. - Program seems close to Missing In Action. - -*/ -ROM_START( tigerslt ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "27c512_sub_board_tiger.bin", 0x00000, 0x10000, CRC(3c4181bf) SHA1(afc4fcd7ec9a48406242fe7e01a32e1a20216330) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "27c301.u29", 0x00000, 0x20000, CRC(adfdc5d6) SHA1(cdbdf43c081fe5bf6c5435fcd68329930f486b9b) ) - ROM_LOAD16_BYTE( "27c301.u31", 0x00001, 0x20000, CRC(e5054f16) SHA1(c6652fd48cf9ec0dde7ab67da24938e5a845e62f) ) - ROM_LOAD16_BYTE( "27c301.u33", 0x40000, 0x20000, CRC(8f162664) SHA1(1777262177820f0be91e5a77e8ff4c3dae819049) ) - ROM_LOAD16_BYTE( "27c301.u35", 0x40001, 0x20000, CRC(c46d51b6) SHA1(340a627d33433791d3b17736c04267fb3b53d12b) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "27c301.u52", 0x00000, 0x20000, CRC(fba16aa8) SHA1(750a462c507363eca6e9dbcdf5fa07581165758a) ) - ROM_LOAD16_BYTE( "27c301.u54", 0x00001, 0x20000, CRC(6631f487) SHA1(9ac5c2bc177479297b605c4c54ad91fc2e3358e6) ) - ROM_LOAD16_BYTE( "27c301.u56", 0x40000, 0x20000, CRC(9168854f) SHA1(2b9b9b9aa23cb5521b4b25b878911e5029506e47) ) - ROM_LOAD16_BYTE( "27c301.u58", 0x40001, 0x20000, CRC(1d4e4ae8) SHA1(0a1a0b68174bb8954e302f75200fbd642d5275da) ) -ROM_END - - -/* - 明星 97 (Ming Xing 97) / Super Star 97 - Bordun International. - - For amusement only (as seen in the title). - PCB looks similar to Sky Lancer. - - 1x M5M82C255ASP for I/O, - 1x daughterboard with Z80 CPU, - 1x AY-3-8910A - - 1x Xilinx XC2064-33 CPLD... - - 1x 12.000 Mhz crystal - - 2x UM70C171-66 - 1x HM6116LP-4 - 5x HM6116L-120 - - Unfortunately, one extra ROM (u48) is blank. - Seems to be the one that store the palette at offset $C000. - - BP 170 to see the palette registers... - -*/ -ROM_START( sstar97 ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "27256.u15", 0x0000, 0x8000, CRC(a5da4f92) SHA1(82ac70bd379649f130db017aa226d0247db0f3cd) ) - ROM_LOAD( "unknown.u48", 0x8000, 0x8000, BAD_DUMP CRC(9f4c02e3) SHA1(05975184130ea7dd3bb5d32eff77b585bd53e6b5) ) // palette borrowed from other game - - ROM_REGION( 0x80000, "gfx1", 0 ) // All ROMs are 28-pins mask ROMs dumped as Fujitsu MB831000 or TC531000 (mask ROM). - ROM_LOAD16_BYTE( "bor_dun_4.u23", 0x00000, 0x20000, CRC(d0d0ead1) SHA1(00bfe691cb9020c5d7e21d80a1e059ea2155aad8) ) - ROM_LOAD16_BYTE( "bor_dun_2.u25", 0x00001, 0x20000, CRC(2b0f07b5) SHA1(9bcde623e53697c4b68d2f083f6254596aee64eb) ) - ROM_LOAD16_BYTE( "bor_dun_3.u24", 0x40000, 0x20000, CRC(3c7da3f1) SHA1(8098b33a779fb697984b97f2d7edb9874e6e19d9) ) - ROM_LOAD16_BYTE( "bor_dun_1.u26", 0x40001, 0x20000, CRC(36efdca6) SHA1(e614fbba77e5c7a1e7a1d2970b4f945ee0468196) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) // All ROMs are 28-pins mask ROMs dumped as Fujitsu MB831000 or TC531000 (mask ROM). - ROM_LOAD16_BYTE( "bor_dun_8.u19", 0x00000, 0x20000, CRC(adf0b7ce) SHA1(41d9fb16eb20e1fd2960117b7e4ea23a97b88961) ) - ROM_LOAD16_BYTE( "bor_dun_6.u21", 0x00001, 0x20000, CRC(37be2cbe) SHA1(78acda58aab605cb992c3b9fbaf18d38f768ed1a) ) - ROM_LOAD16_BYTE( "bor_dun_7.u20", 0x40000, 0x20000, CRC(43908665) SHA1(41b9cee0723d9da6934ab7934012fb1625a8f080) ) - ROM_LOAD16_BYTE( "bor_dun_5.u22", 0x40001, 0x20000, CRC(ca17a632) SHA1(d491310ccdbe9b59a1e607f9254646f20700d79d) ) -ROM_END - -/* - 蝴蝶梦 97 (Húdié Mèng 97) - Game is encrypted and needs better decoded graphics. -*/ -ROM_START( bdream97 ) - ROM_REGION( 0x10000, "maincpu", 0 ) - ROM_LOAD( "27c512_subboard.bin", 0x00000, 0x08000, CRC(b0056324) SHA1(8299198d5e7ed50967f380ba0fddff5a39eee857) ) - ROM_CONTINUE( 0x0c000, 0x04000 ) - ROM_CONTINUE( 0x08000, 0x04000 ) - - ROM_REGION( 0x80000, "gfx1", 0 ) // All ROMs are 27010. - ROM_LOAD16_BYTE( "27c010.u20", 0x00000, 0x20000, CRC(df1fd438) SHA1(8da4d116e768a3c269a2031db6bf38a5b7707029) ) - ROM_LOAD16_BYTE( "27c010.u22", 0x00001, 0x20000, CRC(e66910eb) SHA1(454dc47caf4ae9408c3d0b759f4a32d346f86ffe) ) - ROM_LOAD16_BYTE( "27c010.u21", 0x40000, 0x20000, CRC(b984f5bd) SHA1(9a21b46d6d497271cd589e01af3f3143946980b1) ) - ROM_LOAD16_BYTE( "27c010.u23", 0x40001, 0x20000, CRC(2b6e6fd7) SHA1(cf0c66c90c6ab3ebc69ebe1e4f29b69b72edfdc2) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) // All ROMs are 27010. - ROM_LOAD16_BYTE( "27c010.u24", 0x00000, 0x20000, CRC(b77f3fc5) SHA1(63f7b46ed19f256a6d84624e191dc1719a57cbed) ) - ROM_LOAD16_BYTE( "27c010.u26", 0x00001, 0x20000, CRC(27cd64ef) SHA1(6b39b2919aca967f72fa16cd61b1641d0fb98d88) ) - ROM_LOAD16_BYTE( "27c010.u25", 0x40000, 0x20000, CRC(bdebdf35) SHA1(245247b23ddeded32519608f4696205bb5541ccc) ) - ROM_LOAD16_BYTE( "27c010.u27", 0x40001, 0x20000, CRC(0a266de4) SHA1(0ff9ad793e77d5419bd446cb73d4968e42305353) ) -ROM_END - -/* - Sonik Fighter. - Greek Version By ZBOUNOS (Z GAMES). - Year 2000. - - Multiple Butterfly type with naked girls. - + new features and hold a pair. - + jackpot. - + tetris game?. - - Program ROM is encrypted. -*/ -ROM_START( sonikfig ) - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "subboard_27c512.bin", 0x00000, 0x10000, CRC(f9b5b03e) SHA1(3832a7d70b41052f9dca46faa6f311ccc5a817b7) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "1__am27c100.u29", 0x00000, 0x20000, CRC(69824294) SHA1(a221ab3e5d50435c10e3cd4601cfda1c87038a74) ) - ROM_LOAD16_BYTE( "2__am27c100.u31", 0x00001, 0x20000, CRC(5224ed08) SHA1(3ba9af7557f13bf31c529bff7b2b8cfd6e71552c) ) - ROM_LOAD16_BYTE( "3__am27c100.u33", 0x40000, 0x20000, CRC(38fef15c) SHA1(00f7578bac395421fa3289748f85cf3b9d80e04b) ) - ROM_LOAD16_BYTE( "4__am27c100.u35", 0x40001, 0x20000, CRC(6193d30d) SHA1(390b3f451224eb4236c6c921d34b25b702d366e0) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "5__am27c100.u52", 0x00000, 0x20000, CRC(56921033) SHA1(25086b0f5978df04b28b60a30e271f4364112c96) ) - ROM_LOAD16_BYTE( "6__am27c100.u54", 0x00001, 0x20000, CRC(72802c6c) SHA1(c552d438399fb8c983e995d5e78e591982ef96e5) ) - ROM_LOAD16_BYTE( "7__am27c100.u56", 0x40000, 0x20000, CRC(90a09327) SHA1(3bb1150ec397627cc04b46d2bf07538c55e7f116) ) - ROM_LOAD16_BYTE( "8__am27c100.u58", 0x40001, 0x20000, CRC(b02ed0ce) SHA1(ec8ab64210a1b10cdba5ee179e46fc8d6a1a67b6) ) -ROM_END - -/* -PCB marked 'ROLLA REV. 1' and 'CTE 001 94V-0 0205' - -1 Winbond W77E58P on a small sub board (beefed up 8052 with undumped internal EPROM) -1 ispLSI 1016E -1 JFC 95101 (AY8910 compatible) -4 8-dip banks -1 24.00 MHz XTAL (on the daughterboard) - -Has Random Games in GFX, possibly pointing to superb2k (same producer) also using a 8052 derived CPU under the epoxy block -*/ - -ROM_START( rolla ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "545a", 0x0000, 0x8000, NO_DUMP ) // internal flash EPROM, security bit set - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "4w s1.u29", 0x00000, 0x20000, CRC(8b02800e) SHA1(22ae265e8d0bca403be4b4a82b43c526d9407dcf) ) - ROM_LOAD16_BYTE( "4w s2.u31", 0x00001, 0x20000, CRC(efa631ca) SHA1(c924277c64fc20e0d841be8fd1e2a4718dd229f1) ) - ROM_LOAD16_BYTE( "4w s3.u33", 0x40000, 0x20000, CRC(8fdc2d33) SHA1(61cc36caf52487ac863dbec1c40f3ef93e57a505) ) - ROM_LOAD16_BYTE( "4w s4.u35", 0x40001, 0x20000, CRC(9e86abfa) SHA1(fe7e8222051810fd5e0a584967764d71d99bf8fe) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "4w g1.u52", 0x00000, 0x20000, CRC(88036f9e) SHA1(fa93bce2c6eccf70ee23fdd320ee56dcdb6d99e3) ) - ROM_LOAD16_BYTE( "4w g2.u54", 0x00001, 0x20000, CRC(0142ba31) SHA1(e9aed07f112f68fb598bbc841666d5516479b06c) ) - ROM_LOAD16_BYTE( "4w g3.u56", 0x40000, 0x20000, CRC(4324d5c0) SHA1(9c57385eda6a069e455b8cd9fb45db90f1966ecf) ) - ROM_LOAD16_BYTE( "4w g4.u58", 0x40001, 0x20000, CRC(1cce85f1) SHA1(f35709b29a13917fe3c69240b4ab03aa6bdc3a3b) ) -ROM_END - -// this runs on a Rolla PCB with a Z80 + logic on a daughterboard -ROM_START( score5 ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "27c512_suboard.bin", 0x00000, 0x10000, CRC(a0670df0) SHA1(66c7f990141411c71978ec4500ea5a92264576e0) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "1_am27c100.u29", 0x00000, 0x20000, CRC(42b03f90) SHA1(490ca43284e58931b8334ddeae3242cfd0a7a700) ) - ROM_LOAD16_BYTE( "2_am27c100.u31", 0x00001, 0x20000, CRC(12ab7866) SHA1(5d608a9d569b5a7ebd2cb0cf2b2c95463c421c87) ) - ROM_LOAD16_BYTE( "3_am27c100.u33", 0x40000, 0x20000, CRC(ffb88d0a) SHA1(b14147c96d81e5838bccf3c3df08fc26b3e917ad) ) - ROM_LOAD16_BYTE( "4_am27c100.u35", 0x40001, 0x20000, CRC(91176aac) SHA1(18aab2578f4db1f04fb0570be685aa28a511d099) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "5_am27c100.u52", 0x00000, 0x20000, CRC(d4d8e699) SHA1(5ba9e8c634fde06e55362f47fbd49503a9da2ed3) ) - ROM_LOAD16_BYTE( "6_am27c100.u54", 0x00001, 0x20000, CRC(59631eaf) SHA1(a7f8dfc6737e6db6be8311e054f1e07b65792a93) ) - ROM_LOAD16_BYTE( "7_am27c100.u56", 0x40000, 0x20000, CRC(801881a4) SHA1(fe0914db7d178c6d689682cb6e2af4ba782eaf8e) ) - ROM_LOAD16_BYTE( "8_am27c100.u58", 0x40001, 0x20000, CRC(db20c424) SHA1(537c3b4dfb532473955042a58d204aebf60e950e) ) -ROM_END - -// this runs on a Rolla PCB with an unverified CPU enclosed in an epoxy block. GFX ROMs are half sized if compared to all the other supported sets. -ROM_START( superb2k ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "v5.u9", 0x00000, 0x10000, CRC(dbbc3062) SHA1(fd020571a610ea60ef207fd709e737506bf9300a) ) // ROM was outside the epoxy block - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "u29", 0x00000, 0x10000, CRC(b876a2a4) SHA1(e52020b71cf8e98f8d5f5caf98ec3bb2a0cd09f8) ) - ROM_LOAD16_BYTE( "u31", 0x00001, 0x10000, CRC(ab994cab) SHA1(7f50534a4c875049c8e80ec734ff4c5343f40d96) ) - ROM_LOAD16_BYTE( "u33", 0x40000, 0x10000, CRC(bbe554d4) SHA1(18b59b25d59f94a06ed59908b7d03f1adda8d90e) ) - ROM_LOAD16_BYTE( "u35", 0x40001, 0x10000, CRC(bbef9385) SHA1(f8aa5787ef6c510617c847a231c7e4cf59d7003f) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "u52", 0x00000, 0x10000, CRC(b0bb947a) SHA1(6822dd82b9be72b47ecaa412de4e070b372be170) ) - ROM_LOAD16_BYTE( "u54", 0x00001, 0x10000, CRC(065aa631) SHA1(ae5e8a952bd0a6b052ab7636240e0ebc495f09aa) ) - ROM_LOAD16_BYTE( "u56", 0x40000, 0x10000, CRC(b9121b69) SHA1(9a46444a63977d45392c6513550d132e5d2da365) ) - ROM_LOAD16_BYTE( "u58", 0x40001, 0x10000, CRC(0a7023aa) SHA1(2efdb4ad2acd90fff39144e08b012e39b571a682) ) -ROM_END - -ROM_START( olymp ) - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "v1.bin", 0x00000, 0x10000, CRC(3b49a550) SHA1(b3add0affba091eb6e1ad9a680de41226885fcec) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "u29", 0x00000, 0x20000, CRC(26a83503) SHA1(84ed7b0c2552f2c7b4ef9b5b4f0303b9183a3a26) ) - ROM_LOAD16_BYTE( "u31", 0x00001, 0x20000, CRC(fe5bde82) SHA1(0925d230b4773eeb8caf5e12a4c30ac8607ae358) ) - ROM_LOAD16_BYTE( "u33", 0x40000, 0x20000, CRC(a33209f7) SHA1(f43cab5c78bb6a63c9633ba85a84c8ba1e2b1d2b) ) - ROM_LOAD16_BYTE( "u35", 0x40001, 0x20000, CRC(2f665877) SHA1(8eb779a87319e04f28ccc8165fdef7ac643b3602) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "u52", 0x00000, 0x20000, CRC(17f77640) SHA1(570407e6fe282ad3a96ad43c8ff36a06ddb43579) ) - ROM_LOAD16_BYTE( "u54", 0x00001, 0x20000, CRC(c626aa6c) SHA1(145e35fe687a8b028d7fbdc08ce608ebdbe3fb46) ) - ROM_LOAD16_BYTE( "u56", 0x40000, 0x20000, CRC(312d1dda) SHA1(88b6214fff700698093591cdce052f36b2a4014f) ) - ROM_LOAD16_BYTE( "u58", 0x40001, 0x20000, CRC(f939f3f0) SHA1(0a089f78ca66d1e660cb854bbf5b0eb38e317a19) ) -ROM_END - -ROM_START( speedway ) // runs on a Rolla PCB with small sub board with main CPU, ROM and Altera EPM. Hack of Leader, extremely similar and still has Leader strings. - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "v3.bin", 0x00000, 0x10000, CRC(ef777180) SHA1(f1a554677543082eb7df2e204d0d4c987b7c6bbb) ) //TMS 27C512 - - ROM_REGION( 0x80000, "gfx1", 0 ) // all HN27C301AG - ROM_LOAD16_BYTE( "1.u29", 0x00000, 0x20000, CRC(72e001fe) SHA1(dbb02f8425c175d5ee401754e6c11ce4d429e621) ) - ROM_LOAD16_BYTE( "2.u31", 0x00001, 0x20000, CRC(a491bdcf) SHA1(793faa829de50f67a44541136b66407ee9744971) ) - ROM_LOAD16_BYTE( "3.u33", 0x40000, 0x20000, CRC(935fc941) SHA1(12e5f7fea932a86298928b70b342e0825a3caca1) ) - ROM_LOAD16_BYTE( "4.u35", 0x40001, 0x20000, CRC(aa8164ce) SHA1(027fa9743ad9d80bd86e59d684180f75dc6d60a0) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) // all HN27C301AG. Still has Bordun and Butterfly GFX in here. - ROM_LOAD16_BYTE( "5.u52", 0x00000, 0x20000, CRC(df984dbc) SHA1(7ea27465f9fd537fbdc1e13ca5842f656cbc2897) ) - ROM_LOAD16_BYTE( "6.u54", 0x00001, 0x20000, CRC(37fbdc4d) SHA1(8db83c43e7c43c2da5a39b86edff416c35fa275e) ) - ROM_LOAD16_BYTE( "7.u56", 0x40000, 0x20000, CRC(328f7912) SHA1(7f05217a18cfb316972cf96711276205e8098ee6) ) - ROM_LOAD16_BYTE( "8.u58", 0x40001, 0x20000, CRC(b93b221f) SHA1(efd6962a0f5e150c60d258fea116d726228dc39c) ) -ROM_END - -ROM_START( speedwaya ) // runs on a Rolla PCB with small sub board with main CPU, ROM and Altera EPM. All ROMs differ quite a bit from the other set. - ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF ) - ROM_LOAD( "sub.bin", 0x00000, 0x10000, CRC(78a6a047) SHA1(15b7b7e90ff2d2821edb081880be71fee4e222a8) ) //27C512 - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "1 sw.u29", 0x00000, 0x20000, CRC(998afc41) SHA1(509c70eee12a461b660abdc74a9dc8db181b76bd) ) - ROM_LOAD16_BYTE( "2 sw.u31", 0x00001, 0x20000, CRC(f143376a) SHA1(83913a31c89f5e06cebb686e89246762753131b9) ) - ROM_LOAD16_BYTE( "3 sw.u33", 0x40000, 0x20000, CRC(dea9a31c) SHA1(108dbee2a36ee2591a18be9a4336a1994370d612) ) - ROM_LOAD16_BYTE( "4 sw.u35", 0x40001, 0x20000, CRC(3bc35ea6) SHA1(eafd67c2abec810d4a86564f4d5d34059013e6e9) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "5 sw.u52", 0x00000, 0x20000, CRC(03af0672) SHA1(87fe8036ab270a5431751cfcccb4094372650173) ) - ROM_LOAD16_BYTE( "6 sw.u54", 0x00001, 0x20000, CRC(5cc4c0a8) SHA1(4cf01c5f34674ab26834ed8f32751e74fe1df1e7) ) - ROM_LOAD16_BYTE( "7 sw.u56", 0x40000, 0x20000, CRC(3adf8590) SHA1(7704e6b90567602497c52550bbd8831e876d1e5d) ) - ROM_LOAD16_BYTE( "8 sw.u58", 0x40001, 0x20000, CRC(da21a487) SHA1(6bf7b97e682da9b97f3165a4d718cfdeeb3d956e) ) -ROM_END - -ROM_START( seadevil ) // on a POCKBOY REV.0 PCB - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "v42 scr scm.u13", 0x00000, 0x10000, CRC(23b6eb48) SHA1(469d9f766ce96d2c850d611cd9a8b48545c71aaf) ) // on sub PCB, M27C512 - - ROM_REGION( 0x80000, "gfx1", 0 ) // all AM27C010 - ROM_LOAD16_BYTE( "1.u26", 0x00000, 0x20000, CRC(e032f4f7) SHA1(accf48ce1447931ca7f7fdabe1684cabed03fe5f) ) - ROM_LOAD16_BYTE( "2.u28", 0x00001, 0x20000, CRC(b8aa9742) SHA1(6c22ab987db6c10c8ae6c0278a5edc88b22fcb3a) ) - ROM_LOAD16_BYTE( "3.u22", 0x40000, 0x20000, CRC(84a09db8) SHA1(6487e5bf97f43c6478c5b986587399213d7ff724) ) - ROM_LOAD16_BYTE( "4.u24", 0x40001, 0x20000, CRC(d02354b9) SHA1(934663853c7d831eb4038c5f511acf2801b8be81) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) // all AM27C010 - ROM_LOAD16_BYTE( "5.u32", 0x00000, 0x20000, CRC(d079830f) SHA1(f12fad5c69545096255a9f79b1cf94bccf85320b) ) - ROM_LOAD16_BYTE( "6.u36", 0x00001, 0x20000, CRC(4db80352) SHA1(21ebd6e0e9fc712ee2c9bc61d2493b4208410260) ) - ROM_LOAD16_BYTE( "7.u30", 0x40000, 0x20000, CRC(64997653) SHA1(4328892974cbd2b42b864b01cd5d621a4a550bc6) ) - ROM_LOAD16_BYTE( "8.u34", 0x40001, 0x20000, CRC(469f8fe2) SHA1(5d271ed0925eceff0d5d095d2443c666de69a58e) ) -ROM_END - -ROM_START( spcliner ) // on a ROLLA PCB, might actually be another title, won't know until palette is fixed. GFX ROM loading is wrong. - ROM_REGION( 0x80000, "maincpu", 0 ) - ROM_LOAD( "9.sub", 0x00000, 0x10000, CRC(80f65def) SHA1(a0716d57ae4935a79d32971d0bcb9f40dd9f1d54) ) // on sub PCB - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD16_BYTE( "5.u22", 0x40000, 0x20000, CRC(522132fb) SHA1(395530f137e19c177a276b6159f14fad66f25f75) ) - ROM_LOAD16_BYTE( "6.u24", 0x40001, 0x20000, CRC(0ad80e17) SHA1(3a22f19d5aa329e666cc9a5f856723deaa575413) ) - ROM_LOAD16_BYTE( "7.u26", 0x00000, 0x20000, CRC(1ab7559d) SHA1(57f93fa8da50f5fb6099f6fe0be656accc3eacb1) ) - ROM_LOAD16_BYTE( "8.u28", 0x00001, 0x20000, CRC(2bdcb2e6) SHA1(08834ff52791934b705b77e59d0b12b3904d27cf) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD16_BYTE( "1.u30", 0x40000, 0x20000, CRC(700831b4) SHA1(6b129a0f16bbae2b0d789ee4023db4e3af2c6b71) ) - ROM_LOAD16_BYTE( "2.u32", 0x00000, 0x20000, CRC(8b770912) SHA1(89cfcc6f1d76c00b970cadfcc106f0fcd738ffa1) ) - ROM_LOAD16_BYTE( "3.u34", 0x40001, 0x20000, CRC(c8e64ae1) SHA1(cd5859e857a7771b3b11215f120567eef53f72cb) ) - ROM_LOAD16_BYTE( "4.u36", 0x00001, 0x20000, CRC(315e7e28) SHA1(c25ca2c9e4bf973cfe9e56a8dc849e53bdc1ebe3) ) -ROM_END - -ROM_START( blshark ) - ROM_REGION( 0x80000, "maincpu", 0 ) // on sub PCB - ROM_LOAD( "sub", 0x00000, 0x10000, CRC(ed005267) SHA1(b20c62d76d4d49ee42e1f2f922015bec3cbbd25d) ) - - ROM_REGION( 0x80000, "gfx1", 0 ) - ROM_LOAD( "u32", 0x00000, 0x80000, CRC(3f2f06f1) SHA1(eb1d29da6a454cf45e182f4ce0c8eab66d1d1713) ) - - ROM_REGION( 0x80000, "gfx2", 0 ) - ROM_LOAD( "u33", 0x00000, 0x80000, CRC(e7f53af5) SHA1(49a722e97e384056d36dfa2d4bf754e90505befe) ) -ROM_END - -/********************************** -* Driver Init * -**********************************/ - -void skylncr_state::init_sonikfig() -/* - Encryption: For each 8 bytes group, - swap byte #1 with #4 and #3 with #6. - - SWAPPED - / \ - 00 01 02 03 04 05 06 07 - \ / - SWAPPED - - 00 01 02 03 04 05 06 07 - \ \ / / - \ X / - \ / \ / - \ / \ / - X X - / \ / \ - / \ / \ - / X \ - / / \ \ - 00 04 02 06 01 05 03 07 -*/ -{ - uint8_t *const ROM = memregion("maincpu")->base(); - for (unsigned x = 0; x < 0x10000; x += 8) - { - std::swap(ROM[x + 1], ROM[x + 4]); - std::swap(ROM[x + 3], ROM[x + 6]); - } -} - -void skylncr_state::init_miaction() -/* - Encryption: - - 0000-0006 ---> unencrypted - 0007-4485 ---> xor'ed with 0x19 - 4486-7fff ---> xor'ed with 0x44 - 8000-bfff ---> seems unencrypted - c000-d25f ---> xor'ed with 0x44 - d260-dfff ---> seems unencrypted - e000-ffff ---> xor'ed with 0x19 - -*/ -{ - uint8_t *const ROM = memregion("maincpu")->base(); - - for (int x = 0x0007; x < 0x4485; x++) - { - ROM[x] = ROM[x] ^ 0x19; - } - - for (int x = 0x4486; x < 0x7fff; x++) - { - ROM[x] = ROM[x] ^ 0x44; - } - - for (int x = 0xc000; x < 0xd25f; x++) - { - ROM[x] = ROM[x] ^ 0x44; - } - - for (int x = 0xe000; x < 0xffff; x++) - { - ROM[x] = ROM[x] ^ 0x19; - } -} - -void skylncr_state::init_olymp() // very weird, needs to be checked / finished, putting RAM in the 0xac00-0xac3f range gets in game -{ - uint8_t *const ROM = memregion("maincpu")->base(); - - for (int x = 0x0000; x < 0x0007; x++) // this range doesn't seem encrypted - m_decrypted_opcodes[x] = ROM[x]; - - for (int x = 0x0007; x < 0x6500; x++) // in this range both data and opcodes appear to be xor'ed 0x40 - { - ROM[x] ^= 0x40; - m_decrypted_opcodes[x] = ROM[x]; - } - - for (int x = 0x6500; x < 0x10000; x++) // in this range data seems untouched and opcodes appear to be xor'ed 0x18 - m_decrypted_opcodes[x] = ROM[x] ^ 0x18; -} - -void skylncr_state::init_superb2k() // TODO: very preliminary, just enough to read some strings -{ - uint8_t *const rom = memregion("maincpu")->base(); - std::vector buffer(0x10000); - - memcpy(&buffer[0], rom, 0x10000); - - // descramble addresses. At a first glance, swaps seem to change if address line bits 13 or 14 are set (possibly 15 too, but not verified yet) - // the scrambled address line bits appear to be 1, 3, 6, 9 and 12 - // it's possible XORs and data lines swaps are involved, too, at least for opcodes - for (int i = 0x00000; i < 0x10000; i++) - { - switch (i & 0x6000) - { - case 0x0000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0)]; break; // TODO: everything - case 0x2000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 1, 11, 10, 9, 8, 7, 3, 5, 4, 12, 2, 6, 0)]; break; // TODO: 0x200 blocks are good (see 0x3e00-0x3fff), rest to be determined - case 0x4000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 1, 11, 10, 3, 8, 7, 6, 5, 4, 9, 2, 12, 0)]; break; // TODO: 0x40 blocks are good, there's still at least a wrong swap (see 0x5200-0x52ff) - case 0x6000: rom[i] = buffer[bitswap<24>(i, 23, 22, 21, 20, 19, 18, 17, 16, 15, 14, 13, 3, 11, 10, 1, 8, 7, 9, 5, 4, 12, 2, 6, 0)]; break; // TODO: 0x20 blocks are good (see 0x7fa0-0x7fbf) - } - } -} - -void skylncr_state::init_speedway() // TODO: complete this. These XORs and ranges have been derived by comparing this dump with leader, of which it's clearly a hack. -{ - uint8_t *const ROM = memregion("maincpu")->base(); - - for (int x = 0x0000; x < 0x10000; x++) - m_decrypted_opcodes[x] = ROM[x]; - - for (int x = 0x000d; x < 0x5000; x++) - { - ROM[x] = ROM[x] ^ 0x41; - m_decrypted_opcodes[x] = ROM[x]; - } - - for (int x = 0x5000; x < 0x53c2; x++) - m_decrypted_opcodes[x] = ROM[x] ^ 0x12; - - for (int x = 0x5400; x < 0x8000; x++) - { - ROM[x] = ROM[x] ^ 0x41; - m_decrypted_opcodes[x] = ROM[x]; - } - - for (int x = 0xc000; x < 0xc300; x++) - { - ROM[x] = ROM[x] ^ 0x08; - m_decrypted_opcodes[x] = ROM[x]; - } - - for (int x = 0xc300; x < 0xc368; x++) - m_decrypted_opcodes[x] = ROM[x] ^ 0x12; - - for (int x = 0xf690; x < 0xf74f; x++) - m_decrypted_opcodes[x] = ROM[x] ^ 0x12; - - for (int x = 0xf74f; x < 0x10000; x++) - { - ROM[x] = ROM[x] ^ 0x08; - m_decrypted_opcodes[x] = ROM[x]; - } -} - -void skylncr_state::init_speedwaya() // this was done by comparing with an ICE dump, should be correct. -{ - uint8_t *const ROM = memregion("maincpu")->base(); - - for (int x = 0x0000; x < 0x6500; x++) - ROM[x] ^= 0x40; - - // 0x6500 - 0xffff isn't xored -} - -void skylncr_state::init_leadera() -{ - uint8_t *const ROM = memregion("maincpu")->base(); - - for (int x = 0x000d; x < 0x4000; x++) - ROM[x] ^= 0x08; - - for (int x = 0x4000; x < 0x8000; x++) - ROM[x] ^= 0x10; - - for (int x = 0xc000; x < 0x10000; x++) - ROM[x] ^= 0x40; - - ROM[0x762a] = ROM[0x762b] = 0x00; // TODO: some minor protection? bypass for now -} - -void skylncr_state::init_butrfly() -{ - uint8_t *const ROM = memregion("maincpu")->base(); - - for (int x = 0x0000; x < 0x10000; x++) - ROM[x] = bitswap<8>(ROM[x] ^ 0x1b, 4, 2, 6, 7, 1, 5, 3, 0); -} - -void skylncr_state::init_blshark() // done by comparing code to skylancr, may be missing something -{ - uint8_t *const rom = memregion("maincpu")->base(); - std::vector buffer(0x10000); - - memcpy(&buffer[0], rom, 0x10000); - - for (int x = 0x00000; x < 0x10000; x++) - { - rom[x] = buffer[bitswap<24>(x, 23, 22, 21, 20, 19, 18, 17, 16, 14, 15, 12, 13, 10, 11, 8, 9, 6, 7, 5, 4, 3, 2, 1, 0)]; - - if (x >= 0x0b) - rom[x] ^= 0xff; - } -} - -} // anonymous namespace - - -/**************************************************** -* Game Drivers * -****************************************************/ - -// YEAR NAME PARENT MACHINE INPUT STATE INIT ROT COMPANY FULLNAME FLAGS -GAME( 1995, skylncr, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Bordun International", "Sky Lancer (Bordun, version U450C)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, butrfly, 0, skylncr, skylncr, skylncr_state, init_butrfly, ROT0, "Bordun International", "Butterfly Video Game (version A00)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, butrflybl, butrfly, skylncr, skylncr, skylncr_state, empty_init, ROT0, "bootleg", "Butterfly Video Game (version U350C)", MACHINE_SUPPORTS_SAVE ) -GAME( 1999, mbutrfly, 0, mbutrfly, mbutrfly, skylncr_state, init_mbutrfly, ROT0, "Bordun International", "Magical Butterfly (version U350C, protected)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, madzoo, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Bordun International", "Mad Zoo (version U450C)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, leader, 0, skylncr, leader, skylncr_state, empty_init, ROT0, "bootleg", "Leader (version Z 2E, Greece)", MACHINE_SUPPORTS_SAVE ) -GAME( 1995, leadera, leader, skylncr, leader, skylncr_state, init_leadera, ROT0, "bootleg", "Leader (version Z 2F, Greece)", MACHINE_UNEMULATED_PROTECTION | MACHINE_SUPPORTS_SAVE ) // Needs correct protection emulation instead of ROM patch -GAME( 199?, speedway, 0, olymp, leader, skylncr_state, init_speedway, ROT0, "hack (Drivers)", "Speedway (set 1)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Incomplete decryption (?) -GAME( 199?, speedwaya, speedway, skylncr, leader, skylncr_state, init_speedwaya, ROT0, "hack", "Speedway (set 2)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // Decryption should be correct (unless ICE dump was bad), but doesn't boot -GAME( 199?, gallag50, 0, skylncr, gallag50, skylncr_state, empty_init, ROT0, "bootleg", "Gallag Video Game / Petalouda (Butterfly, x50)", MACHINE_SUPPORTS_SAVE ) -GAME( 199?, neraidou, 0, neraidou, neraidou, skylncr_state, empty_init, ROT0, "bootleg", "Neraidoula", MACHINE_SUPPORTS_SAVE ) -GAME( 199?, miaction, 0, skylncr, skylncr, skylncr_state, init_miaction, ROT0, "Vegas", "Missing In Action", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) -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( 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 ) -GAME( 2000, spcliner, 0, skylncr, sonikfig, skylncr_state, init_sonikfig, ROT0, "Z Games", "Space Liner", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // game runs but screen is completely black due to palette mishandling -GAME( 199?, rolla, 0, skylncr, skylncr, skylncr_state, empty_init, ROT0, "Random Games", "unknown 'Rolla' slot machine", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // internal CPU ROM not dumped -GAME( 2000?,score5, 0, skylncr, score5, skylncr_state, init_sonikfig, ROT0, "Z Games", "Score 5", MACHINE_WRONG_COLORS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // game runs but screen is completely black due to palette mishandling -GAME( 2000?,superb2k, 0, skylncr, skylncr, skylncr_state, init_superb2k, ROT0, "Random Games", "Super Butterfly 2000", MACHINE_NO_SOUND | MACHINE_NOT_WORKING ) // encrypted / different CPU type ? -GAME( 2000, seadevil, 0, skylncr, score5, skylncr_state, init_sonikfig, ROT0, "Z Games", "Sea Devil", MACHINE_IMPERFECT_GRAPHICS | MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // GFX ROM loading is wrong, causing severe GFX glitches -GAME( 2000, blshark, 0, skylncr, skylncr, skylncr_state, init_blshark, ROT0, "MDS Hellas", "Blue Shark (MDS Hellas)", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // protection? -- cgit v1.2.3-70-g09d2