summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/68230pit.h
diff options
context:
space:
mode:
author Joakim Larsson Edstrom <joakimlarsson42@gmail.com>2016-12-08 08:53:25 +0100
committer Joakim Larsson Edstrom <joakimlarsson42@gmail.com>2016-12-08 09:03:00 +0100
commit8458ac24170f7e7dbebb853221e7ee90c0c502ea (patch)
tree9b0d260746e9b81399ab20b77a1ed151482c4718 /src/devices/machine/68230pit.h
parent4991242234f4d61a5dc4add12fee17ffa26b0e50 (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.h47
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;