summaryrefslogtreecommitdiffstatshomepage
path: root/src/mame/drivers/mpu3.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/mame/drivers/mpu3.cpp')
-rw-r--r--src/mame/drivers/mpu3.cpp86
1 files changed, 40 insertions, 46 deletions
diff --git a/src/mame/drivers/mpu3.cpp b/src/mame/drivers/mpu3.cpp
index a7b9dc68d75..b2cc5a862ac 100644
--- a/src/mame/drivers/mpu3.cpp
+++ b/src/mame/drivers/mpu3.cpp
@@ -181,12 +181,18 @@ public:
mpu3_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_maincpu(*this, "maincpu")
+ , m_nvram(*this, "nvram")
, m_reels(*this, "reel%u", 0U)
, m_meters(*this, "meters")
, m_vfd(*this, "vfd")
, m_triac(*this, "triac%u", 0U)
, m_digit(*this, "digit%u", 0U)
, m_lamp(*this, "lamp%u", 0U)
+ , m_pia3(*this, "pia_ic3")
+ , m_pia4(*this, "pia_ic4")
+ , m_pia5(*this, "pia_ic5")
+ , m_pia6(*this, "pia_ic6")
+ , m_ptm2(*this, "ptm_ic2")
{ }
void init_m3hprvpr();
@@ -264,12 +270,18 @@ private:
emu_timer *m_ic21_timer;
required_device<cpu_device> m_maincpu;
+ required_shared_ptr<uint8_t> m_nvram;
required_device_array<stepper_device, 4> m_reels;
required_device<meters_device> m_meters;
optional_device<rocvfd_device> m_vfd;
output_finder<8> m_triac;
output_finder<8> m_digit;
output_finder<8 * 8> m_lamp;
+ required_device<pia6821_device> m_pia3;
+ required_device<pia6821_device> m_pia4;
+ required_device<pia6821_device> m_pia5;
+ required_device<pia6821_device> m_pia6;
+ required_device<ptm6840_device> m_ptm2;
};
#define DISPLAY_PORT 0
@@ -305,21 +317,15 @@ void mpu3_state::machine_reset()
/* 6808 IRQ handler */
WRITE_LINE_MEMBER(mpu3_state::cpu0_irq)
{
- pia6821_device *pia3 = machine().device<pia6821_device>("pia_ic3");
- pia6821_device *pia4 = machine().device<pia6821_device>("pia_ic4");
- pia6821_device *pia5 = machine().device<pia6821_device>("pia_ic5");
- pia6821_device *pia6 = machine().device<pia6821_device>("pia_ic6");
- ptm6840_device *ptm2 = machine().device<ptm6840_device>("ptm_ic2");
-
/* The PIA and PTM IRQ lines are all connected to a common PCB track, leading directly to the 6809 IRQ line. */
- int combined_state = pia3->irq_a_state() | pia3->irq_b_state() |
- pia4->irq_a_state() | pia4->irq_b_state() |
- pia5->irq_a_state() | pia5->irq_b_state() |
- pia6->irq_a_state() | pia6->irq_b_state() |
- ptm2->irq_state();
-
- m_maincpu->set_input_line(M6808_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
- LOG(("6808 int%d \n", combined_state));
+ int combined_state = m_pia3->irq_a_state() | m_pia3->irq_b_state() |
+ m_pia4->irq_a_state() | m_pia4->irq_b_state() |
+ m_pia5->irq_a_state() | m_pia5->irq_b_state() |
+ m_pia6->irq_a_state() | m_pia6->irq_b_state() |
+ m_ptm2->irq_state();
+
+ m_maincpu->set_input_line(M6808_IRQ_LINE, combined_state ? ASSERT_LINE : CLEAR_LINE);
+ LOG(("6808 int%d \n", combined_state));
}
@@ -796,8 +802,8 @@ TIMER_DEVICE_CALLBACK_MEMBER(mpu3_state::gen_50hz)
falling edges of the pulse are used means the timer actually gives a 100Hz
oscillating signal.*/
m_signal_50hz = m_signal_50hz?0:1;
- machine().device<ptm6840_device>("ptm_ic2")->set_c1(m_signal_50hz);
- machine().device<pia6821_device>("pia_ic3")->cb1_w(~m_signal_50hz);
+ m_ptm2->set_c1(m_signal_50hz);
+ m_pia3->cb1_w(~m_signal_50hz);
update_triacs();
}
@@ -806,43 +812,31 @@ TIMER_DEVICE_CALLBACK_MEMBER(mpu3_state::ic10_callback)
// TODO: Use discrete handler for 555, this is far too simplistic
m_ic10_output = m_ic10_output?0:1;
- machine().device<ptm6840_device>("ptm_ic2")->set_c2(m_ic10_output);
- machine().device<pia6821_device>("pia_ic4")->ca1_w(m_ic10_output);
+ m_ptm2->set_c2(m_ic10_output);
+ m_pia4->ca1_w(m_ic10_output);
}
WRITE8_MEMBER(mpu3_state::mpu3ptm_w)
{
- ptm6840_device *ptm2 = machine().device<ptm6840_device>("ptm_ic2");
-
- ptm2->write(space, offset >>2,data);//((offset & 0x1f) >>2),data);
+ m_ptm2->write(space, offset >>2,data);//((offset & 0x1f) >>2),data);
}
READ8_MEMBER(mpu3_state::mpu3ptm_r)
{
- ptm6840_device *ptm2 = machine().device<ptm6840_device>("ptm_ic2");
-
- return ptm2->read(space, offset >>2);
+ return m_ptm2->read(space, offset >>2);
}
void mpu3_state::mpu3_basemap(address_map &map)
{
- map(0x0000, 0x07ff).ram().share("nvram");
+ map(0x0000, 0x07ff).ram().share(m_nvram);
map(0x1000, 0xffff).rom();
map(0x8800, 0x881f).rw(FUNC(mpu3_state::mpu3ptm_r), FUNC(mpu3_state::mpu3ptm_w));/* PTM6840 IC2 */
- map(0x9000, 0x9003).rw("pia_ic3", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC3 */
- map(0x9800, 0x9803).rw("pia_ic4", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC4 */
- map(0xa000, 0xa003).rw("pia_ic5", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC5 */
- map(0xa800, 0xa803).rw("pia_ic6", FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC6 */
+ map(0x9000, 0x9003).rw(m_pia3, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC3 */
+ map(0x9800, 0x9803).rw(m_pia4, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC4 */
+ map(0xa000, 0xa003).rw(m_pia5, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC5 */
+ map(0xa800, 0xa803).rw(m_pia6, FUNC(pia6821_device::read), FUNC(pia6821_device::write)); /* PIA6821 IC6 */
}
-#define MCFG_MPU3_REEL_ADD(_tag)\
- MCFG_STEPPER_ADD(_tag)\
- MCFG_STEPPER_REEL_TYPE(MPU3_48STEP_REEL)\
- MCFG_STEPPER_START_INDEX(1)\
- MCFG_STEPPER_END_INDEX(3)\
- MCFG_STEPPER_INDEX_PATTERN(0x00)\
- MCFG_STEPPER_INIT_PHASE(2)
-
MACHINE_CONFIG_START(mpu3_state::mpu3base)
MCFG_DEVICE_ADD("maincpu", M6808, MPU3_MASTER_CLOCK)///4)
MCFG_DEVICE_PROGRAM_MAP(mpu3_basemap)
@@ -853,20 +847,20 @@ MACHINE_CONFIG_START(mpu3_state::mpu3base)
MCFG_TIMER_DRIVER_ADD_PERIODIC("555_ic10", mpu3_state, ic10_callback, PERIOD_OF_555_ASTABLE(10000,1000,0.0000001))
/* 6840 PTM */
- MCFG_DEVICE_ADD("ptm_ic2", PTM6840, MPU3_MASTER_CLOCK)
+ MCFG_DEVICE_ADD(m_ptm2, PTM6840, MPU3_MASTER_CLOCK)
MCFG_PTM6840_EXTERNAL_CLOCKS(0, 0, 0)
MCFG_PTM6840_O1_CB(WRITELINE(*this, mpu3_state, ic2_o1_callback))
MCFG_PTM6840_O2_CB(WRITELINE(*this, mpu3_state, ic2_o2_callback))
MCFG_PTM6840_O3_CB(WRITELINE(*this, mpu3_state, ic2_o3_callback))
MCFG_PTM6840_IRQ_CB(WRITELINE(*this, mpu3_state, cpu0_irq))
- MCFG_DEVICE_ADD("pia_ic3", PIA6821, 0)
+ MCFG_DEVICE_ADD(m_pia3, PIA6821, 0)
MCFG_PIA_READPA_HANDLER(READ8(*this, mpu3_state, pia_ic3_porta_r))
MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, mpu3_state, pia_ic3_portb_w))
MCFG_PIA_CA2_HANDLER(WRITELINE(*this, mpu3_state, pia_ic3_ca2_w))
MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, mpu3_state, cpu0_irq))
- MCFG_DEVICE_ADD("pia_ic4", PIA6821, 0)
+ MCFG_DEVICE_ADD(m_pia4, PIA6821, 0)
MCFG_PIA_READPA_HANDLER(READ8(*this, mpu3_state, pia_ic4_porta_r))
MCFG_PIA_WRITEPA_HANDLER(WRITE8(*this, mpu3_state, pia_ic4_porta_w))
MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, mpu3_state, pia_ic4_portb_w))
@@ -874,14 +868,14 @@ MACHINE_CONFIG_START(mpu3_state::mpu3base)
MCFG_PIA_CB2_HANDLER(WRITELINE(*this, mpu3_state, pia_ic4_cb2_w))
MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, mpu3_state, cpu0_irq))
- MCFG_DEVICE_ADD("pia_ic5", PIA6821, 0)
+ MCFG_DEVICE_ADD(m_pia5, PIA6821, 0)
MCFG_PIA_READPB_HANDLER(READ8(*this, mpu3_state, pia_ic5_portb_r))
MCFG_PIA_WRITEPA_HANDLER(WRITE8(*this, mpu3_state, pia_ic5_porta_w))
MCFG_PIA_WRITEPB_HANDLER(WRITE8(*this, mpu3_state, pia_ic5_portb_w))
MCFG_PIA_CA2_HANDLER(WRITELINE(*this, mpu3_state, pia_ic5_ca2_w))
MCFG_PIA_CB2_HANDLER(WRITELINE(*this, mpu3_state, pia_ic5_cb2_w))
- MCFG_DEVICE_ADD("pia_ic6", PIA6821, 0)
+ MCFG_DEVICE_ADD(m_pia6, PIA6821, 0)
MCFG_PIA_READPA_HANDLER(READ8(*this, mpu3_state, pia_ic6_porta_r))
MCFG_PIA_READPB_HANDLER(READ8(*this, mpu3_state, pia_ic6_portb_r))
MCFG_PIA_WRITEPA_HANDLER(WRITE8(*this, mpu3_state, pia_ic6_porta_w))
@@ -889,13 +883,13 @@ MACHINE_CONFIG_START(mpu3_state::mpu3base)
MCFG_PIA_IRQA_HANDLER(WRITELINE(*this, mpu3_state, cpu0_irq))
MCFG_PIA_IRQB_HANDLER(WRITELINE(*this, mpu3_state, cpu0_irq))
- MCFG_MPU3_REEL_ADD("reel0")
+ MCFG_DEVICE_ADD("reel0", REEL, MPU3_48STEP_REEL, 1, 3, 0x00, 2)
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(*this, mpu3_state, reel_optic_cb<0>))
- MCFG_MPU3_REEL_ADD("reel1")
+ MCFG_DEVICE_ADD("reel1", REEL, MPU3_48STEP_REEL, 1, 3, 0x00, 2)
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(*this, mpu3_state, reel_optic_cb<1>))
- MCFG_MPU3_REEL_ADD("reel2")
+ MCFG_DEVICE_ADD("reel2", REEL, MPU3_48STEP_REEL, 1, 3, 0x00, 2)
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(*this, mpu3_state, reel_optic_cb<2>))
- MCFG_MPU3_REEL_ADD("reel3")
+ MCFG_DEVICE_ADD("reel3", REEL, MPU3_48STEP_REEL, 1, 3, 0x00, 2)
MCFG_STEPPER_OPTIC_CALLBACK(WRITELINE(*this, mpu3_state, reel_optic_cb<3>))
MCFG_DEVICE_ADD("meters", METERS, 0)