diff options
author | 2013-02-05 20:54:03 +0000 | |
---|---|---|
committer | 2013-02-05 20:54:03 +0000 | |
commit | 400b9bcc299a67dfef945f82ca8de18b9a56f212 (patch) | |
tree | 0af1713fb7a5151d6dc8e90772f3d21fc27f1252 /src/mess/drivers | |
parent | 3e7883e3fcf57399319157242ee4031b6323ca3b (diff) |
Started moving DEVICE_IMAGE_ functions into driver_device classes. (nw)
Diffstat (limited to 'src/mess/drivers')
55 files changed, 1017 insertions, 305 deletions
diff --git a/src/mess/drivers/a2600.c b/src/mess/drivers/a2600.c index eaeab9303ef..5b05de24123 100644 --- a/src/mess/drivers/a2600.c +++ b/src/mess/drivers/a2600.c @@ -128,6 +128,8 @@ public: DECLARE_WRITE8_MEMBER(switch_B_w); DECLARE_WRITE_LINE_MEMBER(irq_callback); DECLARE_READ8_MEMBER(riot_input_port_8_r); + DECLARE_DEVICE_IMAGE_START_MEMBER( a2600_cart ); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a2600_cart ); protected: required_device<vcs_control_port_device> m_joy1; @@ -542,25 +544,22 @@ static int detect_super_chip(running_machine &machine) } -static DEVICE_START( a2600_cart ) +DEVICE_IMAGE_START_MEMBER( a2600_state, a2600_cart ) { - a2600_state *state = device->machine().driver_data<a2600_state>(); - state->m_banking_mode = 0xff; + m_banking_mode = 0xff; } -static DEVICE_IMAGE_LOAD( a2600_cart ) +DEVICE_IMAGE_LOAD_MEMBER( a2600_state, a2600_cart ) { - a2600_state *state = image.device().machine().driver_data<a2600_state>(); - running_machine &machine = image.device().machine(); - UINT8 *cart = CART; + UINT8 *cart = memregion("user1")->base(); if (image.software_entry() == NULL) - state->m_cart_size = image.length(); + m_cart_size = image.length(); else - state->m_cart_size = image.get_software_region_length("rom"); + m_cart_size = image.get_software_region_length("rom"); - switch (state->m_cart_size) + switch (m_cart_size) { case 0x00800: case 0x01000: @@ -579,15 +578,15 @@ static DEVICE_IMAGE_LOAD( a2600_cart ) return 1; /* unsupported image format */ } - state->m_current_bank = 0; + m_current_bank = 0; if (image.software_entry() == NULL) { - image.fread(cart, state->m_cart_size); + image.fread(cart, m_cart_size); } else { - memcpy(cart, image.get_software_region("rom"), state->m_cart_size); + memcpy(cart, image.get_software_region("rom"), m_cart_size); const char *mapper = software_part_get_feature((software_part*)image.part_entry(), "mapper"); @@ -616,21 +615,21 @@ static DEVICE_IMAGE_LOAD( a2600_cart ) { "8in1", mode8in1 }, }; - for (int i = 0; i < ARRAY_LENGTH(mapper_types) && state->m_banking_mode == 0xff; i++) + for (int i = 0; i < ARRAY_LENGTH(mapper_types) && m_banking_mode == 0xff; i++) { if (!mame_stricmp(mapper, mapper_types[i].mapper_name)) { - state->m_banking_mode = mapper_types[i].mapper_type; + m_banking_mode = mapper_types[i].mapper_type; } } } } - if (!(state->m_cart_size == 0x4000 && detect_modef6(image.device().machine()))) + if (!(m_cart_size == 0x4000 && detect_modef6(machine()))) { - while (state->m_cart_size > 0x00800) + while (m_cart_size > 0x00800) { - if (!memcmp(cart, &cart[state->m_cart_size/2],state->m_cart_size/2)) state->m_cart_size /= 2; + if (!memcmp(cart, &cart[m_cart_size/2],m_cart_size/2)) m_cart_size /= 2; else break; } } @@ -1922,8 +1921,8 @@ static MACHINE_CONFIG_FRAGMENT(a2600_cartslot) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin,a26") MCFG_CARTSLOT_MANDATORY - MCFG_CARTSLOT_START(a2600_cart) - MCFG_CARTSLOT_LOAD(a2600_cart) + MCFG_CARTSLOT_START(a2600_state,a2600_cart) + MCFG_CARTSLOT_LOAD(a2600_state,a2600_cart) MCFG_CARTSLOT_INTERFACE("a2600_cart") /* software lists */ diff --git a/src/mess/drivers/a7800.c b/src/mess/drivers/a7800.c index 572b5baaf92..152d7a137fa 100644 --- a/src/mess/drivers/a7800.c +++ b/src/mess/drivers/a7800.c @@ -302,8 +302,8 @@ static MACHINE_CONFIG_START( a7800_ntsc, a7800_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin,a78") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_START(a7800_cart) - MCFG_CARTSLOT_LOAD(a7800_cart) + MCFG_CARTSLOT_START(a7800_state,a7800_cart) + MCFG_CARTSLOT_LOAD(a7800_state,a7800_cart) MCFG_CARTSLOT_PARTIALHASH(a7800_partialhash) MCFG_CARTSLOT_INTERFACE("a7800_cart") diff --git a/src/mess/drivers/amstrad.c b/src/mess/drivers/amstrad.c index 30ebe67a287..9db052fc004 100644 --- a/src/mess/drivers/amstrad.c +++ b/src/mess/drivers/amstrad.c @@ -828,7 +828,7 @@ static MACHINE_CONFIG_FRAGMENT( cpcplus_cartslot ) MCFG_CARTSLOT_EXTENSION_LIST("cpr,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("gx4000_cart") - MCFG_CARTSLOT_LOAD(amstrad_plus_cartridge) + MCFG_CARTSLOT_LOAD(amstrad_state,amstrad_plus_cartridge) MCFG_SOFTWARE_LIST_ADD("cart_list","gx4000") MACHINE_CONFIG_END diff --git a/src/mess/drivers/arcadia.c b/src/mess/drivers/arcadia.c index 89d225cb6a6..c6aff0adef1 100644 --- a/src/mess/drivers/arcadia.c +++ b/src/mess/drivers/arcadia.c @@ -451,7 +451,7 @@ void arcadia_state::palette_init() colortable_entry_set_value(machine().colortable, i, arcadia_palette[i]); } -static DEVICE_IMAGE_LOAD( arcadia_cart ) +DEVICE_IMAGE_LOAD_MEMBER( arcadia_state, arcadia_cart ) { UINT8 *rom = image.device().machine().root_device().memregion("maincpu")->base(); int size; @@ -555,7 +555,7 @@ static MACHINE_CONFIG_START( arcadia, arcadia_state ) MCFG_CARTSLOT_EXTENSION_LIST("bin") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("arcadia_cart") - MCFG_CARTSLOT_LOAD(arcadia_cart) + MCFG_CARTSLOT_LOAD(arcadia_state,arcadia_cart) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","arcadia") diff --git a/src/mess/drivers/atari400.c b/src/mess/drivers/atari400.c index 18e818fef27..8f9c7876976 100644 --- a/src/mess/drivers/atari400.c +++ b/src/mess/drivers/atari400.c @@ -39,6 +39,8 @@ #include "video/gtia.h" #include "sound/dac.h" #include "machine/ram.h" +#include "hashfile.h" + /****************************************************************************** Atari 800 memory map (preliminary) @@ -229,11 +231,30 @@ E000-FFFF ROM BIOS ROM ******************************************************************************/ +#define LEFT_CARTSLOT_MOUNTED 1 +#define RIGHT_CARTSLOT_MOUNTED 2 + +/* PCB */ +enum +{ + A800_UNKNOWN = 0, + A800_4K, A800_8K, A800_12K, A800_16K, + A800_RIGHT_4K, A800_RIGHT_8K, + OSS_034M, OSS_M091, PHOENIX_8K, XEGS_32K, + BBSB, DIAMOND_64K, WILLIAMS_64K, EXPRESS_64, + SPARTADOS_X +}; + + class a400_state : public driver_device { public: a400_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) { } + : driver_device(mconfig, type, tag) + , m_a800_cart_loaded(0) + , m_atari(0) + , m_a800_cart_type(A800_UNKNOWN) + { } DECLARE_DRIVER_INIT(xegs); DECLARE_DRIVER_INIT(a800xl); @@ -242,6 +263,29 @@ public: DECLARE_WRITE8_MEMBER(a1200xl_pia_pb_w); DECLARE_WRITE8_MEMBER(a800xl_pia_pb_w); DECLARE_WRITE8_MEMBER(xegs_pia_pb_w); + + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a800_cart ); + DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( a800_cart ); + + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a800_cart_right ); + DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( a800_cart_right ); + + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a5200_cart ); + DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( a5200_cart ); + + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( xegs_cart ); + DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( xegs_cart ); + + void ms_atari_machine_start(int type, int has_cart); + void ms_atari800xl_machine_start(int type, int has_cart); + +protected: + int m_a800_cart_loaded; + int m_atari; + int m_a800_cart_type; + + void a800_setbank(int cart_mounted); + }; /************************************************************** @@ -902,6 +946,656 @@ static void xegs_mmu(running_machine &machine, UINT8 new_mmu) machine.root_device().membank("bank2")->set_base(base2); } + +// Currently, the drivers have fixed 40k RAM, however the function here is ready for different sizes too +void a400_state::a800_setbank(int cart_mounted) +{ + offs_t ram_top; + // take care of 0x0000-0x7fff: RAM or NOP + ram_top = MIN(machine().device<ram_device>(RAM_TAG)->size(), 0x8000) - 1; + machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000"); + machine().root_device().membank("0000")->set_base(machine().device<ram_device>(RAM_TAG)->pointer()); + + // take care of 0x8000-0x9fff: A800 -> either right slot or RAM or NOP, others -> RAM or NOP + // is there anything in the right slot? + if (cart_mounted & RIGHT_CARTSLOT_MOUNTED) + { + machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000"); + machine().root_device().membank("8000")->set_base(machine().root_device().memregion("rslot")->base()); + machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff); + } + else if (m_a800_cart_type != BBSB) + { + ram_top = MIN(machine().device<ram_device>(RAM_TAG)->size(), 0xa000) - 1; + if (ram_top > 0x8000) + { + machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000"); + machine().root_device().membank("8000")->set_base(machine().device<ram_device>(RAM_TAG)->pointer() + 0x8000); + } + } + + // take care of 0xa000-0xbfff: is there anything in the left slot? + if (cart_mounted & LEFT_CARTSLOT_MOUNTED) + { + // FIXME: this is an hack to keep XL working until we clean up its memory map as well! + if (m_atari == ATARI_800XL) + { + if (m_a800_cart_type == A800_16K) + { + machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000"); + machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base()); + machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff); + + memcpy(machine().root_device().memregion("maincpu")->base() + 0x10000, machine().root_device().memregion("lslot")->base() + 0x2000, 0x2000); + } + else if (m_a800_cart_type == A800_8K) + memcpy(machine().root_device().memregion("maincpu")->base() + 0x10000, machine().root_device().memregion("lslot")->base(), 0x2000); + else + fatalerror("This type of cart is not supported yet in this driver. Please use a400 or a800.\n"); + } + else if (m_a800_cart_type == A800_16K) + { + machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base()); + machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x2000); + machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff); + } + else if (m_a800_cart_type == BBSB) + { + // this requires separate banking in 0x8000 & 0x9000! + machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x8fff, "8000"); + machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x9000, 0x9fff, "9000"); + machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base() + 0x0000); + machine().root_device().membank("9000")->set_base(machine().root_device().memregion("lslot")->base() + 0x4000); + machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x8000); + machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); + } + else if (m_a800_cart_type == OSS_034M) + { + // this requires separate banking in 0xa000 & 0xb000! + machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000"); + machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000"); + machine().root_device().membank("b000")->set_base(machine().root_device().memregion("lslot")->base() + 0x3000); + machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); + } + else if (m_a800_cart_type == OSS_M091) + { + // this requires separate banking in 0xa000 & 0xb000! + machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000"); + machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000"); + machine().root_device().membank("b000")->set_base(machine().root_device().memregion("lslot")->base()); + machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); + } + else if (m_a800_cart_type == XEGS_32K) + { + machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base()); + machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x6000); + machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff); + } + else + { + machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base()); + machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff); + } + } +} + + +/* MESS specific parts that have to be started */ +void a400_state::ms_atari_machine_start(int type, int has_cart) +{ + /* set atari type (temporarily not used) */ + m_atari = type; + a800_setbank(m_a800_cart_loaded); +} + +void a400_state::ms_atari800xl_machine_start(int type, int has_cart) +{ + /* set atari type (temporarily not used) */ + m_atari = type; + a800_setbank(m_a800_cart_loaded); +} + + +struct a800_pcb +{ + const char *pcb_name; + int pcb_id; +}; + +// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it +// WARNING: most of these are still unsupported by the driver +static const a800_pcb pcb_list[] = +{ + {"standard 4k", A800_8K}, + {"standard 8k", A800_8K}, + {"standard 12k", A800_16K}, + {"standard 16k", A800_16K}, + {"right slot 4k", A800_RIGHT_4K}, + {"right slot 8k", A800_RIGHT_8K}, + + {"oss 034m", OSS_034M}, + {"oss m091", OSS_M091}, + {"phoenix 8k", PHOENIX_8K}, + {"xegs 32k", XEGS_32K}, + {"bbsb", BBSB}, + {"diamond 64k", DIAMOND_64K}, + {"williams 64k", WILLIAMS_64K}, + {"express 64", EXPRESS_64}, + {"spartados x", SPARTADOS_X}, + {"N/A", A800_UNKNOWN} +}; + +static int a800_get_pcb_id(const char *pcb) +{ + int i; + + for (i = 0; i < ARRAY_LENGTH(pcb_list); i++) + { + if (!mame_stricmp(pcb_list[i].pcb_name, pcb)) + return pcb_list[i].pcb_id; + } + + return A800_UNKNOWN; +} + + +static WRITE8_HANDLER( x32_bank_w ) +{ + // printf("written %x\n", data); + int bank = data & 0x03; + space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + bank * 0x2000); +} + + +static WRITE8_HANDLER( w64_bank_w ) +{ +// printf("write to %x\n", offset); + + if (offset < 8) + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + offset * 0x2000); + else + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base()); + // FIXME: writes to 0x8-0xf should disable the cart +} + + +// this covers Express 64, Diamond 64 and SpartaDOS (same bankswitch, but at different addresses) +static WRITE8_HANDLER( ex64_bank_w ) +{ +// printf("write to %x\n", offset); + + if (offset < 8) + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + (7 - offset) * 0x2000); + else + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base()); + // FIXME: writes to 0x8-0xf should disable the cart +} + + +static WRITE8_HANDLER( bbsb_bankl_w ) +{ +// printf("write to %x\n", 0x8000 + offset); + if (offset >= 0xff6 && offset <= 0xff9) + space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x0000 + (offset - 0xff6) * 0x1000); +} + + +static WRITE8_HANDLER( bbsb_bankh_w ) +{ +// printf("write to %x\n", 0x9000 + offset); + if (offset >= 0xff6 && offset <= 0xff9) + space.machine().root_device().membank("9000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000 + (offset - 0xff6) * 0x1000); +} + + +static WRITE8_HANDLER( oss_034m_w ) +{ + switch (offset & 0x0f) + { + case 0: + case 1: + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base()); + space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000); + break; + case 2: + case 6: + // docs says this should put 0xff in the 0xa000 bank -> let's point to the end of the cart + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000); + space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000); + break; + case 3: + case 7: + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000); + space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000); + break; + case 4: + case 5: + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000); + space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000); + break; + default: + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000); + space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000); + break; + } +} + + +static WRITE8_HANDLER( oss_m091_w ) +{ + switch (offset & 0x09) + { + case 0: + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000); + space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base()); + break; + case 1: + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000); + space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base()); + break; + case 8: + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000); + space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000); + break; + case 9: + space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000); + space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base()); + break; + } +} + + +static UINT8 xegs_banks = 0; +static UINT8 xegs_cart = 0; + +static WRITE8_HANDLER( xegs_bankswitch ) +{ + UINT8 *cart = space.machine().root_device().memregion("user1")->base(); + data &= xegs_banks - 1; + space.machine().root_device().membank("bank0")->set_base(cart + data * 0x2000); +} + +MACHINE_START( xegs ) +{ + address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM); + UINT8 *cart = space.machine().root_device().memregion("user1")->base(); + UINT8 *cpu = space.machine().root_device().memregion("maincpu")->base(); + + atari_machine_start(machine); + space.install_legacy_write_handler(0xd500, 0xd5ff, FUNC(xegs_bankswitch)); + + if (xegs_cart) + { + machine.root_device().membank("bank0")->set_base(cart); + machine.root_device().membank("bank1")->set_base(cart + (xegs_banks - 1) * 0x2000); + } + else + { + // point to built-in Missile Command (this does not work well, though... FIXME!!) + machine.root_device().membank("bank0")->set_base(cpu + 0x10000); + machine.root_device().membank("bank1")->set_base(cpu + 0x10000); + } +} + + +// currently this does nothing, but it will eventually install the memory handlers required by the mappers +static void a800_setup_mappers(running_machine &machine, int type) +{ + switch (type) + { + case A800_4K: + case A800_RIGHT_4K: + case A800_12K: + case A800_8K: + case A800_16K: + case A800_RIGHT_8K: + case PHOENIX_8K: // as normal 8k cart, but it can be disabled by writing to 0xd500-0xdfff + break; + case XEGS_32K: + machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(x32_bank_w)); + break; + case OSS_034M: + machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_034m_w)); + break; + case OSS_M091: + machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_m091_w)); + break; + case BBSB: + machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x8000, 0x8fff, FUNC(bbsb_bankl_w)); + machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x9000, 0x9fff, FUNC(bbsb_bankh_w)); + break; + case WILLIAMS_64K: + machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd50f, FUNC(w64_bank_w)); + break; + case DIAMOND_64K: + machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5d0, 0xd5df, FUNC(ex64_bank_w)); + break; + case EXPRESS_64: + machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd570, 0xd57f, FUNC(ex64_bank_w)); + break; + case SPARTADOS_X: + machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5e0, 0xd5ef, FUNC(ex64_bank_w)); + break; + default: + break; + } +} + + +static int a800_get_type(device_image_interface &image) +{ + UINT8 header[16]; + image.fread(header, 0x10); + int hdr_type, cart_type = A800_UNKNOWN; + + // add check of CART format + if (strncmp((const char *)header, "CART", 4)) + fatalerror("Invalid header detected!\n"); + + hdr_type = (header[4] << 24) + (header[5] << 16) + (header[6] << 8) + (header[7] << 0); + switch (hdr_type) + { + case 1: + cart_type = A800_8K; + break; + case 2: + cart_type = A800_16K; + break; + case 3: + cart_type = OSS_034M; + break; + case 8: + cart_type = WILLIAMS_64K; + break; + case 9: + cart_type = DIAMOND_64K; + break; + case 10: + cart_type = EXPRESS_64; + break; + case 11: + cart_type = SPARTADOS_X; + break; + case 12: + cart_type = XEGS_32K; + break; + case 15: + cart_type = OSS_M091; + break; + case 18: + cart_type = BBSB; + break; + case 21: + cart_type = A800_RIGHT_8K; + break; + case 39: + cart_type = PHOENIX_8K; + break; + case 4: + case 6: + case 7: + case 16: + case 19: + case 20: + fatalerror("Cart type \"%d\" means this is an Atari 5200 cart.\n", hdr_type); + break; + default: + mame_printf_info("Cart type \"%d\" is currently unsupported.\n", hdr_type); + break; + } + return cart_type; +} + + +static int a800_check_cart_type(device_image_interface &image) +{ + const char *pcb_name; + int type = A800_UNKNOWN; + + if (image.software_entry() == NULL) + { + UINT32 size = image.length(); + + // check if there is an header, if so extract cart_type from it, otherwise + // try to guess the cart_type from the file size (notice that after the + // a800_get_type call, we point at the start of the data) + if ((size % 0x1000) == 0x10) + type = a800_get_type(image); + else if (size == 0x4000) + type = A800_16K; + else if (size == 0x2000) + { + if (strcmp(image.device().tag(),":cart2") == 0) + type = A800_RIGHT_8K; + else + type = A800_8K; + } + } + else + { + if ((pcb_name = image.get_feature("cart_type")) != NULL) + type = a800_get_pcb_id(pcb_name); + + switch (type) + { + case A800_UNKNOWN: + case A800_4K: + case A800_RIGHT_4K: + case A800_12K: + case A800_8K: + case A800_16K: + case A800_RIGHT_8K: + break; + default: + mame_printf_info("Cart type \"%s\" currently unsupported.\n", pcb_name); + break; + } + } + + if ((strcmp(image.device().tag(),":cart2") == 0) && (type != A800_RIGHT_8K)) + fatalerror("You cannot load this image '%s' in the right slot\n", image.filename()); + + return type; +} + + +DEVICE_IMAGE_LOAD_MEMBER( a400_state, a800_cart ) +{ + UINT32 size, start = 0; + + m_a800_cart_loaded = m_a800_cart_loaded & ~LEFT_CARTSLOT_MOUNTED; + m_a800_cart_type = a800_check_cart_type(image); + + a800_setup_mappers(image.device().machine(), m_a800_cart_type); + + if (image.software_entry() == NULL) + { + size = image.length(); + // if there is an header, skip it + if ((size % 0x1000) == 0x10) + { + size -= 0x10; + start = 0x10; + } + image.fread(image.device().machine().root_device().memregion("lslot")->base(), size - start); + } + else + { + size = image.get_software_region_length("rom"); + memcpy(image.device().machine().root_device().memregion("lslot")->base(), image.get_software_region("rom"), size); + } + + m_a800_cart_loaded |= (size > 0x0000) ? 1 : 0; + + logerror("%s loaded left cartridge '%s' size %dK\n", image.device().machine().system().name, image.filename(), size/1024); + return IMAGE_INIT_PASS; +} + + +DEVICE_IMAGE_LOAD_MEMBER( a400_state, a800_cart_right ) +{ + UINT32 size, start = 0; + + m_a800_cart_loaded = m_a800_cart_loaded & ~RIGHT_CARTSLOT_MOUNTED; + m_a800_cart_type = a800_check_cart_type(image); + + a800_setup_mappers(image.device().machine(), m_a800_cart_type); + + if (image.software_entry() == NULL) + { + size = image.length(); + // if there is an header, skip it + if ((size % 0x1000) == 0x10) + { + size -= 0x10; + start = 0x10; + } + image.fread(image.device().machine().root_device().memregion("rslot")->base(), size - start); + } + else + { + size = image.get_software_region_length("rom"); + memcpy(image.device().machine().root_device().memregion("rslot")->base(), image.get_software_region("rom"), size); + } + + m_a800_cart_loaded |= (size > 0x0000) ? 2 : 0; + + logerror("%s loaded right cartridge '%s' size 8K\n", image.device().machine().system().name, image.filename()); + return IMAGE_INIT_PASS; +} + + +DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a800_cart ) +{ + m_a800_cart_loaded = m_a800_cart_loaded & ~LEFT_CARTSLOT_MOUNTED; + m_a800_cart_type = A800_UNKNOWN; + a800_setbank(m_a800_cart_loaded); +} + + +DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a800_cart_right ) +{ + m_a800_cart_loaded = m_a800_cart_loaded & ~RIGHT_CARTSLOT_MOUNTED; + m_a800_cart_type = A800_UNKNOWN; + a800_setbank(m_a800_cart_loaded); +} + + +DEVICE_IMAGE_LOAD_MEMBER( a400_state, a5200_cart ) +{ + UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base(); + UINT32 size; + bool A13_mirr = FALSE; + + if (image.software_entry() == NULL) + { + /* load an optional (dual) cartidge */ + size = image.fread(&mem[0x4000], 0x8000); + const char *info = hashfile_extrainfo(image); + if (info && !strcmp(info, "A13MIRRORING")) + A13_mirr = TRUE; + } + else + { + size = image.get_software_region_length("rom"); + memcpy(mem + 0x4000, image.get_software_region("rom"), size); + const char *pcb_name = image.get_feature("cart_type"); + if (pcb_name && !strcmp(pcb_name, "A13MIRRORING")) + A13_mirr = TRUE; + } + + if (size<0x8000) memmove(mem+0x4000+0x8000-size, mem+0x4000, size); + // mirroring of smaller cartridges + if (size <= 0x1000) memcpy(mem+0xa000, mem+0xb000, 0x1000); + if (size <= 0x2000) memcpy(mem+0x8000, mem+0xa000, 0x2000); + if (size <= 0x4000) + { + memcpy(&mem[0x4000], &mem[0x8000], 0x4000); + if (A13_mirr) + { + memcpy(&mem[0x8000], &mem[0xa000], 0x2000); + memcpy(&mem[0x6000], &mem[0x4000], 0x2000); + } + } + logerror("A5200 loaded cartridge '%s' size %dK\n", image.filename() , size/1024); + return IMAGE_INIT_PASS; +} + + +DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a5200_cart ) +{ + UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base(); + /* zap the cartridge memory (again) */ + memset(&mem[0x4000], 0x00, 0x8000); +} + + +DEVICE_IMAGE_LOAD_MEMBER( a400_state, xegs_cart ) +{ + UINT32 size; + UINT8 *ptr = image.device().machine().root_device().memregion("user1")->base(); + + if (image.software_entry() == NULL) + { + // skip the header + image.fseek(0x10, SEEK_SET); + size = image.length() - 0x10; + if (image.fread(ptr, size) != size) + return IMAGE_INIT_FAIL; + } + else + { + size = image.get_software_region_length("rom"); + memcpy(ptr, image.get_software_region("rom"), size); + } + + xegs_banks = size / 0x2000; + xegs_cart = 1; + + return IMAGE_INIT_PASS; +} + + +DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, xegs_cart ) +{ + xegs_cart = 0; + xegs_banks = 0; +} + + +MACHINE_START( a400 ) +{ + a400_state *state = machine.driver_data<a400_state>(); + atari_machine_start(machine); + state->ms_atari_machine_start(ATARI_400, TRUE); +} + + +MACHINE_START( a800 ) +{ + a400_state *state = machine.driver_data<a400_state>(); + atari_machine_start(machine); + state->ms_atari_machine_start(ATARI_800, TRUE); +} + + +MACHINE_START( a800xl ) +{ + a400_state *state = machine.driver_data<a400_state>(); + atari_machine_start(machine); + state->ms_atari800xl_machine_start(ATARI_800XL, TRUE); +} + + +MACHINE_START( a5200 ) +{ + a400_state *state = machine.driver_data<a400_state>(); + atari_machine_start(machine); + state->ms_atari_machine_start(ATARI_800XL, TRUE); +} + + + /************************************************************** * * PIA interface @@ -1066,8 +1760,8 @@ static MACHINE_CONFIG_FRAGMENT( a400_cartslot ) MCFG_CARTSLOT_ADD("cart1") MCFG_CARTSLOT_EXTENSION_LIST("rom,bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(a800_cart) - MCFG_CARTSLOT_UNLOAD(a800_cart) + MCFG_CARTSLOT_LOAD(a400_state,a800_cart) + MCFG_CARTSLOT_UNLOAD(a400_state,a800_cart) MCFG_CARTSLOT_INTERFACE("a800_cart") MACHINE_CONFIG_END @@ -1075,15 +1769,15 @@ static MACHINE_CONFIG_FRAGMENT( a800_cartslot ) MCFG_CARTSLOT_ADD("cart1") MCFG_CARTSLOT_EXTENSION_LIST("rom,bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(a800_cart) - MCFG_CARTSLOT_UNLOAD(a800_cart) + MCFG_CARTSLOT_LOAD(a400_state,a800_cart) + MCFG_CARTSLOT_UNLOAD(a400_state,a800_cart) MCFG_CARTSLOT_INTERFACE("a800_cart") MCFG_CARTSLOT_ADD("cart2") MCFG_CARTSLOT_EXTENSION_LIST("rom,bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(a800_cart_right) - MCFG_CARTSLOT_UNLOAD(a800_cart_right) + MCFG_CARTSLOT_LOAD(a400_state,a800_cart_right) + MCFG_CARTSLOT_UNLOAD(a400_state,a800_cart_right) MCFG_CARTSLOT_INTERFACE("a800_cart") MACHINE_CONFIG_END @@ -1279,8 +1973,8 @@ static MACHINE_CONFIG_DERIVED( xegs, a800xl ) MCFG_CARTSLOT_ADD("cart1") MCFG_CARTSLOT_EXTENSION_LIST("rom,bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(xegs_cart) - MCFG_CARTSLOT_UNLOAD(xegs_cart) + MCFG_CARTSLOT_LOAD(a400_state,xegs_cart) + MCFG_CARTSLOT_UNLOAD(a400_state,xegs_cart) MCFG_CARTSLOT_INTERFACE("xegs_cart") /* software lists */ @@ -1313,8 +2007,8 @@ static MACHINE_CONFIG_DERIVED( a5200, atari_common_nodac ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("rom,bin,a52") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(a5200_cart) - MCFG_CARTSLOT_UNLOAD(a5200_cart) + MCFG_CARTSLOT_LOAD(a400_state,a5200_cart) + MCFG_CARTSLOT_UNLOAD(a400_state,a5200_cart) MCFG_CARTSLOT_INTERFACE("a5200_cart") /* Software lists */ diff --git a/src/mess/drivers/atom.c b/src/mess/drivers/atom.c index 128b86d77d5..1a19d3de218 100644 --- a/src/mess/drivers/atom.c +++ b/src/mess/drivers/atom.c @@ -700,7 +700,7 @@ static const struct atom_cart_range atom_cart_table[] = { 0 } }; -static DEVICE_IMAGE_LOAD( atom_cart ) +DEVICE_IMAGE_LOAD_MEMBER( atom_state, atom_cart ) { UINT32 size; UINT8 *temp_copy; @@ -772,7 +772,7 @@ static DEVICE_IMAGE_LOAD( atom_cart ) MCFG_CARTSLOT_ADD(_tag) \ MCFG_CARTSLOT_EXTENSION_LIST("bin,rom") \ MCFG_CARTSLOT_INTERFACE("atom_cart") \ - MCFG_CARTSLOT_LOAD(atom_cart) + MCFG_CARTSLOT_LOAD(atom_state, atom_cart) static MACHINE_CONFIG_START( atom, atom_state ) diff --git a/src/mess/drivers/bbc.c b/src/mess/drivers/bbc.c index fb3b7ccf28b..4fbed58242c 100644 --- a/src/mess/drivers/bbc.c +++ b/src/mess/drivers/bbc.c @@ -820,22 +820,22 @@ static MACHINE_CONFIG_FRAGMENT( bbc_cartslot ) MCFG_CARTSLOT_ADD("cart1") MCFG_CARTSLOT_EXTENSION_LIST("rom") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(bbcb_cart) + MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart) MCFG_CARTSLOT_ADD("cart2") MCFG_CARTSLOT_EXTENSION_LIST("rom") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(bbcb_cart) + MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart) MCFG_CARTSLOT_ADD("cart3") MCFG_CARTSLOT_EXTENSION_LIST("rom") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(bbcb_cart) + MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart) MCFG_CARTSLOT_ADD("cart4") MCFG_CARTSLOT_EXTENSION_LIST("rom") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(bbcb_cart) + MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart) MACHINE_CONFIG_END static MACHINE_CONFIG_START( bbca, bbc_state ) diff --git a/src/mess/drivers/bbcbc.c b/src/mess/drivers/bbcbc.c index 9b826ff6a23..ee4a259ab62 100644 --- a/src/mess/drivers/bbcbc.c +++ b/src/mess/drivers/bbcbc.c @@ -29,6 +29,9 @@ public: virtual void machine_start(); virtual void machine_reset(); DECLARE_WRITE_LINE_MEMBER(tms_interrupt); + + DECLARE_DEVICE_IMAGE_START_MEMBER( bbcbc_cart ); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcbc_cart ); }; @@ -130,17 +133,17 @@ static const z80_daisy_config bbcbc_daisy_chain[] = }; -static DEVICE_START( bbcbc_cart ) +DEVICE_IMAGE_START_MEMBER( bbcbc_state, bbcbc_cart ) { - UINT8 *cart = device->machine().root_device().memregion("maincpu" )->base() + 0x4000; + UINT8 *cart = machine().root_device().memregion("maincpu" )->base() + 0x4000; memset( cart, 0xFF, 0x8000 ); } -static DEVICE_IMAGE_LOAD( bbcbc_cart ) +DEVICE_IMAGE_LOAD_MEMBER( bbcbc_state, bbcbc_cart ) { - UINT8 *cart = image.device().machine().root_device().memregion("maincpu" )->base() + 0x4000; + UINT8 *cart = machine().root_device().memregion("maincpu" )->base() + 0x4000; if ( image.software_entry() == NULL ) { @@ -187,8 +190,8 @@ static MACHINE_CONFIG_START( bbcbc, bbcbc_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("bbcbc_cart") - MCFG_CARTSLOT_START( bbcbc_cart ) - MCFG_CARTSLOT_LOAD( bbcbc_cart ) + MCFG_CARTSLOT_START( bbcbc_state, bbcbc_cart ) + MCFG_CARTSLOT_LOAD( bbcbc_state, bbcbc_cart ) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","bbcbc") diff --git a/src/mess/drivers/beta.c b/src/mess/drivers/beta.c index 43a53db492d..ae6af73139a 100644 --- a/src/mess/drivers/beta.c +++ b/src/mess/drivers/beta.c @@ -224,11 +224,9 @@ static const riot6532_interface beta_riot_interface = /* Quickload */ -static DEVICE_IMAGE_UNLOAD( beta_eprom ) +DEVICE_IMAGE_UNLOAD_MEMBER( beta_state, beta_eprom ) { - beta_state *state = image.device().machine().driver_data<beta_state>(); - - UINT8 *ptr = state->m_eprom->base(); + UINT8 *ptr = m_eprom->base(); image.fwrite(ptr, 0x800); } @@ -271,7 +269,7 @@ static MACHINE_CONFIG_START( beta, beta_state ) MCFG_CARTSLOT_ADD(EPROM_TAG) MCFG_CARTSLOT_EXTENSION_LIST("bin,rom") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_UNLOAD(beta_eprom) + MCFG_CARTSLOT_UNLOAD(beta_state,beta_eprom) /* internal ram */ MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/drivers/channelf.c b/src/mess/drivers/channelf.c index 580a0329fd9..679e19ad617 100644 --- a/src/mess/drivers/channelf.c +++ b/src/mess/drivers/channelf.c @@ -216,7 +216,7 @@ INPUT_PORTS_END -static DEVICE_IMAGE_LOAD( channelf_cart ) +DEVICE_IMAGE_LOAD_MEMBER( channelf_state, channelf_cart ) { UINT32 size; @@ -251,7 +251,7 @@ static MACHINE_CONFIG_FRAGMENT( channelf_cart ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin,chf") MCFG_CARTSLOT_INTERFACE("channelf_cart") - MCFG_CARTSLOT_LOAD(channelf_cart) + MCFG_CARTSLOT_LOAD(channelf_state,channelf_cart) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","channelf") diff --git a/src/mess/drivers/coleco.c b/src/mess/drivers/coleco.c index 5c6e60800cf..058e506aa81 100644 --- a/src/mess/drivers/coleco.c +++ b/src/mess/drivers/coleco.c @@ -286,7 +286,7 @@ void coleco_state::machine_reset() // return retval; //} -static DEVICE_IMAGE_LOAD( czz50_cart ) +DEVICE_IMAGE_LOAD_MEMBER( coleco_state,czz50_cart ) { UINT8 *ptr = image.device().machine().root_device().memregion(Z80_TAG)->base() + 0x8000; UINT32 size; @@ -357,7 +357,7 @@ static MACHINE_CONFIG_START( czz50, coleco_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("rom,col,bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(czz50_cart) + MCFG_CARTSLOT_LOAD(coleco_state,czz50_cart) MCFG_CARTSLOT_INTERFACE("coleco_cart") /* software lists */ diff --git a/src/mess/drivers/crvision.c b/src/mess/drivers/crvision.c index f15c3b5336a..ce429d536f2 100644 --- a/src/mess/drivers/crvision.c +++ b/src/mess/drivers/crvision.c @@ -829,7 +829,7 @@ void laser2001_state::machine_start() CARTRIDGE ***************************************************************************/ -static DEVICE_IMAGE_LOAD( crvision_cart ) +DEVICE_IMAGE_LOAD_MEMBER( crvision_state, crvision_cart ) { UINT32 size; UINT8 *temp_copy; @@ -971,7 +971,7 @@ static MACHINE_CONFIG_START( creativision, crvision_state ) MCFG_CARTSLOT_EXTENSION_LIST("bin,rom") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("crvision_cart") - MCFG_CARTSLOT_LOAD(crvision_cart) + MCFG_CARTSLOT_LOAD(crvision_state, crvision_cart) // internal ram MCFG_RAM_ADD(RAM_TAG) @@ -1036,7 +1036,7 @@ static MACHINE_CONFIG_START( lasr2001, laser2001_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin,rom") MCFG_CARTSLOT_INTERFACE("crvision_cart") - MCFG_CARTSLOT_LOAD(crvision_cart) + MCFG_CARTSLOT_LOAD(crvision_state, crvision_cart) // internal ram MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/drivers/gamecom.c b/src/mess/drivers/gamecom.c index 603093fbce8..b8d3ebb5242 100644 --- a/src/mess/drivers/gamecom.c +++ b/src/mess/drivers/gamecom.c @@ -127,12 +127,12 @@ static MACHINE_CONFIG_START( gamecom, gamecom_state ) MCFG_CARTSLOT_ADD("cart1") MCFG_CARTSLOT_EXTENSION_LIST("bin,tgc") MCFG_CARTSLOT_INTERFACE("gamecom_cart") - MCFG_CARTSLOT_LOAD(gamecom_cart1) + MCFG_CARTSLOT_LOAD(gamecom_state,gamecom_cart1) MCFG_SOFTWARE_LIST_ADD("cart_list","gamecom") MCFG_CARTSLOT_ADD("cart2") MCFG_CARTSLOT_EXTENSION_LIST("bin,tgc") MCFG_CARTSLOT_INTERFACE("gamecom_cart") - MCFG_CARTSLOT_LOAD(gamecom_cart2) + MCFG_CARTSLOT_LOAD(gamecom_state,gamecom_cart2) MACHINE_CONFIG_END ROM_START( gamecom ) diff --git a/src/mess/drivers/gamepock.c b/src/mess/drivers/gamepock.c index e3727282e6e..ba974968e17 100644 --- a/src/mess/drivers/gamepock.c +++ b/src/mess/drivers/gamepock.c @@ -45,16 +45,14 @@ INPUT_PORTS_END static const UPD7810_CONFIG gamepock_cpu_config = { TYPE_78C06, gamepock_io_callback }; -static DEVICE_START(gamepock_cart) +DEVICE_IMAGE_START_MEMBER(gamepock_state,gamepock_cart) { - gamepock_state *state = device->machine().driver_data<gamepock_state>(); - state->membank( "bank1" )->set_base( state->memregion("user1" )->base() ); + membank( "bank1" )->set_base( memregion("user1" )->base() ); } -static DEVICE_IMAGE_LOAD(gamepock_cart) { - gamepock_state *state = image.device().machine().driver_data<gamepock_state>(); - UINT8 *cart = state->memregion("user1" )->base(); +DEVICE_IMAGE_LOAD_MEMBER(gamepock_state,gamepock_cart) { + UINT8 *cart = memregion("user1" )->base(); if ( image.software_entry() == NULL ) { @@ -69,7 +67,7 @@ static DEVICE_IMAGE_LOAD(gamepock_cart) { cart = image.get_software_region( "rom" ); } - state->membank( "bank1" )->set_base( cart ); + membank( "bank1" )->set_base( cart ); return IMAGE_INIT_PASS; } @@ -102,8 +100,8 @@ static MACHINE_CONFIG_START( gamepock, gamepock_state ) MCFG_CARTSLOT_INTERFACE("gamepock_cart") MCFG_CARTSLOT_EXTENSION_LIST("bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_START(gamepock_cart) - MCFG_CARTSLOT_LOAD(gamepock_cart) + MCFG_CARTSLOT_START(gamepock_state,gamepock_cart) + MCFG_CARTSLOT_LOAD(gamepock_state,gamepock_cart) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","gamepock") diff --git a/src/mess/drivers/gb.c b/src/mess/drivers/gb.c index 3c72face52a..f2e8e781523 100644 --- a/src/mess/drivers/gb.c +++ b/src/mess/drivers/gb.c @@ -590,8 +590,8 @@ static MACHINE_CONFIG_DERIVED( gameboy, gb_common ) MCFG_CARTSLOT_EXTENSION_LIST("gb,gmb,cgb,gbc,sgb,bin") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("gameboy_cart") - MCFG_CARTSLOT_START(gb_cart) - MCFG_CARTSLOT_LOAD(gb_cart) + MCFG_CARTSLOT_START(gb_state,gb_cart) + MCFG_CARTSLOT_LOAD(gb_state,gb_cart) MCFG_SOFTWARE_LIST_ADD("cart_list","gameboy") MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("gbc_list","gbcolor") MACHINE_CONFIG_END @@ -648,8 +648,8 @@ static MACHINE_CONFIG_DERIVED( gbcolor, gb_common ) MCFG_CARTSLOT_EXTENSION_LIST("gb,gmb,cgb,gbc,sgb,bin") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("gameboy_cart") - MCFG_CARTSLOT_START(gb_cart) - MCFG_CARTSLOT_LOAD(gb_cart) + MCFG_CARTSLOT_START(gb_state,gb_cart) + MCFG_CARTSLOT_LOAD(gb_state,gb_cart) MCFG_SOFTWARE_LIST_ADD("cart_list","gbcolor") MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("gb_list","gameboy") MACHINE_CONFIG_END @@ -689,7 +689,7 @@ static MACHINE_CONFIG_START( megaduck, gb_state ) MCFG_CARTSLOT_EXTENSION_LIST("bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("megaduck_cart") - MCFG_CARTSLOT_LOAD(megaduck_cart) + MCFG_CARTSLOT_LOAD(gb_state,megaduck_cart) MCFG_SOFTWARE_LIST_ADD("cart_list","megaduck") MACHINE_CONFIG_END diff --git a/src/mess/drivers/gba.c b/src/mess/drivers/gba.c index 22e5a9b734d..c1c67041b41 100644 --- a/src/mess/drivers/gba.c +++ b/src/mess/drivers/gba.c @@ -2955,7 +2955,7 @@ static int gba_get_pcb_id(const char *pcb) return 0; } -static DEVICE_IMAGE_LOAD( gba_cart ) +DEVICE_IMAGE_LOAD_MEMBER( gba_state, gba_cart ) { UINT8 *ROM = image.device().machine().root_device().memregion("cartridge")->base(); UINT32 cart_size; @@ -3129,7 +3129,7 @@ static MACHINE_CONFIG_START( gbadv, gba_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("gba,bin") MCFG_CARTSLOT_INTERFACE("gba_cart") - MCFG_CARTSLOT_LOAD(gba_cart) + MCFG_CARTSLOT_LOAD(gba_state,gba_cart) MCFG_SOFTWARE_LIST_ADD("cart_list","gba") MACHINE_CONFIG_END diff --git a/src/mess/drivers/geniusiq.c b/src/mess/drivers/geniusiq.c index c116f8ebf1f..57a01065a01 100644 --- a/src/mess/drivers/geniusiq.c +++ b/src/mess/drivers/geniusiq.c @@ -239,6 +239,8 @@ public: DECLARE_READ16_MEMBER(unk0_r) { return 0; } DECLARE_READ16_MEMBER(unk_r) { return machine().rand(); } + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( iq128_cart ); + DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( iq128_cart ); private: UINT16 m_gfx_y; @@ -762,14 +764,14 @@ void geniusiq_state::cart_unload(device_image_interface &image) m_cart_state = IQ128_NO_CART; } -static DEVICE_IMAGE_LOAD(iq128_cart) +DEVICE_IMAGE_LOAD_MEMBER(geniusiq_state,iq128_cart) { - return image.device().machine().driver_data<geniusiq_state>()->cart_load(image); + return cart_load(image); } -static DEVICE_IMAGE_UNLOAD(iq128_cart) +DEVICE_IMAGE_UNLOAD_MEMBER(geniusiq_state,iq128_cart) { - image.device().machine().driver_data<geniusiq_state>()->cart_unload(image); + cart_unload(image); } static MACHINE_CONFIG_START( iq128, geniusiq_state ) @@ -794,8 +796,8 @@ static MACHINE_CONFIG_START( iq128, geniusiq_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(iq128_cart) - MCFG_CARTSLOT_UNLOAD(iq128_cart) + MCFG_CARTSLOT_LOAD(geniusiq_state,iq128_cart) + MCFG_CARTSLOT_UNLOAD(geniusiq_state,iq128_cart) MCFG_CARTSLOT_INTERFACE("iq128_cart") /* Software lists */ diff --git a/src/mess/drivers/intv.c b/src/mess/drivers/intv.c index 1b6af6fe5ad..49bf246385f 100644 --- a/src/mess/drivers/intv.c +++ b/src/mess/drivers/intv.c @@ -841,7 +841,7 @@ static MACHINE_CONFIG_START( intv, intv_state ) /* cartridge */ MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("int,rom,bin,itv") - MCFG_CARTSLOT_LOAD(intv_cart) + MCFG_CARTSLOT_LOAD(intv_state,intv_cart) MCFG_CARTSLOT_INTERFACE("intv_cart") /* software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","intv") @@ -890,13 +890,13 @@ static MACHINE_CONFIG_DERIVED( intvkbd, intv ) MCFG_CARTSLOT_ADD("cart1") MCFG_CARTSLOT_EXTENSION_LIST("int,rom,bin,itv") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(intvkbd_cart) + MCFG_CARTSLOT_LOAD(intv_state,intvkbd_cart) MCFG_CARTSLOT_INTERFACE("intv_cart") MCFG_CARTSLOT_ADD("cart2") MCFG_CARTSLOT_EXTENSION_LIST("int,rom,bin,itv") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(intvkbd_cart) + MCFG_CARTSLOT_LOAD(intv_state,intvkbd_cart) MCFG_CARTSLOT_INTERFACE("intv_cart") MACHINE_CONFIG_END diff --git a/src/mess/drivers/mekd2.c b/src/mess/drivers/mekd2.c index ea99fd32bdc..c953c0e13a2 100644 --- a/src/mess/drivers/mekd2.c +++ b/src/mess/drivers/mekd2.c @@ -66,6 +66,7 @@ public: UINT8 m_digit; UINT8 m_keydata; TIMER_CALLBACK_MEMBER(mekd2_trace); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mekd2_cart); }; @@ -295,7 +296,7 @@ static ACIA6850_INTERFACE( mekd2_acia_intf ) DEVCB_NULL /* out irq func */ }; -static DEVICE_IMAGE_LOAD( mekd2_cart ) +DEVICE_IMAGE_LOAD_MEMBER( mekd2_state,mekd2_cart ) { static const char magic[] = "MEK6800D2"; char buff[9]; @@ -344,7 +345,7 @@ static MACHINE_CONFIG_START( mekd2, mekd2_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("d2") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(mekd2_cart) + MCFG_CARTSLOT_LOAD(mekd2_state,mekd2_cart) /* Devices */ MCFG_PIA6821_ADD("pia_s", mekd2_s_mc6821_intf) diff --git a/src/mess/drivers/microvsn.c b/src/mess/drivers/microvsn.c index eb78ae36677..0d6153471a9 100644 --- a/src/mess/drivers/microvsn.c +++ b/src/mess/drivers/microvsn.c @@ -41,6 +41,7 @@ public: DECLARE_MACHINE_RESET(microvision); void screen_vblank(screen_device &screen, bool state); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( microvision_cart ); // i8021 interface DECLARE_WRITE8_MEMBER(i8021_p0_write); @@ -453,7 +454,7 @@ WRITE16_MEMBER( microvision_state::tms1100_write_r ) } -static DEVICE_IMAGE_LOAD(microvision_cart) +DEVICE_IMAGE_LOAD_MEMBER(microvision_state,microvision_cart) { microvision_state *state = image.device().machine().driver_data<microvision_state>(); UINT8 *rom1 = state->memregion("maincpu1")->base(); @@ -640,7 +641,7 @@ static MACHINE_CONFIG_START( microvision, microvision_state ) MCFG_CARTSLOT_EXTENSION_LIST("bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("microvision_cart") - MCFG_CARTSLOT_LOAD(microvision_cart) + MCFG_CARTSLOT_LOAD(microvision_state,microvision_cart) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","microvision") diff --git a/src/mess/drivers/msx.c b/src/mess/drivers/msx.c index c0f4eb794c3..06a2d81ed83 100644 --- a/src/mess/drivers/msx.c +++ b/src/mess/drivers/msx.c @@ -1053,15 +1053,15 @@ static MACHINE_CONFIG_FRAGMENT( msx_cartslot ) MCFG_CARTSLOT_EXTENSION_LIST("mx1,rom") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("msx_cart") - MCFG_CARTSLOT_LOAD(msx_cart) - MCFG_CARTSLOT_UNLOAD(msx_cart) + MCFG_CARTSLOT_LOAD(msx_state, msx_cart) + MCFG_CARTSLOT_UNLOAD(msx_state, msx_cart) MCFG_CARTSLOT_ADD("cart2") MCFG_CARTSLOT_EXTENSION_LIST("mx1,rom") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("msx_cart") - MCFG_CARTSLOT_LOAD(msx_cart) - MCFG_CARTSLOT_UNLOAD(msx_cart) + MCFG_CARTSLOT_LOAD(msx_state, msx_cart) + MCFG_CARTSLOT_UNLOAD(msx_state, msx_cart) MACHINE_CONFIG_END static MACHINE_CONFIG_START( msx, msx_state ) diff --git a/src/mess/drivers/n64.c b/src/mess/drivers/n64.c index 9ce76164ef4..9c91e659c66 100644 --- a/src/mess/drivers/n64.c +++ b/src/mess/drivers/n64.c @@ -24,6 +24,7 @@ public: DECLARE_READ32_MEMBER(dd_null_r); DECLARE_MACHINE_START(n64dd); INTERRUPT_GEN_MEMBER(n64_reset_poll); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(n64_cart); }; READ32_MEMBER(n64_mess_state::dd_null_r) @@ -171,7 +172,7 @@ static void mempak_format(UINT8* pak) memcpy(pak, pak_header, 272); } -static DEVICE_IMAGE_LOAD(n64_cart) +DEVICE_IMAGE_LOAD_MEMBER(n64_mess_state,n64_cart) { int i, length; n64_periphs *periphs = image.device().machine().device<n64_periphs>("rcp"); @@ -309,7 +310,7 @@ static MACHINE_CONFIG_START( n64, n64_mess_state ) MCFG_CARTSLOT_EXTENSION_LIST("v64,z64,rom,n64,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("n64_cart") - MCFG_CARTSLOT_LOAD(n64_cart) + MCFG_CARTSLOT_LOAD(n64_mess_state,n64_cart) /* software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","n64") diff --git a/src/mess/drivers/nc.c b/src/mess/drivers/nc.c index 1fbd0c5a7bf..974cd40bc3f 100644 --- a/src/mess/drivers/nc.c +++ b/src/mess/drivers/nc.c @@ -1609,9 +1609,9 @@ static MACHINE_CONFIG_START( nc100, nc_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("crd,card") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_START(nc_pcmcia_card) - MCFG_CARTSLOT_LOAD(nc_pcmcia_card) - MCFG_CARTSLOT_UNLOAD(nc_pcmcia_card) + MCFG_CARTSLOT_START(nc_state,nc_pcmcia_card) + MCFG_CARTSLOT_LOAD(nc_state,nc_pcmcia_card) + MCFG_CARTSLOT_UNLOAD(nc_state,nc_pcmcia_card) /* internal ram */ MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/drivers/nes.c b/src/mess/drivers/nes.c index 108ecdb073e..45763301336 100644 --- a/src/mess/drivers/nes.c +++ b/src/mess/drivers/nes.c @@ -474,7 +474,7 @@ static MACHINE_CONFIG_START( nes, nes_state ) MCFG_CARTSLOT_EXTENSION_LIST("nes,unf") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("nes_cart") - MCFG_CARTSLOT_LOAD(nes_cart) + MCFG_CARTSLOT_LOAD(nes_state,nes_cart) MCFG_CARTSLOT_PARTIALHASH(nes_partialhash) MCFG_SOFTWARE_LIST_ADD("cart_list","nes") MACHINE_CONFIG_END @@ -526,7 +526,7 @@ static MACHINE_CONFIG_DERIVED( famicom, nes ) MCFG_CARTSLOT_MODIFY("cart") MCFG_CARTSLOT_EXTENSION_LIST("nes,unf") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(nes_cart) + MCFG_CARTSLOT_LOAD(nes_state,nes_cart) MCFG_CARTSLOT_PARTIALHASH(nes_partialhash) MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, nes_floppy_interface) diff --git a/src/mess/drivers/ng_aes.c b/src/mess/drivers/ng_aes.c index 3b7800354db..20c9ec74ed1 100644 --- a/src/mess/drivers/ng_aes.c +++ b/src/mess/drivers/ng_aes.c @@ -1528,7 +1528,7 @@ static MACHINE_CONFIG_DERIVED_CLASS( aes, neogeo_base, ng_aes_state ) MCFG_MACHINE_RESET_OVERRIDE(ng_aes_state, neogeo) MCFG_CARTSLOT_ADD("cart") - MCFG_CARTSLOT_LOAD(neo_cartridge) + MCFG_CARTSLOT_LOAD(ng_aes_state,neo_cartridge) MCFG_CARTSLOT_INTERFACE("neo_cart") MCFG_CARTSLOT_MANDATORY diff --git a/src/mess/drivers/ngp.c b/src/mess/drivers/ngp.c index 31b7e863ef5..be04ddf9643 100644 --- a/src/mess/drivers/ngp.c +++ b/src/mess/drivers/ngp.c @@ -173,6 +173,10 @@ public: UINT32 screen_update_ngp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_INPUT_CHANGED_MEMBER(power_callback); TIMER_CALLBACK_MEMBER(ngp_seconds_callback); + + DECLARE_DEVICE_IMAGE_START_MEMBER( ngp_cart ); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( ngp_cart); + DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( ngp_cart ); }; @@ -630,24 +634,22 @@ UINT32 ngp_state::screen_update_ngp(screen_device &screen, bitmap_ind16 &bitmap, } -static DEVICE_START( ngp_cart ) +DEVICE_IMAGE_START_MEMBER( ngp_state, ngp_cart ) { - ngp_state *state = device->machine().driver_data<ngp_state>(); - UINT8 *cart = state->memregion("cart")->base(); + UINT8 *cart = memregion("cart")->base(); - state->m_flash_chip[0].present = 0; - state->m_flash_chip[0].state = F_READ; - state->m_flash_chip[0].data = cart; + m_flash_chip[0].present = 0; + m_flash_chip[0].state = F_READ; + m_flash_chip[0].data = cart; - state->m_flash_chip[1].present = 0; - state->m_flash_chip[1].state = F_READ; - state->m_flash_chip[1].data = cart + 0x200000; + m_flash_chip[1].present = 0; + m_flash_chip[1].state = F_READ; + m_flash_chip[1].data = cart + 0x200000; } -static DEVICE_IMAGE_LOAD( ngp_cart ) +DEVICE_IMAGE_LOAD_MEMBER( ngp_state, ngp_cart ) { - ngp_state *state = image.device().machine().driver_data<ngp_state>(); UINT32 filesize; if (image.software_entry() == NULL) @@ -660,7 +662,7 @@ static DEVICE_IMAGE_LOAD( ngp_cart ) return IMAGE_INIT_FAIL; } - if (image.fread( image.device().machine().root_device().memregion("cart")->base(), filesize) != filesize) + if (image.fread( machine().root_device().memregion("cart")->base(), filesize) != filesize) { image.seterror(IMAGE_ERROR_UNSPECIFIED, "Error loading file"); return IMAGE_INIT_FAIL; @@ -669,83 +671,81 @@ static DEVICE_IMAGE_LOAD( ngp_cart ) else { filesize = image.get_software_region_length("rom"); - memcpy(image.device().machine().root_device().memregion("cart")->base(), image.get_software_region("rom"), filesize); + memcpy(machine().root_device().memregion("cart")->base(), image.get_software_region("rom"), filesize); } //printf("%2x%2x - %x - %x\n", (unsigned int) image.device().machine().root_device().memregion("cart")->u8(0x20), (unsigned int) image.device().machine().root_device().memregion("cart")->u8(0x21), // (unsigned int) image.device().machine().root_device().memregion("cart")->u8(0x22), (unsigned int) image.device().machine().root_device().memregion("cart")->u8(0x23)); - state->m_flash_chip[0].manufacturer_id = 0x98; + m_flash_chip[0].manufacturer_id = 0x98; switch( filesize ) { case 0x8000: case 0x80000: - state->m_flash_chip[0].device_id = 0xab; + m_flash_chip[0].device_id = 0xab; break; case 0x100000: - state->m_flash_chip[0].device_id = 0x2c; + m_flash_chip[0].device_id = 0x2c; break; case 0x200000: - state->m_flash_chip[0].device_id = 0x2f; + m_flash_chip[0].device_id = 0x2f; break; case 0x400000: - state->m_flash_chip[0].device_id = 0x2f; - state->m_flash_chip[1].manufacturer_id = 0x98; - state->m_flash_chip[1].device_id = 0x2f; - state->m_flash_chip[1].present = 0; - state->m_flash_chip[1].state = F_READ; + m_flash_chip[0].device_id = 0x2f; + m_flash_chip[1].manufacturer_id = 0x98; + m_flash_chip[1].device_id = 0x2f; + m_flash_chip[1].present = 0; + m_flash_chip[1].state = F_READ; break; } - state->m_flash_chip[0].org_data[0] = state->m_flash_chip[0].data[0]; - state->m_flash_chip[0].org_data[1] = state->m_flash_chip[0].data[1]; - state->m_flash_chip[0].org_data[2] = state->m_flash_chip[0].data[2]; - state->m_flash_chip[0].org_data[3] = state->m_flash_chip[0].data[3]; - state->m_flash_chip[0].org_data[4] = state->m_flash_chip[0].data[0x7c000]; - state->m_flash_chip[0].org_data[5] = state->m_flash_chip[0].data[0x7c001]; - state->m_flash_chip[0].org_data[6] = state->m_flash_chip[0].data[0x7c002]; - state->m_flash_chip[0].org_data[7] = state->m_flash_chip[0].data[0x7c003]; - state->m_flash_chip[0].org_data[8] = state->m_flash_chip[0].data[0xfc000]; - state->m_flash_chip[0].org_data[9] = state->m_flash_chip[0].data[0xfc001]; - state->m_flash_chip[0].org_data[10] = state->m_flash_chip[0].data[0xfc002]; - state->m_flash_chip[0].org_data[11] = state->m_flash_chip[0].data[0xfc003]; - state->m_flash_chip[0].org_data[12] = state->m_flash_chip[0].data[0x1fc000]; - state->m_flash_chip[0].org_data[13] = state->m_flash_chip[0].data[0x1fc001]; - state->m_flash_chip[0].org_data[14] = state->m_flash_chip[0].data[0x1fc002]; - state->m_flash_chip[0].org_data[15] = state->m_flash_chip[0].data[0x1fc003]; - - state->m_flash_chip[1].org_data[0] = state->m_flash_chip[1].data[0]; - state->m_flash_chip[1].org_data[1] = state->m_flash_chip[1].data[1]; - state->m_flash_chip[1].org_data[2] = state->m_flash_chip[1].data[2]; - state->m_flash_chip[1].org_data[3] = state->m_flash_chip[1].data[3]; - state->m_flash_chip[1].org_data[4] = state->m_flash_chip[1].data[0x7c000]; - state->m_flash_chip[1].org_data[5] = state->m_flash_chip[1].data[0x7c001]; - state->m_flash_chip[1].org_data[6] = state->m_flash_chip[1].data[0x7c002]; - state->m_flash_chip[1].org_data[7] = state->m_flash_chip[1].data[0x7c003]; - state->m_flash_chip[1].org_data[8] = state->m_flash_chip[1].data[0xfc000]; - state->m_flash_chip[1].org_data[9] = state->m_flash_chip[1].data[0xfc001]; - state->m_flash_chip[1].org_data[10] = state->m_flash_chip[1].data[0xfc002]; - state->m_flash_chip[1].org_data[11] = state->m_flash_chip[1].data[0xfc003]; - state->m_flash_chip[1].org_data[12] = state->m_flash_chip[1].data[0x1fc000]; - state->m_flash_chip[1].org_data[13] = state->m_flash_chip[1].data[0x1fc001]; - state->m_flash_chip[1].org_data[14] = state->m_flash_chip[1].data[0x1fc002]; - state->m_flash_chip[1].org_data[15] = state->m_flash_chip[1].data[0x1fc003]; - - state->m_flash_chip[0].present = 1; - state->m_flash_chip[0].state = F_READ; + m_flash_chip[0].org_data[0] = m_flash_chip[0].data[0]; + m_flash_chip[0].org_data[1] = m_flash_chip[0].data[1]; + m_flash_chip[0].org_data[2] = m_flash_chip[0].data[2]; + m_flash_chip[0].org_data[3] = m_flash_chip[0].data[3]; + m_flash_chip[0].org_data[4] = m_flash_chip[0].data[0x7c000]; + m_flash_chip[0].org_data[5] = m_flash_chip[0].data[0x7c001]; + m_flash_chip[0].org_data[6] = m_flash_chip[0].data[0x7c002]; + m_flash_chip[0].org_data[7] = m_flash_chip[0].data[0x7c003]; + m_flash_chip[0].org_data[8] = m_flash_chip[0].data[0xfc000]; + m_flash_chip[0].org_data[9] = m_flash_chip[0].data[0xfc001]; + m_flash_chip[0].org_data[10] = m_flash_chip[0].data[0xfc002]; + m_flash_chip[0].org_data[11] = m_flash_chip[0].data[0xfc003]; + m_flash_chip[0].org_data[12] = m_flash_chip[0].data[0x1fc000]; + m_flash_chip[0].org_data[13] = m_flash_chip[0].data[0x1fc001]; + m_flash_chip[0].org_data[14] = m_flash_chip[0].data[0x1fc002]; + m_flash_chip[0].org_data[15] = m_flash_chip[0].data[0x1fc003]; + + m_flash_chip[1].org_data[0] = m_flash_chip[1].data[0]; + m_flash_chip[1].org_data[1] = m_flash_chip[1].data[1]; + m_flash_chip[1].org_data[2] = m_flash_chip[1].data[2]; + m_flash_chip[1].org_data[3] = m_flash_chip[1].data[3]; + m_flash_chip[1].org_data[4] = m_flash_chip[1].data[0x7c000]; + m_flash_chip[1].org_data[5] = m_flash_chip[1].data[0x7c001]; + m_flash_chip[1].org_data[6] = m_flash_chip[1].data[0x7c002]; + m_flash_chip[1].org_data[7] = m_flash_chip[1].data[0x7c003]; + m_flash_chip[1].org_data[8] = m_flash_chip[1].data[0xfc000]; + m_flash_chip[1].org_data[9] = m_flash_chip[1].data[0xfc001]; + m_flash_chip[1].org_data[10] = m_flash_chip[1].data[0xfc002]; + m_flash_chip[1].org_data[11] = m_flash_chip[1].data[0xfc003]; + m_flash_chip[1].org_data[12] = m_flash_chip[1].data[0x1fc000]; + m_flash_chip[1].org_data[13] = m_flash_chip[1].data[0x1fc001]; + m_flash_chip[1].org_data[14] = m_flash_chip[1].data[0x1fc002]; + m_flash_chip[1].org_data[15] = m_flash_chip[1].data[0x1fc003]; + + m_flash_chip[0].present = 1; + m_flash_chip[0].state = F_READ; return IMAGE_INIT_PASS; } -static DEVICE_IMAGE_UNLOAD( ngp_cart ) +DEVICE_IMAGE_UNLOAD_MEMBER( ngp_state, ngp_cart ) { - ngp_state *state = image.device().machine().driver_data<ngp_state>(); - - state->m_flash_chip[0].present = 0; - state->m_flash_chip[0].state = F_READ; + m_flash_chip[0].present = 0; + m_flash_chip[0].state = F_READ; - state->m_flash_chip[1].present = 0; - state->m_flash_chip[1].state = F_READ; + m_flash_chip[1].present = 0; + m_flash_chip[1].state = F_READ; } @@ -805,10 +805,10 @@ static MACHINE_CONFIG_DERIVED( ngp, ngp_common ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin,ngp,npc,ngc") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_START(ngp_cart) - MCFG_CARTSLOT_LOAD(ngp_cart) + MCFG_CARTSLOT_START(ngp_state, ngp_cart) + MCFG_CARTSLOT_LOAD(ngp_state, ngp_cart) MCFG_CARTSLOT_INTERFACE("ngp_cart") - MCFG_CARTSLOT_UNLOAD(ngp_cart) + MCFG_CARTSLOT_UNLOAD(ngp_state, ngp_cart) /* software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","ngp") @@ -826,10 +826,10 @@ static MACHINE_CONFIG_DERIVED( ngpc, ngp_common ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin,ngp,npc,ngc") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_START(ngp_cart) - MCFG_CARTSLOT_LOAD(ngp_cart) + MCFG_CARTSLOT_START(ngp_state,ngp_cart) + MCFG_CARTSLOT_LOAD(ngp_state,ngp_cart) MCFG_CARTSLOT_INTERFACE("ngp_cart") - MCFG_CARTSLOT_UNLOAD(ngp_cart) + MCFG_CARTSLOT_UNLOAD(ngp_state,ngp_cart) /* software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","ngpc") diff --git a/src/mess/drivers/pc.c b/src/mess/drivers/pc.c index 047ffc576c5..948740b2099 100644 --- a/src/mess/drivers/pc.c +++ b/src/mess/drivers/pc.c @@ -1313,12 +1313,12 @@ static MACHINE_CONFIG_START( ibmpcjr, pc_state ) MCFG_CARTSLOT_INTERFACE("ibmpcjr_cart") MCFG_CARTSLOT_EXTENSION_LIST("jrc") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(pcjr_cartridge) + MCFG_CARTSLOT_LOAD(pc_state,pcjr_cartridge) MCFG_CARTSLOT_ADD("cart2") MCFG_CARTSLOT_INTERFACE("ibmpcjr_cart") MCFG_CARTSLOT_EXTENSION_LIST("jrc") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(pcjr_cartridge) + MCFG_CARTSLOT_LOAD(pc_state,pcjr_cartridge) /* internal ram */ MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/drivers/pc6001.c b/src/mess/drivers/pc6001.c index 81eaeb58a02..37c3ff5e088 100644 --- a/src/mess/drivers/pc6001.c +++ b/src/mess/drivers/pc6001.c @@ -244,6 +244,7 @@ public: DECLARE_WRITE8_MEMBER(pc6001_8255_portb_w); DECLARE_WRITE8_MEMBER(pc6001_8255_portc_w); DECLARE_READ8_MEMBER(pc6001_8255_portc_r); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pc6001_cass); }; @@ -2261,7 +2262,7 @@ static const cassette_interface pc6001_cassette_interface = NULL }; -static DEVICE_IMAGE_LOAD( pc6001_cass ) +DEVICE_IMAGE_LOAD_MEMBER( pc6001_state,pc6001_cass ) { pc6001_state *state = image.device().machine().driver_data<pc6001_state>(); UINT8 *cas = state->memregion("cas")->base(); @@ -2347,7 +2348,7 @@ static MACHINE_CONFIG_START( pc6001, pc6001_state ) MCFG_CARTSLOT_EXTENSION_LIST("cas,p6") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("pc6001_cass") - MCFG_CARTSLOT_LOAD(pc6001_cass) + MCFG_CARTSLOT_LOAD(pc6001_state,pc6001_cass) MCFG_SPEAKER_STANDARD_MONO("mono") MCFG_SOUND_ADD("ay8910", AY8910, PC6001_MAIN_CLOCK/4) diff --git a/src/mess/drivers/pce.c b/src/mess/drivers/pce.c index 40ab8c324d8..62866fc9c4a 100644 --- a/src/mess/drivers/pce.c +++ b/src/mess/drivers/pce.c @@ -270,7 +270,7 @@ static MACHINE_CONFIG_FRAGMENT( pce_cartslot ) MCFG_CARTSLOT_EXTENSION_LIST("pce,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("pce_cart") - MCFG_CARTSLOT_LOAD(pce_cart) + MCFG_CARTSLOT_LOAD(pce_state,pce_cart) MCFG_CARTSLOT_PARTIALHASH(pce_partialhash) MCFG_SOFTWARE_LIST_ADD("cart_list","pce") MACHINE_CONFIG_END @@ -280,7 +280,7 @@ static MACHINE_CONFIG_FRAGMENT( tg16_cartslot ) MCFG_CARTSLOT_EXTENSION_LIST("pce,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("tg16_cart") - MCFG_CARTSLOT_LOAD(pce_cart) + MCFG_CARTSLOT_LOAD(pce_state,pce_cart) MCFG_CARTSLOT_PARTIALHASH(pce_partialhash) MCFG_SOFTWARE_LIST_ADD("cart_list","tg16") MACHINE_CONFIG_END @@ -290,7 +290,7 @@ static MACHINE_CONFIG_FRAGMENT( sgx_cartslot ) MCFG_CARTSLOT_EXTENSION_LIST("pce,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("pce_cart") - MCFG_CARTSLOT_LOAD(pce_cart) + MCFG_CARTSLOT_LOAD(pce_state,pce_cart) MCFG_CARTSLOT_PARTIALHASH(pce_partialhash) MCFG_SOFTWARE_LIST_ADD("cart_list","sgx") MACHINE_CONFIG_END diff --git a/src/mess/drivers/pegasus.c b/src/mess/drivers/pegasus.c index a3f61e720d9..26695efb4ac 100644 --- a/src/mess/drivers/pegasus.c +++ b/src/mess/drivers/pegasus.c @@ -82,6 +82,11 @@ public: UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); DECLARE_DRIVER_INIT(pegasus); TIMER_DEVICE_CALLBACK_MEMBER(pegasus_firq); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_1); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_2); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_3); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_4); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_5); }; TIMER_DEVICE_CALLBACK_MEMBER(pegasus_state::pegasus_firq) @@ -433,7 +438,7 @@ static void pegasus_decrypt_rom( running_machine &machine, UINT16 addr ) } } -static DEVICE_IMAGE_LOAD( pegasus_cart_1 ) +DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_1 ) { image.fread(image.device().machine().root_device().memregion("maincpu")->base() + 0x0000, 0x1000); pegasus_decrypt_rom( image.device().machine(), 0x0000 ); @@ -441,7 +446,7 @@ static DEVICE_IMAGE_LOAD( pegasus_cart_1 ) return IMAGE_INIT_PASS; } -static DEVICE_IMAGE_LOAD( pegasus_cart_2 ) +DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_2 ) { image.fread(image.device().machine().root_device().memregion("maincpu")->base() + 0x1000, 0x1000); pegasus_decrypt_rom( image.device().machine(), 0x1000 ); @@ -449,7 +454,7 @@ static DEVICE_IMAGE_LOAD( pegasus_cart_2 ) return IMAGE_INIT_PASS; } -static DEVICE_IMAGE_LOAD( pegasus_cart_3 ) +DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_3 ) { image.fread(image.device().machine().root_device().memregion("maincpu")->base() + 0x2000, 0x1000); pegasus_decrypt_rom( image.device().machine(), 0x2000 ); @@ -457,7 +462,7 @@ static DEVICE_IMAGE_LOAD( pegasus_cart_3 ) return IMAGE_INIT_PASS; } -static DEVICE_IMAGE_LOAD( pegasus_cart_4 ) +DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_4 ) { image.fread(image.device().machine().root_device().memregion("maincpu")->base() + 0xc000, 0x1000); pegasus_decrypt_rom( image.device().machine(), 0xc000 ); @@ -465,7 +470,7 @@ static DEVICE_IMAGE_LOAD( pegasus_cart_4 ) return IMAGE_INIT_PASS; } -static DEVICE_IMAGE_LOAD( pegasus_cart_5 ) +DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_5 ) { image.fread( image.device().machine().root_device().memregion("maincpu")->base() + 0xd000, 0x1000); pegasus_decrypt_rom( image.device().machine(), 0xd000 ); @@ -518,19 +523,19 @@ static MACHINE_CONFIG_START( pegasus, pegasus_state ) MCFG_PIA6821_ADD( "pia_u", pegasus_pia_u_intf ) MCFG_CARTSLOT_ADD("cart1") MCFG_CARTSLOT_EXTENSION_LIST("bin") - MCFG_CARTSLOT_LOAD(pegasus_cart_1) + MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_1) MCFG_CARTSLOT_ADD("cart2") MCFG_CARTSLOT_EXTENSION_LIST("bin") - MCFG_CARTSLOT_LOAD(pegasus_cart_2) + MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_2) MCFG_CARTSLOT_ADD("cart3") MCFG_CARTSLOT_EXTENSION_LIST("bin") - MCFG_CARTSLOT_LOAD(pegasus_cart_3) + MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_3) MCFG_CARTSLOT_ADD("cart4") MCFG_CARTSLOT_EXTENSION_LIST("bin") - MCFG_CARTSLOT_LOAD(pegasus_cart_4) + MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_4) MCFG_CARTSLOT_ADD("cart5") MCFG_CARTSLOT_EXTENSION_LIST("bin") - MCFG_CARTSLOT_LOAD(pegasus_cart_5) + MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_5) MCFG_CASSETTE_ADD( CASSETTE_TAG, pegasus_cassette_interface ) MACHINE_CONFIG_END diff --git a/src/mess/drivers/pockstat.c b/src/mess/drivers/pockstat.c index ab9fa346a99..962e043726b 100644 --- a/src/mess/drivers/pockstat.c +++ b/src/mess/drivers/pockstat.c @@ -126,6 +126,7 @@ public: DECLARE_INPUT_CHANGED_MEMBER(input_update); TIMER_CALLBACK_MEMBER(timer_tick); TIMER_CALLBACK_MEMBER(rtc_tick); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( pockstat_flash ); }; @@ -956,7 +957,7 @@ UINT32 pockstat_state::screen_update_pockstat(screen_device &screen, bitmap_rgb3 return 0; } -static DEVICE_IMAGE_LOAD( pockstat_flash ) +DEVICE_IMAGE_LOAD_MEMBER( pockstat_state, pockstat_flash ) { int i, length; UINT8 *cart = image.device().machine().root_device().memregion("flash")->base(); @@ -1007,7 +1008,7 @@ static MACHINE_CONFIG_START( pockstat, pockstat_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("gme") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(pockstat_flash) + MCFG_CARTSLOT_LOAD(pockstat_state, pockstat_flash) MACHINE_CONFIG_END /* ROM definition */ diff --git a/src/mess/drivers/pokemini.c b/src/mess/drivers/pokemini.c index 619200c6321..b85e079384c 100644 --- a/src/mess/drivers/pokemini.c +++ b/src/mess/drivers/pokemini.c @@ -95,7 +95,7 @@ static MACHINE_CONFIG_START( pokemini, pokemini_state ) MCFG_CARTSLOT_EXTENSION_LIST("min,bin") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("pokemini_cart") - MCFG_CARTSLOT_LOAD(pokemini_cart) + MCFG_CARTSLOT_LOAD(pokemini_state,pokemini_cart) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","pokemini") diff --git a/src/mess/drivers/portfoli.c b/src/mess/drivers/portfoli.c index dcd54286874..6d59e6ae520 100644 --- a/src/mess/drivers/portfoli.c +++ b/src/mess/drivers/portfoli.c @@ -741,7 +741,7 @@ static const centronics_interface centronics_intf = // DEVICE_IMAGE_LOAD( portfolio_cart ) //------------------------------------------------- -static DEVICE_IMAGE_LOAD( portfolio_cart ) +DEVICE_IMAGE_LOAD_MEMBER( portfolio_state, portfolio_cart ) { return IMAGE_INIT_FAIL; } @@ -862,7 +862,7 @@ static MACHINE_CONFIG_START( portfolio, portfolio_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin") MCFG_CARTSLOT_INTERFACE("portfolio_cart") - MCFG_CARTSLOT_LOAD(portfolio_cart) + MCFG_CARTSLOT_LOAD(portfolio_state,portfolio_cart) /* memory card */ /* MCFG_MEMCARD_ADD("memcard_a") diff --git a/src/mess/drivers/pv1000.c b/src/mess/drivers/pv1000.c index 57c8b13b112..1f483a90130 100644 --- a/src/mess/drivers/pv1000.c +++ b/src/mess/drivers/pv1000.c @@ -106,6 +106,7 @@ public: UINT32 screen_update_pv1000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(d65010_irq_on_cb); TIMER_CALLBACK_MEMBER(d65010_irq_off_cb); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( pv1000_cart ); }; @@ -237,7 +238,7 @@ void pv1000_state::palette_init() } -static DEVICE_IMAGE_LOAD( pv1000_cart ) +DEVICE_IMAGE_LOAD_MEMBER( pv1000_state, pv1000_cart ) { UINT8 *cart = image.device().machine().root_device().memregion("cart")->base(); UINT32 size; @@ -439,7 +440,7 @@ static MACHINE_CONFIG_START( pv1000, pv1000_state ) MCFG_CARTSLOT_EXTENSION_LIST("bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("pv1000_cart") - MCFG_CARTSLOT_LOAD(pv1000_cart) + MCFG_CARTSLOT_LOAD(pv1000_state,pv1000_cart) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","pv1000") diff --git a/src/mess/drivers/pv2000.c b/src/mess/drivers/pv2000.c index 5bec0ab5409..faefde0710e 100644 --- a/src/mess/drivers/pv2000.c +++ b/src/mess/drivers/pv2000.c @@ -62,6 +62,7 @@ public: UINT8 m_cass_conf; virtual void machine_start(); virtual void machine_reset(); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( pv2000_cart ); }; @@ -377,7 +378,7 @@ void pv2000_state::machine_reset() memset(&memregion("maincpu")->base()[0x7000], 0xff, 0x1000); // initialize RAM } -static DEVICE_IMAGE_LOAD( pv2000_cart ) +DEVICE_IMAGE_LOAD_MEMBER( pv2000_state, pv2000_cart ) { UINT8 *cart = image.device().machine().root_device().memregion("maincpu")->base() + 0xC000; UINT32 size; @@ -446,7 +447,7 @@ static MACHINE_CONFIG_START( pv2000, pv2000_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("rom,col,bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(pv2000_cart) + MCFG_CARTSLOT_LOAD(pv2000_state,pv2000_cart) MCFG_CARTSLOT_INTERFACE("pv2000_cart") /* Software lists */ diff --git a/src/mess/drivers/rx78.c b/src/mess/drivers/rx78.c index 1a0365fdee0..84234c795cd 100644 --- a/src/mess/drivers/rx78.c +++ b/src/mess/drivers/rx78.c @@ -78,6 +78,7 @@ public: DECLARE_DRIVER_INIT(rx78); required_device<cpu_device> m_maincpu; required_device<cassette_image_device> m_cass; + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( rx78_cart ); }; @@ -401,7 +402,7 @@ void rx78_state::machine_reset() { } -static DEVICE_IMAGE_LOAD( rx78_cart ) +DEVICE_IMAGE_LOAD_MEMBER( rx78_state, rx78_cart ) { UINT8 *cart = image.device().machine().root_device().memregion("cart_img")->base(); UINT32 size; @@ -480,7 +481,7 @@ static MACHINE_CONFIG_START( rx78, rx78_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("rom") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(rx78_cart) + MCFG_CARTSLOT_LOAD(rx78_state,rx78_cart) MCFG_CARTSLOT_INTERFACE("rx78_cart") MCFG_RAM_ADD(RAM_TAG) diff --git a/src/mess/drivers/scv.c b/src/mess/drivers/scv.c index ff38abcf7d5..e2d6d4dae5a 100644 --- a/src/mess/drivers/scv.c +++ b/src/mess/drivers/scv.c @@ -57,6 +57,8 @@ public: virtual void palette_init(); UINT32 screen_update_scv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect); TIMER_CALLBACK_MEMBER(scv_vb_callback); + DECLARE_DEVICE_IMAGE_START_MEMBER( scv_cart ); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( scv_cart ); protected: required_device<cpu_device> m_maincpu; @@ -358,27 +360,23 @@ WRITE8_MEMBER( scv_state::scv_portc_w ) } -static DEVICE_START( scv_cart ) +DEVICE_IMAGE_START_MEMBER( scv_state, scv_cart ) { - scv_state *state = device->machine().driver_data<scv_state>(); - - state->m_cart_rom = state->memregion( "cart" )->base(); - state->m_cart_rom_size = 0; - state->m_cart_ram = NULL; - state->m_cart_ram_size = 0; + m_cart_rom = memregion( "cart" )->base(); + m_cart_rom_size = 0; + m_cart_ram = NULL; + m_cart_ram_size = 0; } -static DEVICE_IMAGE_LOAD( scv_cart ) +DEVICE_IMAGE_LOAD_MEMBER( scv_state, scv_cart ) { - scv_state *state = image.device().machine().driver_data<scv_state>(); - if ( image.software_entry() == NULL ) { UINT8 *cart = image.device().machine().root_device().memregion( "cart" )->base(); int size = image.length(); - if ( size > state->memregion( "cart" )->bytes() ) + if ( size > memregion( "cart" )->bytes() ) { image.seterror( IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size" ); return IMAGE_INIT_FAIL; @@ -390,17 +388,17 @@ static DEVICE_IMAGE_LOAD( scv_cart ) return IMAGE_INIT_FAIL; } - state->m_cart_rom = cart; - state->m_cart_rom_size = size; - state->m_cart_ram = NULL; - state->m_cart_ram_size = 0; + m_cart_rom = cart; + m_cart_rom_size = size; + m_cart_ram = NULL; + m_cart_ram_size = 0; } else { - state->m_cart_rom = image.get_software_region( "rom" ); - state->m_cart_rom_size = image.get_software_region_length( "rom" ); - state->m_cart_ram = image.get_software_region( "ram" ); - state->m_cart_ram_size = image.get_software_region_length( "ram" ); + m_cart_rom = image.get_software_region( "rom" ); + m_cart_rom_size = image.get_software_region_length( "rom" ); + m_cart_ram = image.get_software_region( "ram" ); + m_cart_ram_size = image.get_software_region_length( "ram" ); } return IMAGE_INIT_PASS; @@ -861,8 +859,8 @@ static MACHINE_CONFIG_START( scv, scv_state ) MCFG_CARTSLOT_EXTENSION_LIST( "bin" ) MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("scv_cart") - MCFG_CARTSLOT_START( scv_cart ) - MCFG_CARTSLOT_LOAD( scv_cart ) + MCFG_CARTSLOT_START( scv_state, scv_cart ) + MCFG_CARTSLOT_LOAD( scv_state, scv_cart ) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","scv") diff --git a/src/mess/drivers/sg1000.c b/src/mess/drivers/sg1000.c index b080e573aa7..cbe4cd9c231 100644 --- a/src/mess/drivers/sg1000.c +++ b/src/mess/drivers/sg1000.c @@ -674,7 +674,7 @@ void sg1000_state::install_cartridge(UINT8 *ptr, int size) DEVICE_IMAGE_LOAD( sg1000_cart ) -------------------------------------------------*/ -static DEVICE_IMAGE_LOAD( sg1000_cart ) +DEVICE_IMAGE_LOAD_MEMBER( sg1000_state,sg1000_cart ) { running_machine &machine = image.device().machine(); sg1000_state *state = machine.driver_data<sg1000_state>(); @@ -788,7 +788,7 @@ static DEVICE_IMAGE_LOAD( sg1000_cart ) DEVICE_IMAGE_LOAD( omv_cart ) -------------------------------------------------*/ -static DEVICE_IMAGE_LOAD( omv_cart ) +DEVICE_IMAGE_LOAD_MEMBER( sg1000_state,omv_cart ) { running_machine &machine = image.device().machine(); sg1000_state *state = machine.driver_data<sg1000_state>(); @@ -845,7 +845,7 @@ void sc3000_state::install_cartridge(UINT8 *ptr, int size) DEVICE_IMAGE_LOAD( sc3000_cart ) -------------------------------------------------*/ -static DEVICE_IMAGE_LOAD( sc3000_cart ) +DEVICE_IMAGE_LOAD_MEMBER( sc3000_state,sc3000_cart ) { running_machine &machine = image.device().machine(); sc3000_state *state = machine.driver_data<sc3000_state>(); @@ -1097,7 +1097,7 @@ static MACHINE_CONFIG_START( sg1000, sg1000_state ) MCFG_CARTSLOT_EXTENSION_LIST("sg,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("sg1000_cart") - MCFG_CARTSLOT_LOAD(sg1000_cart) + MCFG_CARTSLOT_LOAD(sg1000_state,sg1000_cart) /* software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","sg1000") @@ -1119,7 +1119,7 @@ static MACHINE_CONFIG_DERIVED( omv, sg1000 ) MCFG_CARTSLOT_MODIFY("cart") MCFG_CARTSLOT_EXTENSION_LIST("sg,bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(omv_cart) + MCFG_CARTSLOT_LOAD(sg1000_state,omv_cart) MCFG_RAM_MODIFY(RAM_TAG) MCFG_RAM_DEFAULT_SIZE("2K") @@ -1156,7 +1156,7 @@ static MACHINE_CONFIG_START( sc3000, sc3000_state ) MCFG_CARTSLOT_EXTENSION_LIST("sg,sc,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("sg1000_cart") - MCFG_CARTSLOT_LOAD(sc3000_cart) + MCFG_CARTSLOT_LOAD(sc3000_state,sc3000_cart) /* software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","sg1000") diff --git a/src/mess/drivers/sms.c b/src/mess/drivers/sms.c index 54d44ec6f23..857113d07f5 100644 --- a/src/mess/drivers/sms.c +++ b/src/mess/drivers/sms.c @@ -402,8 +402,8 @@ static MACHINE_CONFIG_FRAGMENT( sms_cartslot ) MCFG_CARTSLOT_EXTENSION_LIST("sms,bin") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("sms_cart") - MCFG_CARTSLOT_START(sms_cart) - MCFG_CARTSLOT_LOAD(sms_cart) + MCFG_CARTSLOT_START(sms_state,sms_cart) + MCFG_CARTSLOT_LOAD(sms_state,sms_cart) MCFG_SOFTWARE_LIST_ADD("cart_list","sms") MACHINE_CONFIG_END @@ -413,8 +413,8 @@ static MACHINE_CONFIG_FRAGMENT( gg_cartslot ) MCFG_CARTSLOT_EXTENSION_LIST("gg,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("gamegear_cart") - MCFG_CARTSLOT_START(sms_cart) - MCFG_CARTSLOT_LOAD(sms_cart) + MCFG_CARTSLOT_START(sms_state,sms_cart) + MCFG_CARTSLOT_LOAD(sms_state,sms_cart) MCFG_SOFTWARE_LIST_ADD("cart_list","gamegear") MACHINE_CONFIG_END @@ -495,8 +495,8 @@ MACHINE_CONFIG_END MCFG_CARTSLOT_EXTENSION_LIST("sms,bin") \ MCFG_CARTSLOT_NOT_MANDATORY \ MCFG_CARTSLOT_INTERFACE("sms_cart") \ - MCFG_CARTSLOT_START(sms_cart) \ - MCFG_CARTSLOT_LOAD(sms_cart) + MCFG_CARTSLOT_START(sms_state,sms_cart) \ + MCFG_CARTSLOT_LOAD(sms_state,sms_cart) static MACHINE_CONFIG_DERIVED( sms_sdisp, sms2_ntsc ) @@ -512,8 +512,8 @@ static MACHINE_CONFIG_DERIVED( sms_sdisp, sms2_ntsc ) MCFG_CARTSLOT_EXTENSION_LIST("sms,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("sms_cart") - MCFG_CARTSLOT_START(sms_cart) - MCFG_CARTSLOT_LOAD(sms_cart) + MCFG_CARTSLOT_START(sms_state,sms_cart) + MCFG_CARTSLOT_LOAD(sms_state,sms_cart) MCFG_SMSSDISP_CARTSLOT_ADD("cart2") MCFG_SMSSDISP_CARTSLOT_ADD("cart3") @@ -617,8 +617,8 @@ static MACHINE_CONFIG_DERIVED( sg1000m3, sms_fm ) MCFG_CARTSLOT_MODIFY("cart1") MCFG_CARTSLOT_EXTENSION_LIST("sms,bin,sg") MCFG_CARTSLOT_MANDATORY - MCFG_CARTSLOT_START(sms_cart) - MCFG_CARTSLOT_LOAD(sms_cart) + MCFG_CARTSLOT_START(sms_state,sms_cart) + MCFG_CARTSLOT_LOAD(sms_state,sms_cart) MACHINE_CONFIG_END static MACHINE_CONFIG_DERIVED( sms2_fm, sms2_ntsc ) diff --git a/src/mess/drivers/spectrum.c b/src/mess/drivers/spectrum.c index 9d60f3051f8..ddf9b0f67ac 100644 --- a/src/mess/drivers/spectrum.c +++ b/src/mess/drivers/spectrum.c @@ -663,7 +663,7 @@ static const cassette_interface spectrum_cassette_interface = NULL }; -static DEVICE_IMAGE_LOAD( spectrum_cart ) +DEVICE_IMAGE_LOAD_MEMBER( spectrum_state,spectrum_cart ) { UINT32 filesize; @@ -732,7 +732,7 @@ MACHINE_CONFIG_START( spectrum_common, spectrum_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("rom") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(spectrum_cart) + MCFG_CARTSLOT_LOAD(spectrum_state,spectrum_cart) MCFG_CARTSLOT_INTERFACE("spectrum_cart") MCFG_SOFTWARE_LIST_ADD("cart_list","spectrum") MACHINE_CONFIG_END diff --git a/src/mess/drivers/ssem.c b/src/mess/drivers/ssem.c index 06391efcee2..e692de4be3c 100644 --- a/src/mess/drivers/ssem.c +++ b/src/mess/drivers/ssem.c @@ -24,6 +24,7 @@ public: virtual void machine_reset(); UINT32 screen_update_ssem(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); DECLARE_INPUT_CHANGED_MEMBER(panel_check); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ssem_store); }; @@ -514,7 +515,7 @@ static void strlower(char *buf) * Image loading * \****************************************************/ -static DEVICE_IMAGE_LOAD(ssem_store) +DEVICE_IMAGE_LOAD_MEMBER(ssem_state,ssem_store) { ssem_state *state = image.device().machine().driver_data<ssem_state>(); const char* image_name = image.filename(); @@ -650,7 +651,7 @@ static MACHINE_CONFIG_START( ssem, ssem_state ) /* cartridge */ MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("snp,asm") - MCFG_CARTSLOT_LOAD(ssem_store) + MCFG_CARTSLOT_LOAD(ssem_state,ssem_store) MACHINE_CONFIG_END ROM_START( ssem ) diff --git a/src/mess/drivers/studio2.c b/src/mess/drivers/studio2.c index c1fd598eb8a..ef580c104d5 100644 --- a/src/mess/drivers/studio2.c +++ b/src/mess/drivers/studio2.c @@ -433,7 +433,7 @@ void mpt02_state::machine_reset() m_cti->reset(); } -DEVICE_IMAGE_LOAD( studio2_cart_load ) +DEVICE_IMAGE_LOAD_MEMBER( studio2_state, studio2_cart_load ) { if (image.software_entry() == NULL) return device_load_st2_cartslot_load(image); @@ -454,7 +454,7 @@ static MACHINE_CONFIG_FRAGMENT( studio2_cartslot ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("st2,bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(studio2_cart_load) + MCFG_CARTSLOT_LOAD(studio2_state,studio2_cart_load) MCFG_CARTSLOT_INTERFACE("studio2_cart") /* software lists */ diff --git a/src/mess/drivers/supracan.c b/src/mess/drivers/supracan.c index 74ccce6c1f8..2a982abd3bf 100644 --- a/src/mess/drivers/supracan.c +++ b/src/mess/drivers/supracan.c @@ -207,6 +207,7 @@ public: TIMER_CALLBACK_MEMBER(supracan_line_on_callback); TIMER_CALLBACK_MEMBER(supracan_line_off_callback); TIMER_CALLBACK_MEMBER(supracan_video_callback); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(supracan_cart); }; @@ -1726,7 +1727,7 @@ WRITE16_MEMBER( supracan_state::supracan_video_w ) } -static DEVICE_IMAGE_LOAD( supracan_cart ) +DEVICE_IMAGE_LOAD_MEMBER( supracan_state, supracan_cart ) { UINT8 *cart = image.device().machine().root_device().memregion("cart")->base(); UINT32 size = 0; @@ -1906,7 +1907,7 @@ static MACHINE_CONFIG_START( supracan, supracan_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("bin") MCFG_CARTSLOT_INTERFACE("supracan_cart") - MCFG_CARTSLOT_LOAD(supracan_cart) + MCFG_CARTSLOT_LOAD(supracan_state,supracan_cart) MCFG_SOFTWARE_LIST_ADD("cart_list","supracan") MACHINE_CONFIG_END diff --git a/src/mess/drivers/svi318.c b/src/mess/drivers/svi318.c index 796ef138dbe..2acafcb4e0c 100644 --- a/src/mess/drivers/svi318.c +++ b/src/mess/drivers/svi318.c @@ -299,9 +299,9 @@ static MACHINE_CONFIG_FRAGMENT( svi318_cartslot ) MCFG_CARTSLOT_EXTENSION_LIST("rom") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("svi318_cart") - MCFG_CARTSLOT_START(svi318_cart) - MCFG_CARTSLOT_LOAD(svi318_cart) - MCFG_CARTSLOT_UNLOAD(svi318_cart) + MCFG_CARTSLOT_START(svi318_state,svi318_cart) + MCFG_CARTSLOT_LOAD(svi318_state,svi318_cart) + MCFG_CARTSLOT_UNLOAD(svi318_state,svi318_cart) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","svi318_cart") diff --git a/src/mess/drivers/svision.c b/src/mess/drivers/svision.c index 261084a86da..fda7a29713f 100644 --- a/src/mess/drivers/svision.c +++ b/src/mess/drivers/svision.c @@ -471,7 +471,7 @@ DRIVER_INIT_MEMBER(svision_state,svisions) m_pet.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(svision_state::svision_pet_timer),this)); } -static DEVICE_IMAGE_LOAD( svision_cart ) +DEVICE_IMAGE_LOAD_MEMBER( svision_state, svision_cart ) { UINT32 size; UINT8 *temp_copy; @@ -569,7 +569,7 @@ static MACHINE_CONFIG_START( svision, svision_state ) MCFG_CARTSLOT_EXTENSION_LIST("bin,ws,sv") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("svision_cart") - MCFG_CARTSLOT_LOAD(svision_cart) + MCFG_CARTSLOT_LOAD(svision_state, svision_cart) /* Software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","svision") diff --git a/src/mess/drivers/thomson.c b/src/mess/drivers/thomson.c index 6db701da2a3..4fd02bd9929 100644 --- a/src/mess/drivers/thomson.c +++ b/src/mess/drivers/thomson.c @@ -292,14 +292,6 @@ They can run the same software and accept the same devices and extensions. **********************************************************************/ -class thomson_state : public driver_device -{ -public: - thomson_state(const machine_config &mconfig, device_type type, const char *tag) - : driver_device(mconfig, type, tag) { } - -}; - /* ------------ address maps ------------ */ @@ -692,7 +684,7 @@ static MACHINE_CONFIG_START( to7, thomson_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("m7,rom") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(to7_cartridge) + MCFG_CARTSLOT_LOAD(thomson_state,to7_cartridge) MCFG_CARTSLOT_INTERFACE("to7_cart") MCFG_SOFTWARE_LIST_ADD("cart_list","to7_cart") @@ -1067,7 +1059,7 @@ static MACHINE_CONFIG_DERIVED( mo5, to7 ) MCFG_CARTSLOT_MODIFY("cart") MCFG_CARTSLOT_EXTENSION_LIST("m5,rom") - MCFG_CARTSLOT_LOAD(mo5_cartridge) + MCFG_CARTSLOT_LOAD(thomson_state,mo5_cartridge) MCFG_CARTSLOT_INTERFACE("mo5_cart") MCFG_DEVICE_REMOVE("cart_list") @@ -2107,7 +2099,7 @@ static MACHINE_CONFIG_DERIVED( mo6, to7 ) MCFG_CARTSLOT_MODIFY("cart") MCFG_CARTSLOT_EXTENSION_LIST("m5,rom") - MCFG_CARTSLOT_LOAD(mo5_cartridge) + MCFG_CARTSLOT_LOAD(thomson_state, mo5_cartridge) /* internal ram */ MCFG_RAM_MODIFY(RAM_TAG) @@ -2332,7 +2324,7 @@ static MACHINE_CONFIG_DERIVED( mo5nr, to7 ) MCFG_CARTSLOT_MODIFY("cart") MCFG_CARTSLOT_EXTENSION_LIST("m5,rom") - MCFG_CARTSLOT_LOAD(mo5_cartridge) + MCFG_CARTSLOT_LOAD(thomson_state, mo5_cartridge) /* internal ram */ MCFG_RAM_MODIFY(RAM_TAG) diff --git a/src/mess/drivers/timex.c b/src/mess/drivers/timex.c index 87f0cfb51eb..cca389fdead 100644 --- a/src/mess/drivers/timex.c +++ b/src/mess/drivers/timex.c @@ -608,6 +608,18 @@ MACHINE_RESET_MEMBER(spectrum_state,tc2048) } +DEVICE_IMAGE_LOAD_MEMBER( spectrum_state, timex_cart ) +{ + return device_load_timex_cart( image ); +} + + +DEVICE_IMAGE_UNLOAD_MEMBER( spectrum_state, timex_cart ) +{ + device_unload_timex_cart( image ); +} + + /* F4 Character Displayer - tc2048 code is inherited from the spectrum */ static const gfx_layout ts2068_charlayout = { @@ -653,8 +665,8 @@ static MACHINE_CONFIG_DERIVED( ts2068, spectrum_128 ) MCFG_CARTSLOT_MODIFY("cart") MCFG_CARTSLOT_EXTENSION_LIST("dck") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(timex_cart) - MCFG_CARTSLOT_UNLOAD(timex_cart) + MCFG_CARTSLOT_LOAD(spectrum_state,timex_cart) + MCFG_CARTSLOT_UNLOAD(spectrum_state,timex_cart) /* internal ram */ MCFG_RAM_MODIFY(RAM_TAG) diff --git a/src/mess/drivers/tutor.c b/src/mess/drivers/tutor.c index 26379922940..f137c66c81e 100644 --- a/src/mess/drivers/tutor.c +++ b/src/mess/drivers/tutor.c @@ -207,6 +207,8 @@ public: virtual void machine_start(); virtual void machine_reset(); TIMER_CALLBACK_MEMBER(tape_interrupt_handler); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER( tutor_cart ); + DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( tutor_cart ); }; @@ -296,7 +298,7 @@ READ8_MEMBER( tutor_state::key_r ) } -static DEVICE_IMAGE_LOAD( tutor_cart ) +DEVICE_IMAGE_LOAD_MEMBER( tutor_state, tutor_cart ) { UINT32 size; UINT8 *ptr = image.device().machine().root_device().memregion("maincpu")->base(); @@ -316,7 +318,7 @@ static DEVICE_IMAGE_LOAD( tutor_cart ) return IMAGE_INIT_PASS; } -static DEVICE_IMAGE_UNLOAD( tutor_cart ) +DEVICE_IMAGE_UNLOAD_MEMBER( tutor_state, tutor_cart ) { memset(image.device().machine().root_device().memregion("maincpu")->base() + cartridge_base, 0, 0x6000); } @@ -781,8 +783,8 @@ static MACHINE_CONFIG_START( tutor, tutor_state ) /* cartridge */ MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(tutor_cart) - MCFG_CARTSLOT_UNLOAD(tutor_cart) + MCFG_CARTSLOT_LOAD(tutor_state, tutor_cart) + MCFG_CARTSLOT_UNLOAD(tutor_state, tutor_cart) MCFG_CARTSLOT_INTERFACE("tutor_cart") /* software lists */ diff --git a/src/mess/drivers/uzebox.c b/src/mess/drivers/uzebox.c index 166dd2c801f..40fc1e03b8e 100644 --- a/src/mess/drivers/uzebox.c +++ b/src/mess/drivers/uzebox.c @@ -46,6 +46,7 @@ public: void line_update(); int cart_load(device_image_interface &image); UINT32 screen_update_uzebox(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(uzebox_cart); private: int m_vpos; @@ -290,9 +291,9 @@ int uzebox_state::cart_load(device_image_interface &image) return IMAGE_INIT_PASS; } -static DEVICE_IMAGE_LOAD(uzebox_cart) +DEVICE_IMAGE_LOAD_MEMBER(uzebox_state,uzebox_cart) { - return image.device().machine().driver_data<uzebox_state>()->cart_load(image); + return cart_load(image); } /****************************************************\ @@ -329,7 +330,7 @@ static MACHINE_CONFIG_START( uzebox, uzebox_state ) MCFG_CARTSLOT_ADD("cart1") MCFG_CARTSLOT_EXTENSION_LIST("bin,uze") MCFG_CARTSLOT_MANDATORY - MCFG_CARTSLOT_LOAD(uzebox_cart) + MCFG_CARTSLOT_LOAD(uzebox_state,uzebox_cart) MCFG_CARTSLOT_INTERFACE("uzebox") MCFG_SOFTWARE_LIST_ADD("eprom_list","uzebox") MACHINE_CONFIG_END diff --git a/src/mess/drivers/vboy.c b/src/mess/drivers/vboy.c index 9031b7efbd9..47ef5f2c7ee 100644 --- a/src/mess/drivers/vboy.c +++ b/src/mess/drivers/vboy.c @@ -218,6 +218,7 @@ public: TIMER_DEVICE_CALLBACK_MEMBER(vboy_scanlineL); TIMER_DEVICE_CALLBACK_MEMBER(vboy_scanlineR); void vboy_machine_stop(); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(vboy_cart); }; @@ -1346,7 +1347,7 @@ WRITE32_MEMBER(vboy_state::sram_w) } -static DEVICE_IMAGE_LOAD( vboy_cart ) +DEVICE_IMAGE_LOAD_MEMBER( vboy_state, vboy_cart ) { vboy_state *state = image.device().machine().driver_data<vboy_state>(); UINT32 chip = 0; @@ -1422,7 +1423,7 @@ static MACHINE_CONFIG_START( vboy, vboy_state ) MCFG_CARTSLOT_EXTENSION_LIST("vb,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("vboy_cart") - MCFG_CARTSLOT_LOAD(vboy_cart) + MCFG_CARTSLOT_LOAD(vboy_state, vboy_cart) /* software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","vboy") diff --git a/src/mess/drivers/vc4000.c b/src/mess/drivers/vc4000.c index 6788d5582db..5f850f2641c 100644 --- a/src/mess/drivers/vc4000.c +++ b/src/mess/drivers/vc4000.c @@ -335,10 +335,9 @@ void vc4000_state::palette_init() palette_set_colors(machine(), 0, vc4000_palette, ARRAY_LENGTH(vc4000_palette)); } -static DEVICE_IMAGE_LOAD( vc4000_cart ) +DEVICE_IMAGE_LOAD_MEMBER( vc4000_state, vc4000_cart ) { running_machine &machine = image.device().machine(); - vc4000_state *state = machine.driver_data<vc4000_state>(); address_space &memspace = machine.device("maincpu")->memory().space(AS_PROGRAM); UINT32 size; @@ -353,23 +352,23 @@ static DEVICE_IMAGE_LOAD( vc4000_cart ) if (size > 0x1000) /* 6k rom + 1k ram - Chess2 only */ { memspace.install_read_bank(0x0800, 0x15ff, "bank1"); /* extra rom */ - state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1000); + membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1000); memspace.install_readwrite_bank(0x1800, 0x1bff, "bank2"); /* ram */ - state->membank("bank2")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1800); + membank("bank2")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1800); } else if (size > 0x0800) /* some 4k roms have 1k of mirrored ram */ { memspace.install_read_bank(0x0800, 0x0fff, "bank1"); /* extra rom */ - state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x0800); + membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x0800); memspace.install_readwrite_bank(0x1000, 0x15ff, 0, 0x800, "bank2"); /* ram */ - state->membank("bank2")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1000); + membank("bank2")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1000); } else if (size == 0x0800) /* 2k roms + 2k ram - Hobby Module(Radofin) and elektor TVGC*/ { memspace.install_readwrite_bank(0x0800, 0x0fff, "bank1"); /* ram */ - state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x0800); + membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x0800); } if (size > 0) @@ -417,7 +416,7 @@ static MACHINE_CONFIG_START( vc4000, vc4000_state ) MCFG_CARTSLOT_EXTENSION_LIST("rom,bin") MCFG_CARTSLOT_NOT_MANDATORY MCFG_CARTSLOT_INTERFACE("vc4000_cart") - MCFG_CARTSLOT_LOAD(vc4000_cart) + MCFG_CARTSLOT_LOAD(vc4000_state,vc4000_cart) /* software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","vc4000") diff --git a/src/mess/drivers/vii.c b/src/mess/drivers/vii.c index 6f5c19179bf..d05bcb035f4 100644 --- a/src/mess/drivers/vii.c +++ b/src/mess/drivers/vii.c @@ -143,6 +143,8 @@ public: INTERRUPT_GEN_MEMBER(vii_vblank); TIMER_CALLBACK_MEMBER(tmb1_tick); TIMER_CALLBACK_MEMBER(tmb2_tick); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(vii_cart); + DECLARE_DEVICE_IMAGE_LOAD_MEMBER(vsmile_cart); }; enum @@ -924,10 +926,9 @@ static INPUT_PORTS_START( walle ) PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 ) PORT_PLAYER(1) PORT_NAME("B Button") INPUT_PORTS_END -static DEVICE_IMAGE_LOAD( vii_cart ) +DEVICE_IMAGE_LOAD_MEMBER( vii_state, vii_cart ) { - vii_state *state = image.device().machine().driver_data<vii_state>(); - UINT8 *cart = state->memregion( "cart" )->base(); + UINT8 *cart = memregion( "cart" )->base(); if (image.software_entry() == NULL) { int size = image.length(); @@ -942,7 +943,7 @@ static DEVICE_IMAGE_LOAD( vii_cart ) memcpy(cart, image.get_software_region("rom"), filesize); } - memcpy(state->m_p_cart, cart + 0x4000*2, (0x400000 - 0x4000) * 2); + memcpy(m_p_cart, cart + 0x4000*2, (0x400000 - 0x4000) * 2); if( cart[0x3cd808] == 0x99 && cart[0x3cd809] == 0x99 && @@ -953,15 +954,14 @@ static DEVICE_IMAGE_LOAD( vii_cart ) cart[0x3cd80e] == 0x78 && cart[0x3cd80f] == 0x7f ) { - state->m_centered_coordinates = 0; + m_centered_coordinates = 0; } return IMAGE_INIT_PASS; } -static DEVICE_IMAGE_LOAD( vsmile_cart ) +DEVICE_IMAGE_LOAD_MEMBER( vii_state, vsmile_cart ) { - vii_state *state = image.device().machine().driver_data<vii_state>(); - UINT8 *cart = state->memregion( "cart" )->base(); + UINT8 *cart = memregion( "cart" )->base(); if (image.software_entry() == NULL) { int size = image.length(); @@ -977,7 +977,7 @@ static DEVICE_IMAGE_LOAD( vsmile_cart ) int filesize = image.get_software_region_length("rom"); memcpy(cart, image.get_software_region("rom"), filesize); } - memcpy(state->m_p_cart, cart + 0x4000*2, (0x400000 - 0x4000) * 2); + memcpy(m_p_cart, cart + 0x4000*2, (0x400000 - 0x4000) * 2); return IMAGE_INIT_PASS; } @@ -1105,7 +1105,7 @@ static MACHINE_CONFIG_START( vii, vii_state ) MCFG_CARTSLOT_ADD( "cart" ) MCFG_CARTSLOT_EXTENSION_LIST( "bin" ) - MCFG_CARTSLOT_LOAD( vii_cart ) + MCFG_CARTSLOT_LOAD( vii_state, vii_cart ) MCFG_CARTSLOT_INTERFACE("vii_cart") MCFG_SOFTWARE_LIST_ADD("vii_cart","vii") @@ -1128,7 +1128,7 @@ static MACHINE_CONFIG_START( vsmile, vii_state ) MCFG_CARTSLOT_ADD( "cart" ) MCFG_CARTSLOT_EXTENSION_LIST( "bin" ) MCFG_CARTSLOT_MANDATORY - MCFG_CARTSLOT_LOAD( vsmile_cart ) + MCFG_CARTSLOT_LOAD( vii_state, vsmile_cart ) MACHINE_CONFIG_END static const i2cmem_interface i2cmem_interface = diff --git a/src/mess/drivers/vtech2.c b/src/mess/drivers/vtech2.c index d5ed980e189..2ef659ed838 100644 --- a/src/mess/drivers/vtech2.c +++ b/src/mess/drivers/vtech2.c @@ -459,8 +459,8 @@ static MACHINE_CONFIG_START( laser350, vtech2_state ) MCFG_CARTSLOT_ADD("cart") MCFG_CARTSLOT_EXTENSION_LIST("rom") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(laser_cart) - MCFG_CARTSLOT_UNLOAD(laser_cart) + MCFG_CARTSLOT_LOAD(vtech2_state,laser_cart) + MCFG_CARTSLOT_UNLOAD(vtech2_state,laser_cart) /* 5.25" Floppy drive */ MCFG_LEGACY_FLOPPY_DRIVE_ADD( FLOPPY_0, vtech2_floppy_interface ) diff --git a/src/mess/drivers/wswan.c b/src/mess/drivers/wswan.c index 92245afe7b3..b603fe3dd1e 100644 --- a/src/mess/drivers/wswan.c +++ b/src/mess/drivers/wswan.c @@ -155,8 +155,8 @@ static MACHINE_CONFIG_START( wswan, wswan_state ) MCFG_CARTSLOT_EXTENSION_LIST("ws,wsc,bin") MCFG_CARTSLOT_MANDATORY MCFG_CARTSLOT_INTERFACE("wswan_cart") - MCFG_CARTSLOT_START(wswan_cart) - MCFG_CARTSLOT_LOAD(wswan_cart) + MCFG_CARTSLOT_START(wswan_state,wswan_cart) + MCFG_CARTSLOT_LOAD(wswan_state,wswan_cart) /* software lists */ MCFG_SOFTWARE_LIST_ADD("cart_list","wswan") diff --git a/src/mess/drivers/x07.c b/src/mess/drivers/x07.c index a2c92e86728..233fee70281 100644 --- a/src/mess/drivers/x07.c +++ b/src/mess/drivers/x07.c @@ -1034,16 +1034,14 @@ inline void x07_state::draw_udk() } } -static DEVICE_IMAGE_LOAD( x07_card ) +DEVICE_IMAGE_LOAD_MEMBER( x07_state, x07_card ) { - running_machine &machine = image.device().machine(); - x07_state *state = machine.driver_data<x07_state>(); - address_space &space = state->m_maincpu->space( AS_PROGRAM ); - UINT16 ram_size = state->m_ram->size(); + address_space &space = m_maincpu->space( AS_PROGRAM ); + UINT16 ram_size = m_ram->size(); if (image.software_entry() == NULL) { - UINT8 *rom = machine.memory().region_alloc( "card", image.length(), 1, ENDIANNESS_LITTLE )->base(); + UINT8 *rom = machine().memory().region_alloc( "card", image.length(), 1, ENDIANNESS_LITTLE )->base(); image.fread(rom, image.length()); space.install_ram(ram_size, ram_size + 0xfff); @@ -1537,7 +1535,7 @@ static MACHINE_CONFIG_START( x07, x07_state ) MCFG_CARTSLOT_ADD("card") MCFG_CARTSLOT_EXTENSION_LIST("rom,bin") MCFG_CARTSLOT_NOT_MANDATORY - MCFG_CARTSLOT_LOAD(x07_card) + MCFG_CARTSLOT_LOAD(x07_state,x07_card) MCFG_CARTSLOT_INTERFACE("x07_card") /* cassette */ |