summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/megadrive/rom.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/megadrive/rom.h')
-rw-r--r--src/devices/bus/megadrive/rom.h585
1 files changed, 585 insertions, 0 deletions
diff --git a/src/devices/bus/megadrive/rom.h b/src/devices/bus/megadrive/rom.h
new file mode 100644
index 00000000000..1ecc693606e
--- /dev/null
+++ b/src/devices/bus/megadrive/rom.h
@@ -0,0 +1,585 @@
+// license:BSD-3-Clause
+// copyright-holders:Fabio Priuli
+#ifndef __MD_ROM_H
+#define __MD_ROM_H
+
+#include "md_slot.h"
+
+//**************************************************************************
+// TYPE DEFINITIONS
+//**************************************************************************
+
+// ======================> md_std_rom_device
+
+class md_std_rom_device : public device_t,
+ public device_md_cart_interface
+{
+public:
+ // construction/destruction
+ md_std_rom_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, UINT32 clock, const char *shortname, const char *source);
+ md_std_rom_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start() {};
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read) { if (offset < 0x400000/2) return m_rom[MD_ADDR(offset)]; else return 0xffff; };
+ virtual DECLARE_WRITE16_MEMBER(write) { };
+};
+
+// ======================> md_rom_sram_device
+
+class md_rom_sram_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_sram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+ virtual DECLARE_WRITE16_MEMBER(write_a13);
+};
+
+// ======================> md_rom_fram_device
+
+class md_rom_fram_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_fram_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+ virtual DECLARE_READ16_MEMBER(read_a13);
+ virtual DECLARE_WRITE16_MEMBER(write_a13);
+};
+
+// ======================> md_rom_ssf2_device
+
+class md_rom_ssf2_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_ssf2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write_a13);
+
+private:
+ UINT8 m_bank[16];
+ int m_lastoff, m_lastdata;
+};
+
+// ======================> md_rom_cm2in1_device
+
+class md_rom_cm2in1_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_cm2in1_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+
+private:
+ int m_base;
+};
+
+
+// ======================> md_rom_mcpirate_device
+
+class md_rom_mcpirate_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_mcpirate_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write_a13);
+
+private:
+ UINT8 m_bank;
+};
+
+
+// ======================> md_rom_bugslife_device
+
+class md_rom_bugslife_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_bugslife_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read_a13);
+};
+
+// ======================> md_rom_chinf3_device
+
+class md_rom_chinf3_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_chinf3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+
+private:
+ int m_bank;
+};
+
+// ======================> md_rom_16mj2_device
+
+class md_rom_16mj2_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_16mj2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+};
+
+// ======================> md_rom_elfwor_device
+
+class md_rom_elfwor_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_elfwor_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+};
+
+// ======================> md_rom_yasech_device
+
+class md_rom_yasech_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_yasech_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+};
+
+// ======================> md_rom_kof98_device
+
+class md_rom_kof98_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_kof98_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+};
+
+// ======================> md_rom_kof99_device
+
+class md_rom_kof99_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_kof99_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read_a13);
+};
+
+// ======================> md_rom_lion2_device
+
+class md_rom_lion2_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_lion2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+
+private:
+ UINT16 m_prot1_data, m_prot2_data;
+};
+
+// ======================> md_rom_lion3_device
+
+class md_rom_lion3_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_lion3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+
+private:
+ UINT8 m_reg[3];
+ UINT16 m_bank;
+};
+
+// ======================> md_rom_mjlov_device
+
+class md_rom_mjlov_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_mjlov_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+};
+
+// ======================> md_rom_pokea_device
+
+class md_rom_pokea_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_pokea_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read_a13);
+};
+
+// ======================> md_rom_pokestad_device
+
+class md_rom_pokestad_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_pokestad_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+
+private:
+ UINT8 m_bank;
+};
+
+// ======================> md_rom_realtec_device
+
+class md_rom_realtec_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_realtec_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+
+private:
+ UINT16 m_bank_addr, m_bank_size, m_old_bank_addr;
+};
+
+// ======================> md_rom_redcl_device
+
+class md_rom_redcl_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_redcl_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+};
+
+// ======================> md_rom_rx3_device
+
+class md_rom_rx3_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_rx3_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read_a13);
+};
+
+// ======================> md_rom_sbubl_device
+
+class md_rom_sbubl_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_sbubl_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+};
+
+// ======================> md_rom_smb_device
+
+class md_rom_smb_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_smb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read_a13);
+};
+
+// ======================> md_rom_smb2_device
+
+class md_rom_smb2_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_smb2_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read_a13);
+};
+
+// ======================> md_rom_smw64_device
+
+class md_rom_smw64_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_smw64_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+
+private:
+ UINT32 m_latch0, m_latch1;
+ UINT16 m_reg[6];
+ UINT16 m_ctrl[3];
+};
+
+// ======================> md_rom_smouse_device
+
+class md_rom_smouse_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_smouse_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+};
+
+
+// ======================> md_rom_soulb_device
+
+class md_rom_soulb_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_soulb_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+};
+
+// ======================> md_rom_squir_device
+
+class md_rom_squir_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_squir_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+
+private:
+ UINT16 m_latch;
+};
+
+// ======================> md_rom_tekkensp_device
+
+class md_rom_tekkensp_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_tekkensp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+
+private:
+ UINT16 m_reg;
+};
+
+// ======================> md_rom_topf_device
+
+class md_rom_topf_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_topf_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+
+private:
+ UINT16 m_latch;
+ UINT8 m_bank[3];
+};
+
+// ======================> md_rom_radica_device
+
+class md_rom_radica_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_radica_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_READ16_MEMBER(read_a13);
+
+private:
+ UINT8 m_bank;
+};
+
+// ======================> md_rom_beggarp_device
+
+class md_rom_beggarp_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_beggarp_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+ virtual DECLARE_WRITE16_MEMBER(write_a13);
+
+private:
+ UINT8 m_mode, m_lock;
+};
+
+// ======================> md_rom_wukong_device
+
+class md_rom_wukong_device : public md_std_rom_device
+{
+public:
+ // construction/destruction
+ md_rom_wukong_device(const machine_config &mconfig, const char *tag, device_t *owner, UINT32 clock);
+
+ // device-level overrides
+ virtual void device_start();
+ virtual void device_reset();
+
+ // reading and writing
+ virtual DECLARE_READ16_MEMBER(read);
+ virtual DECLARE_WRITE16_MEMBER(write);
+ virtual DECLARE_WRITE16_MEMBER(write_a13);
+
+private:
+ UINT8 m_mode;
+};
+
+
+
+// device type definition
+extern const device_type MD_STD_ROM;
+extern const device_type MD_ROM_SRAM;
+extern const device_type MD_ROM_FRAM;
+extern const device_type MD_ROM_CM2IN1;
+extern const device_type MD_ROM_16MJ2;
+extern const device_type MD_ROM_BUGSLIFE;
+extern const device_type MD_ROM_CHINF3;
+extern const device_type MD_ROM_ELFWOR;
+extern const device_type MD_ROM_YASECH;
+extern const device_type MD_ROM_KOF98;
+extern const device_type MD_ROM_KOF99;
+extern const device_type MD_ROM_LION2;
+extern const device_type MD_ROM_LION3;
+extern const device_type MD_ROM_MCPIR;
+extern const device_type MD_ROM_MJLOV;
+extern const device_type MD_ROM_POKEA;
+extern const device_type MD_ROM_POKESTAD;
+extern const device_type MD_ROM_REALTEC;
+extern const device_type MD_ROM_REDCL;
+extern const device_type MD_ROM_RX3;
+extern const device_type MD_ROM_SBUBL;
+extern const device_type MD_ROM_SMB;
+extern const device_type MD_ROM_SMB2;
+extern const device_type MD_ROM_SMW64;
+extern const device_type MD_ROM_SMOUSE;
+extern const device_type MD_ROM_SOULB;
+extern const device_type MD_ROM_SSF2;
+extern const device_type MD_ROM_SQUIR;
+extern const device_type MD_ROM_TEKKENSP;
+extern const device_type MD_ROM_TOPF;
+extern const device_type MD_ROM_RADICA;
+extern const device_type MD_ROM_BEGGARP;
+extern const device_type MD_ROM_WUKONG;
+
+#endif