summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/bus/nes/nes_slot.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/bus/nes/nes_slot.h')
-rw-r--r--src/devices/bus/nes/nes_slot.h134
1 files changed, 56 insertions, 78 deletions
diff --git a/src/devices/bus/nes/nes_slot.h b/src/devices/bus/nes/nes_slot.h
index 143f09b7005..ca2d884c226 100644
--- a/src/devices/bus/nes/nes_slot.h
+++ b/src/devices/bus/nes/nes_slot.h
@@ -5,7 +5,7 @@
#pragma once
-#include "softlist_dev.h"
+#include "imagedev/cartrom.h"
/***************************************************************************
@@ -26,7 +26,7 @@ enum
STD_SXROM, STD_SOROM, STD_SZROM,
STD_TXROM, STD_TXSROM, STD_TKROM, STD_TQROM,
STD_UXROM, STD_UN1ROM, UXROM_CC,
- HVC_FAMBASIC, NES_QJ, PAL_ZZ, STD_EVENT,
+ HVC_FAMBASIC, NES_QJ, PAL_ZZ, STD_EVENT, STD_EVENT2,
STD_DISKSYS,
STD_NROM368,//homebrew extension of NROM!
// Discrete components boards (by various manufacturer)
@@ -45,8 +45,8 @@ enum
// Caltron
CALTRON_6IN1, CALTRON_9IN1,
// Camerica
- CAMERICA_BF9093, CAMERICA_BF9096, CAMERICA_ALADDIN,
- CAMERICA_GOLDENFIVE, GG_NROM,
+ CAMERICA_BF9093, CAMERICA_BF9096, CAMERICA_BF9096_ALT,
+ CAMERICA_ALADDIN, CAMERICA_GOLDENFIVE, GG_NROM,
// Dreamtech
DREAMTECH_BOARD,
// Irem
@@ -64,7 +64,7 @@ enum
NAMCOT_163, NAMCOT_175, NAMCOT_340,
NAMCOT_3425, NAMCOT_34X3, NAMCOT_3446,
// NTDEC
- NTDEC_2746, NTDEC_ASDER, NTDEC_FIGHTINGHERO, NTDEC_N715021,
+ NTDEC_ASDER, NTDEC_FIGHTINGHERO, NTDEC_N715021,
// Rex Soft
REXSOFT_SL1632, REXSOFT_DBZ5,
// Sachen
@@ -72,7 +72,7 @@ enum
SACHEN_SA009, SACHEN_SA0036, SACHEN_SA0037,
SACHEN_SA72007, SACHEN_SA72008, SACHEN_SA9602B,
SACHEN_TCA01, SACHEN_TCU01, SACHEN_TCU02, SACHEN_3013, SACHEN_3014,
- SACHEN_74LS374, SACHEN_74LS374_ALT, SACHEN_SHERO,
+ SACHEN_74LS374, SACHEN_74LS374_ALT, SACHEN_SHERO, SACHEN_ZGDH,
// Sunsoft
SUNSOFT_1, SUNSOFT_2, SUNSOFT_3, SUNSOFT_4,
SUNSOFT_DCS, SUNSOFT_5, SUNSOFT_FME7,
@@ -80,39 +80,39 @@ enum
TAITO_TC0190FMC, TAITO_TC0190FMCP,
TAITO_X1_005, TAITO_X1_017,
// Tengen
- TENGEN_800008, TENGEN_800032, TENGEN_800037,
+ TENGEN_800032, TENGEN_800037,
// TXC
TXC_22110, TXC_22211, TXC_COMMANDOS, TXC_DUMARACING,
TXC_MJBLOCK, TXC_STRIKEW, TXC_TW,
// Multigame Carts
BMC_64IN1NR, BMC_190IN1, BMC_A65AS, BMC_A88S1, BMC_F15, BMC_F600, BMC_L6IN1,
- BMC_GN45, BMC_HIK8IN1, BMC_SFC12, BMC_JY208,
+ BMC_GN45, BMC_HIK8IN1, BMC_SFC12, BMC_JY208, BMC_JY302, BMC_KC885, BMC_KL06,
BMC_S24IN1SC03, BMC_T262, BMC_TELETUBBIES,
BMC_WS, BMC_SUPERBIG_7IN1, BMC_SUPERHIK_4IN1, BMC_BALLGAMES_11IN1,
- BMC_MARIOPARTY_7IN1, BMC_GOLD_7IN1, BMC_SUPER_700IN1, BMC_FAMILY_4646,
+ BMC_GOLD_7IN1, BMC_SUPER_700IN1, BMC_FAMILY_4646,
BMC_36IN1, BMC_21IN1, BMC_150IN1, BMC_35IN1, BMC_64IN1,
BMC_8IN1, BMC_15IN1, BMC_SUPERHIK_300IN1, BMC_SUPERGUN_20IN1,
BMC_72IN1, BMC_SUPER_42IN1, BMC_76IN1,
BMC_31IN1, BMC_22GAMES, BMC_20IN1, BMC_5IN1_1993,
BMC_70IN1, BMC_500IN1, BMC_800IN1, BMC_1200IN1,
- BMC_GKA, BMC_GKB, BMC_GKCXIN1, BMC_GN91B,
+ BMC_DS927, BMC_GKA, BMC_GKB, BMC_GKCXIN1, BMC_GN91B, BMC_GOLD260,
BMC_HP898F, BMC_VT5201, BMC_BENSHIENG,
- BMC_60311C, BMC_80013B, BMC_810544C, BMC_830425C,
- BMC_830506C, BMC_830928C, BMC_850437C, BMC_970630C,
+ BMC_CTC09, BMC_CTC_12IN1, BMC_60311C, BMC_80013B, BMC_810544C, BMC_82AB,
+ BMC_830425C, BMC_830506C, BMC_830928C, BMC_850437C, BMC_891227, BMC_970630C,
BMC_N32_4IN1, BMC_NC20MB, BMC_NT639, BMC_NTD_03, BMC_SRPG_5IN1,
- BMC_EL860947C, BMC_EL861121C, BMC_FK23C, BMC_FK23CA, BMC_JY820845C,
- BMC_PJOY84, BMC_TH22913, BMC_11160, BMC_G146,
+ BMC_EL860947C, BMC_EL861121C, BMC_FAM250, BMC_FK23C, BMC_FK23CA,
+ BMC_JY012005, BMC_JY820845C, BMC_PJOY84,
+ BMC_S009, BMC_TH22913, BMC_TH2348, BMC_11160, BMC_G146,
BMC_2751, BMC_8157, BMC_00202650,
BMC_411120C, BMC_810305C, BMC_820720C, BMC_830118C,
- BMC_830832C, BMC_YY841101C, BMC_YY841155C,
- BMC_GOLD150, BMC_GOLD260,
- BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160, BMC_CTC09,
- BMC_K1029, BMC_K3006, BMC_K3033, BMC_K3036, BMC_K3046, BMC_SA005A, BMC_TJ03,
- BMC_RESETSXROM, BMC_RESETTXROM, BMC_TECHLINE9IN1,
+ BMC_830832C, BMC_831128C, BMC_YY841101C, BMC_YY841155C,
+ BMC_12IN1, BMC_4IN1RESET, BMC_42IN1RESET, BMC_LITTLECOM160,
+ BMC_K1029, BMC_K3006, BMC_K3033, BMC_K3036, BMC_K3046, BMC_K3071, BMC_SA005A,
+ BMC_TF2740, BMC_TJ03, BMC_RESETSXROM, BMC_RESETTXROM, BMC_TECHLINE9IN1,
// Unlicensed
UNL_8237, UNL_8237A, UNL_CC21, UNL_AX40G, UNL_AX5705, UNL_KN42,
UNL_KOF97, UNL_N625092, UNL_SC127, UNL_SMB2J, UNL_T230, UNL_MMALEE,
- UNL_MK2, UNL_XIAOZY, UNL_KOF96, UNL_FS6,
+ UNL_JY830623C, UNL_XIAOZY, UNL_KOF96, UNL_FS6,
UNL_SF3, UNL_RACERMATE, UNL_EDU2K,
UNL_STUDYNGAME, UNL_603_5052, UNL_H2288, UNL_158B, UNL_2708,
UNL_MALISB, UNL_AC08, UNL_A9746, UNL_43272, UNL_TF1201, UNL_TH21311,
@@ -136,10 +136,10 @@ enum
OPENCORP_DAOU306, HES_BOARD, SVISION16_BOARD, RUMBLESTATION_BOARD, JYCOMPANY_A, JYCOMPANY_B, JYCOMPANY_C,
MAGICSERIES_MD, KASING_BOARD, FUTUREMEDIA_BOARD, FUKUTAKE_BOARD, SOMARI_SL12, SOMARI_HUANG2,
HENGG_SRICH, HENGG_XHZS, HENGG_SHJY3, SUBOR_TYPE0, SUBOR_TYPE1, SUBOR_TYPE2,
- CNE_DECATHLON, CNE_FSB, CNE_SHLZ, COCOMA_BOARD, CONY_BOARD, SMD133_BOARD, YOKO_BOARD,
+ CNE_DECATHLON, CNE_FSB, CNE_SHLZ, COCOMA_BOARD, CONY_BOARD, CONY1K_BOARD, SMD133_BOARD, YOKO_BOARD,
RCM_GS2015, RCM_GS2004, RCM_GS2013, RCM_TF9IN1, RCM_3DBLOCK,
WAIXING_TYPE_A, WAIXING_TYPE_A1, WAIXING_TYPE_B, WAIXING_TYPE_C, WAIXING_TYPE_D,
- WAIXING_TYPE_E, WAIXING_TYPE_F, WAIXING_TYPE_G, WAIXING_TYPE_H, WAIXING_TYPE_H1,
+ WAIXING_TYPE_E, WAIXING_TYPE_F, WAIXING_TYPE_F1, WAIXING_TYPE_G, WAIXING_TYPE_H, WAIXING_TYPE_H1,
WAIXING_TYPE_I, WAIXING_TYPE_J, WAIXING_FS304,
WAIXING_SGZLZ, WAIXING_SGZ, WAIXING_WXZS, WAIXING_SECURITY, WAIXING_SH2,
WAIXING_DQ8, WAIXING_FFV, WAIXING_WXZS2, SUPERGAME_LIONKING, SUPERGAME_BOOGERMAN,
@@ -151,7 +151,7 @@ enum
// Batlab Electronics
BATMAP_000, BATMAP_SRRX,
// Sealie
- UNL_CUFROM, UNL_UNROM512, UNL_DPCMCART,
+ SEALIE_8BITXMAS, SEALIE_CUFROM, SEALIE_DPCMCART, SEALIE_UNROM512,
// FFE boards, for mappers 6, 8, 17
FFE3_BOARD, FFE4_BOARD, FFE8_BOARD, TEST_BOARD,
// Unsupported (for place-holder boards, with no working emulation) & no-board (at init)
@@ -170,7 +170,6 @@ enum
#define CART_NTRAM 4
-#define PPU_MIRROR_NONE 0
#define PPU_MIRROR_VERT 1
#define PPU_MIRROR_HORZ 2
#define PPU_MIRROR_HIGH 3
@@ -183,7 +182,7 @@ enum
class device_nes_cart_interface : public device_interface
{
public:
- enum class mmc1_type : u8 { MMC1, MMC1A, MMC1B, MMC1C };
+ enum class mmc1_type : u8 { MMC1, MMC1A, MMC1B };
// construction/destruction
virtual ~device_nes_cart_interface();
@@ -206,9 +205,9 @@ public:
// hack until disk system is made modern!
virtual void disk_flip_side() { }
- void prg_alloc(size_t size, const char *tag);
- void vrom_alloc(size_t size, const char *tag);
- void misc_rom_alloc(size_t size, const char *tag);
+ void prg_alloc(size_t size);
+ void vrom_alloc(size_t size);
+ void misc_rom_alloc(size_t size);
void prgram_alloc(size_t size);
void vram_alloc(size_t size);
void battery_alloc(size_t size);
@@ -252,8 +251,8 @@ public:
uint32_t get_misc_rom_size() const { return m_misc_rom_size; }
virtual void ppu_latch(offs_t offset) {}
- virtual void hblank_irq(int scanline, int vblank, int blanked) {}
- virtual void scanline_irq(int scanline, int vblank, int blanked) {}
+ virtual void hblank_irq(int scanline, bool vblank, bool blanked) {}
+ virtual void scanline_irq(int scanline, bool vblank, bool blanked) {}
virtual void pcb_reset() {} // many pcb expect specific PRG/CHR banking at start
virtual void pcb_start(running_machine &machine, uint8_t *ciram_ptr, bool cart_mounted);
@@ -266,10 +265,7 @@ public:
protected:
device_nes_cart_interface(const machine_config &mconfig, device_t &device);
- DECLARE_WRITE_LINE_MEMBER(set_irq_line);
- [[deprecated("IRQs should be cleared explicitly")]] void hold_irq_line();
- void reset_cpu();
- [[deprecated("devices should stop poking into memory spaces where they don't belong")]] void poke(offs_t offset, uint8_t data);
+ void set_irq_line(int state);
// internal state
uint8_t *m_prg;
@@ -335,7 +331,6 @@ public:
// CHR
int m_chr_source; // global source for the 8 VROM banks
- inline void chr_sanity_check(int source);
//these were previously called chr_map. they are a quick banking structure,
//because some of these change multiple times per scanline!
@@ -347,24 +342,27 @@ public:
uint32_t m_vram_chunks;
// CHR helpers
- void chr8(int bank, int source);
- void chr4_x(int start, int bank, int source);
- void chr4_0(int bank, int source) { chr4_x(0, bank, source); }
- void chr4_4(int bank, int source) { chr4_x(4, bank, source); }
- void chr2_x(int start, int bank, int source);
- void chr2_0(int bank, int source) { chr2_x(0, bank, source); }
- void chr2_2(int bank, int source) { chr2_x(2, bank, source); }
- void chr2_4(int bank, int source) { chr2_x(4, bank, source); }
- void chr2_6(int bank, int source) { chr2_x(6, bank, source); }
- void chr1_x(int start, int bank, int source);
- void chr1_0(int bank, int source) { chr1_x(0, bank, source); }
- void chr1_1(int bank, int source) { chr1_x(1, bank, source); }
- void chr1_2(int bank, int source) { chr1_x(2, bank, source); }
- void chr1_3(int bank, int source) { chr1_x(3, bank, source); }
- void chr1_4(int bank, int source) { chr1_x(4, bank, source); }
- void chr1_5(int bank, int source) { chr1_x(5, bank, source); }
- void chr1_6(int bank, int source) { chr1_x(6, bank, source); }
- void chr1_7(int bank, int source) { chr1_x(7, bank, source); }
+private:
+ void bank_chr(int shift, int start, int bank, int source);
+public:
+ void chr8(int bank, int source) { bank_chr(3, 0, bank, source); }
+ void chr4_x(int start, int bank, int source) { bank_chr(2, start, bank, source); }
+ void chr4_0(int bank, int source) { bank_chr(2, 0, bank, source); }
+ void chr4_4(int bank, int source) { bank_chr(2, 4, bank, source); }
+ void chr2_x(int start, int bank, int source) { bank_chr(1, start, bank, source); }
+ void chr2_0(int bank, int source) { bank_chr(1, 0, bank, source); }
+ void chr2_2(int bank, int source) { bank_chr(1, 2, bank, source); }
+ void chr2_4(int bank, int source) { bank_chr(1, 4, bank, source); }
+ void chr2_6(int bank, int source) { bank_chr(1, 6, bank, source); }
+ void chr1_x(int start, int bank, int source) { bank_chr(0, start, bank, source); }
+ void chr1_0(int bank, int source) { bank_chr(0, 0, bank, source); }
+ void chr1_1(int bank, int source) { bank_chr(0, 1, bank, source); }
+ void chr1_2(int bank, int source) { bank_chr(0, 2, bank, source); }
+ void chr1_3(int bank, int source) { bank_chr(0, 3, bank, source); }
+ void chr1_4(int bank, int source) { bank_chr(0, 4, bank, source); }
+ void chr1_5(int bank, int source) { bank_chr(0, 5, bank, source); }
+ void chr1_6(int bank, int source) { bank_chr(0, 6, bank, source); }
+ void chr1_7(int bank, int source) { bank_chr(0, 7, bank, source); }
// NameTable & Mirroring
@@ -383,7 +381,7 @@ public:
// ======================> nes_cart_slot_device
class nes_cart_slot_device : public device_t,
- public device_image_interface,
+ public device_cartrom_image_interface,
public device_single_card_slot_interface<device_nes_cart_interface>
{
public:
@@ -400,21 +398,16 @@ public:
nes_cart_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
virtual ~nes_cart_slot_device();
- // image-level overrides
- virtual image_init_result call_load() override;
+ // device_image_interface implementation
+ virtual std::pair<std::error_condition, std::string> 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 m_must_be_loaded; }
virtual bool is_reset_on_load() const noexcept override { return true; }
virtual const char *image_interface() const noexcept override { return "nes_cart"; }
virtual const char *file_extensions() const noexcept override { return "nes,unf,unif"; }
virtual u32 unhashed_header_length() const noexcept override { return 16; }
- // slot interface overrides
+ // device_slot_interface implementation
virtual std::string get_default_card_software(get_default_card_software_hook &hook) const override;
// reading and writing
@@ -440,20 +433,14 @@ public:
int get_crc_hack() { return m_crc_hack; }
- void set_must_be_loaded(bool _must_be_loaded) { m_must_be_loaded = _must_be_loaded; }
-
//private:
device_nes_cart_interface* m_cart;
int m_pcb_id;
- bool m_must_be_loaded;
protected:
- // device-level overrides
+ // device_t implementation
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(); }
-
const char * get_default_card_ines(get_default_card_software_hook &hook, const uint8_t *ROM, uint32_t len) const;
static const char * get_default_card_unif(const uint8_t *ROM, uint32_t len);
static const char * nes_get_slot(int pcb_id);
@@ -467,13 +454,4 @@ protected:
// device type definition
DECLARE_DEVICE_TYPE(NES_CART_SLOT, nes_cart_slot_device)
-
-/***************************************************************************
- DEVICE CONFIGURATION MACROS
- ***************************************************************************/
-
-#define NESSLOT_PRGROM_REGION_TAG ":cart:prg_rom"
-#define NESSLOT_CHRROM_REGION_TAG ":cart:chr_rom"
-#define NESSLOT_MISC_ROM_REGION_TAG ":cart:misc_rom"
-
#endif // MAME_BUS_NES_NES_SLOT_H