summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author Wilbert Pol <wilbert@jdg.info>2013-02-06 20:32:33 +0000
committer Wilbert Pol <wilbert@jdg.info>2013-02-06 20:32:33 +0000
commit871d4c7ac6dd7066e1f4cbc6303d92ce415c3a19 (patch)
treed55bd14fb496830ce3346bff3c0bb8d98832b0d7
parent2f1f05e3e6bdb54559c96621a9fc2b322418ba80 (diff)
Getting rid of DEVICE_IMAGE_START (nw)
-rw-r--r--src/emu/diimage.h7
-rw-r--r--src/emu/imagedev/cartslot.c5
-rw-r--r--src/emu/imagedev/cartslot.h5
-rw-r--r--src/mame/drivers/jaguar.c8
-rw-r--r--src/mame/includes/jaguar.h1
-rw-r--r--src/mess/drivers/a2600.c9
-rw-r--r--src/mess/drivers/a7800.c1
-rw-r--r--src/mess/drivers/bbcbc.c12
-rw-r--r--src/mess/drivers/gamepock.c13
-rw-r--r--src/mess/drivers/gb.c14
-rw-r--r--src/mess/drivers/nc.c7
-rw-r--r--src/mess/drivers/ngp.c104
-rw-r--r--src/mess/drivers/scv.c28
-rw-r--r--src/mess/drivers/sms.c5
-rw-r--r--src/mess/drivers/svi318.c1
-rw-r--r--src/mess/drivers/wswan.c5
-rw-r--r--src/mess/includes/a7800.h2
-rw-r--r--src/mess/includes/c64_legacy.h2
-rw-r--r--src/mess/includes/gamepock.h4
-rw-r--r--src/mess/includes/gb.h2
-rw-r--r--src/mess/includes/nc.h2
-rw-r--r--src/mess/includes/nes.h1
-rw-r--r--src/mess/includes/sms.h2
-rw-r--r--src/mess/includes/svi318.h3
-rw-r--r--src/mess/includes/wswan.h2
-rw-r--r--src/mess/machine/a7800.c68
-rw-r--r--src/mess/machine/c64_legacy.c4
-rw-r--r--src/mess/machine/c65.c2
-rw-r--r--src/mess/machine/gb.c2
-rw-r--r--src/mess/machine/nc.c2
-rw-r--r--src/mess/machine/sms.c9
-rw-r--r--src/mess/machine/svi318.c35
-rw-r--r--src/mess/machine/wswan.c4
33 files changed, 146 insertions, 225 deletions
diff --git a/src/emu/diimage.h b/src/emu/diimage.h
index c705e58971d..70da52c9263 100644
--- a/src/emu/diimage.h
+++ b/src/emu/diimage.h
@@ -111,7 +111,6 @@ struct software_part;
struct software_info;
// device image interface function types
-typedef delegate<void ()> device_image_start_delegate;
typedef delegate<int (device_image_interface &)> device_image_load_delegate;
typedef delegate<void (device_image_interface &)> device_image_func_delegate;
// legacy
@@ -137,12 +136,6 @@ typedef void (*device_image_display_info_func)(device_image_interface &image);
#define DEVICE_IMAGE_DISPLAY_INFO(name) void DEVICE_IMAGE_DISPLAY_INFO_NAME(name)(device_image_interface &image)
-#define DEVICE_IMAGE_START_MEMBER_NAME(_name) device_image_start_##_name
-#define DEVICE_IMAGE_START_NAME(_class,_name) _class::DEVICE_IMAGE_START_MEMBER_NAME(_name)
-#define DECLARE_DEVICE_IMAGE_START_MEMBER(_name) void DEVICE_IMAGE_START_MEMBER_NAME(_name)()
-#define DEVICE_IMAGE_START_MEMBER(_class,_name) void DEVICE_IMAGE_START_NAME(_class,_name)()
-#define DEVICE_IMAGE_START_DELEGATE(_class,_name) device_image_start_delegate(&DEVICE_IMAGE_START_NAME(_class,_name),#_class "::device_image_start_" #_name,downcast<_class *>(device->owner()))
-
#define DEVICE_IMAGE_LOAD_MEMBER_NAME(_name) device_image_load_##_name
#define DEVICE_IMAGE_LOAD_NAME(_class,_name) _class::DEVICE_IMAGE_LOAD_MEMBER_NAME(_name)
#define DECLARE_DEVICE_IMAGE_LOAD_MEMBER(_name) int DEVICE_IMAGE_LOAD_MEMBER_NAME(_name)(device_image_interface &image)
diff --git a/src/emu/imagedev/cartslot.c b/src/emu/imagedev/cartslot.c
index 2e8ca27d18a..8f096d72c80 100644
--- a/src/emu/imagedev/cartslot.c
+++ b/src/emu/imagedev/cartslot.c
@@ -203,11 +203,6 @@ int cartslot_image_device::process_cartridge(bool load)
void cartslot_image_device::device_start()
{
- /* if this cartridge has a custom DEVICE_START, use it */
- if (!m_device_image_start.isnull())
- {
- m_device_image_start();
- }
}
diff --git a/src/emu/imagedev/cartslot.h b/src/emu/imagedev/cartslot.h
index bc03cff2aeb..d3eb57851c9 100644
--- a/src/emu/imagedev/cartslot.h
+++ b/src/emu/imagedev/cartslot.h
@@ -57,7 +57,6 @@ public:
void set_extensions(const char *_extensions) { m_extensions = _extensions; }
void set_interface(const char *_interface) { m_interface = _interface; }
void set_must_be_loaded(bool _must_be_loaded) { m_must_be_loaded = _must_be_loaded; }
- void set_device_start(device_image_start_delegate _start) { m_device_image_start = _start; }
void set_device_load(device_image_load_delegate _load) { m_device_image_load = _load; }
void set_device_unload(device_image_func_delegate _unload) { m_device_image_unload = _unload; }
void set_partialhash(device_image_partialhash_func _partialhash) { m_device_image_partialhash = _partialhash; }
@@ -75,7 +74,6 @@ protected:
const char * m_extensions;
const char * m_interface;
bool m_must_be_loaded;
- device_image_start_delegate m_device_image_start;
device_image_load_delegate m_device_image_load;
device_image_func_delegate m_device_image_unload;
device_image_partialhash_func m_device_image_partialhash;
@@ -105,9 +103,6 @@ extern const device_type CARTSLOT;
#define MCFG_CARTSLOT_MANDATORY \
static_cast<cartslot_image_device *>(device)->set_must_be_loaded(TRUE);
-#define MCFG_CARTSLOT_START(_class,_start) \
- static_cast<cartslot_image_device *>(device)->set_device_start( DEVICE_IMAGE_START_DELEGATE(_class,_start));
-
#define MCFG_CARTSLOT_LOAD(_class,_load) \
static_cast<cartslot_image_device *>(device)->set_device_load( DEVICE_IMAGE_LOAD_DELEGATE(_class,_load));
diff --git a/src/mame/drivers/jaguar.c b/src/mame/drivers/jaguar.c
index 1a56c4db381..fb134ff52f3 100644
--- a/src/mame/drivers/jaguar.c
+++ b/src/mame/drivers/jaguar.c
@@ -1641,7 +1641,6 @@ static MACHINE_CONFIG_START( jaguar, jaguar_state )
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("j64,rom")
MCFG_CARTSLOT_INTERFACE("jaguar_cart")
- MCFG_CARTSLOT_START(jaguar_state,jaguar_cart)
MCFG_CARTSLOT_LOAD(jaguar_state,jaguar_cart)
/* software lists */
@@ -1681,7 +1680,7 @@ DRIVER_INIT_MEMBER(jaguar_state,jaguar)
{
m_hacks_enabled = false;
save_item(NAME(m_joystick_data));
- m_using_cart = false;
+ cart_start();
for (int i=0;i<0x20000/4;i++) // the cd bios is bigger.. check
{
@@ -1767,11 +1766,6 @@ int jaguar_state::quickload(device_image_interface &image, const char *file_type
return IMAGE_INIT_PASS;
}
-DEVICE_IMAGE_START_MEMBER( jaguar_state, jaguar_cart )
-{
- cart_start();
-}
-
void jaguar_state::cart_start()
{
/* Initialize for no cartridge present */
diff --git a/src/mame/includes/jaguar.h b/src/mame/includes/jaguar.h
index 2a464258cb6..62140db1c97 100644
--- a/src/mame/includes/jaguar.h
+++ b/src/mame/includes/jaguar.h
@@ -215,7 +215,6 @@ public:
void cart_start();
int cart_load(device_image_interface &image);
IRQ_CALLBACK_MEMBER(jaguar_irq_callback);
- DECLARE_DEVICE_IMAGE_START_MEMBER( jaguar_cart );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( jaguar_cart );
protected:
// timer IDs
diff --git a/src/mess/drivers/a2600.c b/src/mess/drivers/a2600.c
index 5b05de24123..273ddadc4bf 100644
--- a/src/mess/drivers/a2600.c
+++ b/src/mess/drivers/a2600.c
@@ -51,6 +51,7 @@ public:
a2600_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_riot_ram(*this, "riot_ram")
+ , m_banking_mode(0xff)
, m_joy1(*this, CONTROL1_TAG)
, m_joy2(*this, CONTROL2_TAG)
{ }
@@ -128,7 +129,6 @@ 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:
@@ -544,12 +544,6 @@ static int detect_super_chip(running_machine &machine)
}
-DEVICE_IMAGE_START_MEMBER( a2600_state, a2600_cart )
-{
- m_banking_mode = 0xff;
-}
-
-
DEVICE_IMAGE_LOAD_MEMBER( a2600_state, a2600_cart )
{
UINT8 *cart = memregion("user1")->base();
@@ -1921,7 +1915,6 @@ static MACHINE_CONFIG_FRAGMENT(a2600_cartslot)
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_EXTENSION_LIST("bin,a26")
MCFG_CARTSLOT_MANDATORY
- MCFG_CARTSLOT_START(a2600_state,a2600_cart)
MCFG_CARTSLOT_LOAD(a2600_state,a2600_cart)
MCFG_CARTSLOT_INTERFACE("a2600_cart")
diff --git a/src/mess/drivers/a7800.c b/src/mess/drivers/a7800.c
index 152d7a137fa..f2d9fa7aa2a 100644
--- a/src/mess/drivers/a7800.c
+++ b/src/mess/drivers/a7800.c
@@ -302,7 +302,6 @@ 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_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/bbcbc.c b/src/mess/drivers/bbcbc.c
index ee4a259ab62..d216219628a 100644
--- a/src/mess/drivers/bbcbc.c
+++ b/src/mess/drivers/bbcbc.c
@@ -30,7 +30,6 @@ public:
virtual void machine_reset();
DECLARE_WRITE_LINE_MEMBER(tms_interrupt);
- DECLARE_DEVICE_IMAGE_START_MEMBER( bbcbc_cart );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcbc_cart );
};
@@ -133,14 +132,6 @@ static const z80_daisy_config bbcbc_daisy_chain[] =
};
-DEVICE_IMAGE_START_MEMBER( bbcbc_state, bbcbc_cart )
-{
- UINT8 *cart = machine().root_device().memregion("maincpu" )->base() + 0x4000;
-
- memset( cart, 0xFF, 0x8000 );
-}
-
-
DEVICE_IMAGE_LOAD_MEMBER( bbcbc_state, bbcbc_cart )
{
UINT8 *cart = machine().root_device().memregion("maincpu" )->base() + 0x4000;
@@ -190,7 +181,6 @@ static MACHINE_CONFIG_START( bbcbc, bbcbc_state )
MCFG_CARTSLOT_ADD("cart")
MCFG_CARTSLOT_NOT_MANDATORY
MCFG_CARTSLOT_INTERFACE("bbcbc_cart")
- MCFG_CARTSLOT_START( bbcbc_state, bbcbc_cart )
MCFG_CARTSLOT_LOAD( bbcbc_state, bbcbc_cart )
/* Software lists */
@@ -199,7 +189,7 @@ MACHINE_CONFIG_END
ROM_START( bbcbc )
- ROM_REGION( 0x10000, "maincpu", 0 )
+ ROM_REGION( 0x10000, "maincpu", ROMREGION_ERASEFF )
ROM_LOAD("br_4_1.ic3", 0x0000, 0x2000, CRC(7c880d75) SHA1(954db096bd9e8edfef72946637a12f1083841fb0))
ROM_LOAD("br_4_2.ic4", 0x2000, 0x2000, CRC(16a33aef) SHA1(9529f9f792718a3715af2063b91a5fb18f741226))
ROM_END
diff --git a/src/mess/drivers/gamepock.c b/src/mess/drivers/gamepock.c
index ba974968e17..8a025646cb6 100644
--- a/src/mess/drivers/gamepock.c
+++ b/src/mess/drivers/gamepock.c
@@ -12,7 +12,7 @@ static ADDRESS_MAP_START(gamepock_mem, AS_PROGRAM, 8, gamepock_state)
ADDRESS_MAP_UNMAP_HIGH
AM_RANGE(0x0000,0x0fff) AM_ROM
AM_RANGE(0x1000,0x3fff) AM_NOP
- AM_RANGE(0x4000,0xBfff) AM_ROMBANK("bank1")
+ AM_RANGE(0x4000,0xBfff) AM_ROM AM_REGION("user1", 0)
AM_RANGE(0xC000,0xC7ff) AM_MIRROR(0x0800) AM_RAM
AM_RANGE(0xff80,0xffff) AM_RAM /* 128 bytes microcontroller RAM */
ADDRESS_MAP_END
@@ -45,12 +45,6 @@ INPUT_PORTS_END
static const UPD7810_CONFIG gamepock_cpu_config = { TYPE_78C06, gamepock_io_callback };
-DEVICE_IMAGE_START_MEMBER(gamepock_state,gamepock_cart)
-{
- membank( "bank1" )->set_base( memregion("user1" )->base() );
-}
-
-
DEVICE_IMAGE_LOAD_MEMBER(gamepock_state,gamepock_cart) {
UINT8 *cart = memregion("user1" )->base();
@@ -64,11 +58,9 @@ DEVICE_IMAGE_LOAD_MEMBER(gamepock_state,gamepock_cart) {
}
else
{
- cart = image.get_software_region( "rom" );
+ memcpy( cart, image.get_software_region( "rom" ), image.get_software_region_length("rom") );
}
- membank( "bank1" )->set_base( cart );
-
return IMAGE_INIT_PASS;
}
@@ -100,7 +92,6 @@ 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_state,gamepock_cart)
MCFG_CARTSLOT_LOAD(gamepock_state,gamepock_cart)
/* Software lists */
diff --git a/src/mess/drivers/gb.c b/src/mess/drivers/gb.c
index f2e8e781523..48536bcc0c0 100644
--- a/src/mess/drivers/gb.c
+++ b/src/mess/drivers/gb.c
@@ -590,7 +590,6 @@ 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_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")
@@ -648,7 +647,6 @@ 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_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")
@@ -731,13 +729,13 @@ ROM_START( megaduck )
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME */
-CONS( 1990, gameboy, 0, 0, gameboy, gameboy, driver_device, 0, "Nintendo", "Game Boy", 0)
-CONS( 1994, supergb, gameboy, 0, supergb, gameboy, driver_device, 0, "Nintendo", "Super Game Boy", 0)
-CONS( 1996, gbpocket, gameboy, 0, gbpocket, gameboy, driver_device, 0, "Nintendo", "Game Boy Pocket", 0)
-CONS( 1997, gblight, gameboy, 0, gbpocket, gameboy, driver_device, 0, "Nintendo", "Game Boy Light", 0)
-CONS( 1998, gbcolor, gameboy, 0, gbcolor, gameboy, driver_device, 0, "Nintendo", "Game Boy Color", GAME_IMPERFECT_GRAPHICS)
+CONS( 1990, gameboy, 0, 0, gameboy, gameboy, gb_state, gb, "Nintendo", "Game Boy", 0)
+CONS( 1994, supergb, gameboy, 0, supergb, gameboy, gb_state, gb, "Nintendo", "Super Game Boy", 0)
+CONS( 1996, gbpocket, gameboy, 0, gbpocket, gameboy, gb_state, gb, "Nintendo", "Game Boy Pocket", 0)
+CONS( 1997, gblight, gameboy, 0, gbpocket, gameboy, gb_state, gb, "Nintendo", "Game Boy Light", 0)
+CONS( 1998, gbcolor, gameboy, 0, gbcolor, gameboy, gb_state, gb, "Nintendo", "Game Boy Color", GAME_IMPERFECT_GRAPHICS)
/* Sound is not 100% yet, it generates some sounds which could be ok. Since we're lacking a real
system there's no way to verify. Same goes for the colors of the LCD. We are no using the default
Game Boy green colors */
-CONS( 1993, megaduck, 0, 0, megaduck, gameboy, driver_device, 0, "Creatronic/Videojet/Timlex/Cougar", "MegaDuck/Cougar Boy" , 0)
+CONS( 1993, megaduck, 0, 0, megaduck, gameboy, gb_state, gb, "Creatronic/Videojet/Timlex/Cougar", "MegaDuck/Cougar Boy" , 0)
diff --git a/src/mess/drivers/nc.c b/src/mess/drivers/nc.c
index 974cd40bc3f..e222e06132e 100644
--- a/src/mess/drivers/nc.c
+++ b/src/mess/drivers/nc.c
@@ -1609,7 +1609,6 @@ 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_state,nc_pcmcia_card)
MCFG_CARTSLOT_LOAD(nc_state,nc_pcmcia_card)
MCFG_CARTSLOT_UNLOAD(nc_state,nc_pcmcia_card)
@@ -1703,6 +1702,6 @@ ROM_START(nc200)
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME FLAGS */
-COMP( 1992, nc100, 0, 0, nc100, nc100, driver_device, 0, "Amstrad plc", "NC100", 0 )
-COMP( 1992, nc150, nc100, 0, nc100, nc100, driver_device, 0, "Amstrad plc", "NC150", 0 )
-COMP( 1993, nc200, 0, 0, nc200, nc200, driver_device, 0, "Amstrad plc", "NC200", GAME_NOT_WORKING ) // boot hangs while checking the MC146818 UIP (update in progress) bit
+COMP( 1992, nc100, 0, 0, nc100, nc100, nc_state, nc, "Amstrad plc", "NC100", 0 )
+COMP( 1992, nc150, nc100, 0, nc100, nc100, nc_state, nc, "Amstrad plc", "NC150", 0 )
+COMP( 1993, nc200, 0, 0, nc200, nc200, nc_state, nc, "Amstrad plc", "NC200", GAME_NOT_WORKING ) // boot hangs while checking the MC146818 UIP (update in progress) bit
diff --git a/src/mess/drivers/ngp.c b/src/mess/drivers/ngp.c
index be04ddf9643..82cdb61f5b0 100644
--- a/src/mess/drivers/ngp.c
+++ b/src/mess/drivers/ngp.c
@@ -128,7 +128,15 @@ public:
, m_t6w28( *this, "t6w28" )
, m_dac_l( *this, "dac_l" )
, m_dac_r( *this, "dac_r" )
- { }
+ {
+ m_flash_chip[0].present = 0;
+ m_flash_chip[0].state = F_READ;
+ m_flash_chip[0].data = NULL;
+
+ m_flash_chip[1].present = 0;
+ m_flash_chip[1].state = F_READ;
+ m_flash_chip[1].data = NULL;
+ }
virtual void machine_start();
virtual void machine_reset();
@@ -174,7 +182,6 @@ public:
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 );
};
@@ -612,6 +619,44 @@ WRITE8_MEMBER( ngp_state::ngp_tlcs900_to3 )
void ngp_state::machine_start()
{
+ UINT8 *cart = memregion("cart")->base();
+
+ m_flash_chip[0].data = cart;
+ 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].data = cart + 0x200000;
+ 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_seconds_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(ngp_state::ngp_seconds_callback),this));
m_seconds_timer->adjust( attotime::from_seconds(1), 0, attotime::from_seconds(1) );
}
@@ -634,22 +679,9 @@ UINT32 ngp_state::screen_update_ngp(screen_device &screen, bitmap_ind16 &bitmap,
}
-DEVICE_IMAGE_START_MEMBER( ngp_state, ngp_cart )
-{
- UINT8 *cart = memregion("cart")->base();
-
- m_flash_chip[0].present = 0;
- m_flash_chip[0].state = F_READ;
- m_flash_chip[0].data = cart;
-
- m_flash_chip[1].present = 0;
- m_flash_chip[1].state = F_READ;
- m_flash_chip[1].data = cart + 0x200000;
-}
-
-
DEVICE_IMAGE_LOAD_MEMBER( ngp_state, ngp_cart )
{
+ UINT8 *cart = memregion("cart")->base();
UINT32 filesize;
if (image.software_entry() == NULL)
@@ -662,7 +694,7 @@ DEVICE_IMAGE_LOAD_MEMBER( ngp_state, ngp_cart )
return IMAGE_INIT_FAIL;
}
- if (image.fread( machine().root_device().memregion("cart")->base(), filesize) != filesize)
+ if (image.fread( cart, filesize) != filesize)
{
image.seterror(IMAGE_ERROR_UNSPECIFIED, "Error loading file");
return IMAGE_INIT_FAIL;
@@ -671,7 +703,7 @@ DEVICE_IMAGE_LOAD_MEMBER( ngp_state, ngp_cart )
else
{
filesize = image.get_software_region_length("rom");
- memcpy(machine().root_device().memregion("cart")->base(), image.get_software_region("rom"), filesize);
+ memcpy(cart, 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),
@@ -698,40 +730,6 @@ DEVICE_IMAGE_LOAD_MEMBER( ngp_state, ngp_cart )
break;
}
- 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;
@@ -805,7 +803,6 @@ 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_state, ngp_cart)
MCFG_CARTSLOT_LOAD(ngp_state, ngp_cart)
MCFG_CARTSLOT_INTERFACE("ngp_cart")
MCFG_CARTSLOT_UNLOAD(ngp_state, ngp_cart)
@@ -826,7 +823,6 @@ 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_state,ngp_cart)
MCFG_CARTSLOT_LOAD(ngp_state,ngp_cart)
MCFG_CARTSLOT_INTERFACE("ngp_cart")
MCFG_CARTSLOT_UNLOAD(ngp_state,ngp_cart)
diff --git a/src/mess/drivers/scv.c b/src/mess/drivers/scv.c
index e2d6d4dae5a..cd12a403b6b 100644
--- a/src/mess/drivers/scv.c
+++ b/src/mess/drivers/scv.c
@@ -17,6 +17,9 @@ public:
scv_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
, m_videoram(*this,"videoram")
+ , m_cart_rom_size(0)
+ , m_cart_ram(NULL)
+ , m_cart_ram_size(0)
, m_maincpu(*this, "maincpu")
, m_upd1771c(*this, "upd1771c")
, m_pa0(*this, "PA0")
@@ -57,7 +60,6 @@ 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:
@@ -360,20 +362,12 @@ WRITE8_MEMBER( scv_state::scv_portc_w )
}
-DEVICE_IMAGE_START_MEMBER( scv_state, scv_cart )
-{
- m_cart_rom = memregion( "cart" )->base();
- m_cart_rom_size = 0;
- m_cart_ram = NULL;
- m_cart_ram_size = 0;
-}
-
-
DEVICE_IMAGE_LOAD_MEMBER( scv_state, scv_cart )
{
+ UINT8 *cart = memregion( "cart" )->base();
+
if ( image.software_entry() == NULL )
{
- UINT8 *cart = image.device().machine().root_device().memregion( "cart" )->base();
int size = image.length();
if ( size > memregion( "cart" )->bytes() )
@@ -388,17 +382,17 @@ DEVICE_IMAGE_LOAD_MEMBER( scv_state, scv_cart )
return IMAGE_INIT_FAIL;
}
- m_cart_rom = cart;
m_cart_rom_size = size;
- m_cart_ram = NULL;
- m_cart_ram_size = 0;
}
else
{
- 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" );
+ memcpy( cart, image.get_software_region( "rom" ), m_cart_rom_size );
m_cart_ram_size = image.get_software_region_length( "ram" );
+ if ( m_cart_ram_size > 0 )
+ {
+ m_cart_ram = auto_alloc_array_clear( machine(), UINT8, m_cart_ram_size );
+ }
}
return IMAGE_INIT_PASS;
@@ -799,6 +793,7 @@ WRITE_LINE_MEMBER( scv_state::scv_upd1771_ack_w )
void scv_state::machine_start()
{
+ m_cart_rom = memregion( "cart" )->base();
m_vb_timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(scv_state::scv_vb_callback),this));
}
@@ -859,7 +854,6 @@ 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_state, scv_cart )
MCFG_CARTSLOT_LOAD( scv_state, scv_cart )
/* Software lists */
diff --git a/src/mess/drivers/sms.c b/src/mess/drivers/sms.c
index 857113d07f5..b4112f0fba4 100644
--- a/src/mess/drivers/sms.c
+++ b/src/mess/drivers/sms.c
@@ -402,7 +402,6 @@ 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_state,sms_cart)
MCFG_CARTSLOT_LOAD(sms_state,sms_cart)
MCFG_SOFTWARE_LIST_ADD("cart_list","sms")
@@ -413,7 +412,6 @@ static MACHINE_CONFIG_FRAGMENT( gg_cartslot )
MCFG_CARTSLOT_EXTENSION_LIST("gg,bin")
MCFG_CARTSLOT_MANDATORY
MCFG_CARTSLOT_INTERFACE("gamegear_cart")
- MCFG_CARTSLOT_START(sms_state,sms_cart)
MCFG_CARTSLOT_LOAD(sms_state,sms_cart)
MCFG_SOFTWARE_LIST_ADD("cart_list","gamegear")
@@ -495,7 +493,6 @@ MACHINE_CONFIG_END
MCFG_CARTSLOT_EXTENSION_LIST("sms,bin") \
MCFG_CARTSLOT_NOT_MANDATORY \
MCFG_CARTSLOT_INTERFACE("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,7 +509,6 @@ 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_state,sms_cart)
MCFG_CARTSLOT_LOAD(sms_state,sms_cart)
MCFG_SMSSDISP_CARTSLOT_ADD("cart2")
@@ -617,7 +613,6 @@ 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_state,sms_cart)
MCFG_CARTSLOT_LOAD(sms_state,sms_cart)
MACHINE_CONFIG_END
diff --git a/src/mess/drivers/svi318.c b/src/mess/drivers/svi318.c
index 2acafcb4e0c..8b1c30a7995 100644
--- a/src/mess/drivers/svi318.c
+++ b/src/mess/drivers/svi318.c
@@ -299,7 +299,6 @@ static MACHINE_CONFIG_FRAGMENT( svi318_cartslot )
MCFG_CARTSLOT_EXTENSION_LIST("rom")
MCFG_CARTSLOT_NOT_MANDATORY
MCFG_CARTSLOT_INTERFACE("svi318_cart")
- MCFG_CARTSLOT_START(svi318_state,svi318_cart)
MCFG_CARTSLOT_LOAD(svi318_state,svi318_cart)
MCFG_CARTSLOT_UNLOAD(svi318_state,svi318_cart)
diff --git a/src/mess/drivers/wswan.c b/src/mess/drivers/wswan.c
index b603fe3dd1e..175c8524a73 100644
--- a/src/mess/drivers/wswan.c
+++ b/src/mess/drivers/wswan.c
@@ -155,7 +155,6 @@ 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_state,wswan_cart)
MCFG_CARTSLOT_LOAD(wswan_state,wswan_cart)
/* software lists */
@@ -195,5 +194,5 @@ ROM_START( wscolor )
ROM_END
/* YEAR NAME PARENT COMPAT MACHINE INPUT INIT COMPANY FULLNAME*/
-CONS( 1999, wswan, 0, 0, wswan, wswan, driver_device, 0, "Bandai", "WonderSwan", GAME_IMPERFECT_SOUND )
-CONS( 2000, wscolor, wswan, 0, wscolor, wswan, driver_device, 0, "Bandai", "WonderSwan Color", GAME_IMPERFECT_SOUND )
+CONS( 1999, wswan, 0, 0, wswan, wswan, wswan_state, wswan, "Bandai", "WonderSwan", GAME_IMPERFECT_SOUND )
+CONS( 2000, wscolor, wswan, 0, wscolor, wswan, wswan_state, wswan, "Bandai", "WonderSwan Color", GAME_IMPERFECT_SOUND )
diff --git a/src/mess/includes/a7800.h b/src/mess/includes/a7800.h
index 8418f6454e3..cf8402b0e20 100644
--- a/src/mess/includes/a7800.h
+++ b/src/mess/includes/a7800.h
@@ -59,6 +59,7 @@ public:
DECLARE_WRITE8_MEMBER(a7800_TIA_w);
DECLARE_READ8_MEMBER(a7800_MARIA_r);
DECLARE_WRITE8_MEMBER(a7800_MARIA_w);
+ void a7800_driver_init(int ispal, int lines);
DECLARE_DRIVER_INIT(a7800_pal);
DECLARE_DRIVER_INIT(a7800_ntsc);
virtual void machine_reset();
@@ -71,7 +72,6 @@ public:
DECLARE_READ8_MEMBER(riot_console_button_r);
DECLARE_WRITE8_MEMBER(riot_button_pullup_w);
- DECLARE_DEVICE_IMAGE_START_MEMBER( a7800_cart );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a7800_cart );
};
diff --git a/src/mess/includes/c64_legacy.h b/src/mess/includes/c64_legacy.h
index be742e781da..901b8a4443e 100644
--- a/src/mess/includes/c64_legacy.h
+++ b/src/mess/includes/c64_legacy.h
@@ -89,7 +89,7 @@ public:
UINT8 *m_io_ram_r_ptr;
c64_cart_t m_cart;
int m_nmilevel;
- DECLARE_DEVICE_IMAGE_START_MEMBER( c64_cart );
+ void c64_legacy_driver_init();
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( c64_cart );
DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( c64_cart );
};
diff --git a/src/mess/includes/gamepock.h b/src/mess/includes/gamepock.h
index 2c33c03555e..05b5dab8efd 100644
--- a/src/mess/includes/gamepock.h
+++ b/src/mess/includes/gamepock.h
@@ -13,7 +13,8 @@ class gamepock_state : public driver_device
{
public:
gamepock_state(const machine_config &mconfig, device_type type, const char *tag)
- : driver_device(mconfig, type, tag) { }
+ : driver_device(mconfig, type, tag)
+ { }
virtual void machine_reset();
@@ -30,7 +31,6 @@ public:
DECLARE_WRITE8_MEMBER( port_b_w );
DECLARE_READ8_MEMBER( port_c_r );
UINT32 screen_update_gamepock(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
- DECLARE_DEVICE_IMAGE_START_MEMBER(gamepock_cart);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(gamepock_cart);
};
diff --git a/src/mess/includes/gb.h b/src/mess/includes/gb.h
index 91f8e303846..f16f339927e 100644
--- a/src/mess/includes/gb.h
+++ b/src/mess/includes/gb.h
@@ -267,7 +267,7 @@ public:
TIMER_CALLBACK_MEMBER(gb_lcd_timer_proc);
TIMER_CALLBACK_MEMBER(gbc_lcd_timer_proc);
DECLARE_WRITE8_MEMBER(gb_timer_callback);
- DECLARE_DEVICE_IMAGE_START_MEMBER(gb_cart);
+ DECLARE_DRIVER_INIT(gb);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(gb_cart);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(megaduck_cart);
diff --git a/src/mess/includes/nc.h b/src/mess/includes/nc.h
index 850b62eab07..6407351e044 100644
--- a/src/mess/includes/nc.h
+++ b/src/mess/includes/nc.h
@@ -95,7 +95,7 @@ public:
void nc200_fdc_interrupt(bool state);
- DECLARE_DEVICE_IMAGE_START_MEMBER( nc_pcmcia_card );
+ DECLARE_DRIVER_INIT( nc );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( nc_pcmcia_card );
DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( nc_pcmcia_card );
diff --git a/src/mess/includes/nes.h b/src/mess/includes/nes.h
index 75888c93d50..7707bc933cf 100644
--- a/src/mess/includes/nes.h
+++ b/src/mess/includes/nes.h
@@ -127,7 +127,6 @@ public:
DECLARE_WRITE8_MEMBER(psg_4017_w);
void nes_banks_restore();
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(nes_cart);
- DECLARE_DEVICE_IMAGE_START_MEMBER(nes_disk);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(nes_disk);
DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(nes_disk);
diff --git a/src/mess/includes/sms.h b/src/mess/includes/sms.h
index 5ed3702fcdc..73a53c2b318 100644
--- a/src/mess/includes/sms.h
+++ b/src/mess/includes/sms.h
@@ -209,7 +209,7 @@ public:
DECLARE_WRITE_LINE_MEMBER(sms_pause_callback);
DECLARE_WRITE_LINE_MEMBER(sms_store_int_callback);
void sms_machine_stop();
- DECLARE_DEVICE_IMAGE_START_MEMBER(sms_cart);
+ void setup_sms_cart();
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(sms_cart);
protected:
required_shared_ptr<UINT8> m_mainram;
diff --git a/src/mess/includes/svi318.h b/src/mess/includes/svi318.h
index d1dc272c4bd..6858b9c5018 100644
--- a/src/mess/includes/svi318.h
+++ b/src/mess/includes/svi318.h
@@ -56,6 +56,8 @@ class svi318_state : public driver_device
public:
svi318_state(const machine_config &mconfig, device_type type, const char *tag)
: driver_device(mconfig, type, tag)
+ , m_pcart(NULL)
+ , m_pcart_rom_size(0)
, m_maincpu(*this, "maincpu")
, m_cassette(*this, CASSETTE_TAG)
, m_dac(*this, "dac")
@@ -109,7 +111,6 @@ public:
DECLARE_WRITE8_MEMBER(svi318_ppi_port_c_w);
DECLARE_WRITE_LINE_MEMBER(svi_fdc_intrq_w);
DECLARE_WRITE_LINE_MEMBER(svi_fdc_drq_w);
- DECLARE_DEVICE_IMAGE_START_MEMBER(svi318_cart);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(svi318_cart);
DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(svi318_cart);
diff --git a/src/mess/includes/wswan.h b/src/mess/includes/wswan.h
index 5199d527105..b14fea82796 100644
--- a/src/mess/includes/wswan.h
+++ b/src/mess/includes/wswan.h
@@ -144,7 +144,7 @@ public:
TIMER_CALLBACK_MEMBER(wswan_rtc_callback);
TIMER_CALLBACK_MEMBER(wswan_scanline_interrupt);
void wswan_machine_stop();
- DECLARE_DEVICE_IMAGE_START_MEMBER( wswan_cart );
+ DECLARE_DRIVER_INIT( wswan );
DECLARE_DEVICE_IMAGE_LOAD_MEMBER( wswan_cart );
protected:
diff --git a/src/mess/machine/a7800.c b/src/mess/machine/a7800.c
index 21848e2efd7..62f4492f68c 100644
--- a/src/mess/machine/a7800.c
+++ b/src/mess/machine/a7800.c
@@ -68,38 +68,54 @@ const riot6532_interface a7800_r6532_interface =
DRIVER INIT
***************************************************************************/
-static void a7800_driver_init(running_machine &machine, int ispal, int lines)
+void a7800_state::a7800_driver_init(int ispal, int lines)
{
- a7800_state *state = machine.driver_data<a7800_state>();
- address_space& space = machine.device("maincpu")->memory().space(AS_PROGRAM);
- state->m_ROM = state->memregion("maincpu")->base();
- state->m_ispal = ispal;
- state->m_lines = lines;
- state->m_p1_one_button = 1;
- state->m_p2_one_button = 1;
+ address_space& space = machine().device("maincpu")->memory().space(AS_PROGRAM);
+ m_ROM = memregion("maincpu")->base();
+ m_ispal = ispal;
+ m_lines = lines;
+ m_p1_one_button = 1;
+ m_p2_one_button = 1;
/* standard banks */
- state->membank("bank5")->set_base(&state->m_ROM[0x2040]); /* RAM0 */
- state->membank("bank6")->set_base(&state->m_ROM[0x2140]); /* RAM1 */
- state->membank("bank7")->set_base(&state->m_ROM[0x2000]); /* MAINRAM */
+ membank("bank5")->set_base(&m_ROM[0x2040]); /* RAM0 */
+ membank("bank6")->set_base(&m_ROM[0x2140]); /* RAM1 */
+ membank("bank7")->set_base(&m_ROM[0x2000]); /* MAINRAM */
/* Brutal hack put in as a consequence of new memory system; fix this */
space.install_readwrite_bank(0x0480, 0x04FF,"bank10");
- state->membank("bank10")->set_base(state->m_ROM + 0x0480);
+ membank("bank10")->set_base(m_ROM + 0x0480);
space.install_readwrite_bank(0x1800, 0x27FF, "bank11");
- state->membank("bank11")->set_base(state->m_ROM + 0x1800);
+ membank("bank11")->set_base(m_ROM + 0x1800);
+
+ m_bios_bkup = NULL;
+ m_cart_bkup = NULL;
+
+ /* Allocate memory for BIOS bank switching */
+ m_bios_bkup = auto_alloc_array_clear(machine(), UINT8, 0x4000);
+ m_cart_bkup = auto_alloc_array(machine(), UINT8, 0x4000);
+
+ /* save the BIOS so we can switch it in and out */
+ memcpy( m_bios_bkup, m_ROM + 0xC000, 0x4000 );
+
+ /* Initialize cart area to "no data" */
+ memset( m_cart_bkup, 0xFF, 0x4000 );
+
+ /* defaults for PAL bios without cart */
+ m_cart_type = 0;
+ m_stick_type = 1;
}
DRIVER_INIT_MEMBER(a7800_state,a7800_ntsc)
{
- a7800_driver_init(machine(), FALSE, 262);
+ a7800_driver_init(FALSE, 262);
}
DRIVER_INIT_MEMBER(a7800_state,a7800_pal)
{
- a7800_driver_init(machine(), TRUE, 312);
+ a7800_driver_init(TRUE, 312);
}
@@ -191,28 +207,6 @@ static int a7800_verify_cart(char header[128])
}
-DEVICE_IMAGE_START_MEMBER( a7800_state, a7800_cart )
-{
- UINT8 *memory = memregion("maincpu")->base();
-
- m_bios_bkup = NULL;
- m_cart_bkup = NULL;
-
- /* Allocate memory for BIOS bank switching */
- m_bios_bkup = auto_alloc_array_clear(machine(), UINT8, 0x4000);
- m_cart_bkup = auto_alloc_array(machine(), UINT8, 0x4000);
-
- /* save the BIOS so we can switch it in and out */
- memcpy( m_bios_bkup, memory + 0xC000, 0x4000 );
-
- /* Initialize cart area to "no data" */
- memset( m_cart_bkup, 0xFF, 0x4000 );
-
- /* defaults for PAL bios without cart */
- m_cart_type = 0;
- m_stick_type = 1;
-}
-
struct a7800_pcb
{
const char *pcb_name;
diff --git a/src/mess/machine/c64_legacy.c b/src/mess/machine/c64_legacy.c
index a3a1c6751df..5dbc255636b 100644
--- a/src/mess/machine/c64_legacy.c
+++ b/src/mess/machine/c64_legacy.c
@@ -519,7 +519,7 @@ DEVICE_IMAGE_UNLOAD_MEMBER( legacy_c64_state, c64_cart )
}
-DEVICE_IMAGE_START_MEMBER( legacy_c64_state, c64_cart )
+void legacy_c64_state::c64_legacy_driver_init()
{
/* In the first slot we can load a .crt file. In this case we want
to use game & exrom values from the header, not the default ones. */
@@ -1182,14 +1182,12 @@ MACHINE_CONFIG_FRAGMENT( c64_cartslot )
MCFG_CARTSLOT_EXTENSION_LIST("crt,80")
MCFG_CARTSLOT_NOT_MANDATORY
MCFG_CARTSLOT_INTERFACE("c64_cart")
- MCFG_CARTSLOT_START(legacy_c64_state,c64_cart)
MCFG_CARTSLOT_LOAD(legacy_c64_state,c64_cart)
MCFG_CARTSLOT_UNLOAD(legacy_c64_state,c64_cart)
MCFG_CARTSLOT_ADD("cart2")
MCFG_CARTSLOT_EXTENSION_LIST("crt,80")
MCFG_CARTSLOT_NOT_MANDATORY
- MCFG_CARTSLOT_START(legacy_c64_state,c64_cart)
MCFG_CARTSLOT_LOAD(legacy_c64_state,c64_cart)
MCFG_CARTSLOT_UNLOAD(legacy_c64_state,c64_cart)
diff --git a/src/mess/machine/c65.c b/src/mess/machine/c65.c
index b4e914d7580..0c7f160a403 100644
--- a/src/mess/machine/c65.c
+++ b/src/mess/machine/c65.c
@@ -994,12 +994,14 @@ static void c65_common_driver_init( running_machine &machine )
DRIVER_INIT_MEMBER(c65_state,c65)
{
m_dma.version = 2;
+ c64_legacy_driver_init();
c65_common_driver_init(machine());
}
DRIVER_INIT_MEMBER(c65_state,c65pal)
{
m_dma.version = 1;
+ c64_legacy_driver_init();
c65_common_driver_init(machine());
m_pal = 1;
}
diff --git a/src/mess/machine/gb.c b/src/mess/machine/gb.c
index 4b6bdee6897..1809a04964a 100644
--- a/src/mess/machine/gb.c
+++ b/src/mess/machine/gb.c
@@ -1496,7 +1496,7 @@ READ8_MEMBER(gb_state::gb_io_r)
}
}
-DEVICE_IMAGE_START_MEMBER(gb_state,gb_cart)
+DRIVER_INIT_MEMBER(gb_state, gb)
{
int I;
diff --git a/src/mess/machine/nc.c b/src/mess/machine/nc.c
index 2732be9bf10..8c85d3892d0 100644
--- a/src/mess/machine/nc.c
+++ b/src/mess/machine/nc.c
@@ -90,7 +90,7 @@ static int nc_card_load(device_image_interface &image, unsigned char **ptr)
}
-DEVICE_IMAGE_START_MEMBER( nc_state, nc_pcmcia_card )
+DRIVER_INIT_MEMBER( nc_state, nc )
{
/* card not present */
nc_set_card_present_state(machine(), 0);
diff --git a/src/mess/machine/sms.c b/src/mess/machine/sms.c
index 855f70da7e2..199123ac9cb 100644
--- a/src/mess/machine/sms.c
+++ b/src/mess/machine/sms.c
@@ -1554,7 +1554,7 @@ static int detect_lphaser_xoffset( running_machine &machine, UINT8 *rom )
}
-DEVICE_IMAGE_START_MEMBER( sms_state, sms_cart )
+void sms_state::setup_sms_cart()
{
int i;
@@ -2105,12 +2105,14 @@ DRIVER_INIT_MEMBER(sms_state,sg1000m3)
{
m_is_region_japan = 1;
m_has_fm = 1;
+ setup_sms_cart();
}
DRIVER_INIT_MEMBER(sms_state,sms1)
{
m_has_bios_full = 1;
+ setup_sms_cart();
}
@@ -2119,6 +2121,7 @@ DRIVER_INIT_MEMBER(sms_state,smsj)
m_is_region_japan = 1;
m_has_bios_2000 = 1;
m_has_fm = 1;
+ setup_sms_cart();
}
@@ -2127,11 +2130,13 @@ DRIVER_INIT_MEMBER(sms_state,sms2kr)
m_is_region_japan = 1;
m_has_bios_full = 1;
m_has_fm = 1;
+ setup_sms_cart();
}
DRIVER_INIT_MEMBER(sms_state,smssdisp)
{
+ setup_sms_cart();
}
@@ -2139,6 +2144,7 @@ DRIVER_INIT_MEMBER(sms_state,gamegear)
{
m_is_gamegear = 1;
m_has_bios_0400 = 1;
+ setup_sms_cart();
}
@@ -2147,6 +2153,7 @@ DRIVER_INIT_MEMBER(sms_state,gamegeaj)
m_is_region_japan = 1;
m_is_gamegear = 1;
m_has_bios_0400 = 1;
+ setup_sms_cart();
}
diff --git a/src/mess/machine/svi318.c b/src/mess/machine/svi318.c
index e68e7b4fc47..fa55e3c4af9 100644
--- a/src/mess/machine/svi318.c
+++ b/src/mess/machine/svi318.c
@@ -62,25 +62,9 @@ const ins8250_interface svi318_ins8250_interface[2]=
/* Cartridge */
-static int svi318_verify_cart (UINT8 magic[2])
-{
- /* read the first two bytes */
- if ( (magic[0] == 0xf3) && (magic[1] == 0x31) )
- return IMAGE_VERIFY_PASS;
- else
- return IMAGE_VERIFY_FAIL;
-}
-
-DEVICE_IMAGE_START_MEMBER( svi318_state, svi318_cart )
-{
- m_pcart = NULL;
- m_pcart_rom_size = 0;
-}
-
DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
{
- svi318_state *state = image.device().machine().driver_data<svi318_state>();
- UINT8 *p = state->memregion("user1")->base();
+ UINT8 *p = memregion("user1")->base();
UINT32 size;
if (image.software_entry() == NULL)
@@ -100,24 +84,29 @@ DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
}
}
else
+ {
memcpy(p, image.get_software_region("rom"), size);
+ }
- if (svi318_verify_cart(p) == IMAGE_VERIFY_FAIL)
+ if ( p[0] != 0xf3 || p[1] != 0x31 )
+ {
return IMAGE_INIT_FAIL;
+ }
- state->m_pcart = p;
- state->m_pcart_rom_size = size;
+ m_pcart = p;
+ m_pcart_rom_size = size;
return IMAGE_INIT_PASS;
}
+
DEVICE_IMAGE_UNLOAD_MEMBER( svi318_state, svi318_cart )
{
- svi318_state *state = image.device().machine().driver_data<svi318_state>();
- state->m_pcart = NULL;
- state->m_pcart_rom_size = 0;
+ m_pcart = NULL;
+ m_pcart_rom_size = 0;
}
+
/* PPI */
/*
diff --git a/src/mess/machine/wswan.c b/src/mess/machine/wswan.c
index df7159f8a08..bf865019afd 100644
--- a/src/mess/machine/wswan.c
+++ b/src/mess/machine/wswan.c
@@ -1329,7 +1329,8 @@ static const char* wswan_determine_romsize( UINT8 data )
return wswan_romsize_str[ ROM_UNKNOWN ];
}
-DEVICE_IMAGE_START_MEMBER(wswan_state,wswan_cart)
+
+DRIVER_INIT_MEMBER(wswan_state, wswan)
{
/* Initialize EEPROM structure */
memset( &m_eeprom, 0, sizeof( m_eeprom ) );
@@ -1349,6 +1350,7 @@ DEVICE_IMAGE_START_MEMBER(wswan_state,wswan_cart)
m_rtc.setting = 0xFF;
}
+
DEVICE_IMAGE_LOAD_MEMBER(wswan_state,wswan_cart)
{
UINT32 ii, size;