diff options
author | 2016-12-08 08:53:25 +0100 | |
---|---|---|
committer | 2016-12-08 09:03:00 +0100 | |
commit | 8458ac24170f7e7dbebb853221e7ee90c0c502ea (patch) | |
tree | 9b0d260746e9b81399ab20b77a1ed151482c4718 /src/devices/machine/68230pit.h | |
parent | 4991242234f4d61a5dc4add12fee17ffa26b0e50 (diff) |
68230: added initial support for timer interrupts and embryonic support for port interrupts
Diffstat (limited to 'src/devices/machine/68230pit.h')
-rw-r--r-- | src/devices/machine/68230pit.h | 47 |
1 files changed, 35 insertions, 12 deletions
diff --git a/src/devices/machine/68230pit.h b/src/devices/machine/68230pit.h index 13ad1a63f39..92bfe062b43 100644 --- a/src/devices/machine/68230pit.h +++ b/src/devices/machine/68230pit.h @@ -44,34 +44,40 @@ //************************************************************************** #define MCFG_PIT68230_PA_INPUT_CB(_devcb) \ - devcb = &pit68230_device::set_pa_in_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_pa_in_callback (*device, DEVCB_##_devcb); #define MCFG_PIT68230_PA_OUTPUT_CB(_devcb) \ - devcb = &pit68230_device::set_pa_out_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_pa_out_callback (*device, DEVCB_##_devcb); #define MCFG_PIT68230_PB_INPUT_CB(_devcb) \ - devcb = &pit68230_device::set_pb_in_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_pb_in_callback (*device, DEVCB_##_devcb); #define MCFG_PIT68230_PB_OUTPUT_CB(_devcb) \ - devcb = &pit68230_device::set_pb_out_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_pb_out_callback (*device, DEVCB_##_devcb); #define MCFG_PIT68230_PC_INPUT_CB(_devcb) \ - devcb = &pit68230_device::set_pc_in_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_pc_in_callback (*device, DEVCB_##_devcb); #define MCFG_PIT68230_PC_OUTPUT_CB(_devcb) \ - devcb = &pit68230_device::set_pc_out_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_pc_out_callback (*device, DEVCB_##_devcb); #define MCFG_PIT68230_H1_CB(_devcb) \ - devcb = &pit68230_device::set_h1_out_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_h1_out_callback (*device, DEVCB_##_devcb); #define MCFG_PIT68230_H2_CB(_devcb) \ - devcb = &pit68230_device::set_h2_out_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_h2_out_callback (*device, DEVCB_##_devcb); #define MCFG_PIT68230_H3_CB(_devcb) \ - devcb = &pit68230_device::set_h3_out_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_h3_out_callback (*device, DEVCB_##_devcb); #define MCFG_PIT68230_H4_CB(_devcb) \ - devcb = &pit68230_device::set_h4_out_callback (*device, DEVCB_##_devcb); + devcb = &pit68230_device::set_h4_out_callback (*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_TIMER_IRQ_CB(_devcb) \ + devcb = &pit68230_device::set_tirq_out_callback(*device, DEVCB_##_devcb); + +#define MCFG_PIT68230_PORT_IRQ_CB(_devcb) \ + devcb = &pit68230_device::set_pirq_out_callback(*device, DEVCB_##_devcb); /*----------------------------------------------------------------------- * Registers RS1-RS5 R/W Description @@ -119,13 +125,14 @@ class pit68230_device : public device_t//, public device_execute_interface template<class _Object> static devcb_base &set_h2_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_h2_out_cb.set_callback (object); } template<class _Object> static devcb_base &set_h3_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_h3_out_cb.set_callback (object); } template<class _Object> static devcb_base &set_h4_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_h4_out_cb.set_callback (object); } + template<class _Object> static devcb_base &set_tirq_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_tirq_out_cb.set_callback (object); } + template<class _Object> static devcb_base &set_pirq_out_callback (device_t &device, _Object object){ return downcast<pit68230_device &>(device).m_pirq_out_cb.set_callback (object); } DECLARE_WRITE8_MEMBER (write); DECLARE_READ8_MEMBER (read); void h1_set (uint8_t state); void portb_setbit (uint8_t bit, uint8_t state); - void tick_clock(); // Bit updaters void pa_update_bit(uint8_t bit, uint8_t state); @@ -286,11 +293,18 @@ protected: REG_TCR_TOUT_PC7_INT = 0xe0, // 1 1 1 }; + void tick_clock(); + // device-level overrides virtual void device_start () override; virtual void device_reset () override; virtual void device_timer (emu_timer &timer, device_timer_id id, int param, void *ptr) override; + // Interrupt methods + void trigger_interrupt(int source); + uint8_t irq_tiack(); + uint8_t irq_piack(); + int m_icount; devcb_write8 m_pa_out_cb; @@ -303,8 +317,10 @@ protected: devcb_write_line m_h2_out_cb; devcb_write_line m_h3_out_cb; devcb_write_line m_h4_out_cb; + devcb_write_line m_tirq_out_cb; + devcb_write_line m_pirq_out_cb; - // peripheral ports + // registers uint8_t m_pgcr; // Port General Control register uint8_t m_psrr; // Port Service Request register uint8_t m_paddr; // Port A Data Direction register @@ -323,6 +339,13 @@ protected: int m_cntr; // - The 24 bit Counter uint8_t m_tsr; // Timer Status Register + + // Interrupt sources + enum + { + INT_TIMER + }; + // Timers emu_timer *pit_timer; |