diff options
Diffstat (limited to 'src/mess/machine/kc_ram.h')
-rw-r--r-- | src/mess/machine/kc_ram.h | 188 |
1 files changed, 188 insertions, 0 deletions
diff --git a/src/mess/machine/kc_ram.h b/src/mess/machine/kc_ram.h new file mode 100644 index 00000000000..3149c484e0a --- /dev/null +++ b/src/mess/machine/kc_ram.h @@ -0,0 +1,188 @@ +#pragma once + +#ifndef __KC_RAM_H__ +#define __KC_RAM_H__ + +#include "emu.h" +#include "machine/kcexp.h" + +//************************************************************************** +// TYPE DEFINITIONS +//************************************************************************** + +// ======================> kc_m011_device + +class kc_m011_device : + public device_t, + public device_kcexp_interface +{ +public: + // construction/destruction + kc_m011_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + kc_m011_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock); + +protected: + // device-level overrides + virtual void device_start(); + virtual void device_reset(); + virtual void device_config_complete() { m_shortname = "kc_m011"; } + + // kcexp_interface overrides + virtual UINT8 module_id_r() { return 0xf6; } + virtual void control_w(UINT8 data); + virtual void read(offs_t offset, UINT8 &data); + virtual void write(offs_t offset, UINT8 data); + virtual DECLARE_WRITE_LINE_MEMBER( mei_w ); + +protected: + kcexp_slot_device *m_slot; + + // internal state + int m_mei; // module enable line + UINT8 * m_ram; + UINT8 m_enabled; + UINT8 m_write_enabled; + UINT16 m_base; + UINT8 m_segment; + +private: + // internal helpers + virtual UINT32 get_ram_size() const { return 0x10000; } +}; + + +// ======================> kc_m022_device + +class kc_m022_device : + public kc_m011_device +{ +public: + // construction/destruction + kc_m022_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + +protected: + // device-level overrides + virtual void device_config_complete() { m_shortname = "kc_m022"; } + + // kcexp_interface overrides + virtual UINT8 module_id_r() { return 0xf4; } + virtual void read(offs_t offset, UINT8 &ata); + virtual void write(offs_t offset, UINT8 data); + +private: + // internal helpers + virtual UINT32 get_ram_size() const { return 0x4000; } +}; + + +// ======================> kc_m032_device + +class kc_m032_device : + public kc_m011_device +{ +public: + // construction/destruction + kc_m032_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + +protected: + // device-level overrides + virtual void device_reset(); + virtual void device_config_complete() { m_shortname = "kc_m032"; } + + // kcexp_interface overrides + virtual UINT8 module_id_r() { return 0x79; } + virtual void control_w(UINT8 data); + virtual void read(offs_t offset, UINT8 &data); + virtual void write(offs_t offset, UINT8 data); + +private: + // internal helpers + virtual UINT32 get_ram_size() const { return 0x40000; } +}; + + +// ======================> kc_m034_device + +class kc_m034_device : + public kc_m011_device +{ +public: + // construction/destruction + kc_m034_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + +protected: + // device-level overrides + virtual void device_reset(); + virtual void device_config_complete() { m_shortname = "kc_m034"; } + + // kcexp_interface overrides + virtual UINT8 module_id_r() { return 0x7a; } + virtual void control_w(UINT8 data); + virtual void read(offs_t offset, UINT8 &data); + virtual void write(offs_t offset, UINT8 data); + +private: + // internal helpers + virtual UINT32 get_ram_size() const { return 0x80000; } +}; + + +// ======================> kc_m035_device + +class kc_m035_device : + public kc_m011_device +{ +public: + // construction/destruction + kc_m035_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + +protected: + // device-level overrides + virtual void device_config_complete() { m_shortname = "kc_m035"; } + + // kcexp_interface overrides + virtual UINT8 module_id_r() { return 0x7b; } + virtual void control_w(UINT8 data); + virtual void read(offs_t offset, UINT8 &data); + virtual void write(offs_t offset, UINT8 data); + +private: + // internal helpers + virtual UINT32 get_ram_size() const { return 0x100000; } +}; + + +// ======================> kc_m036_device + +class kc_m036_device : + public kc_m011_device +{ +public: + // construction/destruction + kc_m036_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock); + +protected: + // device-level overrides + virtual void device_reset(); + virtual void device_config_complete() { m_shortname = "kc_m036"; } + + // kcexp_interface overrides + virtual UINT8 module_id_r() { return 0x78; } + virtual void control_w(UINT8 data); + virtual void read(offs_t offset, UINT8 &data); + virtual void write(offs_t offset, UINT8 data); + +private: + // internal helpers + virtual UINT32 get_ram_size() const { return 0x20000; } +}; + +// device type definition +extern const device_type KC_M011; +extern const device_type KC_M022; +extern const device_type KC_M032; +extern const device_type KC_M034; +extern const device_type KC_M035; +extern const device_type KC_M036; + +#endif /* __KC_RAM_H__ */ |