diff options
Diffstat (limited to 'src/devices/bus/gameboy/mbc.h')
-rw-r--r-- | src/devices/bus/gameboy/mbc.h | 237 |
1 files changed, 128 insertions, 109 deletions
diff --git a/src/devices/bus/gameboy/mbc.h b/src/devices/bus/gameboy/mbc.h index 4a9b49bd52e..a99f859639b 100644 --- a/src/devices/bus/gameboy/mbc.h +++ b/src/devices/bus/gameboy/mbc.h @@ -1,7 +1,7 @@ // license:BSD-3-Clause // copyright-holders:Fabio Priuli, Wilbert Pol -#ifndef __GB_MBC_H -#define __GB_MBC_H +#ifndef MAME_BUS_GAMEBOY_MBC_H +#define MAME_BUS_GAMEBOY_MBC_H #include "gb_slot.h" @@ -12,21 +12,22 @@ class gb_rom_mbc_device : public device_t, public device_gb_cart_interface { public: + // reading and writing + virtual DECLARE_READ8_MEMBER(read_rom) override; + virtual DECLARE_READ8_MEMBER(read_ram) override; + virtual DECLARE_WRITE8_MEMBER(write_ram) override; + +protected: // construction/destruction - gb_rom_mbc_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); + gb_rom_mbc_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides - virtual void device_start() override { shared_start(); }; - virtual void device_reset() override { shared_reset(); }; + virtual void device_start() override { shared_start(); } + virtual void device_reset() override { shared_reset(); } void shared_start(); void shared_reset(); - // reading and writing - virtual DECLARE_READ8_MEMBER(read_rom) override; - virtual DECLARE_READ8_MEMBER(read_ram) override; - virtual DECLARE_WRITE8_MEMBER(write_ram) override; - uint8_t m_ram_enable; }; @@ -36,25 +37,27 @@ class gb_rom_mbc1_device : public gb_rom_mbc_device { public: + // construction/destruction + gb_rom_mbc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual DECLARE_READ8_MEMBER(read_rom) override; + virtual DECLARE_WRITE8_MEMBER(write_bank) override; + virtual DECLARE_READ8_MEMBER(read_ram) override; + virtual DECLARE_WRITE8_MEMBER(write_ram) override; + +protected: enum { MODE_16M_64k = 0, /// 16Mbit ROM, 64kBit RAM MODE_4M_256k = 1 /// 4Mbit ROM, 256kBit RAM }; - // construction/destruction - gb_rom_mbc1_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); - gb_rom_mbc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + gb_rom_mbc1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides - virtual void device_start() override { shared_start(); save_item(NAME(m_mode)); }; - virtual void device_reset() override { shared_reset(); m_mode = MODE_16M_64k; }; + virtual void device_start() override { shared_start(); save_item(NAME(m_mode)); } + virtual void device_reset() override { shared_reset(); m_mode = MODE_16M_64k; } virtual void set_additional_wirings(uint8_t mask, int shift) override { m_mask = mask; m_shift = shift; } // these get set at cart loading - virtual DECLARE_READ8_MEMBER(read_rom) override; - virtual DECLARE_WRITE8_MEMBER(write_bank) override; - virtual DECLARE_READ8_MEMBER(read_ram) override; - virtual DECLARE_WRITE8_MEMBER(write_ram) override; - uint8_t m_mode, m_mask; int m_shift; }; @@ -67,14 +70,15 @@ public: // construction/destruction gb_rom_mbc2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override { shared_start(); }; - virtual void device_reset() override { shared_reset(); }; - virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; + +protected: + // device-level overrides + virtual void device_start() override { shared_start(); } + virtual void device_reset() override { shared_reset(); } }; // ======================> gb_rom_mbc3_device @@ -85,15 +89,16 @@ public: // construction/destruction gb_rom_mbc3_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + private: void update_rtc(); uint8_t m_rtc_regs[5]; @@ -106,17 +111,19 @@ class gb_rom_mbc5_device : public gb_rom_mbc_device { public: // construction/destruction - gb_rom_mbc5_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); gb_rom_mbc5_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override { shared_start(); }; - virtual void device_reset() override { shared_reset(); }; - virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; + +protected: + gb_rom_mbc5_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); + + // device-level overrides + virtual void device_start() override { shared_start(); } + virtual void device_reset() override { shared_reset(); } }; // ======================> gb_rom_mbc6_device @@ -127,14 +134,16 @@ public: // construction/destruction gb_rom_mbc6_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + uint16_t m_latch1, m_latch2; uint8_t m_bank_4000, m_bank_6000; }; @@ -147,14 +156,15 @@ public: // construction/destruction gb_rom_mbc7_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override { shared_start(); }; - virtual void device_reset() override { shared_reset(); }; - virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; + +protected: + // device-level overrides + virtual void device_start() override { shared_start(); } + virtual void device_reset() override { shared_reset(); } }; // ======================> gb_rom_m161_device @@ -162,19 +172,19 @@ public: class gb_rom_m161_device : public gb_rom_mbc_device { public: - // construction/destruction gb_rom_m161_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override { return 0xff; } virtual DECLARE_WRITE8_MEMBER(write_ram) override { } +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + uint8_t m_base_bank; uint8_t m_load_disable; }; @@ -186,16 +196,17 @@ public: // construction/destruction gb_rom_mmm01_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - // reading and writing virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + uint16_t m_romb; uint8_t m_romb_nwe; uint8_t m_ramb; @@ -211,25 +222,26 @@ public: class gb_rom_sachen_mmc1_device : public gb_rom_mbc_device { public: + // construction/destruction + gb_rom_sachen_mmc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + virtual DECLARE_READ8_MEMBER(read_rom) override; + virtual DECLARE_WRITE8_MEMBER(write_bank) override; + virtual DECLARE_READ8_MEMBER(read_ram) override { return 0xff; } + virtual DECLARE_WRITE8_MEMBER(write_ram) override { } + +protected: enum { MODE_LOCKED, MODE_UNLOCKED }; - // construction/destruction - gb_rom_sachen_mmc1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - gb_rom_sachen_mmc1_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source); + gb_rom_sachen_mmc1_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual DECLARE_READ8_MEMBER(read_rom) override; - virtual DECLARE_WRITE8_MEMBER(write_bank) override; - virtual DECLARE_READ8_MEMBER(read_ram) override { return 0xff; } - virtual DECLARE_WRITE8_MEMBER(write_ram) override { } - uint8_t m_base_bank, m_mask, m_mode, m_unlock_cnt; }; @@ -238,24 +250,23 @@ public: class gb_rom_sachen_mmc2_device : public gb_rom_sachen_mmc1_device { public: + // construction/destruction + gb_rom_sachen_mmc2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + + virtual DECLARE_READ8_MEMBER(read_rom) override; + virtual DECLARE_READ8_MEMBER(read_ram) override; + virtual DECLARE_WRITE8_MEMBER(write_ram) override; +protected: enum { MODE_LOCKED_DMG, MODE_LOCKED_CGB, MODE_UNLOCKED }; - // construction/destruction - gb_rom_sachen_mmc2_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides virtual void device_start() override; virtual void device_reset() override; - - virtual DECLARE_READ8_MEMBER(read_rom) override; - virtual DECLARE_READ8_MEMBER(read_ram) override; - virtual DECLARE_WRITE8_MEMBER(write_ram) override; - }; // ======================> gb_rom_188in1_device @@ -265,14 +276,15 @@ public: // construction/destruction gb_rom_188in1_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override { shared_start(); save_item(NAME(m_game_base)); }; - virtual void device_reset() override { shared_reset(); m_game_base = 0; }; - // reading and writing virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; +protected: + // device-level overrides + virtual void device_start() override { shared_start(); save_item(NAME(m_game_base)); } + virtual void device_reset() override { shared_reset(); m_game_base = 0; } + private: uint32_t m_game_base; }; @@ -284,16 +296,18 @@ public: // construction/destruction gb_rom_sintax_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override; - virtual void device_reset() override; - void set_xor_for_bank(uint8_t bank); - // reading and writing virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; + +protected: + // device-level overrides + virtual void device_start() override; + virtual void device_reset() override; + void set_xor_for_bank(uint8_t bank); + uint8_t m_bank_mask, m_bank, m_reg; uint8_t m_currentxor, m_xor2, m_xor3, m_xor4, m_xor5, m_sintax_mode; @@ -307,11 +321,13 @@ public: // construction/destruction gb_rom_chongwu_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); + virtual DECLARE_READ8_MEMBER(read_rom) override; + +protected: // device-level overrides virtual void device_start() override; virtual void device_reset() override; - virtual DECLARE_READ8_MEMBER(read_rom) override; uint8_t m_protection_checked; }; @@ -334,13 +350,14 @@ public: // construction/destruction gb_rom_digimon_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override { shared_start(); }; - virtual void device_reset() override { shared_reset(); }; - virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; + +protected: + // device-level overrides + virtual void device_start() override { shared_start(); } + virtual void device_reset() override { shared_reset(); } virtual DECLARE_WRITE8_MEMBER(write_ram) override; }; @@ -351,15 +368,17 @@ public: // construction/destruction gb_rom_rockman8_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override { shared_start(); }; - virtual void device_reset() override { shared_reset(); }; - // reading and writing virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; + +protected: + // device-level overrides + virtual void device_start() override { shared_start(); } + virtual void device_reset() override { shared_reset(); } + uint8_t m_bank_mask, m_bank, m_reg; }; @@ -370,39 +389,39 @@ public: // construction/destruction gb_rom_sm3sp_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); - // device-level overrides - virtual void device_start() override { shared_start(); }; - virtual void device_reset() override { shared_reset(); }; - // reading and writing virtual DECLARE_READ8_MEMBER(read_rom) override; virtual DECLARE_WRITE8_MEMBER(write_bank) override; virtual DECLARE_READ8_MEMBER(read_ram) override; virtual DECLARE_WRITE8_MEMBER(write_ram) override; + +protected: + // device-level overrides + virtual void device_start() override { shared_start(); } + virtual void device_reset() override { shared_reset(); } + uint8_t m_bank_mask, m_bank, m_reg, m_mode; }; // device type definition -extern const device_type GB_ROM_MBC1; -extern const device_type GB_ROM_MBC1_COL; -extern const device_type GB_ROM_MBC2; -extern const device_type GB_ROM_MBC3; -extern const device_type GB_ROM_MBC4; -extern const device_type GB_ROM_MBC5; -extern const device_type GB_ROM_MBC6; -extern const device_type GB_ROM_MBC7; -extern const device_type GB_ROM_M161; -extern const device_type GB_ROM_MMM01; -extern const device_type GB_ROM_SACHEN1; -extern const device_type GB_ROM_SACHEN2; -extern const device_type GB_ROM_188IN1; -extern const device_type GB_ROM_SINTAX; -extern const device_type GB_ROM_CHONGWU; -extern const device_type GB_ROM_LICHENG; -extern const device_type GB_ROM_DIGIMON; -extern const device_type GB_ROM_ROCKMAN8; -extern const device_type GB_ROM_SM3SP; - -#endif +DECLARE_DEVICE_TYPE(GB_ROM_MBC1, gb_rom_mbc1_device) +DECLARE_DEVICE_TYPE(GB_ROM_MBC2, gb_rom_mbc2_device) +DECLARE_DEVICE_TYPE(GB_ROM_MBC3, gb_rom_mbc3_device) +DECLARE_DEVICE_TYPE(GB_ROM_MBC5, gb_rom_mbc5_device) +DECLARE_DEVICE_TYPE(GB_ROM_MBC6, gb_rom_mbc6_device) +DECLARE_DEVICE_TYPE(GB_ROM_MBC7, gb_rom_mbc7_device) +DECLARE_DEVICE_TYPE(GB_ROM_M161, gb_rom_m161_device) +DECLARE_DEVICE_TYPE(GB_ROM_MMM01, gb_rom_mmm01_device) +DECLARE_DEVICE_TYPE(GB_ROM_SACHEN1, gb_rom_sachen_mmc1_device) +DECLARE_DEVICE_TYPE(GB_ROM_SACHEN2, gb_rom_sachen_mmc2_device) +DECLARE_DEVICE_TYPE(GB_ROM_188IN1, gb_rom_188in1_device) +DECLARE_DEVICE_TYPE(GB_ROM_SINTAX, gb_rom_sintax_device) +DECLARE_DEVICE_TYPE(GB_ROM_CHONGWU, gb_rom_chongwu_device) +DECLARE_DEVICE_TYPE(GB_ROM_LICHENG, gb_rom_licheng_device) +DECLARE_DEVICE_TYPE(GB_ROM_DIGIMON, gb_rom_digimon_device) +DECLARE_DEVICE_TYPE(GB_ROM_ROCKMAN8, gb_rom_rockman8_device) +DECLARE_DEVICE_TYPE(GB_ROM_SM3SP, gb_rom_sm3sp_device) + +#endif // MAME_BUS_GAMEBOY_MBC_H |