summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/pengo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/pengo.cpp')
-rw-r--r--src/mame/drivers/pengo.cpp224
1 files changed, 0 insertions, 224 deletions
diff --git a/src/mame/drivers/pengo.cpp b/src/mame/drivers/pengo.cpp
index 618dd084a50..d5c2975a8c0 100644
--- a/src/mame/drivers/pengo.cpp
+++ b/src/mame/drivers/pengo.cpp
@@ -88,10 +88,8 @@ public:
void pengoe(machine_config &config);
void pengou(machine_config &config);
void pengo(machine_config &config);
- void schick(machine_config &config);
void init_penta();
- void init_schick();
private:
DECLARE_WRITE_LINE_MEMBER(coin_counter_1_w);
@@ -100,17 +98,12 @@ private:
DECLARE_WRITE_LINE_MEMBER(vblank_irq);
void decode_penta(int end, int nodecend);
- void decode_schick_extra(int size, uint8_t* rom);
optional_shared_ptr<uint8_t> m_decrypted_opcodes;
optional_device<ls259_device> m_latch;
void decrypted_opcodes_map(address_map &map);
- void schick_decrypted_opcodes_map(address_map &map);
void jrpacmbl_map(address_map &map);
void pengo_map(address_map &map);
- void schick_map(address_map &map);
- void schick_audio_map(address_map &map);
- void schick_audio_io_map(address_map &map);
};
@@ -200,45 +193,6 @@ void pengo_state::jrpacmbl_map(address_map &map)
map(0x90c0, 0x90ff).portr("P1");
}
-void pengo_state::schick_map(address_map &map) // everything needs to be verified, where's the sound latch?
-{
- map(0x0000, 0x7fff).rom();
- map(0x8000, 0x83ff).ram().w(FUNC(pengo_state::pacman_videoram_w)).share("videoram");
- map(0x8400, 0x87ff).ram().w(FUNC(pengo_state::pacman_colorram_w)).share("colorram");
- map(0x8800, 0x8fef).ram().share("mainram");
- map(0x8ff0, 0x8fff).ram().share("spriteram");
- map(0x9000, 0x901f).nopw(); // leftover from pengo?
- map(0x9020, 0x902f).writeonly().share("spriteram2");
- map(0x9000, 0x903f).portr("SW2");
- map(0x9040, 0x907f).portr("SW1");
- map(0x9040, 0x9047).w(m_latch, FUNC(ls259_device::write_d0));
- map(0x9070, 0x9070).w(m_watchdog, FUNC(watchdog_timer_device::reset_w));
- map(0x9080, 0x90bf).portr("IN1");
- map(0x90c0, 0x90ff).portr("IN0");
- map(0xe000, 0xffff).rom();
-}
-
-void pengo_state::schick_decrypted_opcodes_map(address_map &map)
-{
- map(0x0000, 0xffff).rom().share("decrypted_opcodes");
- map(0x8800, 0x8fef).ram().share("mainram");
- map(0x8ff0, 0x8fff).ram().share("spriteram");
-}
-
-void pengo_state::schick_audio_map(address_map &map)
-{
- map(0x0000, 0x1fff).rom();
- map(0x4000, 0x43ff).ram();
- map(0x6000, 0x6000).r("soundlatch", FUNC(generic_latch_8_device::read));
-}
-
-void pengo_state::schick_audio_io_map(address_map &map)
-{
- map.global_mask(0xff);
- map(0x00, 0x01).w("ay1", FUNC(ay8910_device::address_data_w));
- map(0x10, 0x11).w("ay2", FUNC(ay8910_device::address_data_w));
- map(0x80, 0x81).w("ay3", FUNC(ay8910_device::address_data_w));
-}
/*************************************
*
@@ -335,48 +289,6 @@ static INPUT_PORTS_START( pengo )
INPUT_PORTS_END
-static INPUT_PORTS_START( schick ) // TODO: check everything
- PORT_START("IN0")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY
- PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_COIN1 )
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN2 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN3 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 )
-
- PORT_START("IN1")
- PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_JOYSTICK_UP ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT ) PORT_4WAY PORT_COCKTAIL
- PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT ) PORT_4WAY PORT_COCKTAIL
- PORT_SERVICE_NO_TOGGLE(0x10, IP_ACTIVE_LOW)
- PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_START1 )
- PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START2 )
- PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_BUTTON1 ) PORT_COCKTAIL
-
- PORT_START("SW1")
- PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW1:1")
- PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW1:2")
- PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW1:3")
- PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW1:4")
- PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW1:5")
- PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW1:6")
- PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW1:7")
- PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW1:8")
-
- PORT_START("SW2")
- PORT_DIPUNKNOWN_DIPLOC(0x01, 0x01, "SW2:1")
- PORT_DIPUNKNOWN_DIPLOC(0x02, 0x02, "SW2:2")
- PORT_DIPUNKNOWN_DIPLOC(0x04, 0x04, "SW2:3")
- PORT_DIPUNKNOWN_DIPLOC(0x08, 0x08, "SW2:4")
- PORT_DIPUNKNOWN_DIPLOC(0x10, 0x10, "SW2:5")
- PORT_DIPUNKNOWN_DIPLOC(0x20, 0x20, "SW2:6")
- PORT_DIPUNKNOWN_DIPLOC(0x40, 0x40, "SW2:7")
- PORT_DIPUNKNOWN_DIPLOC(0x80, 0x80, "SW2:8")
-INPUT_PORTS_END
-
static INPUT_PORTS_START( jrpacmbl )
PORT_START("P1")
@@ -544,52 +456,6 @@ void pengo_state::jrpacmbl(machine_config &config)
MCFG_VIDEO_START_OVERRIDE(pengo_state,jrpacman)
}
-void pengo_state::schick(machine_config &config) // all dividers unknown
-{
- /* basic machine hardware */
- Z80(config, m_maincpu, MASTER_CLOCK/6);
- m_maincpu->set_addrmap(AS_PROGRAM, &pengo_state::schick_map);
- m_maincpu->set_addrmap(AS_OPCODES, &pengo_state::schick_decrypted_opcodes_map);
-
- z80_device &audiocpu(Z80(config, "audiocpu", MASTER_CLOCK/6));
- audiocpu.set_addrmap(AS_PROGRAM, &pengo_state::schick_audio_map);
- audiocpu.set_addrmap(AS_IO, &pengo_state::schick_audio_io_map);
-
- GENERIC_LATCH_8(config, "soundlatch");
-
- WATCHDOG_TIMER(config, m_watchdog);
-
- LS259(config, m_latch); // 3I, TODO: identify bits' function. 0 is correct, 2, 6 and 7 seem to be set when switching from title screen to game screen, 1, 3, 4 and 5 seem to never be set during gameplay
- m_latch->q_out_cb<0>().set(FUNC(pengo_state::irq_mask_w));
- m_latch->q_out_cb<1>().set_log("m_latch bit 1 set");
- m_latch->q_out_cb<2>().set(FUNC(pengo_state::pengo_palettebank_w));
- m_latch->q_out_cb<3>().set_log("m_latch bit 3 set");
- m_latch->q_out_cb<4>().set_log("m_latch bit 4 set");
- m_latch->q_out_cb<5>().set_log("m_latch bit 5 set");
- m_latch->q_out_cb<6>().set(FUNC(pengo_state::pengo_colortablebank_w));
- m_latch->q_out_cb<7>().set(FUNC(pengo_state::pengo_gfxbank_w));
-
- /* video hardware */
- GFXDECODE(config, m_gfxdecode, m_palette, gfx_pengo);
- PALETTE(config, m_palette, FUNC(pengo_state::pacman_palette), 128 * 4, 32);
-
- screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER)); // to be verified
- screen.set_raw(PIXEL_CLOCK, HTOTAL, HBEND, HBSTART, VTOTAL, VBEND, VBSTART);
- screen.set_screen_update(FUNC(pengo_state::screen_update_pacman));
- screen.set_palette(m_palette);
- screen.screen_vblank().set(FUNC(pengo_state::vblank_irq));
-
- MCFG_VIDEO_START_OVERRIDE(pengo_state, pengo)
-
- /* sound hardware */
- SPEAKER(config, "mono").front_center();
-
- AY8910(config, "ay1", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13);
-
- AY8910(config, "ay2", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13);
-
- AY8910(config, "ay3", MASTER_CLOCK/12).add_route(ALL_OUTPUTS, "mono", 0.13);
-}
/*************************************
*
@@ -827,25 +693,6 @@ ROM_START( penta )
ROM_LOAD( "pr1636.ic70", 0x0100, 0x0100, CRC(77245b66) SHA1(0c4d0bee858b97632411c440bea6948a74759746) ) /* timing - not used */
ROM_END
-// MH032288 PCB. LC ('lato componenti', components side in Italian) so maybe produced in Italy?
-// A plastic block in a corner covers probably the main CPU and the decryption logic.
-// Might fit better in a different driver once decrypted
-ROM_START( schick )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "27c512.8d", 0x0000, 0x10000, CRC(38986329) SHA1(bfd62d6a49d25acc582e5f076833c3b22c1a7fd7) )
-
- ROM_REGION( 0x8000, "audiocpu", 0 )
- ROM_LOAD( "27c256.7m", 0x0000, 0x8000, CRC(694dadca) SHA1(65d436d6c8ebf6a9b5af286122e7391973d463e0) ) // identical to bombjack, but 4x
-
- ROM_REGION( 0x10000, "gfx1", 0 )
- ROM_LOAD( "27c256.4e", 0x0000, 0x8000, CRC(edb4a243) SHA1(64f35b5142ffb3bfbd6a2899af9d1d719b83e2a1) )
- ROM_LOAD( "4.27c256.4f", 0x8000, 0x8000, CRC(f666a52a) SHA1(877e1112c9c9a39b55934f6a382ad35fc9bf6859) ) // only labeled ROM
-
- ROM_REGION( 0x0420, "proms", ROMREGION_ERASEFF )
- // currently not dumped, using the ones from Pengo for now
- ROM_LOAD( "pr1633.ic78", 0x0000, 0x0020, BAD_DUMP CRC(3a5844ec) SHA1(680eab0e1204c9b74adc11588461651b474021bb) ) // color palette
- ROM_LOAD( "pr1634.ic88", 0x0020, 0x0400, BAD_DUMP CRC(766b139b) SHA1(3fcd66610fcaee814953a115bf5e04788923181f) ) // color lookup
-ROM_END
ROM_START( jrpacmbl )
@@ -960,76 +807,6 @@ void pengo_state::init_penta()
decode_penta(0x8000, 0x8000);
}
-void pengo_state::decode_schick_extra(int size, uint8_t* rom)
-{
- // schick has an extra layer of encryption in addition to the penta encryption
- for (int A = 0x0000; A < 0x8000; A++)
- {
- uint8_t srcdec = rom[A];
-
- if (A & 0x100)
- {
- srcdec = bitswap<8>(srcdec^0x41, 7, 4, 5, 6, 3, 2, 1, 0);
- }
- else
- {
- srcdec = bitswap<8>(srcdec^0x51, 7, 6, 5, 0, 3, 2, 1, 4);
- }
-
-
- rom[A] = srcdec;
- }
-
- for (int A = 0x8000; A < 0x10000; A++) // TODO: verify everything
- {
- uint8_t srcdec = rom[A];
-
- // this layer of encryption only affects bits 0,4,6 ?
-
- if (rom == m_decrypted_opcodes)
- {
- if (A & 0x1000) // TODO: more conditions?
- {
- srcdec = bitswap<8>(srcdec ^ 0x40, 7, 0, 5, 6, 3, 2, 1, 4);
- rom[A] = srcdec;
- }
- else
- {
- if (A & 0x100)
- {
- srcdec = bitswap<8>(srcdec ^ 0x40, 7, 4, 5, 0, 3, 2, 1, 6);
- rom[A] = srcdec;
- }
- else
- {
- srcdec = bitswap<8>(srcdec ^ 0x41, 7, 0, 5, 6, 3, 2, 1, 4);
- rom[A] = srcdec;
- }
- }
- }
- else
- {
- // // TODO: more conditions?
- if (A & 0x10)
- srcdec = bitswap<8>(srcdec ^ 0x11, 7, 0, 5, 6, 3, 2, 1, 4);
- else
- srcdec = bitswap<8>(srcdec ^ 0x51, 7, 4, 5, 0, 3, 2, 1, 6);
-
- rom[A] = srcdec;
- }
- }
-}
-
-void pengo_state::init_schick()
-{
- uint8_t *rom = memregion("maincpu")->base();
-
- decode_penta(0x8000, 0x10000);
-
- decode_schick_extra(0x10000, rom);
- decode_schick_extra(0x10000, m_decrypted_opcodes);
-}
-
/*************************************
*
@@ -1046,4 +823,3 @@ GAME( 1982, pengo5, pengo, pengoe, pengo, pengo_state, empty_init, RO
GAME( 1982, pengob, pengo, pengo, pengo, pengo_state, init_penta, ROT90, "bootleg", "Pengo (bootleg)", MACHINE_SUPPORTS_SAVE )
GAME( 1982, penta, pengo, pengo, pengo, pengo_state, init_penta, ROT90, "bootleg (Grinbee Shouji)", "Penta", MACHINE_SUPPORTS_SAVE ) // Grinbee Shouji was a subsidiary of Orca
GAME( 1983, jrpacmbl, jrpacman, jrpacmbl, jrpacmbl, pengo_state, empty_init, ROT90, "bootleg", "Jr. Pac-Man (Pengo hardware)", MACHINE_NO_COCKTAIL | MACHINE_SUPPORTS_SAVE )
-GAME( 1988, schick, 0, schick, schick, pengo_state, init_schick, ROT90, "Microhard", "Super Chick", MACHINE_NOT_WORKING | MACHINE_SUPPORTS_SAVE ) // wrong colors due to missing PROMs, sound not hooked up, only basic controls verified, decryption could be incomplete (bad ROMs in test mode?)