mame/src/devices/bus/nes/kaiser.h
2022-04-02 02:16:51 +11:00

377 lines
9.1 KiB
C++

// license:BSD-3-Clause
// copyright-holders:Fabio Priuli
#ifndef MAME_BUS_NES_KAISER_H
#define MAME_BUS_NES_KAISER_H
#pragma once
#include "nxrom.h"
// ======================> nes_ks106c_device
class nes_ks106c_device : public nes_nrom_device
{
public:
// construction/destruction
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;
private:
u8 m_latch = 0;
};
// ======================> 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, uint32_t clock);
virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() override;
};
// ======================> nes_ks7022_device
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);
virtual uint8_t read_h(offs_t offset) override;
virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() override;
private:
uint8_t m_latch = 0;
};
// ======================> nes_ks7032_device
class nes_ks7032_device : public nes_nrom_device
{
public:
// construction/destruction
nes_ks7032_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_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) override;
u8 m_reg[8]{};
private:
void prg_update();
u8 m_latch = 0;
u16 m_irq_count, m_irq_count_latch;
int m_irq_enable;
static const device_timer_id TIMER_IRQ = 0;
emu_timer *irq_timer;
};
// ======================> nes_ks202_device
class nes_ks202_device : public nes_ks7032_device
{
public:
// construction/destruction
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 void device_start() override;
private:
u8 m_latch = 0;
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);
};
// ======================> nes_ks7017_device
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);
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 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) override;
private:
uint8_t m_latch = 0;
uint16_t m_irq_count;
uint8_t m_irq_status;
int m_irq_enable;
static const device_timer_id TIMER_IRQ = 0;
emu_timer *irq_timer;
};
// ======================> nes_ks7021a_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;
protected:
// device-level overrides
virtual void device_start() override;
};
// ======================> nes_ks7010_device
class nes_ks7010_device : public nes_nrom_device
{
public:
// construction/destruction
nes_ks7010_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 pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() override;
private:
u8 m_latch = 0;
};
// ======================> 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, uint32_t clock);
virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() 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);
virtual void write_m(offs_t offset, uint8_t data) override;
virtual void write_h(offs_t offset, uint8_t data) override;
virtual void pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() 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;
private:
u8 m_reg[2];
};
// ======================> nes_ks7031_device
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);
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 void pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() override;
private:
uint8_t m_reg[4];
};
// ======================> nes_ks7037_device
class nes_ks7037_device : public nes_nrom_device
{
public:
// construction/destruction
nes_ks7037_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t 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 void pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() override;
private:
void update_prg();
uint8_t m_latch = 0;
uint8_t m_reg[8];
};
// ======================> nes_ks7057_device
class nes_ks7057_device : public nes_nrom_device
{
public:
// construction/destruction
nes_ks7057_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_h(offs_t offset, u8 data) override;
virtual void pcb_reset() override;
protected:
// device-level overrides
virtual void device_start() override;
private:
u8 m_reg[8];
};
// device type definition
DECLARE_DEVICE_TYPE(NES_KS106C, nes_ks106c_device)
DECLARE_DEVICE_TYPE(NES_KS202, nes_ks202_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_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