summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/machine/pic8259.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/machine/pic8259.h')
-rw-r--r--src/devices/machine/pic8259.h46
1 files changed, 28 insertions, 18 deletions
diff --git a/src/devices/machine/pic8259.h b/src/devices/machine/pic8259.h
index 298ef1debea..fd658ec8621 100644
--- a/src/devices/machine/pic8259.h
+++ b/src/devices/machine/pic8259.h
@@ -39,37 +39,33 @@ public:
uint8_t read(offs_t offset);
void write(offs_t offset, uint8_t data);
- uint32_t acknowledge();
+ uint8_t acknowledge();
- DECLARE_WRITE_LINE_MEMBER( ir0_w ) { set_irq_line(0, state); }
- DECLARE_WRITE_LINE_MEMBER( ir1_w ) { set_irq_line(1, state); }
- DECLARE_WRITE_LINE_MEMBER( ir2_w ) { set_irq_line(2, state); }
- DECLARE_WRITE_LINE_MEMBER( ir3_w ) { set_irq_line(3, state); }
- DECLARE_WRITE_LINE_MEMBER( ir4_w ) { set_irq_line(4, state); }
- DECLARE_WRITE_LINE_MEMBER( ir5_w ) { set_irq_line(5, state); }
- DECLARE_WRITE_LINE_MEMBER( ir6_w ) { set_irq_line(6, state); }
- DECLARE_WRITE_LINE_MEMBER( ir7_w ) { set_irq_line(7, state); }
+ void ir0_w(int state) { set_irq_line(0, state); }
+ void ir1_w(int state) { set_irq_line(1, state); }
+ void ir2_w(int state) { set_irq_line(2, state); }
+ void ir3_w(int state) { set_irq_line(3, state); }
+ void ir4_w(int state) { set_irq_line(4, state); }
+ void ir5_w(int state) { set_irq_line(5, state); }
+ void ir6_w(int state) { set_irq_line(6, state); }
+ void ir7_w(int state) { set_irq_line(7, state); }
IRQ_CALLBACK_MEMBER(inta_cb);
protected:
pic8259_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
- // device-level overrides
- virtual void device_resolve_objects() override;
- 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;
+ // device_t implementation
+ virtual void device_start() override ATTR_COLD;
+ virtual void device_reset() override ATTR_COLD;
virtual bool is_x86() const { return m_is_x86; }
-private:
- static constexpr device_timer_id TIMER_CHECK_IRQ = 0;
+ TIMER_CALLBACK_MEMBER(irq_timer_tick);
- inline void set_timer() { timer_set(attotime::zero, TIMER_CHECK_IRQ); }
+private:
void set_irq_line(int irq, int state);
-
enum class state_t : u8
{
ICW1,
@@ -83,6 +79,7 @@ private:
devcb_read_line m_in_sp_func;
devcb_read8 m_read_slave_ack_func;
+ emu_timer *m_irq_timer;
state_t m_state;
uint8_t m_isr;
@@ -113,6 +110,9 @@ private:
uint8_t m_mode;
uint8_t m_auto_eoi;
uint8_t m_is_x86;
+
+ int8_t m_current_level;
+ uint8_t m_inta_sequence;
};
class v5x_icu_device : public pic8259_device
@@ -124,7 +124,17 @@ protected:
virtual bool is_x86() const override { return true; }
};
+class mk98pic_device : public pic8259_device
+{
+public:
+ mk98pic_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock = 0);
+
+protected:
+ virtual bool is_x86() const override { return true; }
+};
+
DECLARE_DEVICE_TYPE(PIC8259, pic8259_device)
DECLARE_DEVICE_TYPE(V5X_ICU, v5x_icu_device)
+DECLARE_DEVICE_TYPE(MK98PIC, mk98pic_device)
#endif // MAME_MACHINE_PIC8259_H