summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/quizo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/quizo.cpp')
-rw-r--r--src/mame/drivers/quizo.cpp136
1 files changed, 61 insertions, 75 deletions
diff --git a/src/mame/drivers/quizo.cpp b/src/mame/drivers/quizo.cpp
index 4f542ee1165..f22a806e3d9 100644
--- a/src/mame/drivers/quizo.cpp
+++ b/src/mame/drivers/quizo.cpp
@@ -40,38 +40,34 @@ public:
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
, m_palette(*this, "palette")
+ , m_rombank(*this, "rom")
, m_vrambank(*this, "vram")
{ }
void quizo(machine_config &config);
- void init_quizo();
+protected:
+ virtual void machine_start() override;
private:
required_device<cpu_device> m_maincpu;
required_device<palette_device> m_palette;
+ required_memory_bank m_rombank;
required_memory_bank m_vrambank;
std::unique_ptr<uint8_t[]> m_vram;
- uint8_t m_port60;
+ DECLARE_WRITE8_MEMBER(rombank_w);
DECLARE_WRITE8_MEMBER(vrambank_w);
- DECLARE_WRITE8_MEMBER(port60_w);
void quizo_palette(palette_device &palette) const;
uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+
void memmap(address_map &map);
void portmap(address_map &map);
};
-
-#define XTAL1 8000000
-#define XTAL2 21477270
-
-
-static constexpr uint8_t rombankLookup[]={ 2, 3, 4, 4, 4, 4, 4, 5, 0, 1};
-
void quizo_state::quizo_palette(palette_device &palette) const
{
uint8_t const *const color_prom = memregion("proms")->base();
@@ -118,29 +114,32 @@ uint32_t quizo_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap,
return 0;
}
+WRITE8_MEMBER(quizo_state::rombank_w)
+{
+ m_rombank->set_entry(data & 0x0f);
+}
+
WRITE8_MEMBER(quizo_state::vrambank_w)
{
m_vrambank->set_entry(BIT(data, 3));
}
-WRITE8_MEMBER(quizo_state::port60_w)
+void quizo_state::machine_start()
{
- if(data>9)
- {
- logerror("ROMBANK %x @ %x\n", data, m_maincpu->pc());
- data=0;
- }
- m_port60=data;
- membank("bank1")->set_entry(rombankLookup[data]);
+ m_rombank->configure_entries(0, 16, memregion("user1")->base(), 0x4000);
+
+ m_vram = std::make_unique<uint8_t[]>(0x8000);
+ m_vrambank->configure_entries(0, 2, &m_vram[0], 0x4000);
+
+ save_pointer(NAME(m_vram), 0x8000);
}
void quizo_state::memmap(address_map &map)
{
map(0x0000, 0x3fff).rom();
map(0x4000, 0x47ff).ram();
- map(0x8000, 0xbfff).bankr("bank1");
+ map(0x8000, 0xbfff).bankr("rom");
map(0xc000, 0xffff).bankw("vram");
-
}
void quizo_state::portmap(address_map &map)
@@ -150,21 +149,21 @@ void quizo_state::portmap(address_map &map)
map(0x10, 0x10).portr("IN1");
map(0x40, 0x40).portr("IN2");
map(0x50, 0x51).w("aysnd", FUNC(ay8910_device::address_data_w));
- map(0x60, 0x60).w(FUNC(quizo_state::port60_w));
+ map(0x60, 0x60).w(FUNC(quizo_state::rombank_w));
map(0x70, 0x70).w(FUNC(quizo_state::vrambank_w));
}
static INPUT_PORTS_START( quizo )
PORT_START("IN0")
PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_COIN1 )
- PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_UNKNOWN )
- PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x02, IP_ACTIVE_HIGH, IPT_COIN2 )
+ PORT_BIT( 0x04, IP_ACTIVE_HIGH, IPT_SERVICE1 )
PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_TILT )
PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_START1 )
PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown) )
+ PORT_DIPNAME( 0x40, 0x00, DEF_STR( Unknown) ) // enable this and IN2 bit 5 to get a message
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x40, DEF_STR( On ) )
PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown) )
@@ -181,9 +180,9 @@ static INPUT_PORTS_START( quizo )
PORT_DIPNAME( 0x01, 0x00, DEF_STR( Unknown) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x01, DEF_STR( On ) )
- PORT_DIPNAME( 0x02, 0x00, DEF_STR( Unknown) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x02, DEF_STR( On ) )
+ PORT_DIPNAME( 0x02, 0x00, "Timer" )
+ PORT_DIPSETTING( 0x00, "Slow" ) // 7 seconds
+ PORT_DIPSETTING( 0x02, "Fast" ) // 5 seconds
PORT_DIPNAME( 0x04, 0x00, DEF_STR( Unknown) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x04, DEF_STR( On ) )
@@ -193,26 +192,25 @@ static INPUT_PORTS_START( quizo )
PORT_DIPNAME( 0x10, 0x00, DEF_STR( Unknown) )
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x10, DEF_STR( On ) )
- PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown) )
+ PORT_DIPNAME( 0x20, 0x00, DEF_STR( Unknown) ) // connected to IN0 bit 6
PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
PORT_DIPSETTING( 0x20, DEF_STR( On ) )
- PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coin_A ) )
- PORT_DIPSETTING( 0x00, DEF_STR( 2C_1C ) )
- PORT_DIPSETTING( 0x40, DEF_STR( 1C_1C ) )
- PORT_DIPNAME( 0x80, 0x00, DEF_STR( Unknown) )
- PORT_DIPSETTING( 0x00, DEF_STR( Off ) )
- PORT_DIPSETTING( 0x80, DEF_STR( On ) )
+ PORT_DIPNAME( 0x40, 0x40, DEF_STR( Coinage ) )
+ PORT_DIPSETTING( 0x00, "A 2 Coin/1 Credit, B 1 Coin/1 Credit" )
+ PORT_DIPSETTING( 0x40, "A 1 Coin/1 Credit, B 1 Coin/2 Credit" )
+ PORT_DIPNAME( 0x80, 0x00, DEF_STR( Coin_B ) )
+ PORT_DIPSETTING( 0x00, DEF_STR( On ) )
+ PORT_DIPSETTING( 0x80, DEF_STR( Off ) )
INPUT_PORTS_END
void quizo_state::quizo(machine_config &config)
{
- /* basic machine hardware */
- Z80(config, m_maincpu, XTAL1/2);
+ Z80(config, m_maincpu, 8_MHz_XTAL / 2);
m_maincpu->set_addrmap(AS_PROGRAM, &quizo_state::memmap);
m_maincpu->set_addrmap(AS_IO, &quizo_state::portmap);
m_maincpu->set_vblank_int("screen", FUNC(quizo_state::irq0_line_hold));
- /* video hardware */
+ // video hardware
screen_device &screen(SCREEN(config, "screen", SCREEN_TYPE_RASTER));
screen.set_refresh_hz(60);
screen.set_vblank_time(ATTOSECONDS_IN_USEC(0));
@@ -222,53 +220,41 @@ void quizo_state::quizo(machine_config &config)
PALETTE(config, m_palette, FUNC(quizo_state::quizo_palette), 16);
- /* sound hardware */
+ // sound hardware
SPEAKER(config, "mono").front_center();
- AY8910(config, "aysnd", XTAL2 / 16).add_route(ALL_OUTPUTS, "mono", 1.0);
+ AY8910(config, "aysnd", 21.477272_MHz_XTAL / 16).add_route(ALL_OUTPUTS, "mono", 1.0);
}
ROM_START( quizo )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "rom1", 0x0000, 0x4000, CRC(6731735f) SHA1(7dbf48f833c7b7cde77df2a10781e5a8b6ae0533) )
- ROM_CONTINUE( 0x0000, 0x04000 )
+ ROM_REGION(0x4000, "maincpu", 0)
+ ROM_LOAD("rom1", 0x0000, 0x4000, CRC(6731735f) SHA1(7dbf48f833c7b7cde77df2a10781e5a8b6ae0533))
+ ROM_CONTINUE( 0x0000, 0x4000)
- ROM_REGION( 0x18000, "user1", 0 )
- ROM_LOAD( "rom2", 0x00000, 0x8000, CRC(a700eb30) SHA1(7800b3d2b7992c67c91cfb7e02c7cfc313b0ed5d) )
- ROM_LOAD( "rom3", 0x08000, 0x8000, CRC(d344f97e) SHA1(3d669a56f084f2a7a50d7d211b84a50d35de66ac) )
- ROM_LOAD( "rom4", 0x10000, 0x8000, CRC(ab1eb174) SHA1(7d7a935aa7196a814c15f13444b88e770678b672) )
+ ROM_REGION(0x40000, "user1", 0)
+ ROM_LOAD("rom3", 0x00000, 0x8000, CRC(d344f97e) SHA1(3d669a56f084f2a7a50d7d211b84a50d35de66ac))
+ ROM_LOAD("rom4", 0x18000, 0x8000, CRC(ab1eb174) SHA1(7d7a935aa7196a814c15f13444b88e770678b672))
+ ROM_LOAD("rom2", 0x20000, 0x8000, CRC(a700eb30) SHA1(7800b3d2b7992c67c91cfb7e02c7cfc313b0ed5d))
- ROM_REGION( 0x0020, "proms", 0 )
- ROM_LOAD( "82s123", 0x0000, 0x0020, CRC(c3f15914) SHA1(19fd8e6f2a1256ae51c500a3bf1d7358810ef97e) )
+ ROM_REGION(0x20, "proms", 0)
+ ROM_LOAD("82s123", 0x00, 0x20, CRC(c3f15914) SHA1(19fd8e6f2a1256ae51c500a3bf1d7358810ef97e))
ROM_END
ROM_START( quizoa )
- ROM_REGION( 0x10000, "maincpu", 0 )
- ROM_LOAD( "7.bin", 0x0000, 0x4000, CRC(1579ae31) SHA1(b23539413d108223001a9fe827ea151d20682b7b) )
-
- ROM_REGION( 0x18000, "user1", 0 )
- ROM_LOAD( "6.bin", 0x00000, 0x4000, CRC(f00f6356) SHA1(f306ec26ddbb503214e266cc9b74304af86bdbc6) )
- ROM_LOAD( "5.bin", 0x04000, 0x4000, CRC(39e577e3) SHA1(430d9fe916dfeecdb94c23be89f79a6408ff444e) )
- ROM_LOAD( "4.bin", 0x08000, 0x4000, CRC(a977bd3a) SHA1(22f1158253a31cf5513eed3537a6096b993b0919) )
- ROM_LOAD( "3.bin", 0x0c000, 0x4000, CRC(4411bcff) SHA1(2f6692e082b335c3af8b92108f757d333599dd29) )
- ROM_LOAD( "2.bin", 0x10000, 0x4000, CRC(4a0df776) SHA1(4a7dc2347b33843c0a6bb497be56ccae1af1dae0) )
- ROM_LOAD( "1.bin", 0x14000, 0x4000, CRC(d9566c1a) SHA1(2495c071d077e5a359c2d7541d8b7c175b398b56) )
-
- ROM_REGION( 0x0020, "proms", 0 )
- ROM_LOAD( "82s123", 0x0000, 0x0020, CRC(c3f15914) SHA1(19fd8e6f2a1256ae51c500a3bf1d7358810ef97e) )
+ ROM_REGION(0x4000, "maincpu", 0)
+ ROM_LOAD("7.bin", 0x0000, 0x4000, CRC(1579ae31) SHA1(b23539413d108223001a9fe827ea151d20682b7b))
+
+ ROM_REGION(0x40000, "user1", 0)
+ ROM_LOAD("4.bin", 0x00000, 0x4000, CRC(a977bd3a) SHA1(22f1158253a31cf5513eed3537a6096b993b0919))
+ ROM_LOAD("3.bin", 0x04000, 0x4000, CRC(4411bcff) SHA1(2f6692e082b335c3af8b92108f757d333599dd29))
+ ROM_LOAD("2.bin", 0x08000, 0x4000, CRC(4a0df776) SHA1(4a7dc2347b33843c0a6bb497be56ccae1af1dae0))
+ ROM_LOAD("1.bin", 0x1c000, 0x4000, CRC(d9566c1a) SHA1(2495c071d077e5a359c2d7541d8b7c175b398b56))
+ ROM_LOAD("6.bin", 0x20000, 0x4000, CRC(f00f6356) SHA1(f306ec26ddbb503214e266cc9b74304af86bdbc6))
+ ROM_LOAD("5.bin", 0x24000, 0x4000, CRC(39e577e3) SHA1(430d9fe916dfeecdb94c23be89f79a6408ff444e))
+
+ ROM_REGION(0x20, "proms", 0)
+ ROM_LOAD("82s123", 0x00, 0x20, CRC(c3f15914) SHA1(19fd8e6f2a1256ae51c500a3bf1d7358810ef97e))
ROM_END
-
-void quizo_state::init_quizo()
-{
- membank("bank1")->configure_entries(0, 6, memregion("user1")->base(), 0x4000);
-
- m_vram = std::make_unique<uint8_t[]>(0x8000);
- m_vrambank->configure_entries(0, 2, &m_vram[0], 0x4000);
-
- save_pointer(NAME(m_vram), 0x8000);
- //save_item(NAME(m_port60));
-}
-
-GAME( 1985, quizo, 0, quizo, quizo, quizo_state, init_quizo, ROT0, "Seoul Coin Corp.", "Quiz Olympic (set 1)", MACHINE_SUPPORTS_SAVE )
-GAME( 1985, quizoa, quizo, quizo, quizo, quizo_state, init_quizo, ROT0, "Seoul Coin Corp.", "Quiz Olympic (set 2)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, quizo, 0, quizo, quizo, quizo_state, empty_init, ROT0, "Seoul Coin Corp.", "Quiz Olympic (set 1)", MACHINE_SUPPORTS_SAVE )
+GAME( 1985, quizoa, quizo, quizo, quizo, quizo_state, empty_init, ROT0, "Seoul Coin Corp.", "Quiz Olympic (set 2)", MACHINE_SUPPORTS_SAVE )