summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
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
commit335551522884e1057051793c1f6712be934d7840 (patch)
tree2ea79d06b2a93fe0a5acb6248e6323bc37c056b1
parent780ddc3039ddf1795626f4e5211b336d6544a49e (diff)
New working clones
------------------ Penguin Adventure (bootleg of MSX version, not encrypted) [caius]
-rw-r--r--src/mame/drivers/pengadvb.cpp76
-rw-r--r--src/mame/mame.lst1
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