mirror of
https://github.com/holub/mame
synced 2025-06-06 04:43:45 +03:00
377 lines
9.1 KiB
C++
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
|