summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/midas.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/midas.cpp')
-rw-r--r--src/mame/drivers/midas.cpp196
1 files changed, 104 insertions, 92 deletions
diff --git a/src/mame/drivers/midas.cpp b/src/mame/drivers/midas.cpp
index 199a91a4c57..1120a125a73 100644
--- a/src/mame/drivers/midas.cpp
+++ b/src/mame/drivers/midas.cpp
@@ -55,6 +55,8 @@
#include "includes/neogeo.h"
#include "cpu/m68000/m68000.h"
+#include "cpu/mcs51/mcs51.h"
+#include "cpu/pic16c5x/pic16c5x.h"
#include "sound/ymz280b.h"
#include "machine/eepromser.h"
#include "machine/ticket.h"
@@ -75,7 +77,8 @@ public:
m_screen(*this, "screen"),
m_prize(*this, "prize%u", 1),
m_ticket(*this, "ticket"),
- m_zoomram(*this, "zoomtable")
+ m_zoomram(*this, "zoomtable"),
+ m_zoomtable(*this, "spritegen:zoomy")
{ }
void hammer(machine_config &config);
@@ -90,15 +93,15 @@ protected:
private:
DECLARE_READ16_MEMBER(ret_ffff);
- DECLARE_WRITE16_MEMBER(midas_gfxregs_w);
- DECLARE_WRITE16_MEMBER(livequiz_coin_w);
+ DECLARE_WRITE16_MEMBER(gfxregs_w);
+ DECLARE_WRITE8_MEMBER(livequiz_coin_w);
DECLARE_READ16_MEMBER(hammer_sensor_r);
- DECLARE_WRITE16_MEMBER(hammer_coin_w);
- DECLARE_WRITE16_MEMBER(hammer_motor_w);
- DECLARE_WRITE16_MEMBER(midas_eeprom_w);
- DECLARE_WRITE16_MEMBER(midas_zoomtable_w);
+ DECLARE_WRITE8_MEMBER(hammer_coin_w);
+ DECLARE_WRITE8_MEMBER(hammer_motor_w);
+ DECLARE_WRITE8_MEMBER(eeprom_w);
+ DECLARE_WRITE16_MEMBER(zoomtable_w);
- uint32_t screen_update_midas(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
+ uint32_t screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
required_device<cpu_device> m_maincpu;
required_device<eeprom_serial_93cxx_device> m_eeprom;
required_device<gfxdecode_device> m_gfxdecode;
@@ -108,8 +111,9 @@ private:
optional_device_array<ticket_dispenser_device, 2> m_prize;
optional_device<ticket_dispenser_device> m_ticket;
required_shared_ptr<uint16_t> m_zoomram;
+ required_region_ptr<uint8_t> m_zoomtable;
- DECLARE_WRITE_LINE_MEMBER(screen_vblank_midas);
+ DECLARE_WRITE_LINE_MEMBER(screen_vblank);
void hammer_map(address_map &map);
void livequiz_map(address_map &map);
@@ -122,7 +126,7 @@ void midas_state::video_start()
{
}
-uint32_t midas_state::screen_update_midas(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
+uint32_t midas_state::screen_update(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect)
{
// fill with background color first
bitmap.fill(0x0, cliprect);
@@ -134,19 +138,16 @@ uint32_t midas_state::screen_update_midas(screen_device &screen, bitmap_rgb32 &b
return 0;
}
-WRITE16_MEMBER(midas_state::midas_eeprom_w)
+WRITE8_MEMBER(midas_state::eeprom_w)
{
- if (ACCESSING_BITS_0_7)
- {
- // latch the bit
- m_eeprom->di_write((data & 0x04) >> 2);
+ // latch the bit
+ m_eeprom->di_write((data & 0x04) >> 2);
- // reset line asserted: reset.
- m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE );
+ // reset line asserted: reset.
+ m_eeprom->cs_write((data & 0x01) ? ASSERT_LINE : CLEAR_LINE );
- // clock line asserted: write latch or select next bit to read
- m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE );
- }
+ // clock line asserted: write latch or select next bit to read
+ m_eeprom->clk_write((data & 0x02) ? ASSERT_LINE : CLEAR_LINE );
}
READ16_MEMBER(midas_state::ret_ffff)
@@ -154,7 +155,7 @@ READ16_MEMBER(midas_state::ret_ffff)
return 0xffff;
}
-WRITE16_MEMBER(midas_state::midas_gfxregs_w)
+WRITE16_MEMBER(midas_state::gfxregs_w)
{
/* accessing the LSB only is not mapped */
if (mem_mask != 0x00ff)
@@ -172,15 +173,14 @@ WRITE16_MEMBER(midas_state::midas_gfxregs_w)
}
}
-WRITE16_MEMBER(midas_state::midas_zoomtable_w)
+WRITE16_MEMBER(midas_state::zoomtable_w)
{
COMBINE_DATA(&m_zoomram[offset]);
- uint8_t *rgn = memregion("zoomy")->base();
if (ACCESSING_BITS_0_7)
{
- rgn[offset+0x00000] = data & 0xff;
- rgn[offset+0x10000] = data & 0xff;
+ m_zoomtable[offset+0x00000] = data & 0xff;
+ m_zoomtable[offset+0x10000] = data & 0xff;
}
}
@@ -188,12 +188,9 @@ WRITE16_MEMBER(midas_state::midas_zoomtable_w)
Live Quiz Show
***************************************************************************************/
-WRITE16_MEMBER(midas_state::livequiz_coin_w)
+WRITE8_MEMBER(midas_state::livequiz_coin_w)
{
- if (ACCESSING_BITS_0_7)
- {
- machine().bookkeeping().coin_counter_w(0, data & 0x0001);
- }
+ machine().bookkeeping().coin_counter_w(0, data & 0x0001);
#ifdef MAME_DEBUG
// popmessage("coin %04X", data);
#endif
@@ -208,11 +205,11 @@ void midas_state::livequiz_map(address_map &map)
map(0x940000, 0x940001).portr("PLAYER2");
map(0x980000, 0x980001).portr("START");
- map(0x980000, 0x980001).w(FUNC(midas_state::livequiz_coin_w));
+ map(0x980001, 0x980001).w(FUNC(midas_state::livequiz_coin_w));
- map(0x9a0000, 0x9a0001).w(FUNC(midas_state::midas_eeprom_w));
+ map(0x9a0001, 0x9a0001).w(FUNC(midas_state::eeprom_w));
- map(0x9c0000, 0x9c0005).w(FUNC(midas_state::midas_gfxregs_w));
+ map(0x9c0000, 0x9c0005).w(FUNC(midas_state::gfxregs_w));
map(0x9c000c, 0x9c000d).nopw(); // IRQ Ack, temporary
map(0xa00000, 0xa3ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -228,7 +225,7 @@ void midas_state::livequiz_map(address_map &map)
map(0xba0000, 0xba0001).portr("START3");
map(0xbc0000, 0xbc0001).portr("PLAYER3");
- map(0xd00000, 0xd1ffff).ram().w(FUNC(midas_state::midas_zoomtable_w)).share("zoomtable"); // zoom table?
+ map(0xd00000, 0xd1ffff).ram().w(FUNC(midas_state::zoomtable_w)).share("zoomtable"); // zoom table?
map(0xe00000, 0xe3ffff).ram();
}
@@ -245,27 +242,21 @@ READ16_MEMBER(midas_state::hammer_sensor_r)
return (ioport("SENSORY")->read() << 8) | ioport("SENSORX")->read();
}
-WRITE16_MEMBER(midas_state::hammer_coin_w)
+WRITE8_MEMBER(midas_state::hammer_coin_w)
{
- if (ACCESSING_BITS_0_7)
- {
- machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
- machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
- }
+ machine().bookkeeping().coin_counter_w(0, BIT(data, 0));
+ machine().bookkeeping().coin_counter_w(1, BIT(data, 1));
#ifdef MAME_DEBUG
// popmessage("coin %04X", data);
#endif
}
-WRITE16_MEMBER(midas_state::hammer_motor_w)
+WRITE8_MEMBER(midas_state::hammer_motor_w)
{
- if (ACCESSING_BITS_0_7)
- {
- m_prize[0]->motor_w(BIT(data, 0));
- m_prize[1]->motor_w(BIT(data, 1));
- m_ticket->motor_w(BIT(data, 4));
- // data & 0x0080 ?
- }
+ m_prize[0]->motor_w(BIT(data, 0));
+ m_prize[1]->motor_w(BIT(data, 1));
+ m_ticket->motor_w(BIT(data, 4));
+ // data & 0x0080 ?
#ifdef MAME_DEBUG
// popmessage("motor %04X", data);
#endif
@@ -280,11 +271,11 @@ void midas_state::hammer_map(address_map &map)
map(0x940000, 0x940001).portr("IN0");
map(0x980000, 0x980001).portr("TILT");
- map(0x980000, 0x980001).w(FUNC(midas_state::hammer_coin_w));
+ map(0x980001, 0x980001).w(FUNC(midas_state::hammer_coin_w));
- map(0x9a0000, 0x9a0001).w(FUNC(midas_state::midas_eeprom_w));
+ map(0x9a0001, 0x9a0001).w(FUNC(midas_state::eeprom_w));
- map(0x9c0000, 0x9c0005).w(FUNC(midas_state::midas_gfxregs_w));
+ map(0x9c0000, 0x9c0005).w(FUNC(midas_state::gfxregs_w));
map(0x9c000c, 0x9c000d).nopw(); // IRQ Ack, temporary
map(0xa00000, 0xa3ffff).ram().w(m_palette, FUNC(palette_device::write16)).share("palette");
@@ -300,11 +291,11 @@ void midas_state::hammer_map(address_map &map)
map(0xba0000, 0xba0001).portr("IN1");
map(0xbc0000, 0xbc0001).portr("HAMMER");
- map(0xbc0002, 0xbc0003).w(FUNC(midas_state::hammer_motor_w));
+ map(0xbc0003, 0xbc0003).w(FUNC(midas_state::hammer_motor_w));
map(0xbc0004, 0xbc0005).r(FUNC(midas_state::hammer_sensor_r));
- map(0xd00000, 0xd1ffff).ram().w(FUNC(midas_state::midas_zoomtable_w)).share("zoomtable"); // zoom table?
+ map(0xd00000, 0xd1ffff).ram().w(FUNC(midas_state::zoomtable_w)).share("zoomtable"); // zoom table?
map(0xe00000, 0xe3ffff).ram();
}
@@ -614,7 +605,6 @@ INPUT_PORTS_END
void midas_state::machine_start()
{
m_sprgen->set_pens(m_palette->pens());
- m_sprgen->set_screen(m_screen);
m_sprgen->set_sprite_region(memregion("sprites")->base(), memregion("sprites")->bytes());
m_sprgen->set_fixed_regions(memregion("tiles")->base(), memregion("tiles")->bytes(), memregion("tiles"));
m_sprgen->neogeo_set_fixed_layer_source(0); // temporary: ensure banking is disabled
@@ -624,29 +614,35 @@ void midas_state::machine_reset()
{
}
-WRITE_LINE_MEMBER(midas_state::screen_vblank_midas)
+WRITE_LINE_MEMBER(midas_state::screen_vblank)
{
if (state) m_sprgen->buffer_vram();
}
-MACHINE_CONFIG_START(midas_state::livequiz)
-
+void midas_state::livequiz(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(24'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(livequiz_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", midas_state, irq1_line_hold)
+ M68000(config, m_maincpu, XTAL(24'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &midas_state::livequiz_map);
+ m_maincpu->set_vblank_int("screen", FUNC(midas_state::irq1_line_hold));
- EEPROM_93C46_16BIT(config, "eeprom");
+ pic16c56_device &pic1(PIC16C56(config, "pic1", XTAL(24'000'000) / 6)); // !! PIC12C508 !! unknown MHz
+ pic1.set_disable(); // Currently not hooked up
+
+ pic16c56_device &pic2(PIC16C56(config, "pic2", XTAL(24'000'000) / 6)); // !! PIC12C508 !! unknown MHz
+ pic2.set_disable(); // Currently not hooked up
+
+ EEPROM_93C46_16BIT(config, m_eeprom);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(NEOGEO_PIXEL_CLOCK, NEOGEO_HTOTAL, NEOGEO_HBEND, NEOGEO_HBSTART, NEOGEO_VTOTAL, NEOGEO_VBEND, NEOGEO_VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(midas_state, screen_update_midas)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, midas_state, screen_vblank_midas))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(NEOGEO_PIXEL_CLOCK, NEOGEO_HTOTAL, NEOGEO_HBEND, NEOGEO_HBSTART, NEOGEO_VTOTAL, NEOGEO_VBEND, NEOGEO_VBSTART);
+ m_screen->set_screen_update(FUNC(midas_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(midas_state::screen_vblank));
- MCFG_DEVICE_ADD("spritegen", NEOGEO_SPRITE_MIDAS, 0)
+ NEOGEO_SPRITE_MIDAS(config, m_sprgen, 0).set_screen(m_screen);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_midas);
PALETTE(config, m_palette).set_format(palette_device::xRGB_888, 0x10000);
@@ -654,42 +650,53 @@ MACHINE_CONFIG_START(midas_state::livequiz)
/* sound hardware */
SPEAKER(config, "lspeaker").front_left();
SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ymz", YMZ280B, XTAL(16'934'400))
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.80)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.80)
-MACHINE_CONFIG_END
-MACHINE_CONFIG_START(midas_state::hammer)
+ ymz280b_device &ymz(YMZ280B(config, "ymz", XTAL(16'934'400)));
+ ymz.add_route(0, "lspeaker", 0.80);
+ ymz.add_route(1, "rspeaker", 0.80);
+}
+void midas_state::hammer(machine_config &config)
+{
/* basic machine hardware */
- MCFG_DEVICE_ADD("maincpu", M68000, XTAL(28'000'000) / 2)
- MCFG_DEVICE_PROGRAM_MAP(hammer_map)
- MCFG_DEVICE_VBLANK_INT_DRIVER("screen", midas_state, irq1_line_hold)
+ M68000(config, m_maincpu, XTAL(28'000'000) / 2);
+ m_maincpu->set_addrmap(AS_PROGRAM, &midas_state::hammer_map);
+ m_maincpu->set_vblank_int("screen", FUNC(midas_state::irq1_line_hold));
+
+ at89c52_device &mcu(AT89C52(config, "mcu", XTAL(24'000'000) / 2)); // on top board, unknown MHz
+ mcu.set_disable(); // Currently not hooked up
+
+ EEPROM_93C46_16BIT(config, m_eeprom);
+
+ TICKET_DISPENSER(config, m_prize[0], 0);
+ m_prize[0]->set_period(attotime::from_msec(1000*5));
+ m_prize[0]->set_senses(TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW, false);
- EEPROM_93C46_16BIT(config, "eeprom");
+ TICKET_DISPENSER(config, m_prize[1], 0);
+ m_prize[1]->set_period(attotime::from_msec(1000*5));
+ m_prize[1]->set_senses(TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW, false);
- MCFG_TICKET_DISPENSER_ADD("prize1", attotime::from_msec(1000*5), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW )
- MCFG_TICKET_DISPENSER_ADD("prize2", attotime::from_msec(1000*5), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW )
- MCFG_TICKET_DISPENSER_ADD("ticket", attotime::from_msec(200), TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW )
+ TICKET_DISPENSER(config, m_ticket, 0);
+ m_ticket->set_period(attotime::from_msec(200));
+ m_ticket->set_senses(TICKET_MOTOR_ACTIVE_HIGH, TICKET_STATUS_ACTIVE_LOW, false);
/* video hardware */
- MCFG_SCREEN_ADD("screen", RASTER)
- MCFG_SCREEN_RAW_PARAMS(NEOGEO_PIXEL_CLOCK, NEOGEO_HTOTAL, NEOGEO_HBEND, NEOGEO_HBSTART, NEOGEO_VTOTAL, NEOGEO_VBEND, NEOGEO_VBSTART)
- MCFG_SCREEN_UPDATE_DRIVER(midas_state, screen_update_midas)
- MCFG_SCREEN_VBLANK_CALLBACK(WRITELINE(*this, midas_state, screen_vblank_midas))
+ SCREEN(config, m_screen, SCREEN_TYPE_RASTER);
+ m_screen->set_raw(NEOGEO_PIXEL_CLOCK, NEOGEO_HTOTAL, NEOGEO_HBEND, NEOGEO_HBSTART, NEOGEO_VTOTAL, NEOGEO_VBEND, NEOGEO_VBSTART);
+ m_screen->set_screen_update(FUNC(midas_state::screen_update));
+ m_screen->screen_vblank().set(FUNC(midas_state::screen_vblank));
- MCFG_DEVICE_ADD("spritegen", NEOGEO_SPRITE_MIDAS, 0)
+ NEOGEO_SPRITE_MIDAS(config, m_sprgen, 0).set_screen(m_screen);
GFXDECODE(config, m_gfxdecode, m_palette, gfx_midas);
PALETTE(config, m_palette).set_format(palette_device::xRGB_888, 0x10000);
/* sound hardware */
- SPEAKER(config, "lspeaker").front_left();
- SPEAKER(config, "rspeaker").front_right();
- MCFG_DEVICE_ADD("ymz", YMZ280B, XTAL(16'934'400))
- MCFG_SOUND_ROUTE(0, "lspeaker", 0.80)
- MCFG_SOUND_ROUTE(1, "rspeaker", 0.80)
-MACHINE_CONFIG_END
+ SPEAKER(config, "mono").front_center(); // stereo outputs aren't exists?
+
+ ymz280b_device &ymz(YMZ280B(config, "ymz", XTAL(16'934'400)));
+ ymz.add_route(ALL_OUTPUTS, "mono", 0.80);
+}
/***************************************************************************************
@@ -784,8 +791,10 @@ ROM_START( livequiz )
ROM_REGION( 0x200000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "flash.u1", 0x000000, 0x200000, CRC(8ec44493) SHA1(a987886cb87ac0a744f01f2e4a7cc6d12efeaa04) )
- ROM_REGION( 0x200000, "pic", 0 )
+ ROM_REGION( 0x000800, "pic1", 0 )
ROM_LOAD( "main_pic12c508a.u27", 0x000000, 0x000400, CRC(a84f0a7e) SHA1(fb27c05fb27b98ca603697e1be214dc6c8d5f884) )
+
+ ROM_REGION( 0x000800, "pic2", 0 )
ROM_LOAD( "sub_pic12c508a.u4", 0x000000, 0x000400, CRC(e52ebdc4) SHA1(0f3af66b5ea184e49188e74a873699324a3930f1) )
ROM_REGION( 0x800000, "sprites", 0 )
@@ -800,7 +809,7 @@ ROM_START( livequiz )
ROM_REGION( 0x200000, "ymz", 0 )
ROM_LOAD( "flash.u5", 0x000000, 0x200000, CRC(dc062792) SHA1(ec415c918c47ce9d181f014cde317af5717600e4) )
- ROM_REGION( 0x20000, "zoomy", ROMREGION_ERASE00 )
+ ROM_REGION( 0x20000, "spritegen:zoomy", ROMREGION_ERASE00 )
/* uploaded */
ROM_END
@@ -874,6 +883,9 @@ ROM_START( hammer )
ROM_REGION( 0x200000, "maincpu", 0 )
ROM_LOAD16_WORD_SWAP( "p.u22", 0x000000, 0x200000, CRC(687f1596) SHA1(3dc5fb0af1e8c4f3a42ce4aad39635b1111831d8) )
+ ROM_REGION( 0x002000, "mcu", 0 )
+ ROM_LOAD( "hammer_at89c52", 0x000000, 0x002000, NO_DUMP )
+
ROM_REGION( 0x1000000, "sprites", 0 )
ROM_LOAD64_WORD( "a0l.u44", 0x000000, 0x200000, CRC(b9cafd81) SHA1(24698970d1aea0907e2963c872ce61077f44c3af) )
ROM_LOAD64_WORD( "a0h.u46", 0x800000, 0x200000, CRC(f60f188b) SHA1(486f26c473b46efb402662b2f374e361cd7b4284) )
@@ -895,7 +907,7 @@ ROM_START( hammer )
ROM_LOAD( "s0.u25", 0x000000, 0x200000, CRC(c049a3e0) SHA1(0c7016c3128c170a84ad3f92fad1165775210e3d) )
ROM_LOAD( "s1.u26", 0x200000, 0x200000, CRC(9cc4b3ec) SHA1(b91a8747074a1032eb7f70a015d394fe8e896d7e) )
- ROM_REGION( 0x20000, "zoomy", ROMREGION_ERASE00 )
+ ROM_REGION( 0x20000, "spritegen:zoomy", ROMREGION_ERASE00 )
/* uploaded */
ROM_END