diff options
Diffstat (limited to 'src/devices/bus/nes/kaiser.h')
-rw-r--r-- | src/devices/bus/nes/kaiser.h | 260 |
1 files changed, 184 insertions, 76 deletions
diff --git a/src/devices/bus/nes/kaiser.h b/src/devices/bus/nes/kaiser.h index e0e31658cdb..6eb8d90161f 100644 --- a/src/devices/bus/nes/kaiser.h +++ b/src/devices/bus/nes/kaiser.h @@ -8,21 +8,34 @@ #include "nxrom.h" -// ======================> nes_ks7058_device +// ======================> nes_ks106c_device -class nes_ks7058_device : public nes_nrom_device +class nes_ks106c_device : public nes_nrom_device { public: // construction/destruction - nes_ks7058_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - - virtual void write_h(offs_t offset, uint8_t data) override; + nes_ks106c_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); virtual void pcb_reset() override; protected: // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; + +private: + u8 m_latch; +}; + + +// ======================> nes_ks7058_device + +class nes_ks7058_device : public nes_nrom_device +{ +public: + // construction/destruction + nes_ks7058_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual void write_h(offs_t offset, u8 data) override; }; @@ -32,19 +45,19 @@ class nes_ks7022_device : public nes_nrom_device { public: // construction/destruction - nes_ks7022_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ks7022_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual uint8_t read_h(offs_t offset) override; - virtual void write_h(offs_t offset, uint8_t data) override; + virtual u8 read_h(offs_t offset) override; + virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; protected: // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; private: - uint8_t m_latch; + u8 m_latch; }; @@ -54,30 +67,31 @@ class nes_ks7032_device : public nes_nrom_device { public: // construction/destruction - nes_ks7032_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ks7032_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual uint8_t read_m(offs_t offset) override; - void ks7032_write(offs_t offset, uint8_t data); - virtual void write_h(offs_t offset, uint8_t data) override { ks7032_write(offset, data); } + virtual u8 read_m(offs_t offset) override; + virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; protected: - nes_ks7032_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + // construction/destruction + nes_ks7032_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock); // device-level overrides - virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_start() override ATTR_COLD; - void prg_update(); + TIMER_CALLBACK_MEMBER(irq_timer_tick); - uint8_t m_latch; - uint8_t m_reg[8]; + u8 m_reg[8]; + +private: + void prg_update(); + u8 m_latch; - uint16_t m_irq_count; - int m_irq_enable; + u16 m_irq_count, m_irq_count_latch; + u8 m_irq_enable; - static const device_timer_id TIMER_IRQ = 0; emu_timer *irq_timer; }; @@ -88,11 +102,46 @@ class nes_ks202_device : public nes_ks7032_device { public: // construction/destruction - nes_ks202_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ks202_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual u8 read_m(offs_t offset) override; + virtual void write_h(offs_t offset, u8 data) override; +}; + + +// ======================> nes_ks7016_device + +class nes_ks7016_device : public nes_nrom_device +{ +public: + // construction/destruction + nes_ks7016_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual u8 read_m(offs_t offset) override; + virtual void write_h(offs_t offset, u8 data) override; + + virtual void pcb_reset() override; + +protected: + // construction/destruction + nes_ks7016_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, u32 clock, u8 a15_flip); // device-level overrides - virtual uint8_t read_m(offs_t offset) override; - virtual void write_h(offs_t offset, uint8_t data) override; + virtual void device_start() override ATTR_COLD; + +private: + u8 m_latch; + const u8 m_a15_flip; +}; + + +// ======================> nes_ks7016b_device + +class nes_ks7016b_device : public nes_ks7016_device +{ +public: + // construction/destruction + nes_ks7016b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); }; @@ -102,64 +151,117 @@ class nes_ks7017_device : public nes_nrom_device { public: // construction/destruction - nes_ks7017_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ks7017_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual uint8_t read_ex(offs_t offset) override; - virtual void write_ex(offs_t offset, uint8_t data) override; - virtual void write_l(offs_t offset, uint8_t data) override; + virtual u8 read_ex(offs_t offset) override; + virtual void write_ex(offs_t offset, u8 data) override; + virtual void write_l(offs_t offset, u8 data) override; virtual void pcb_reset() override; protected: // device-level overrides - virtual void device_start() override; - virtual void device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr) override; + virtual void device_start() override ATTR_COLD; + + TIMER_CALLBACK_MEMBER(irq_timer_tick); private: - uint8_t m_latch; + u8 m_latch; - uint16_t m_irq_count; - uint8_t m_irq_status; - int m_irq_enable; + u16 m_irq_count; + u8 m_irq_status; + u8 m_irq_enable; - static const device_timer_id TIMER_IRQ = 0; emu_timer *irq_timer; }; -// ======================> nes_ks7012_device +// ======================> nes_ks7021a_device -class nes_ks7012_device : public nes_nrom_device +class nes_ks7021a_device : public nes_nrom_device +{ +public: + // construction/destruction + nes_ks7021a_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual void write_h(offs_t offset, u8 data) override; + + virtual void pcb_reset() override; +}; + + +// ======================> nes_ks7010_device + +class nes_ks7010_device : public nes_nrom_device { public: // construction/destruction - nes_ks7012_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ks7010_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual void write_h(offs_t offset, uint8_t data) override; + virtual u8 read_m(offs_t offset) override; + virtual u8 read_h(offs_t offset) override; virtual void pcb_reset() override; protected: // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; + +private: + u8 m_latch; +}; + + +// ======================> nes_ks7012_device + +class nes_ks7012_device : public nes_nrom_device +{ +public: + // construction/destruction + nes_ks7012_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual void write_h(offs_t offset, u8 data) override; + + virtual void pcb_reset() override; }; + // ======================> nes_ks7013b_device class nes_ks7013b_device : public nes_nrom_device { public: // construction/destruction - nes_ks7013b_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ks7013b_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual void write_m(offs_t offset, uint8_t data) override; - virtual void write_h(offs_t offset, uint8_t data) override; + virtual void write_m(offs_t offset, u8 data) override; + virtual void write_h(offs_t offset, u8 data) override; + + virtual void pcb_reset() override; +}; + + +// ======================> nes_ks7030_device + +class nes_ks7030_device : public nes_nrom_device +{ +public: + // construction/destruction + nes_ks7030_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); + + virtual u8 read_m(offs_t offset) override; + virtual u8 read_h(offs_t offset) override; + virtual void write_m(offs_t offset, u8 data) override; + virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; protected: // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; + +private: + u8 m_reg[2]; }; @@ -169,80 +271,86 @@ class nes_ks7031_device : public nes_nrom_device { public: // construction/destruction - nes_ks7031_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ks7031_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual uint8_t read_m(offs_t offset) override; - virtual uint8_t read_h(offs_t offset) override; - virtual void write_h(offs_t offset, uint8_t data) override; + virtual u8 read_m(offs_t offset) override; + virtual u8 read_h(offs_t offset) override; + virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; protected: // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; private: - uint8_t m_reg[4]; + u8 m_reg[4]; }; -// ======================> nes_ks7016_device +// ======================> nes_ks7037_device -class nes_ks7016_device : public nes_nrom_device +class nes_ks7037_device : public nes_nrom_device { public: // construction/destruction - nes_ks7016_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ks7037_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual uint8_t read_m(offs_t offset) override; - virtual void write_h(offs_t offset, uint8_t data) override; + virtual u8 read_m(offs_t offset) override; + virtual u8 read_h(offs_t offset) override; + virtual void write_m(offs_t offset, u8 data) override; + virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; protected: // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; private: - uint8_t m_reg; + u8 m_reg; }; -// ======================> nes_ks7037_device -class nes_ks7037_device : public nes_nrom_device +// ======================> nes_ks7057_device + +class nes_ks7057_device : public nes_nrom_device { public: // construction/destruction - nes_ks7037_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + nes_ks7057_device(const machine_config &mconfig, const char *tag, device_t *owner, u32 clock); - virtual uint8_t read_m(offs_t offset) override; - virtual uint8_t read_h(offs_t offset) override; - virtual void write_m(offs_t offset, uint8_t data) override; - virtual void write_h(offs_t offset, uint8_t data) override; + virtual u8 read_m(offs_t offset) override; + virtual u8 read_h(offs_t offset) override; + virtual void write_h(offs_t offset, u8 data) override; virtual void pcb_reset() override; protected: // device-level overrides - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; private: - void update_prg(); - uint8_t m_latch; - uint8_t m_reg[8]; + u8 m_reg[8]; }; // device type definition -DECLARE_DEVICE_TYPE(NES_KS7058, nes_ks7058_device) -DECLARE_DEVICE_TYPE(NES_KS7022, nes_ks7022_device) -DECLARE_DEVICE_TYPE(NES_KS7032, nes_ks7032_device) +DECLARE_DEVICE_TYPE(NES_KS106C, nes_ks106c_device) DECLARE_DEVICE_TYPE(NES_KS202, nes_ks202_device) -DECLARE_DEVICE_TYPE(NES_KS7017, nes_ks7017_device) +DECLARE_DEVICE_TYPE(NES_KS7010, nes_ks7010_device) DECLARE_DEVICE_TYPE(NES_KS7012, nes_ks7012_device) DECLARE_DEVICE_TYPE(NES_KS7013B, nes_ks7013b_device) -DECLARE_DEVICE_TYPE(NES_KS7031, nes_ks7031_device) DECLARE_DEVICE_TYPE(NES_KS7016, nes_ks7016_device) +DECLARE_DEVICE_TYPE(NES_KS7016B, nes_ks7016b_device) +DECLARE_DEVICE_TYPE(NES_KS7017, nes_ks7017_device) +DECLARE_DEVICE_TYPE(NES_KS7021A, nes_ks7021a_device) +DECLARE_DEVICE_TYPE(NES_KS7022, nes_ks7022_device) +DECLARE_DEVICE_TYPE(NES_KS7030, nes_ks7030_device) +DECLARE_DEVICE_TYPE(NES_KS7031, nes_ks7031_device) +DECLARE_DEVICE_TYPE(NES_KS7032, nes_ks7032_device) DECLARE_DEVICE_TYPE(NES_KS7037, nes_ks7037_device) +DECLARE_DEVICE_TYPE(NES_KS7057, nes_ks7057_device) +DECLARE_DEVICE_TYPE(NES_KS7058, nes_ks7058_device) #endif // MAME_BUS_NES_KAISER_H |