diff options
Diffstat (limited to 'src/mame/drivers/mpu3.cpp')
-rw-r--r-- | src/mame/drivers/mpu3.cpp | 86 |
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) |