diff options
author | Ivan Vangelista <mesgnet@yahoo.it> | 2020-03-09 18:59:52 +0100 |
---|---|---|
committer | Ivan Vangelista <mesgnet@yahoo.it> | 2020-03-09 18:59:52 +0100 |
commit | 335551522884e1057051793c1f6712be934d7840 (patch) | |
tree | 2ea79d06b2a93fe0a5acb6248e6323bc37c056b1 | |
parent | 780ddc3039ddf1795626f4e5211b336d6544a49e (diff) |
New working clones
------------------
Penguin Adventure (bootleg of MSX version, not encrypted) [caius]
-rw-r--r-- | src/mame/drivers/pengadvb.cpp | 76 | ||||
-rw-r--r-- | src/mame/mame.lst | 1 |
2 files changed, 74 insertions, 3 deletions
diff --git a/src/mame/drivers/pengadvb.cpp b/src/mame/drivers/pengadvb.cpp index efc6dd434c5..161d69643f6 100644 --- a/src/mame/drivers/pengadvb.cpp +++ b/src/mame/drivers/pengadvb.cpp @@ -26,6 +26,7 @@ TODO: - A timer apparently expires when beating stage 4 (signalled by a long beeping sound). Player needs to insert another credit and press start button (?) in order to continue. Is this timer supposed to be shown on screen or there are additional 7-LEDs not handled? +- The CBK1029 PCB is also emulated by sfkick.cpp. Merge drivers? The board is differently populated. ***************************************************************************/ @@ -52,6 +53,7 @@ public: void pengadvb(machine_config &config); void init_pengadvb(); + void init_pengadvb2(); private: uint8_t mem_r(offs_t offset); @@ -154,8 +156,57 @@ static INPUT_PORTS_START( pengadvb ) // bit 1 is also tested, unknown purpose. PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_START1 ) PORT_BIT(0xee, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("IN2") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("DSW1") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED ) INPUT_PORTS_END +static INPUT_PORTS_START( pengadvb2 ) // reads are scrambled + PORT_START("IN0") + PORT_BIT(0xff, IP_ACTIVE_LOW, IPT_UNUSED ) + + PORT_START("IN1") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_START1 ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_BUTTON1 ) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("IN2") + PORT_BIT(0x01, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT(0x02, IP_ACTIVE_LOW, IPT_UNKNOWN ) // button2? + PORT_BIT(0x04, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT(0x08, IP_ACTIVE_LOW, IPT_COIN1 ) + PORT_BIT(0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) + PORT_BIT(0x20, IP_ACTIVE_LOW, IPT_UNKNOWN ) + PORT_BIT(0x40, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) + PORT_BIT(0x80, IP_ACTIVE_LOW, IPT_UNKNOWN ) + + PORT_START("DSW1") + PORT_DIPNAME( 0x03, 0x03, "Lives after the first" ) PORT_DIPLOCATION("SW1:1,2") + PORT_DIPSETTING( 0x03, "0" ) + PORT_DIPSETTING( 0x02, "1" ) + PORT_DIPSETTING( 0x01, "2" ) + PORT_DIPSETTING( 0x00, "4" ) + PORT_DIPNAME( 0xa4, 0xa4, DEF_STR( Coinage ) ) PORT_DIPLOCATION("SW1:3,4,5") + PORT_DIPSETTING( 0x04, DEF_STR( 3C_1C ) ) + PORT_DIPSETTING( 0x00, DEF_STR( 3C_2C ) ) + PORT_DIPSETTING( 0x84, DEF_STR( 2C_1C ) ) + PORT_DIPSETTING( 0x80, DEF_STR( 2C_3C ) ) + PORT_DIPSETTING( 0xa4, DEF_STR( 1C_1C ) ) + PORT_DIPSETTING( 0xa0, DEF_STR( 1C_2C ) ) + PORT_DIPSETTING( 0x24, DEF_STR( 1C_3C ) ) + PORT_DIPSETTING( 0x20, DEF_STR( 1C_5C ) ) + PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:6") + PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW1:7") + PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:8") +INPUT_PORTS_END /*************************************************************************** @@ -193,9 +244,12 @@ uint8_t pengadvb_state::ppi_port_b_r() // TODO: dipswitch switch (m_kb_matrix_row) { - case 0x0: + case 0x00: return ioport("IN1")->read(); - + case 0x01: + return ioport("IN2")->read(); + case 0x04: + return ioport("DSW1")->read(); default: break; } @@ -292,6 +346,11 @@ void pengadvb_state::init_pengadvb() pengadvb_decrypt("maincpu"); pengadvb_decrypt("game"); + init_pengadvb2(); +} + +void pengadvb_state::init_pengadvb2() +{ // init banks for (int i = 0; i < 4; i++) m_bank[i]->configure_entries(0, 0x10, memregion("game")->base(), 0x2000); @@ -315,5 +374,16 @@ ROM_START( pengadvb ) ROM_LOAD( "rom.u10", 0x18000, 0x8000, CRC(5c48360f) SHA1(0866e20969f57b7b7c59df8f7ca203f18c7c9870) ) ROM_END +ROM_START( pengadvb2 ) // CBK1029 PCB + ROM_REGION( 0x8000, "maincpu", 0 ) + ROM_LOAD( "7l", 0x00000, 0x8000, CRC(9645ab69) SHA1(7a15b501d2c357b9fda83c811b0d728df318ceb2) ) + + ROM_REGION( 0x20000, "game", 0 ) + ROM_LOAD( "7a", 0x00000, 0x8000, CRC(8434344c) SHA1(c3002df12fb5395506a16abcefbcb4f5cbe3eb6a) ) + ROM_LOAD( "7c", 0x08000, 0x8000, CRC(0274f6eb) SHA1(185b3819357abf65988971e9deece3b5c67dd1d0) ) + ROM_LOAD( "7d", 0x10000, 0x8000, CRC(8cb1f223) SHA1(ff5db3c373e6d919b4e8e06c3e4607b150f31964) ) + ROM_LOAD( "7e", 0x18000, 0x8000, CRC(60764899) SHA1(a75e59c2ecf8cebdb99708cb18390157ad7b6993) ) +ROM_END -GAME( 1988, pengadvb, 0, pengadvb, pengadvb, pengadvb_state, init_pengadvb, ROT0, "bootleg (Screen) / Konami", "Penguin Adventure (bootleg of MSX version)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, pengadvb, 0, pengadvb, pengadvb, pengadvb_state, init_pengadvb, ROT0, "bootleg (Screen) / Konami", "Penguin Adventure (bootleg of MSX version, encrypted)", MACHINE_SUPPORTS_SAVE ) +GAME( 1988, pengadvb2, pengadvb, pengadvb, pengadvb2, pengadvb_state, init_pengadvb2, ROT0, "bootleg (Comet)", "Penguin Adventure (bootleg of MSX version, not encrypted)", MACHINE_SUPPORTS_SAVE ) diff --git a/src/mame/mame.lst b/src/mame/mame.lst index 5ffbd4f21a2..a64bd668d09 100644 --- a/src/mame/mame.lst +++ b/src/mame/mame.lst @@ -32463,6 +32463,7 @@ pencil2 // @source:pengadvb.cpp pengadvb // (c) 1988 Screen +pengadvb2 // (c) 1988 Comet @source:pengo.cpp jrpacmbl // bootleg on Pengo HW |