summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/gameboy/gb_slot.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/gameboy/gb_slot.h')
-rw-r--r--src/devices/bus/gameboy/gb_slot.h217
1 files changed, 0 insertions, 217 deletions
diff --git a/src/devices/bus/gameboy/gb_slot.h b/src/devices/bus/gameboy/gb_slot.h
deleted file mode 100644
index a9d2b2aeb13..00000000000
--- a/src/devices/bus/gameboy/gb_slot.h
+++ /dev/null
@@ -1,217 +0,0 @@
-// license:BSD-3-Clause
-// copyright-holders:Fabio Priuli, Wilbert Pol
-#ifndef MAME_BUS_GAMEBOY_GB_SLOT_H
-#define MAME_BUS_GAMEBOY_GB_SLOT_H
-
-#include "softlist_dev.h"
-
-
-/***************************************************************************
- TYPE DEFINITIONS
- ***************************************************************************/
-
-
-/* PCB */
-enum
-{
- GB_MBC_NONE = 0, /* 32KB ROM - No memory bank controller */
- GB_MBC_MBC1, /* 2MB ROM, 8KB RAM -or- 512KB ROM, 32KB RAM */
- GB_MBC_MBC2, /* 256KB ROM, 32KB RAM */
- GB_MBC_MBC3, /* 2MB ROM, 32KB RAM, RTC */
- GB_MBC_MBC4, /* ?? ROM, ?? RAM */
- GB_MBC_MBC5, /* 8MB ROM, 128KB RAM (32KB w/ Rumble) */
- GB_MBC_TAMA5, /* ?? ROM ?? RAM - What is this? */
- GB_MBC_HUC1, /* ?? ROM, ?? RAM - Hudson Soft Controller */
- GB_MBC_HUC3, /* ?? ROM, ?? RAM - Hudson Soft Controller */
- GB_MBC_MBC6, /* ?? ROM, 32KB SRAM */
- GB_MBC_MBC7, /* ?? ROM, ?? RAM */
- GB_MBC_M161, /* 256kB ROM, No RAM */
- GB_MBC_MMM01, /* 8MB ROM, 128KB RAM */
- GB_MBC_WISDOM, /* ?? ROM, ?? RAM - Wisdom tree controller */
- GB_MBC_MBC1_COL, /* 1MB ROM, 32KB RAM - workaround for MBC1 on PCB that maps rom address lines differently */
- GB_MBC_SACHEN1, /* 4MB ROM, No RAM - Sachen MMC-1 variant */
- GB_MBC_SACHEN2, /* 4MB ROM, No RAM - Sachen MMC-2 variant */
- GB_MBC_YONGYONG, /* ?? ROM, ?? RAM - Appears in Sonic 3D Blast 5 pirate */
- GB_MBC_LASAMA, /* ?? ROM, ?? RAM - Appears in La Sa Ma */
- GB_MBC_ATVRACIN,
- GB_MBC_CAMERA,
- GB_MBC_188IN1,
- GB_MBC_SINTAX,
- GB_MBC_CHONGWU,
- GB_MBC_LICHENG,
- GB_MBC_DIGIMON,
- GB_MBC_ROCKMAN8,
- GB_MBC_SM3SP,
- GB_MBC_DKONG5,
- GB_MBC_UNK01,
- GB_MBC_MEGADUCK, /* MEGADUCK style banking */
- GB_MBC_UNKNOWN /* Unknown mapper */
-};
-
-
-// ======================> device_gb_cart_interface
-
-class device_gb_cart_interface : public device_interface
-{
-public:
- // construction/destruction
- virtual ~device_gb_cart_interface();
-
- // reading and writing
- virtual uint8_t read_rom(offs_t offset) { return 0xff; }
- virtual void write_bank(offs_t offset, uint8_t data) {}
- virtual uint8_t read_ram(offs_t offset) { return 0xff; }
- virtual void write_ram(offs_t offset, uint8_t data) {}
-
- void rom_alloc(uint32_t size, const char *tag);
- void ram_alloc(uint32_t size);
- uint8_t* get_rom_base() { return m_rom; }
- uint8_t* get_ram_base() { return &m_ram[0]; }
- uint32_t get_rom_size() { return m_rom_size; }
- uint32_t get_ram_size() { return m_ram.size(); }
-
- void rom_map_setup(uint32_t size);
- void ram_map_setup(uint8_t banks);
-
- virtual void set_additional_wirings(uint8_t mask, int shift) { } // MBC-1 will then overwrite this!
- void set_has_timer(bool val) { has_timer = val; }
- void set_has_rumble(bool val) { has_rumble = val; }
- void set_has_battery(bool val) { has_battery = val; }
- bool get_has_battery() { return has_battery; }
-
- void save_ram() { device().save_item(NAME(m_ram)); }
-
-protected:
- device_gb_cart_interface(const machine_config &mconfig, device_t &device);
-
- // internal state
- uint8_t *m_rom;
- uint32_t m_rom_size;
- std::vector<uint8_t> m_ram;
-
- // bankswitch variables
- // we access ROM/RAM banks through these bank maps
- // default accesses are:
- // 0x0000-0x3fff = rom_bank_map[m_latch_bank] (generally defaults to m_latch_bank = 0)
- // 0x4000-0x7fff = rom_bank_map[m_latch_bank2] (generally defaults to m_latch_bank2 = 1)
- // 0xa000-0xbfff = ram_bank_map[m_ram_bank] (generally defaults to m_ram_bank = 0)
- // suitable writes to 0x0000-0x7fff can then modify m_latch_bank/m_latch_bank2
- uint8_t rom_bank_map[512]; // 16K chunks of ROM
- uint8_t ram_bank_map[256]; // 16K chunks of RAM
- uint8_t m_ram_bank;
- uint16_t m_latch_bank, m_latch_bank2;
-
- bool has_rumble, has_timer, has_battery;
-};
-
-
-// ======================> gb_cart_slot_device_base
-
-class gb_cart_slot_device_base : public device_t,
- public device_image_interface,
- public device_single_card_slot_interface<device_gb_cart_interface>
-{
-public:
- // construction/destruction
- virtual ~gb_cart_slot_device_base();
-
- // image-level overrides
- virtual image_init_result call_load() override;
- virtual void call_unload() override;
-
- virtual iodevice_t image_type() const noexcept override { return IO_CARTSLOT; }
- virtual bool is_readable() const noexcept override { return true; }
- virtual bool is_writeable() const noexcept override { return false; }
- virtual bool is_creatable() const noexcept override { return false; }
- virtual bool must_be_loaded() const noexcept override { return false; }
- virtual bool is_reset_on_load() const noexcept override { return true; }
- virtual const char *image_interface() const noexcept override { return "gameboy_cart"; }
- virtual const char *file_extensions() const noexcept override { return "bin,gb,gbc"; }
-
- // slot interface overrides
- virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
-
- int get_type() { return m_type; }
- static int get_cart_type(const uint8_t *ROM, uint32_t len);
- static bool get_mmm01_candidate(const uint8_t *ROM, uint32_t len);
- static bool is_mbc1col_game(const uint8_t *ROM, uint32_t len);
-
- void setup_ram(uint8_t banks);
- void internal_header_logging(uint8_t *ROM, uint32_t len);
- void save_ram() { if (m_cart && m_cart->get_ram_size()) m_cart->save_ram(); }
-
- // reading and writing
- virtual uint8_t read_rom(offs_t offset);
- virtual void write_bank(offs_t offset, uint8_t data);
- virtual uint8_t read_ram(offs_t offset);
- virtual void write_ram(offs_t offset, uint8_t data);
-
-
-protected:
- gb_cart_slot_device_base(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
-
- // device-level overrides
- virtual void device_start() override;
-
- // device_image_interface implementation
- virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
-
- int m_type;
- device_gb_cart_interface* m_cart;
-};
-
-// ======================> gb_cart_slot_device
-
-class gb_cart_slot_device : public gb_cart_slot_device_base
-{
-public:
- // construction/destruction
- template <typename T>
- gb_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
- : gb_cart_slot_device(mconfig, tag, owner, (uint32_t)0)
- {
- option_reset();
- opts(*this);
- set_default_option(dflt);
- set_fixed(false);
- }
- gb_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-};
-
-
-// ======================> megaduck_cart_slot_device
-
-class megaduck_cart_slot_device : public gb_cart_slot_device_base
-{
-public:
- // construction/destruction
- template <typename T>
- megaduck_cart_slot_device(machine_config const &mconfig, char const *tag, device_t *owner, T &&opts, char const *dflt)
- : megaduck_cart_slot_device(mconfig, tag, owner, (uint32_t)0)
- {
- option_reset();
- opts(*this);
- set_default_option(dflt);
- set_fixed(false);
- }
- megaduck_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
-
- // image-level overrides
- virtual image_init_result call_load() override;
- virtual const char *image_interface() const noexcept override { return "megaduck_cart"; }
- virtual const char *file_extensions() const noexcept override { return "bin"; }
-
- // slot interface overrides
- virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
-};
-
-
-
-
-// device type definition
-DECLARE_DEVICE_TYPE(GB_CART_SLOT, gb_cart_slot_device)
-DECLARE_DEVICE_TYPE(MEGADUCK_CART_SLOT, megaduck_cart_slot_device)
-
-#define GBSLOT_ROM_REGION_TAG ":cart:rom"
-
-#endif // MAME_BUS_GAMEBOY_GB_SLOT_H