Previous 199869 Revisions Next

r20750 Tuesday 5th February, 2013 at 20:54:03 UTC by Wilbert Pol
Started moving DEVICE_IMAGE_ functions into driver_device classes. (nw)
[src/emu]diimage.h
[src/emu/imagedev]cartslot.c cartslot.h
[src/mame/drivers]jaguar.c megatech.c neogeo.c saturn.c vectrex.c
[src/mame/includes]jaguar.h megadriv.h neogeo.h snes.h stv.h vectrex.h
[src/mame/machine]megadriv.c vectrex.c
[src/mess/drivers]a2600.c a7800.c amstrad.c arcadia.c atari400.c atom.c bbc.c bbcbc.c beta.c channelf.c coleco.c crvision.c gamecom.c gamepock.c gb.c gba.c geniusiq.c intv.c mekd2.c microvsn.c msx.c n64.c nc.c nes.c ng_aes.c ngp.c pc.c pc6001.c pce.c pegasus.c pockstat.c pokemini.c portfoli.c pv1000.c pv2000.c rx78.c scv.c sg1000.c sms.c spectrum.c ssem.c studio2.c supracan.c svi318.c svision.c thomson.c timex.c tutor.c uzebox.c vboy.c vc4000.c vii.c vtech2.c wswan.c x07.c
[src/mess/formats]studio2_st2.c studio2_st2.h timex_dck.c timex_dck.h
[src/mess/includes]a7800.h amstrad.h arcadia.h atom.h bbc.h beta.h c64_legacy.h channelf.h coleco.h crvision.h gamecom.h gamepock.h gb.h gba.h intv.h lynx.h msx.h nascom1.h nc.h nes.h pc.h pce.h pokemini.h portfoli.h sg1000.h sms.h spectrum.h studio2.h svi318.h svision.h thomson.h vc4000.h vtech2.h wswan.h x07.h
[src/mess/machine]990_hd.c a7800.c amstrad.c ataricrt.c ataridev.h bbc.c c64_legacy.c gamecom.c gb.c intv.c lynx.c msx.c nascom1.c nc.c nes.c pc.c pce.c pokemini.c sms.c snescart.c svi318.c thomson.c vtech2.c wswan.c

trunk/src/emu/imagedev/cartslot.c
r20749r20750
2424      m_extensions("bin"),
2525      m_interface(NULL),
2626      m_must_be_loaded(0),
27      m_device_start(NULL),
28      m_device_load(NULL),
29      m_device_unload(NULL),
30      m_device_partialhash(NULL),
31      m_device_displayinfo(NULL)
27      m_device_image_partialhash(NULL)
3228{
3329}
3430
r20749r20750
208204void cartslot_image_device::device_start()
209205{
210206   /* if this cartridge has a custom DEVICE_START, use it */
211   if (m_device_start != NULL)
207   if (!m_device_image_start.isnull())
212208   {
213      (*m_device_start)(this);
209      m_device_image_start();
214210   }
215211}
216212
r20749r20750
222218bool cartslot_image_device::call_load()
223219{
224220   /* if this cartridge has a custom DEVICE_IMAGE_LOAD, use it */
225   if (m_device_load != NULL)
226      return (*m_device_load)(*this);
221   if (!m_device_image_load.isnull())
222      return m_device_image_load(*this);
227223
228224   /* otherwise try the normal route */
229225   return process_cartridge(true);
r20749r20750
236232void cartslot_image_device::call_unload()
237233{
238234   /* if this cartridge has a custom DEVICE_IMAGE_UNLOAD, use it */
239   if (m_device_unload != NULL)
235   if (!m_device_image_unload.isnull())
240236   {
241      (*m_device_unload)(*this);
237      m_device_image_unload(*this);
242238      return;
243239   }
244240   process_cartridge(false);
trunk/src/emu/imagedev/cartslot.h
r20749r20750
3939   // image-level overrides
4040   virtual bool call_load();
4141   virtual void call_unload();
42   virtual void call_display_info() { if (m_device_displayinfo) m_device_displayinfo(*this); }
42   virtual void call_display_info() { if (!m_device_image_displayinfo.isnull()) m_device_image_displayinfo(*this); }
4343   virtual bool call_softlist_load(char *swlist, char *swname, rom_entry *start_entry) {   load_software_part_region( this, swlist, swname, start_entry ); return TRUE; }
44   virtual device_image_partialhash_func get_partial_hash() const { return m_device_partialhash; }
44   virtual device_image_partialhash_func get_partial_hash() const { return m_device_image_partialhash; }
4545
4646   virtual iodevice_t image_type() const { return IO_CARTSLOT; }
4747
r20749r20750
5757   void set_extensions(const char *_extensions) { m_extensions = _extensions; }
5858   void set_interface(const char *_interface) { m_interface = _interface; }
5959   void set_must_be_loaded(bool _must_be_loaded) { m_must_be_loaded = _must_be_loaded; }
60   void set_device_start(device_start_func _start) { m_device_start = _start; }
61   void set_device_load(device_image_load_func _load) { m_device_load = _load; }
62   void set_device_unload(device_image_unload_func _unload) { m_device_unload = _unload; }
63   void set_partialhash(device_image_partialhash_func _partialhash) { m_device_partialhash = _partialhash; }
64   void set_displayinfo(device_image_display_info_func _displayinfo) { m_device_displayinfo = _displayinfo; }
60   void set_device_start(device_image_start_delegate _start) { m_device_image_start = _start; }
61   void set_device_load(device_image_load_delegate _load) { m_device_image_load = _load; }
62   void set_device_unload(device_image_func_delegate _unload) { m_device_image_unload = _unload; }
63   void set_partialhash(device_image_partialhash_func _partialhash) { m_device_image_partialhash = _partialhash; }
64   void set_displayinfo(device_image_func_delegate _displayinfo) { m_device_image_displayinfo = _displayinfo; }
6565
6666protected:
6767   // device-level overrides
r20749r20750
7575   const char *                    m_extensions;
7676   const char *                    m_interface;
7777   bool                            m_must_be_loaded;
78   device_start_func               m_device_start;
79   device_image_load_func          m_device_load;
80   device_image_unload_func        m_device_unload;
81   device_image_partialhash_func   m_device_partialhash;
82   device_image_display_info_func  m_device_displayinfo;
78   device_image_start_delegate     m_device_image_start;
79   device_image_load_delegate      m_device_image_load;
80   device_image_func_delegate      m_device_image_unload;
81   device_image_partialhash_func   m_device_image_partialhash;
82   device_image_func_delegate      m_device_image_displayinfo;
8383};
8484
8585// device type definition
r20749r20750
105105#define MCFG_CARTSLOT_MANDATORY                                         \
106106   static_cast<cartslot_image_device *>(device)->set_must_be_loaded(TRUE);
107107
108#define MCFG_CARTSLOT_START(_start)                                     \
109   static_cast<cartslot_image_device *>(device)->set_device_start(DEVICE_START_NAME(_start));
108#define MCFG_CARTSLOT_START(_class,_start)                              \
109   static_cast<cartslot_image_device *>(device)->set_device_start( DEVICE_IMAGE_START_DELEGATE(_class,_start));
110110
111#define MCFG_CARTSLOT_LOAD(_load)                                       \
112   static_cast<cartslot_image_device *>(device)->set_device_load(DEVICE_IMAGE_LOAD_NAME(_load));
111#define MCFG_CARTSLOT_LOAD(_class,_load)                                \
112   static_cast<cartslot_image_device *>(device)->set_device_load( DEVICE_IMAGE_LOAD_DELEGATE(_class,_load));
113113
114#define MCFG_CARTSLOT_UNLOAD(_unload)                                   \
115   static_cast<cartslot_image_device *>(device)->set_device_unload(DEVICE_IMAGE_UNLOAD_NAME(_unload));
114#define MCFG_CARTSLOT_UNLOAD(_class,_unload)                            \
115   static_cast<cartslot_image_device *>(device)->set_device_unload( DEVICE_IMAGE_UNLOAD_DELEGATE(_class,_unload));
116116
117#define MCFG_CARTSLOT_PARTIALHASH(_partialhash)                         \
117#define MCFG_CARTSLOT_PARTIALHASH(_partialhash)                  \
118118   static_cast<cartslot_image_device *>(device)->set_partialhash(_partialhash);
119119
120#define MCFG_CARTSLOT_DISPLAY_INFO(_displayinfo)                                        \
121   static_cast<cartslot_image_device *>(device)->set_displayinfo(DEVICE_IMAGE_DISPLAY_INFO_NAME(_displayinfo));
120#define MCFG_CARTSLOT_DISPLAY_INFO(_class,_displayinfo)                 \
121   static_cast<cartslot_image_device *>(device)->set_displayinfo(&DEVICE_IMAGE_DISPLAY_INFO_NAME(_class,_displayinfo));
122122
123123#endif /* __CARTSLOT_H__ */
trunk/src/emu/diimage.h
r20749r20750
104104   astring m_optspec;
105105};
106106
107
107108class device_image_interface;
108109struct feature_list;
109110struct software_part;
110111struct software_info;
111112
112113// device image interface function types
114typedef delegate<void ()> device_image_start_delegate;
115typedef delegate<int (device_image_interface &)> device_image_load_delegate;
116typedef delegate<void (device_image_interface &)> device_image_func_delegate;
117// legacy
113118typedef int (*device_image_load_func)(device_image_interface &image);
114119typedef void (*device_image_unload_func)(device_image_interface &image);
115120typedef void (*device_image_partialhash_func)(hash_collection &, const unsigned char *, unsigned long, const char *);
r20749r20750
124129#define IMAGE_VERIFY_PASS   FALSE
125130#define IMAGE_VERIFY_FAIL   TRUE
126131
127#define DEVICE_IMAGE_LOAD_NAME(name)        device_load_##name
128#define DEVICE_IMAGE_LOAD(name)             int DEVICE_IMAGE_LOAD_NAME(name)(device_image_interface &image)
132#define DEVICE_IMAGE_LOAD_NAME_LEGACY(name)        device_load_##name
133#define DEVICE_IMAGE_LOAD_LEGACY(name)             int DEVICE_IMAGE_LOAD_NAME_LEGACY(name)(device_image_interface &image)
134#define DEVICE_IMAGE_UNLOAD_NAME_LEGACY(name)      device_unload_##name
135#define DEVICE_IMAGE_UNLOAD_LEGACY(name)           void DEVICE_IMAGE_UNLOAD_NAME_LEGACY(name)(device_image_interface &image)
136#define DEVICE_IMAGE_DISPLAY_INFO_NAME(name)       device_image_display_info_func##name
137#define DEVICE_IMAGE_DISPLAY_INFO(name)            void DEVICE_IMAGE_DISPLAY_INFO_NAME(name)(device_image_interface &image)
129138
130#define DEVICE_IMAGE_UNLOAD_NAME(name)      device_unload_##name
131#define DEVICE_IMAGE_UNLOAD(name)           void DEVICE_IMAGE_UNLOAD_NAME(name)(device_image_interface &image)
132139
133#define DEVICE_IMAGE_DISPLAY_INFO_NAME(name)     device_image_display_info_func##name
134#define DEVICE_IMAGE_DISPLAY_INFO(name)          void DEVICE_IMAGE_DISPLAY_INFO_NAME(name)(device_image_interface &image)
140#define DEVICE_IMAGE_START_MEMBER_NAME(_name)          device_image_start_##_name
141#define DEVICE_IMAGE_START_NAME(_class,_name)          _class::DEVICE_IMAGE_START_MEMBER_NAME(_name)
142#define DECLARE_DEVICE_IMAGE_START_MEMBER(_name)       void DEVICE_IMAGE_START_MEMBER_NAME(_name)()
143#define DEVICE_IMAGE_START_MEMBER(_class,_name)        void DEVICE_IMAGE_START_NAME(_class,_name)()
144#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()))
135145
146#define DEVICE_IMAGE_LOAD_MEMBER_NAME(_name)           device_image_load_##_name
147#define DEVICE_IMAGE_LOAD_NAME(_class,_name)           _class::DEVICE_IMAGE_LOAD_MEMBER_NAME(_name)
148#define DECLARE_DEVICE_IMAGE_LOAD_MEMBER(_name)        int DEVICE_IMAGE_LOAD_MEMBER_NAME(_name)(device_image_interface &image)
149#define DEVICE_IMAGE_LOAD_MEMBER(_class,_name)         int DEVICE_IMAGE_LOAD_NAME(_class,_name)(device_image_interface &image)
150#define DEVICE_IMAGE_LOAD_DELEGATE(_class,_name)       device_image_load_delegate(&DEVICE_IMAGE_LOAD_NAME(_class,_name),#_class "::device_image_load_" #_name, downcast<_class *>(device->owner()))
151
152#define DEVICE_IMAGE_UNLOAD_MEMBER_NAME(_name)          device_image_unload_##_name
153#define DEVICE_IMAGE_UNLOAD_NAME(_class,_name)          _class::DEVICE_IMAGE_UNLOAD_MEMBER_NAME(_name)
154#define DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(_name)       void DEVICE_IMAGE_UNLOAD_MEMBER_NAME(_name)(device_image_interface &image)
155#define DEVICE_IMAGE_UNLOAD_MEMBER(_class,_name)        void DEVICE_IMAGE_UNLOAD_NAME(_class,_name)(device_image_interface &image)
156#define DEVICE_IMAGE_UNLOAD_DELEGATE(_class,_name)      device_image_func_delegate(&DEVICE_IMAGE_UNLOAD_NAME(_class,_name),#_class "::device_image_unload_" #_name, downcast<_class *>(device->owner()))
157
158
136159// ======================> device_image_interface
137160
138161// class representing interface-specific live image
trunk/src/mess/machine/a7800.c
r20749r20750
191191}
192192
193193
194DEVICE_START( a7800_cart )
194DEVICE_IMAGE_START_MEMBER( a7800_state, a7800_cart )
195195{
196   a7800_state *state = device->machine().driver_data<a7800_state>();
197   UINT8 *memory = state->memregion("maincpu")->base();
196   UINT8 *memory = memregion("maincpu")->base();
198197
199   state->m_bios_bkup = NULL;
200   state->m_cart_bkup = NULL;
198   m_bios_bkup = NULL;
199   m_cart_bkup = NULL;
201200
202201   /* Allocate memory for BIOS bank switching */
203   state->m_bios_bkup = auto_alloc_array_clear(device->machine(), UINT8, 0x4000);
204   state->m_cart_bkup = auto_alloc_array(device->machine(), UINT8, 0x4000);
202   m_bios_bkup = auto_alloc_array_clear(machine(), UINT8, 0x4000);
203   m_cart_bkup = auto_alloc_array(machine(), UINT8, 0x4000);
205204
206205   /* save the BIOS so we can switch it in and out */
207   memcpy( state->m_bios_bkup, memory + 0xC000, 0x4000 );
206   memcpy( m_bios_bkup, memory + 0xC000, 0x4000 );
208207
209208   /* Initialize cart area to "no data" */
210   memset( state->m_cart_bkup, 0xFF, 0x4000 );
209   memset( m_cart_bkup, 0xFF, 0x4000 );
211210
212211   /* defaults for PAL bios without cart */
213   state->m_cart_type = 0;
214   state->m_stick_type = 1;
212   m_cart_type = 0;
213   m_stick_type = 1;
215214}
216215
217216struct a7800_pcb
r20749r20750
249248   return 0;
250249}
251250
252DEVICE_IMAGE_LOAD( a7800_cart )
251DEVICE_IMAGE_LOAD_MEMBER( a7800_state, a7800_cart )
253252{
254   a7800_state *state = image.device().machine().driver_data<a7800_state>();
255253   UINT32 len = 0, start = 0;
256254   unsigned char header[128];
257255   UINT8 *memory = image.device().machine().root_device().memregion("maincpu")->base();
r20749r20750
268266         return IMAGE_INIT_FAIL;
269267
270268      len =(header[49] << 24) |(header[50] << 16) |(header[51] << 8) | header[52];
271      state->m_cart_size = len;
269      m_cart_size = len;
272270
273      state->m_cart_type =(header[53] << 8) | header[54];
274      state->m_stick_type = header[55];
275      logerror("Cart type: %x\n", state->m_cart_type);
271      m_cart_type =(header[53] << 8) | header[54];
272      m_stick_type = header[55];
273      logerror("Cart type: %x\n", m_cart_type);
276274
277275      /* For now, if game support stick and gun, set it to stick */
278      if (state->m_stick_type == 3)
279         state->m_stick_type = 1;
276      if (m_stick_type == 3)
277         m_stick_type = 1;
280278   }
281279   else
282280   {
283281      len = image.get_software_region_length("rom");
284      state->m_cart_size = len;
282      m_cart_size = len;
285283      // TODO: add stick/gun support to xml!
286      state->m_stick_type = 1;
284      m_stick_type = 1;
287285      if ((pcb_name = image.get_feature("pcb_type")) == NULL)
288         state->m_cart_type = 0;
286         m_cart_type = 0;
289287      else
290         state->m_cart_type = a7800_get_pcb_id(pcb_name);
288         m_cart_type = a7800_get_pcb_id(pcb_name);
291289   }
292290
293   if (state->m_cart_type == 0 || state->m_cart_type == 1)
291   if (m_cart_type == 0 || m_cart_type == 1)
294292   {
295293      /* Normal Cart */
296294      start = 0x10000 - len;
297      state->m_cartridge_rom = memory + start;
295      m_cartridge_rom = memory + start;
298296      if (image.software_entry() == NULL)
299         image.fread(state->m_cartridge_rom, len);
297         image.fread(m_cartridge_rom, len);
300298      else
301         memcpy(state->m_cartridge_rom, image.get_software_region("rom"), len);
299         memcpy(m_cartridge_rom, image.get_software_region("rom"), len);
302300   }
303   else if (state->m_cart_type & 0x02)
301   else if (m_cart_type & 0x02)
304302   {
305303      /* Super Cart */
306304      /* Extra ROM at $4000 */
307      if (state->m_cart_type & 0x08)
305      if (m_cart_type & 0x08)
308306      {
309307         if (image.software_entry() == NULL)
310308            image.fread(memory + 0x4000, 0x4000);
r20749r20750
314312         start = 0x4000;
315313      }
316314
317      state->m_cartridge_rom = memory + 0x10000;
315      m_cartridge_rom = memory + 0x10000;
318316      if (image.software_entry() == NULL)
319         image.fread(state->m_cartridge_rom, len);
317         image.fread(m_cartridge_rom, len);
320318      else
321         memcpy(state->m_cartridge_rom, image.get_software_region("rom") + start, len);
319         memcpy(m_cartridge_rom, image.get_software_region("rom") + start, len);
322320
323321      /* bank 0 */
324322      memcpy(memory + 0x8000, memory + 0x10000, 0x4000);
r20749r20750
332330      */
333331
334332      /* bank n-2 */
335      if (!(state->m_cart_type & 0x0d))
333      if (!(m_cart_type & 0x0d))
336334      {
337335         memcpy(memory + 0x4000, memory + 0x10000 + len - 0x8000, 0x4000);
338336      }
339337   }
340   else if (state->m_cart_type == MBANK_TYPE_ABSOLUTE)
338   else if (m_cart_type == MBANK_TYPE_ABSOLUTE)
341339   {
342340      /* F18 Hornet */
343341
344      logerror("Cart type: %x Absolute\n",state->m_cart_type);
342      logerror("Cart type: %x Absolute\n",m_cart_type);
345343
346      state->m_cartridge_rom = memory + 0x10000;
344      m_cartridge_rom = memory + 0x10000;
347345      if (image.software_entry() == NULL)
348         image.fread(state->m_cartridge_rom, len);
346         image.fread(m_cartridge_rom, len);
349347      else
350         memcpy(state->m_cartridge_rom, image.get_software_region("rom") + start, len);
348         memcpy(m_cartridge_rom, image.get_software_region("rom") + start, len);
351349
352350      /* bank 0 */
353351      memcpy(memory + 0x4000, memory + 0x10000, 0x4000);
r20749r20750
355353      /* last bank */
356354      memcpy(memory + 0x8000, memory + 0x18000, 0x8000);
357355   }
358   else if (state->m_cart_type == MBANK_TYPE_ACTIVISION)
356   else if (m_cart_type == MBANK_TYPE_ACTIVISION)
359357   {
360358      /* Activision */
361359
362      logerror("Cart type: %x Activision\n",state->m_cart_type);
360      logerror("Cart type: %x Activision\n",m_cart_type);
363361
364      state->m_cartridge_rom = memory + 0x10000;
362      m_cartridge_rom = memory + 0x10000;
365363      if (image.software_entry() == NULL)
366         image.fread(state->m_cartridge_rom, len);
364         image.fread(m_cartridge_rom, len);
367365      else
368         memcpy(state->m_cartridge_rom, image.get_software_region("rom") + start, len);
366         memcpy(m_cartridge_rom, image.get_software_region("rom") + start, len);
369367
370368      /* bank 0 */
371369      memcpy(memory + 0xa000, memory + 0x10000, 0x4000);
r20749r20750
384382
385383   }
386384
387   memcpy(state->m_cart_bkup, memory + 0xc000, 0x4000);
388   memcpy(memory + 0xc000, state->m_bios_bkup, 0x4000);
385   memcpy(m_cart_bkup, memory + 0xc000, 0x4000);
386   memcpy(memory + 0xc000, m_bios_bkup, 0x4000);
389387   return IMAGE_INIT_PASS;
390388}
391389
trunk/src/mess/machine/nascom1.c
r20749r20750
178178}
179179
180180
181DEVICE_IMAGE_LOAD( nascom1_cassette )
181DEVICE_IMAGE_LOAD_MEMBER( nascom1_state,nascom1_cassette )
182182{
183   nascom1_state *state = image.device().machine().driver_data<nascom1_state>();
184   state->m_tape_size = image.length();
185   state->m_tape_image = (UINT8*)image.ptr();
186   if (!state->m_tape_image)
183   m_tape_size = image.length();
184   m_tape_image = (UINT8*)image.ptr();
185   if (!m_tape_image)
187186      return IMAGE_INIT_FAIL;
188187
189   state->m_tape_index = 0;
188   m_tape_index = 0;
190189   return IMAGE_INIT_PASS;
191190}
192191
193192
194DEVICE_IMAGE_UNLOAD( nascom1_cassette )
193DEVICE_IMAGE_UNLOAD_MEMBER( nascom1_state,nascom1_cassette )
195194{
196   nascom1_state *state = image.device().machine().driver_data<nascom1_state>();
197   state->m_tape_image = NULL;
198   state->m_tape_size = state->m_tape_index = 0;
195   m_tape_image = NULL;
196   m_tape_size = m_tape_index = 0;
199197}
200198
201199
trunk/src/mess/machine/vtech2.c
r20749r20750
313313   }
314314}
315315
316DEVICE_IMAGE_LOAD( laser_cart )
316DEVICE_IMAGE_LOAD_MEMBER( vtech2_state, laser_cart )
317317{
318318   vtech2_state *state = image.device().machine().driver_data<vtech2_state>();
319319   int size = 0;
r20749r20750
332332   return size > 0 ? IMAGE_INIT_PASS : IMAGE_INIT_FAIL;
333333}
334334
335DEVICE_IMAGE_UNLOAD( laser_cart )
335DEVICE_IMAGE_UNLOAD_MEMBER( vtech2_state, laser_cart )
336336{
337337   vtech2_state *state = image.device().machine().driver_data<vtech2_state>();
338338   state->m_laser_bank_mask &= ~0xf000;
trunk/src/mess/machine/wswan.c
r20749r20750
13291329   return wswan_romsize_str[ ROM_UNKNOWN ];
13301330}
13311331
1332DEVICE_START(wswan_cart)
1332DEVICE_IMAGE_START_MEMBER(wswan_state,wswan_cart)
13331333{
1334   wswan_state *state = device->machine().driver_data<wswan_state>();
13351334   /* Initialize EEPROM structure */
1336   memset( &state->m_eeprom, 0, sizeof( state->m_eeprom ) );
1337   state->m_eeprom.data = NULL;
1338   state->m_eeprom.page = NULL;
1335   memset( &m_eeprom, 0, sizeof( m_eeprom ) );
1336   m_eeprom.data = NULL;
1337   m_eeprom.page = NULL;
13391338
13401339   /* Initialize RTC structure */
1341   state->m_rtc.present = 0;
1342   state->m_rtc.index = 0;
1343   state->m_rtc.year = 0;
1344   state->m_rtc.month = 0;
1345   state->m_rtc.day = 0;
1346   state->m_rtc.day_of_week = 0;
1347   state->m_rtc.hour = 0;
1348   state->m_rtc.minute = 0;
1349   state->m_rtc.second = 0;
1350   state->m_rtc.setting = 0xFF;
1340   m_rtc.present = 0;
1341   m_rtc.index = 0;
1342   m_rtc.year = 0;
1343   m_rtc.month = 0;
1344   m_rtc.day = 0;
1345   m_rtc.day_of_week = 0;
1346   m_rtc.hour = 0;
1347   m_rtc.minute = 0;
1348   m_rtc.second = 0;
1349   m_rtc.setting = 0xFF;
13511350}
13521351
1353DEVICE_IMAGE_LOAD(wswan_cart)
1352DEVICE_IMAGE_LOAD_MEMBER(wswan_state,wswan_cart)
13541353{
1355   wswan_state *state = image.device().machine().driver_data<wswan_state>();
13561354   UINT32 ii, size;
13571355   const char *sram_str;
13581356
r20749r20750
13611359   else
13621360      size = image.get_software_region_length("rom");
13631361
1364   state->m_ws_ram = (UINT8*) state->m_maincpu->space(AS_PROGRAM).get_read_ptr(0);
1365   memset(state->m_ws_ram, 0, 0xffff);
1366   state->m_ROMBanks = size / 65536;
1362   m_ws_ram = (UINT8*) m_maincpu->space(AS_PROGRAM).get_read_ptr(0);
1363   memset(m_ws_ram, 0, 0xffff);
1364   m_ROMBanks = size / 65536;
13671365
1368   for (ii = 0; ii < state->m_ROMBanks; ii++)
1366   for (ii = 0; ii < m_ROMBanks; ii++)
13691367   {
1370      if ((state->m_ROMMap[ii] = auto_alloc_array(image.device().machine(), UINT8, 0x10000)))
1368      if ((m_ROMMap[ii] = auto_alloc_array(image.device().machine(), UINT8, 0x10000)))
13711369      {
13721370         if (image.software_entry() == NULL)
13731371         {
1374            if (image.fread( state->m_ROMMap[ii], 0x10000) != 0x10000)
1372            if (image.fread( m_ROMMap[ii], 0x10000) != 0x10000)
13751373            {
13761374               image.seterror(IMAGE_ERROR_INVALIDIMAGE, "Wrongly sized ROM");
13771375               image.message(" Wrongly sized ROM");
r20749r20750
13801378            }
13811379         }
13821380         else
1383            memcpy(state->m_ROMMap[ii], image.get_software_region("rom") + ii * 0x10000, 0x10000);
1381            memcpy(m_ROMMap[ii], image.get_software_region("rom") + ii * 0x10000, 0x10000);
13841382      }
13851383      else
13861384      {
r20749r20750
13911389      }
13921390   }
13931391
1394   sram_str = wswan_determine_sram(state, state->m_ROMMap[state->m_ROMBanks - 1][0xfffb]);
1392   sram_str = wswan_determine_sram(this, m_ROMMap[m_ROMBanks - 1][0xfffb]);
13951393
1396   state->m_rtc.present = state->m_ROMMap[state->m_ROMBanks - 1][0xfffd] ? 1 : 0;
1397   state->m_rotate = state->m_ROMMap[state->m_ROMBanks-1][0xfffc] & 0x01;
1394   m_rtc.present = m_ROMMap[m_ROMBanks - 1][0xfffd] ? 1 : 0;
1395   m_rotate = m_ROMMap[m_ROMBanks-1][0xfffc] & 0x01;
13981396
13991397   {
14001398      int sum = 0;
14011399      /* Spit out some info */
14021400      logerror("ROM DETAILS\n" );
1403      logerror("\tDeveloper ID: %X\n", state->m_ROMMap[state->m_ROMBanks - 1][0xfff6]);
1404      logerror("\tMinimum system: %s\n", state->m_ROMMap[state->m_ROMBanks - 1][0xfff7] ? "WonderSwan Color" : "WonderSwan");
1405      logerror("\tCart ID: %X\n", state->m_ROMMap[state->m_ROMBanks - 1][0xfff8]);
1406      logerror("\tROM size: %s\n", wswan_determine_romsize(state->m_ROMMap[state->m_ROMBanks - 1][0xfffa]));
1401      logerror("\tDeveloper ID: %X\n", m_ROMMap[m_ROMBanks - 1][0xfff6]);
1402      logerror("\tMinimum system: %s\n", m_ROMMap[m_ROMBanks - 1][0xfff7] ? "WonderSwan Color" : "WonderSwan");
1403      logerror("\tCart ID: %X\n", m_ROMMap[m_ROMBanks - 1][0xfff8]);
1404      logerror("\tROM size: %s\n", wswan_determine_romsize(m_ROMMap[m_ROMBanks - 1][0xfffa]));
14071405      logerror("\tSRAM size: %s\n", sram_str);
1408      logerror("\tFeatures: %X\n", state->m_ROMMap[state->m_ROMBanks - 1][0xfffc]);
1409      logerror("\tRTC: %s\n", state->m_ROMMap[state->m_ROMBanks - 1][0xfffd] ? "yes" : "no");
1410      for (ii = 0; ii < state->m_ROMBanks; ii++)
1406      logerror("\tFeatures: %X\n", m_ROMMap[m_ROMBanks - 1][0xfffc]);
1407      logerror("\tRTC: %s\n", m_ROMMap[m_ROMBanks - 1][0xfffd] ? "yes" : "no");
1408      for (ii = 0; ii < m_ROMBanks; ii++)
14111409      {
14121410         int count;
14131411         for (count = 0; count < 0x10000; count++)
14141412         {
1415            sum += state->m_ROMMap[ii][count];
1413            sum += m_ROMMap[ii][count];
14161414         }
14171415      }
1418      sum -= state->m_ROMMap[state->m_ROMBanks - 1][0xffff];
1419      sum -= state->m_ROMMap[state->m_ROMBanks - 1][0xfffe];
1416      sum -= m_ROMMap[m_ROMBanks - 1][0xffff];
1417      sum -= m_ROMMap[m_ROMBanks - 1][0xfffe];
14201418      sum &= 0xffff;
1421      logerror("\tChecksum: %X%X (calculated: %04X)\n", state->m_ROMMap[state->m_ROMBanks - 1][0xffff], state->m_ROMMap[state->m_ROMBanks - 1][0xfffe], sum);
1419      logerror("\tChecksum: %X%X (calculated: %04X)\n", m_ROMMap[m_ROMBanks - 1][0xffff], m_ROMMap[m_ROMBanks - 1][0xfffe], sum);
14221420   }
14231421
1424   if (state->m_eeprom.size != 0)
1422   if (m_eeprom.size != 0)
14251423   {
1426      state->m_eeprom.data = auto_alloc_array(image.device().machine(), UINT8, state->m_eeprom.size);
1427      image.battery_load(state->m_eeprom.data, state->m_eeprom.size, 0x00);
1428      state->m_eeprom.page = state->m_eeprom.data;
1424      m_eeprom.data = auto_alloc_array(image.device().machine(), UINT8, m_eeprom.size);
1425      image.battery_load(m_eeprom.data, m_eeprom.size, 0x00);
1426      m_eeprom.page = m_eeprom.data;
14291427   }
14301428
14311429   if (image.software_entry() == NULL)
trunk/src/mess/machine/nes.c
r20749r20750
716716   return nes_line->line;
717717}
718718
719DEVICE_IMAGE_LOAD( nes_cart )
719DEVICE_IMAGE_LOAD_MEMBER( nes_state, nes_cart )
720720{
721721   nes_state *state = image.device().machine().driver_data<nes_state>();
722722   state->m_pcb_id = NO_BOARD; // initialization
trunk/src/mess/machine/lynx.c
r20749r20750
20262026   return IMAGE_VERIFY_PASS;
20272027}
20282028
2029static DEVICE_IMAGE_LOAD( lynx_cart )
2029DEVICE_IMAGE_LOAD_MEMBER( lynx_state, lynx_cart )
20302030{
20312031   /* Lynx carts have 19 address lines, the upper 8 used for bank select. The lower
20322032   11 bits are used to address data within the selected bank. Valid bank sizes are 256,
20332033   512, 1024 or 2048 bytes. Commercial roms use all 256 banks.*/
20342034
2035   lynx_state *state = image.device().machine().driver_data<lynx_state>();
2036   UINT8 *rom = state->memregion("user1")->base();
2035   UINT8 *rom = memregion("user1")->base();
20372036   UINT32 size;
20382037   UINT8 header[0x40];
20392038
r20749r20750
20632062         /* 2008-10 FP: According to Handy source these should be page_size_bank0. Are we using
20642063         it correctly in MESS? Moreover, the next two values should be page_size_bank1. We should
20652064         implement this as well */
2066         state->m_granularity = header[4] | (header[5] << 8);
2065         m_granularity = header[4] | (header[5] << 8);
20672066
20682067         logerror ("%s %dkb cartridge with %dbyte granularity from %s\n",
2069               header + 10, size / 1024, state->m_granularity, header + 42);
2068               header + 10, size / 1024, m_granularity, header + 42);
20702069
20712070         size -= 0x40;
20722071      }
r20749r20750
20762075         (see above). What if bank 0 has to be loaded elsewhere? And what about bank 1?
20772076         These should work with most .lyx files, but we need additional info on raw cart images */
20782077         if (size == 0x20000)
2079            state->m_granularity = 0x0200;
2078            m_granularity = 0x0200;
20802079         else if (size == 0x80000)
2081            state->m_granularity = 0x0800;
2080            m_granularity = 0x0800;
20822081         else
2083            state->m_granularity = 0x0400;
2082            m_granularity = 0x0400;
20842083      }
20852084
20862085      if (image.fread( rom, size) != size)
r20749r20750
20902089   {
20912090      size = image.get_software_region_length("rom");
20922091      if (size > 0xffff) // 64,128,256,512k cartridges
2093      state->m_granularity = size >> 8;
2092      m_granularity = size >> 8;
20942093      else
2095      state->m_granularity = 0x400; // Homebrew roms not using all 256 banks (T-Tris) (none currently in softlist)
2094      m_granularity = 0x400; // Homebrew roms not using all 256 banks (T-Tris) (none currently in softlist)
20962095
20972096      memcpy(rom, image.get_software_region("rom"), size);
20982097
20992098      const char *rotate = image.get_feature("rotation");
2100      state->m_rotate = 0;
2099      m_rotate = 0;
21012100      if (rotate)
21022101      {
21032102         if(strcmp(rotate, "RIGHT") == 0) {
2104            state->m_rotate = 1;
2103            m_rotate = 1;
21052104         }
21062105         else if (strcmp(rotate, "LEFT") == 0) {
2107            state->m_rotate = 2;
2106            m_rotate = 2;
21082107         }
21092108      }
21102109
r20749r20750
21182117   MCFG_CARTSLOT_EXTENSION_LIST("lnx,lyx")
21192118   MCFG_CARTSLOT_MANDATORY
21202119   MCFG_CARTSLOT_INTERFACE("lynx_cart")
2121   MCFG_CARTSLOT_LOAD(lynx_cart)
2120   MCFG_CARTSLOT_LOAD(lynx_state, lynx_cart)
21222121   MCFG_CARTSLOT_PARTIALHASH(lynx_partialhash)
21232122
21242123   /* Software lists */
trunk/src/mess/machine/pce.c
r20749r20750
134134   m_cartridge_ram[offset] = data;
135135}
136136
137DEVICE_IMAGE_LOAD(pce_cart)
137DEVICE_IMAGE_LOAD_MEMBER(pce_state,pce_cart)
138138{
139139   pce_state *state = image.device().machine().driver_data<pce_state>();
140140   UINT32 size;
trunk/src/mess/machine/bbc.c
r20749r20750
19131913/**************************************
19141914   BBC B Rom loading functions
19151915***************************************/
1916DEVICE_IMAGE_LOAD( bbcb_cart )
1916DEVICE_IMAGE_LOAD_MEMBER( bbc_state, bbcb_cart )
19171917{
1918   UINT8 *mem = image.device().machine().root_device().memregion("user1")->base();
1918   UINT8 *mem = machine().root_device().memregion("user1")->base();
19191919   int size, read_;
19201920   int addr = 0;
19211921   int index = 0;
trunk/src/mess/machine/ataricrt.c
r20749r20750
2525   SPARTADOS_X
2626};
2727
28static int a800_cart_loaded = 0;
29static int atari = 0;
30static int a800_cart_type = A800_UNKNOWN;
3128
32/*************************************
33 *
34 *  Generic code
35 *
36 *************************************/
37
38
39// Currently, the drivers have fixed 40k RAM, however the function here is ready for different sizes too
40static void a800_setbank(running_machine &machine, int cart_mounted)
41{
42   offs_t ram_top;
43   // take care of 0x0000-0x7fff: RAM or NOP
44   ram_top = MIN(machine.device<ram_device>(RAM_TAG)->size(), 0x8000) - 1;
45   machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000");
46   machine.root_device().membank("0000")->set_base(machine.device<ram_device>(RAM_TAG)->pointer());
47
48   // take care of 0x8000-0x9fff: A800 -> either right slot or RAM or NOP, others -> RAM or NOP
49   // is there anything in the right slot?
50   if (cart_mounted & RIGHT_CARTSLOT_MOUNTED)
51   {
52      machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
53      machine.root_device().membank("8000")->set_base(machine.root_device().memregion("rslot")->base());
54      machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
55   }
56   else if (a800_cart_type != BBSB)
57   {
58      ram_top = MIN(machine.device<ram_device>(RAM_TAG)->size(), 0xa000) - 1;
59      if (ram_top > 0x8000)
60      {
61         machine.device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000");
62         machine.root_device().membank("8000")->set_base(machine.device<ram_device>(RAM_TAG)->pointer() + 0x8000);
63      }
64   }
65
66   // take care of 0xa000-0xbfff: is there anything in the left slot?
67   if (cart_mounted & LEFT_CARTSLOT_MOUNTED)
68   {
69      // FIXME: this is an hack to keep XL working until we clean up its memory map as well!
70      if (atari == ATARI_800XL)
71      {
72         if (a800_cart_type == A800_16K)
73         {
74            machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
75            machine.root_device().membank("8000")->set_base(machine.root_device().memregion("lslot")->base());
76            machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
77
78            memcpy(machine.root_device().memregion("maincpu")->base() + 0x10000, machine.root_device().memregion("lslot")->base() + 0x2000, 0x2000);
79         }
80         else if (a800_cart_type == A800_8K)
81            memcpy(machine.root_device().memregion("maincpu")->base() + 0x10000, machine.root_device().memregion("lslot")->base(), 0x2000);
82         else
83            fatalerror("This type of cart is not supported yet in this driver. Please use a400 or a800.\n");
84      }
85      else if (a800_cart_type == A800_16K)
86      {
87         machine.root_device().membank("8000")->set_base(machine.root_device().memregion("lslot")->base());
88         machine.root_device().membank("a000")->set_base(machine.root_device().memregion("lslot")->base() + 0x2000);
89         machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
90      }
91      else if (a800_cart_type == BBSB)
92      {
93         // this requires separate banking in 0x8000 & 0x9000!
94         machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x8fff, "8000");
95         machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x9000, 0x9fff, "9000");
96         machine.root_device().membank("8000")->set_base(machine.root_device().memregion("lslot")->base() + 0x0000);
97         machine.root_device().membank("9000")->set_base(machine.root_device().memregion("lslot")->base() + 0x4000);
98         machine.root_device().membank("a000")->set_base(machine.root_device().memregion("lslot")->base() + 0x8000);
99         machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
100      }
101      else if (a800_cart_type == OSS_034M)
102      {
103         // this requires separate banking in 0xa000 & 0xb000!
104         machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
105         machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
106         machine.root_device().membank("b000")->set_base(machine.root_device().memregion("lslot")->base() + 0x3000);
107         machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
108      }
109      else if (a800_cart_type == OSS_M091)
110      {
111         // this requires separate banking in 0xa000 & 0xb000!
112         machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
113         machine.device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
114         machine.root_device().membank("b000")->set_base(machine.root_device().memregion("lslot")->base());
115         machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
116      }
117      else if (a800_cart_type == XEGS_32K)
118      {
119         machine.root_device().membank("8000")->set_base(machine.root_device().memregion("lslot")->base());
120         machine.root_device().membank("a000")->set_base(machine.root_device().memregion("lslot")->base() + 0x6000);
121         machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
122      }
123      else
124      {
125         machine.root_device().membank("a000")->set_base(machine.root_device().memregion("lslot")->base());
126         machine.device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
127      }
128   }
129}
130
131/* MESS specific parts that have to be started */
132static void ms_atari_machine_start(running_machine &machine, int type, int has_cart)
133{
134   /* set atari type (temporarily not used) */
135   atari = type;
136   a800_setbank(machine, a800_cart_loaded);
137}
138
139static void ms_atari800xl_machine_start(running_machine &machine, int type, int has_cart)
140{
141   /* set atari type (temporarily not used) */
142   atari = type;
143   a800_setbank(machine, a800_cart_loaded);
144}
145
146/*************************************
147 *
148 *  Atari 400
149 *
150 *************************************/
151
152MACHINE_START( a400 )
153{
154   atari_machine_start(machine);
155   ms_atari_machine_start(machine, ATARI_400, TRUE);
156}
157
158
159/*************************************
160 *
161 *  Atari 800
162 *
163 *************************************/
164
165MACHINE_START( a800 )
166{
167   atari_machine_start(machine);
168   ms_atari_machine_start(machine, ATARI_800, TRUE);
169}
170
171static WRITE8_HANDLER( x32_bank_w )
172{
173   //  printf("written %x\n", data);
174   int bank = data & 0x03;
175   space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + bank * 0x2000);
176}
177
178static WRITE8_HANDLER( w64_bank_w )
179{
180//  printf("write to %x\n", offset);
181
182   if (offset < 8)
183      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + offset * 0x2000);
184   else
185      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base());
186   // FIXME: writes to 0x8-0xf should disable the cart
187}
188
189// this covers Express 64, Diamond 64 and SpartaDOS (same bankswitch, but at different addresses)
190static WRITE8_HANDLER( ex64_bank_w )
191{
192//  printf("write to %x\n", offset);
193
194   if (offset < 8)
195      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + (7 - offset) * 0x2000);
196   else
197      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base());
198   // FIXME: writes to 0x8-0xf should disable the cart
199}
200
201static WRITE8_HANDLER( bbsb_bankl_w )
202{
203//  printf("write to %x\n", 0x8000 + offset);
204   if (offset >= 0xff6 && offset <= 0xff9)
205      space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x0000 + (offset - 0xff6) * 0x1000);
206}
207
208static WRITE8_HANDLER( bbsb_bankh_w )
209{
210//  printf("write to %x\n", 0x9000 + offset);
211   if (offset >= 0xff6 && offset <= 0xff9)
212      space.machine().root_device().membank("9000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000 + (offset - 0xff6) * 0x1000);
213}
214
215static WRITE8_HANDLER( oss_034m_w )
216{
217   switch (offset & 0x0f)
218   {
219      case 0:
220      case 1:
221         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base());
222         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
223         break;
224      case 2:
225      case 6:
226         // docs says this should put 0xff in the 0xa000 bank -> let's point to the end of the cart
227         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000);
228         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
229         break;
230      case 3:
231      case 7:
232         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000);
233         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
234         break;
235      case 4:
236      case 5:
237         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000);
238         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
239         break;
240      default:
241         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000);
242         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000);
243         break;
244   }
245}
246
247static WRITE8_HANDLER( oss_m091_w )
248{
249   switch (offset & 0x09)
250   {
251      case 0:
252         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000);
253         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
254         break;
255      case 1:
256         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
257         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
258         break;
259      case 8:
260         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000);
261         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000);
262         break;
263      case 9:
264         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000);
265         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
266         break;
267   }
268}
269
27029#if 0
27130static int bbsb_bankl = 0;
27231static int bbsb_bankh = 0;
r20749r20750
29655}
29756#endif
29857
299struct a800_pcb
300{
301   const char              *pcb_name;
302   int                     pcb_id;
303};
30458
305// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
306// WARNING: most of these are still unsupported by the driver
307static const a800_pcb pcb_list[] =
308{
309   {"standard 4k", A800_8K},
310   {"standard 8k", A800_8K},
311   {"standard 12k", A800_16K},
312   {"standard 16k", A800_16K},
313   {"right slot 4k", A800_RIGHT_4K},
314   {"right slot 8k", A800_RIGHT_8K},
315
316   {"oss 034m", OSS_034M},
317   {"oss m091", OSS_M091},
318   {"phoenix 8k", PHOENIX_8K},
319   {"xegs 32k", XEGS_32K},
320   {"bbsb", BBSB},
321   {"diamond 64k", DIAMOND_64K},
322   {"williams 64k", WILLIAMS_64K},
323   {"express 64", EXPRESS_64},
324   {"spartados x", SPARTADOS_X},
325   {"N/A", A800_UNKNOWN}
326};
327
328static int a800_get_pcb_id(const char *pcb)
329{
330   int i;
331
332   for (i = 0; i < ARRAY_LENGTH(pcb_list); i++)
333   {
334      if (!mame_stricmp(pcb_list[i].pcb_name, pcb))
335         return pcb_list[i].pcb_id;
336   }
337
338   return A800_UNKNOWN;
339}
340
341// currently this does nothing, but it will eventually install the memory handlers required by the mappers
342static void a800_setup_mappers(running_machine &machine, int type)
343{
344   switch (type)
345   {
346      case A800_4K:
347      case A800_RIGHT_4K:
348      case A800_12K:
349      case A800_8K:
350      case A800_16K:
351      case A800_RIGHT_8K:
352      case PHOENIX_8K:    // as normal 8k cart, but it can be disabled by writing to 0xd500-0xdfff
353         break;
354      case XEGS_32K:
355         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(x32_bank_w));
356         break;
357      case OSS_034M:
358         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_034m_w));
359         break;
360      case OSS_M091:
361         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_m091_w));
362         break;
363      case BBSB:
364         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x8000, 0x8fff, FUNC(bbsb_bankl_w));
365         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x9000, 0x9fff, FUNC(bbsb_bankh_w));
366         break;
367      case WILLIAMS_64K:
368         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd50f, FUNC(w64_bank_w));
369         break;
370      case DIAMOND_64K:
371         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5d0, 0xd5df, FUNC(ex64_bank_w));
372         break;
373      case EXPRESS_64:
374         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd570, 0xd57f, FUNC(ex64_bank_w));
375         break;
376      case SPARTADOS_X:
377         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5e0, 0xd5ef, FUNC(ex64_bank_w));
378         break;
379      default:
380         break;
381   }
382}
383
384static int a800_get_type(device_image_interface &image)
385{
386   UINT8 header[16];
387   image.fread(header, 0x10);
388   int hdr_type, cart_type = A800_UNKNOWN;
389
390   // add check of CART format
391   if (strncmp((const char *)header, "CART", 4))
392      fatalerror("Invalid header detected!\n");
393
394   hdr_type = (header[4] << 24) + (header[5] << 16) +  (header[6] << 8) + (header[7] << 0);
395   switch (hdr_type)
396   {
397      case 1:
398         cart_type = A800_8K;
399         break;
400      case 2:
401         cart_type = A800_16K;
402         break;
403      case 3:
404         cart_type = OSS_034M;
405         break;
406      case 8:
407         cart_type = WILLIAMS_64K;
408         break;
409      case 9:
410         cart_type = DIAMOND_64K;
411         break;
412      case 10:
413         cart_type = EXPRESS_64;
414         break;
415      case 11:
416         cart_type = SPARTADOS_X;
417         break;
418      case 12:
419         cart_type = XEGS_32K;
420         break;
421      case 15:
422         cart_type = OSS_M091;
423         break;
424      case 18:
425         cart_type = BBSB;
426         break;
427      case 21:
428         cart_type = A800_RIGHT_8K;
429         break;
430      case 39:
431         cart_type = PHOENIX_8K;
432         break;
433      case 4:
434      case 6:
435      case 7:
436      case 16:
437      case 19:
438      case 20:
439         fatalerror("Cart type \"%d\" means this is an Atari 5200 cart.\n", hdr_type);
440         break;
441      default:
442         mame_printf_info("Cart type \"%d\" is currently unsupported.\n", hdr_type);
443         break;
444   }
445   return cart_type;
446}
447
448static int a800_check_cart_type(device_image_interface &image)
449{
450   const char  *pcb_name;
451   int type = A800_UNKNOWN;
452
453   if (image.software_entry() == NULL)
454   {
455      UINT32 size = image.length();
456
457      // check if there is an header, if so extract cart_type from it, otherwise
458      // try to guess the cart_type from the file size (notice that after the
459      // a800_get_type call, we point at the start of the data)
460      if ((size % 0x1000) == 0x10)
461         type = a800_get_type(image);
462      else if (size == 0x4000)
463         type = A800_16K;
464      else if (size == 0x2000)
465      {
466         if (strcmp(image.device().tag(),":cart2") == 0)
467            type = A800_RIGHT_8K;
468         else
469            type = A800_8K;
470      }
471   }
472   else
473   {
474      if ((pcb_name = image.get_feature("cart_type")) != NULL)
475         type = a800_get_pcb_id(pcb_name);
476
477      switch (type)
478      {
479         case A800_UNKNOWN:
480         case A800_4K:
481         case A800_RIGHT_4K:
482         case A800_12K:
483         case A800_8K:
484         case A800_16K:
485         case A800_RIGHT_8K:
486            break;
487         default:
488            mame_printf_info("Cart type \"%s\" currently unsupported.\n", pcb_name);
489            break;
490      }
491   }
492
493   if ((strcmp(image.device().tag(),":cart2") == 0) && (type != A800_RIGHT_8K))
494      fatalerror("You cannot load this image '%s' in the right slot\n", image.filename());
495
496   return type;
497}
498
499DEVICE_IMAGE_LOAD( a800_cart )
500{
501   UINT32 size, start = 0;
502
503   a800_cart_loaded = a800_cart_loaded & ~LEFT_CARTSLOT_MOUNTED;
504   a800_cart_type = a800_check_cart_type(image);
505
506   a800_setup_mappers(image.device().machine(), a800_cart_type);
507
508   if (image.software_entry() == NULL)
509   {
510      size = image.length();
511      // if there is an header, skip it
512      if ((size % 0x1000) == 0x10)
513      {
514         size -= 0x10;
515         start = 0x10;
516      }
517      image.fread(image.device().machine().root_device().memregion("lslot")->base(), size - start);
518   }
519   else
520   {
521      size = image.get_software_region_length("rom");
522      memcpy(image.device().machine().root_device().memregion("lslot")->base(), image.get_software_region("rom"), size);
523   }
524
525   a800_cart_loaded |= (size > 0x0000) ? 1 : 0;
526
527   logerror("%s loaded left cartridge '%s' size %dK\n", image.device().machine().system().name, image.filename(), size/1024);
528   return IMAGE_INIT_PASS;
529}
530
531DEVICE_IMAGE_LOAD( a800_cart_right )
532{
533   UINT32 size, start = 0;
534
535   a800_cart_loaded = a800_cart_loaded & ~RIGHT_CARTSLOT_MOUNTED;
536   a800_cart_type = a800_check_cart_type(image);
537
538   a800_setup_mappers(image.device().machine(), a800_cart_type);
539
540   if (image.software_entry() == NULL)
541   {
542      size = image.length();
543      // if there is an header, skip it
544      if ((size % 0x1000) == 0x10)
545      {
546         size -= 0x10;
547         start = 0x10;
548      }
549      image.fread(image.device().machine().root_device().memregion("rslot")->base(), size - start);
550   }
551   else
552   {
553      size = image.get_software_region_length("rom");
554      memcpy(image.device().machine().root_device().memregion("rslot")->base(), image.get_software_region("rom"), size);
555   }
556
557   a800_cart_loaded |= (size > 0x0000) ? 2 : 0;
558
559   logerror("%s loaded right cartridge '%s' size 8K\n", image.device().machine().system().name, image.filename());
560   return IMAGE_INIT_PASS;
561}
562
563DEVICE_IMAGE_UNLOAD( a800_cart )
564{
565   a800_cart_loaded = a800_cart_loaded & ~LEFT_CARTSLOT_MOUNTED;
566   a800_cart_type = A800_UNKNOWN;
567   a800_setbank(image.device().machine(), a800_cart_loaded);
568}
569
570DEVICE_IMAGE_UNLOAD( a800_cart_right )
571{
572   a800_cart_loaded = a800_cart_loaded & ~RIGHT_CARTSLOT_MOUNTED;
573   a800_cart_type = A800_UNKNOWN;
574   a800_setbank(image.device().machine(), a800_cart_loaded);
575}
576
577
578/*************************************
579 *
580 *  Atari 800XL
581 *
582 *************************************/
583
584MACHINE_START( a800xl )
585{
586   atari_machine_start(machine);
587   ms_atari800xl_machine_start(machine, ATARI_800XL, TRUE);
588}
589
590/*************************************
591 *
592 *  Atari 5200 console
593 *
594 *************************************/
595
596MACHINE_START( a5200 )
597{
598   atari_machine_start(machine);
599   ms_atari_machine_start(machine, ATARI_800XL, TRUE);
600}
601
602
603DEVICE_IMAGE_LOAD( a5200_cart )
604{
605   UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base();
606   UINT32 size;
607   bool A13_mirr = FALSE;
608
609   if (image.software_entry() == NULL)
610   {
611      /* load an optional (dual) cartidge */
612      size = image.fread(&mem[0x4000], 0x8000);
613      const char *info = hashfile_extrainfo(image);
614      if (info && !strcmp(info, "A13MIRRORING"))
615         A13_mirr = TRUE;
616   }
617   else
618   {
619      size = image.get_software_region_length("rom");
620      memcpy(mem + 0x4000, image.get_software_region("rom"), size);
621      const char *pcb_name = image.get_feature("cart_type");
622      if (pcb_name && !strcmp(pcb_name, "A13MIRRORING"))
623         A13_mirr = TRUE;
624   }
625
626   if (size<0x8000) memmove(mem+0x4000+0x8000-size, mem+0x4000, size);
627   // mirroring of smaller cartridges
628   if (size <= 0x1000) memcpy(mem+0xa000, mem+0xb000, 0x1000);
629   if (size <= 0x2000) memcpy(mem+0x8000, mem+0xa000, 0x2000);
630   if (size <= 0x4000)
631   {
632      memcpy(&mem[0x4000], &mem[0x8000], 0x4000);
633      if (A13_mirr)
634      {
635         memcpy(&mem[0x8000], &mem[0xa000], 0x2000);
636         memcpy(&mem[0x6000], &mem[0x4000], 0x2000);
637      }
638   }
639   logerror("A5200 loaded cartridge '%s' size %dK\n", image.filename() , size/1024);
640   return IMAGE_INIT_PASS;
641}
642
643DEVICE_IMAGE_UNLOAD( a5200_cart )
644{
645   UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base();
646   /* zap the cartridge memory (again) */
647   memset(&mem[0x4000], 0x00, 0x8000);
648}
649
650/*************************************
651 *
652 *  Atari XEGS
653 *
654 *************************************/
655
656static UINT8 xegs_banks = 0;
657static UINT8 xegs_cart = 0;
658
659static WRITE8_HANDLER( xegs_bankswitch )
660{
661   UINT8 *cart = space.machine().root_device().memregion("user1")->base();
662   data &= xegs_banks - 1;
663   space.machine().root_device().membank("bank0")->set_base(cart + data * 0x2000);
664}
665
666MACHINE_START( xegs )
667{
668   address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM);
669   UINT8 *cart = space.machine().root_device().memregion("user1")->base();
670   UINT8 *cpu  = space.machine().root_device().memregion("maincpu")->base();
671
672   atari_machine_start(machine);
673   space.install_legacy_write_handler(0xd500, 0xd5ff, FUNC(xegs_bankswitch));
674
675   if (xegs_cart)
676   {
677      machine.root_device().membank("bank0")->set_base(cart);
678      machine.root_device().membank("bank1")->set_base(cart + (xegs_banks - 1) * 0x2000);
679   }
680   else
681   {
682      // point to built-in Missile Command (this does not work well, though... FIXME!!)
683      machine.root_device().membank("bank0")->set_base(cpu + 0x10000);
684      machine.root_device().membank("bank1")->set_base(cpu + 0x10000);
685   }
686}
687
688DEVICE_IMAGE_LOAD( xegs_cart )
689{
690   UINT32 size;
691   UINT8 *ptr = image.device().machine().root_device().memregion("user1")->base();
692
693   if (image.software_entry() == NULL)
694   {
695      // skip the header
696      image.fseek(0x10, SEEK_SET);
697      size = image.length() - 0x10;
698      if (image.fread(ptr, size) != size)
699         return IMAGE_INIT_FAIL;
700   }
701   else
702   {
703      size = image.get_software_region_length("rom");
704      memcpy(ptr, image.get_software_region("rom"), size);
705   }
706
707   xegs_banks = size / 0x2000;
708   xegs_cart = 1;
709
710   return IMAGE_INIT_PASS;
711}
712
713DEVICE_IMAGE_UNLOAD( xegs_cart )
714{
715   xegs_cart = 0;
716   xegs_banks = 0;
717}
trunk/src/mess/machine/ataridev.h
r20749r20750
2020MACHINE_START( a5200 );
2121MACHINE_START( xegs );
2222
23DEVICE_IMAGE_LOAD( a800_cart );
24DEVICE_IMAGE_UNLOAD( a800_cart );
2523
26DEVICE_IMAGE_LOAD( a800_cart_right );
27DEVICE_IMAGE_UNLOAD( a800_cart_right );
28
29DEVICE_IMAGE_LOAD( a5200_cart );
30DEVICE_IMAGE_UNLOAD( a5200_cart );
31
32DEVICE_IMAGE_LOAD( xegs_cart );
33DEVICE_IMAGE_UNLOAD( xegs_cart );
34
35
3624/*----------- defined in machine/atarifdc.c -----------*/
3725/***************************************************************************
3826    MACROS
trunk/src/mess/machine/pokemini.c
r20749r20750
13591359   return data;
13601360}
13611361
1362DEVICE_IMAGE_LOAD( pokemini_cart )
1362DEVICE_IMAGE_LOAD_MEMBER( pokemini_state, pokemini_cart )
13631363{
13641364   if (image.software_entry() == NULL)
13651365   {
trunk/src/mess/machine/thomson.c
r20749r20750
399399static UINT8 thom_cart_bank;     /* current bank */
400400
401401
402DEVICE_IMAGE_LOAD( to7_cartridge )
402DEVICE_IMAGE_LOAD_MEMBER( thomson_state, to7_cartridge )
403403{
404404   int i,j;
405405   UINT8* pos = image.device().machine().root_device().memregion("maincpu" )->base() + 0x10000;
r20749r20750
19421942
19431943
19441944
1945DEVICE_IMAGE_LOAD( mo5_cartridge )
1945DEVICE_IMAGE_LOAD_MEMBER( thomson_state, mo5_cartridge )
19461946{
19471947   UINT8* pos = image.device().machine().root_device().memregion("maincpu")->base() + 0x10000;
19481948   UINT64 size = image.length();
trunk/src/mess/machine/amstrad.c
r20749r20750
31353135}
31363136
31373137
3138DEVICE_IMAGE_LOAD(amstrad_plus_cartridge)
3138DEVICE_IMAGE_LOAD_MEMBER(amstrad_state, amstrad_plus_cartridge)
31393139{
31403140   // load CPC Plus / GX4000 cartridge image
31413141   // Format is RIFF: RIFF header chunk contains "AMS!"
trunk/src/mess/machine/sms.c
r20749r20750
15541554}
15551555
15561556
1557DEVICE_START( sms_cart )
1557DEVICE_IMAGE_START_MEMBER( sms_state, sms_cart )
15581558{
1559   sms_state *state = device->machine().driver_data<sms_state>();
15601559   int i;
15611560
15621561   for (i = 0; i < MAX_CARTRIDGES; i++)
15631562   {
1564      state->m_cartridge[i].ROM = NULL;
1565      state->m_cartridge[i].size = 0;
1566      state->m_cartridge[i].features = 0;
1567      state->m_cartridge[i].cartSRAM = NULL;
1568      state->m_cartridge[i].sram_save = 0;
1569      state->m_cartridge[i].cartRAM = NULL;
1570      state->m_cartridge[i].ram_size = 0;
1571      state->m_cartridge[i].ram_page = 0;
1563      m_cartridge[i].ROM = NULL;
1564      m_cartridge[i].size = 0;
1565      m_cartridge[i].features = 0;
1566      m_cartridge[i].cartSRAM = NULL;
1567      m_cartridge[i].sram_save = 0;
1568      m_cartridge[i].cartRAM = NULL;
1569      m_cartridge[i].ram_size = 0;
1570      m_cartridge[i].ram_page = 0;
15721571   }
1573   state->m_current_cartridge = 0;
1572   m_current_cartridge = 0;
15741573
1575   state->m_bios_port = (IO_EXPANSION | IO_CARTRIDGE | IO_CARD);
1576   if (!state->m_is_gamegear && !state->m_has_bios)
1574   m_bios_port = (IO_EXPANSION | IO_CARTRIDGE | IO_CARD);
1575   if (!m_is_gamegear && !m_has_bios)
15771576   {
1578      state->m_bios_port &= ~(IO_CARTRIDGE);
1579      state->m_bios_port |= IO_BIOS_ROM;
1577      m_bios_port &= ~(IO_CARTRIDGE);
1578      m_bios_port |= IO_BIOS_ROM;
15801579   }
15811580}
15821581
15831582
1584DEVICE_IMAGE_LOAD( sms_cart )
1583DEVICE_IMAGE_LOAD_MEMBER( sms_state, sms_cart )
15851584{
15861585   running_machine &machine = image.device().machine();
15871586   sms_state *state = machine.driver_data<sms_state>();
trunk/src/mess/machine/svi318.c
r20749r20750
7171      return IMAGE_VERIFY_FAIL;
7272}
7373
74DEVICE_START( svi318_cart )
74DEVICE_IMAGE_START_MEMBER( svi318_state, svi318_cart )
7575{
76   svi318_state *state = device->machine().driver_data<svi318_state>();
77   state->m_pcart = NULL;
78   state->m_pcart_rom_size = 0;
76   m_pcart = NULL;
77   m_pcart_rom_size = 0;
7978}
8079
81DEVICE_IMAGE_LOAD( svi318_cart )
80DEVICE_IMAGE_LOAD_MEMBER( svi318_state, svi318_cart )
8281{
8382   svi318_state *state = image.device().machine().driver_data<svi318_state>();
8483   UINT8 *p = state->memregion("user1")->base();
r20749r20750
112111   return IMAGE_INIT_PASS;
113112}
114113
115DEVICE_IMAGE_UNLOAD( svi318_cart )
114DEVICE_IMAGE_UNLOAD_MEMBER( svi318_state, svi318_cart )
116115{
117116   svi318_state *state = image.device().machine().driver_data<svi318_state>();
118117   state->m_pcart = NULL;
trunk/src/mess/machine/nc.c
r20749r20750
8989   return 0;
9090}
9191
92DEVICE_START( nc_pcmcia_card )
92
93DEVICE_IMAGE_START_MEMBER( nc_state, nc_pcmcia_card )
9394{
94   nc_state *state = device->machine().driver_data<nc_state>();
9595   /* card not present */
96   nc_set_card_present_state(device->machine(), 0);
96   nc_set_card_present_state(machine(), 0);
9797   /* card ram NULL */
98   state->m_card_ram = NULL;
99   state->m_card_size = 0;
98   m_card_ram = NULL;
99   m_card_size = 0;
100100}
101101
102
102103/* load pcmcia card */
103DEVICE_IMAGE_LOAD( nc_pcmcia_card )
104DEVICE_IMAGE_LOAD_MEMBER( nc_state, nc_pcmcia_card )
104105{
105   nc_state *state = image.device().machine().driver_data<nc_state>();
106106   /* filename specified */
107107
108108   /* attempt to load file */
109   if (nc_card_load(image, &state->m_card_ram))
109   if (nc_card_load(image, &m_card_ram))
110110   {
111      if (state->m_card_ram!=NULL)
111      if (m_card_ram!=NULL)
112112      {
113113         /* card present! */
114         if (state->m_membank_card_ram_mask!=0)
114         if (m_membank_card_ram_mask!=0)
115115         {
116            nc_set_card_present_state(image.device().machine(), 1);
116            nc_set_card_present_state(machine(), 1);
117117         }
118118         return IMAGE_INIT_PASS;
119119      }
r20749r20750
123123   return IMAGE_INIT_FAIL;
124124}
125125
126DEVICE_IMAGE_UNLOAD( nc_pcmcia_card )
126
127DEVICE_IMAGE_UNLOAD_MEMBER( nc_state, nc_pcmcia_card )
127128{
128   nc_state *state = image.device().machine().driver_data<nc_state>();
129129   /* save card data if there is any */
130130   nc_card_save(image);
131131
132132   /* free ram allocated to card */
133   if (state->m_card_ram!=NULL)
133   if (m_card_ram!=NULL)
134134   {
135      free(state->m_card_ram);
136      state->m_card_ram = NULL;
135      free(m_card_ram);
136      m_card_ram = NULL;
137137   }
138   state->m_card_size = 0;
138   m_card_size = 0;
139139
140140   /* set card not present state */
141   nc_set_card_present_state(image.device().machine(), 0);
141   nc_set_card_present_state(machine(), 0);
142142}
trunk/src/mess/machine/msx.c
r20749r20750
6969      return (asc8 > asc16) ? 4 : 5;
7070}
7171
72DEVICE_IMAGE_LOAD (msx_cart)
72DEVICE_IMAGE_LOAD_MEMBER(msx_state,msx_cart)
7373{
74   msx_state *state = image.device().machine().driver_data<msx_state>();
7574   int size;
7675   int size_aligned;
7776   UINT8 *mem;
r20749r20750
333332   if (msx_slot_list[type].loadsram)
334333      msx_slot_list[type].loadsram (image.device().machine(), st);
335334
336   state->m_cart_state[id] = st;
335   m_cart_state[id] = st;
337336   msx_memory_set_carts (image.device().machine());
338337
339338   return IMAGE_INIT_PASS;
340339}
341340
342DEVICE_IMAGE_UNLOAD (msx_cart)
341DEVICE_IMAGE_UNLOAD_MEMBER(msx_state, msx_cart)
343342{
344   msx_state *state = image.device().machine().driver_data<msx_state>();
345343   int id = -1;
346344
347345   if (strcmp(image.device().tag(),":cart1")==0)
r20749r20750
356354      return;
357355   }
358356
359   if (msx_slot_list[state->m_cart_state[id]->m_type].savesram)
360      msx_slot_list[state->m_cart_state[id]->m_type].savesram (image.device().machine(), state->m_cart_state[id]);
357   if (msx_slot_list[m_cart_state[id]->m_type].savesram)
358      msx_slot_list[m_cart_state[id]->m_type].savesram (machine(), m_cart_state[id]);
361359}
362360
363361void msx_vdp_interrupt(device_t *, v99x8_device &device, int i)
trunk/src/mess/machine/c64_legacy.c
r20749r20750
505505   *****************************************/
506506};
507507
508static DEVICE_IMAGE_UNLOAD( c64_cart )
508DEVICE_IMAGE_UNLOAD_MEMBER( legacy_c64_state, c64_cart )
509509{
510   legacy_c64_state *state = image.device().machine().driver_data<legacy_c64_state>();
511510   int i;
512511
513512   for (i = 0; i < C64_MAX_ROMBANK; i++)
514513   {
515      state->m_cart.bank[i].size = 0;
516      state->m_cart.bank[i].addr = 0;
517      state->m_cart.bank[i].index = 0;
518      state->m_cart.bank[i].start = 0;
514      m_cart.bank[i].size = 0;
515      m_cart.bank[i].addr = 0;
516      m_cart.bank[i].index = 0;
517      m_cart.bank[i].start = 0;
519518   }
520519}
521520
522521
523static DEVICE_START( c64_cart )
522DEVICE_IMAGE_START_MEMBER( legacy_c64_state, c64_cart )
524523{
525   legacy_c64_state *state = device->machine().driver_data<legacy_c64_state>();
526524   /* In the first slot we can load a .crt file. In this case we want
527525       to use game & exrom values from the header, not the default ones. */
528   state->m_cart.game = -1;
529   state->m_cart.exrom = -1;
530   state->m_cart.mapper = GENERIC_CRT;
531   state->m_cart.n_banks = 0;
526   m_cart.game = -1;
527   m_cart.exrom = -1;
528   m_cart.mapper = GENERIC_CRT;
529   m_cart.n_banks = 0;
532530}
533531
534532static int c64_crt_load( device_image_interface &image )
r20749r20750
11661164   }
11671165}
11681166
1169static DEVICE_IMAGE_LOAD( c64_cart )
1167DEVICE_IMAGE_LOAD_MEMBER( legacy_c64_state, c64_cart )
11701168{
11711169   int result = IMAGE_INIT_PASS;
11721170
r20749r20750
11841182   MCFG_CARTSLOT_EXTENSION_LIST("crt,80")
11851183   MCFG_CARTSLOT_NOT_MANDATORY
11861184   MCFG_CARTSLOT_INTERFACE("c64_cart")
1187   MCFG_CARTSLOT_START(c64_cart)
1188   MCFG_CARTSLOT_LOAD(c64_cart)
1189   MCFG_CARTSLOT_UNLOAD(c64_cart)
1185   MCFG_CARTSLOT_START(legacy_c64_state,c64_cart)
1186   MCFG_CARTSLOT_LOAD(legacy_c64_state,c64_cart)
1187   MCFG_CARTSLOT_UNLOAD(legacy_c64_state,c64_cart)
11901188
11911189   MCFG_CARTSLOT_ADD("cart2")
11921190   MCFG_CARTSLOT_EXTENSION_LIST("crt,80")
11931191   MCFG_CARTSLOT_NOT_MANDATORY
1194   MCFG_CARTSLOT_START(c64_cart)
1195   MCFG_CARTSLOT_LOAD(c64_cart)
1196   MCFG_CARTSLOT_UNLOAD(c64_cart)
1192   MCFG_CARTSLOT_START(legacy_c64_state,c64_cart)
1193   MCFG_CARTSLOT_LOAD(legacy_c64_state,c64_cart)
1194   MCFG_CARTSLOT_UNLOAD(legacy_c64_state,c64_cart)
11971195
11981196   MCFG_SOFTWARE_LIST_ADD("cart_list_c64", "c64_cart")
11991197MACHINE_CONFIG_END
trunk/src/mess/machine/intv.c
r20749r20750
545545   }
546546}
547547
548DEVICE_IMAGE_LOAD( intv_cart )
548DEVICE_IMAGE_LOAD_MEMBER( intv_state,intv_cart )
549549{
550550   if (image.software_entry() == NULL)
551551      return intv_load_rom_file(image);
r20749r20750
820820
821821/* Intellivision console + keyboard component */
822822
823DEVICE_IMAGE_LOAD( intvkbd_cart )
823DEVICE_IMAGE_LOAD_MEMBER( intv_state,intvkbd_cart )
824824{
825825   if (strcmp(image.device().tag(),":cart1") == 0) /* Legacy cartridge slot */
826826   {
trunk/src/mess/machine/snescart.c
r20749r20750
758758      logerror("WARNING: This cart type \"%s\" is not supported yet!\n", types[state->m_has_addon_chip]);
759759}
760760
761static DEVICE_IMAGE_LOAD( snes_cart )
761DEVICE_IMAGE_LOAD_MEMBER( snes_state,snes_cart )
762762{
763763   int supported_type = 1;
764764   running_machine &machine = image.device().machine();
r20749r20750
11441144   return IMAGE_INIT_PASS;
11451145}
11461146
1147static DEVICE_IMAGE_LOAD( sufami_cart )
1147DEVICE_IMAGE_LOAD_MEMBER( snes_state,sufami_cart )
11481148{
11491149   running_machine &machine = image.device().machine();
11501150   snes_state *state = machine.driver_data<snes_state>();
r20749r20750
12491249   return IMAGE_INIT_PASS;
12501250}
12511251
1252static DEVICE_IMAGE_LOAD( bsx_cart )
1252DEVICE_IMAGE_LOAD_MEMBER( snes_state,bsx_cart )
12531253{
12541254   running_machine &machine = image.device().machine();
12551255   snes_state *state = machine.driver_data<snes_state>();
r20749r20750
13511351   return IMAGE_INIT_PASS;
13521352}
13531353
1354static DEVICE_IMAGE_LOAD( bsx2slot_cart )
1354DEVICE_IMAGE_LOAD_MEMBER( snes_state,bsx2slot_cart )
13551355{
13561356   running_machine &machine = image.device().machine();
13571357   snes_state *state = machine.driver_data<snes_state>();
r20749r20750
14101410   MCFG_CARTSLOT_EXTENSION_LIST("sfc,smc,fig,swc,bin")
14111411   MCFG_CARTSLOT_NOT_MANDATORY
14121412   MCFG_CARTSLOT_INTERFACE("snes_cart")
1413   MCFG_CARTSLOT_LOAD(snes_cart)
1413   MCFG_CARTSLOT_LOAD(snes_state,snes_cart)
14141414
14151415   MCFG_SOFTWARE_LIST_ADD("cart_list","snes")
14161416   MCFG_SOFTWARE_LIST_FILTER("cart_list","NTSC")
r20749r20750
14211421   MCFG_CARTSLOT_EXTENSION_LIST("sfc,smc,fig,swc,bin")
14221422   MCFG_CARTSLOT_NOT_MANDATORY
14231423   MCFG_CARTSLOT_INTERFACE("snes_cart")
1424   MCFG_CARTSLOT_LOAD(snes_cart)
1424   MCFG_CARTSLOT_LOAD(snes_state,snes_cart)
14251425
14261426   MCFG_SOFTWARE_LIST_ADD("cart_list","snes")
14271427   MCFG_SOFTWARE_LIST_FILTER("cart_list","PAL")
r20749r20750
14341434   MCFG_CARTSLOT_EXTENSION_LIST("st,sfc")
14351435   MCFG_CARTSLOT_NOT_MANDATORY
14361436   MCFG_CARTSLOT_INTERFACE("sufami_cart")
1437   MCFG_CARTSLOT_LOAD(sufami_cart)
1437   MCFG_CARTSLOT_LOAD(snes_state,sufami_cart)
14381438
14391439   MCFG_CARTSLOT_ADD("slot_b")
14401440   MCFG_CARTSLOT_EXTENSION_LIST("st,sfc")
14411441   MCFG_CARTSLOT_NOT_MANDATORY
14421442   MCFG_CARTSLOT_INTERFACE("sufami_cart")
1443   MCFG_CARTSLOT_LOAD(sufami_cart)
1443   MCFG_CARTSLOT_LOAD(snes_state,sufami_cart)
14441444
14451445//  MCFG_SOFTWARE_LIST_ADD("cart_list","snes")
14461446MACHINE_CONFIG_END
r20749r20750
14541454   MCFG_CARTSLOT_EXTENSION_LIST("sfc,smc,fig,swc,bin")
14551455   MCFG_CARTSLOT_NOT_MANDATORY
14561456   MCFG_CARTSLOT_INTERFACE("snes_cart")
1457   MCFG_CARTSLOT_LOAD(bsx_cart)
1457   MCFG_CARTSLOT_LOAD(snes_state,bsx_cart)
14581458
14591459   MCFG_CARTSLOT_ADD("slot2")
14601460   MCFG_CARTSLOT_EXTENSION_LIST("bs,sfc")
14611461   MCFG_CARTSLOT_NOT_MANDATORY
14621462   MCFG_CARTSLOT_INTERFACE("bsx_cart")
1463   MCFG_CARTSLOT_LOAD(bsx2slot_cart)
1463   MCFG_CARTSLOT_LOAD(snes_state,bsx2slot_cart)
14641464
14651465//  MCFG_SOFTWARE_LIST_ADD("cart_list","snes")
14661466MACHINE_CONFIG_END
trunk/src/mess/machine/pc.c
r20749r20750
15781578}
15791579
15801580
1581DEVICE_IMAGE_LOAD( pcjr_cartridge )
1581DEVICE_IMAGE_LOAD_MEMBER( pc_state, pcjr_cartridge )
15821582{
15831583   UINT32  address;
15841584   UINT32  size;
trunk/src/mess/machine/gb.c
r20749r20750
14961496   }
14971497}
14981498
1499DEVICE_START(gb_cart)
1499DEVICE_IMAGE_START_MEMBER(gb_state,gb_cart)
15001500{
1501   gb_state *state = device->machine().driver_data<gb_state>();
15021501   int I;
15031502
1504   state->m_gb_dummy_rom_bank = auto_alloc_array(device->machine(), UINT8, 0x4000);
1505   memset(state->m_gb_dummy_rom_bank, 0xff, 0x4000);
1503   m_gb_dummy_rom_bank = auto_alloc_array(machine(), UINT8, 0x4000);
1504   memset(m_gb_dummy_rom_bank, 0xff, 0x4000);
15061505
1507   state->m_gb_dummy_ram_bank = auto_alloc_array(device->machine(), UINT8, 0x2000);
1508   memset(state->m_gb_dummy_ram_bank, 0xff, 0x2000 );
1506   m_gb_dummy_ram_bank = auto_alloc_array(machine(), UINT8, 0x2000);
1507   memset(m_gb_dummy_ram_bank, 0xff, 0x2000 );
15091508
15101509   for(I = 0; I < MAX_ROMBANK; I++)
15111510   {
1512      state->m_ROMMap[I] = state->m_gb_dummy_rom_bank;
1511      m_ROMMap[I] = m_gb_dummy_rom_bank;
15131512   }
15141513   for(I = 0; I < MAX_RAMBANK; I++)
15151514   {
1516      state->m_RAMMap[I] = state->m_gb_dummy_ram_bank;
1515      m_RAMMap[I] = m_gb_dummy_ram_bank;
15171516   }
1518   state->m_ROMBank00 = 0;
1519   state->m_ROMBanks = 0;
1520   state->m_RAMBanks = 0;
1521   state->m_MBCType = MBC_NONE;
1522   state->m_CartType = 0;
1523   state->m_ROMMask = 0;
1524   state->m_RAMMask = 0;
1517   m_ROMBank00 = 0;
1518   m_ROMBanks = 0;
1519   m_RAMBanks = 0;
1520   m_MBCType = MBC_NONE;
1521   m_CartType = 0;
1522   m_ROMMask = 0;
1523   m_RAMMask = 0;
15251524}
15261525
1527DEVICE_IMAGE_LOAD(gb_cart)
1526DEVICE_IMAGE_LOAD_MEMBER(gb_state,gb_cart)
15281527{
15291528   gb_state *state = image.device().machine().driver_data<gb_state>();
15301529   static const char *const CartTypes[] =
r20749r20750
22852284   }
22862285}
22872286
2288DEVICE_IMAGE_LOAD(megaduck_cart)
2287DEVICE_IMAGE_LOAD_MEMBER(gb_state,megaduck_cart)
22892288{
22902289   gb_state *state = image.device().machine().driver_data<gb_state>();
22912290   int I;
trunk/src/mess/machine/990_hd.c
r20749r20750
203203/*
204204    Initialize hard disk unit and open a hard disk image
205205*/
206static DEVICE_IMAGE_LOAD( ti990_hd )
206static DEVICE_IMAGE_LOAD_LEGACY( ti990_hd )
207207{
208208   int id = get_id_from_device( &image.device() );
209209   hd_unit_t *d;
r20749r20750
280280/*
281281    close a hard disk image
282282*/
283static DEVICE_IMAGE_UNLOAD( ti990_hd )
283static DEVICE_IMAGE_UNLOAD_LEGACY( ti990_hd )
284284{
285285   int id = get_id_from_device( image );
286286   hd_unit_t *d;
r20749r20750
10381038
10391039static const struct harddisk_interface ti990_harddisk_config =
10401040{
1041   DEVICE_IMAGE_LOAD_NAME( ti990_hd ),
1042   DEVICE_IMAGE_UNLOAD_NAME( ti990_hd ),
1041   DEVICE_IMAGE_LOAD_NAME_LEGACY( ti990_hd ),
1042   DEVICE_IMAGE_UNLOAD_NAME_LEGACY( ti990_hd ),
10431043   NULL,
10441044   NULL
10451045};
trunk/src/mess/machine/gamecom.c
r20749r20750
560560   m_p_ram = m_region_maincpu->base(); // required here because pio_w gets called before machine_reset
561561}
562562
563DEVICE_IMAGE_LOAD( gamecom_cart1 )
563DEVICE_IMAGE_LOAD_MEMBER( gamecom_state, gamecom_cart1 )
564564{
565565   gamecom_state *state = image.device().machine().driver_data<gamecom_state>();
566566   UINT32 filesize;
r20749r20750
607607   return IMAGE_INIT_PASS;
608608}
609609
610DEVICE_IMAGE_LOAD( gamecom_cart2 )
610DEVICE_IMAGE_LOAD_MEMBER( gamecom_state, gamecom_cart2 )
611611{
612612   gamecom_state *state = image.device().machine().driver_data<gamecom_state>();
613613   UINT32 filesize;
trunk/src/mess/includes/channelf.h
r20749r20750
5151   virtual void video_start();
5252   virtual void palette_init();
5353   UINT32 screen_update_channelf(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
54   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( channelf_cart );
5455};
5556
5657
trunk/src/mess/includes/c64_legacy.h
r20749r20750
8989   UINT8 *m_io_ram_r_ptr;
9090   c64_cart_t m_cart;
9191   int m_nmilevel;
92   DECLARE_DEVICE_IMAGE_START_MEMBER( c64_cart );
93   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( c64_cart );
94   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( c64_cart );
9295};
9396
9497
trunk/src/mess/includes/crvision.h
r20749r20750
5353   DECLARE_READ8_MEMBER( pia_pa_r );
5454   DECLARE_READ8_MEMBER( pia_pb_r );
5555   DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
56   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( crvision_cart );
5657
5758   UINT8 read_keyboard(int pa);
5859
trunk/src/mess/includes/intv.h
r20749r20750
140140   TIMER_CALLBACK_MEMBER(intv_interrupt2_complete);
141141   TIMER_CALLBACK_MEMBER(intv_interrupt_complete);
142142   TIMER_CALLBACK_MEMBER(intv_btb_fill);
143   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( intv_cart );
144   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( intvkbd_cart );
143145};
144146
145147/*----------- defined in video/intv.c -----------*/
146148void intv_stic_screenrefresh(running_machine &machine);
147149
148/*----------- defined in machine/intv.c -----------*/
149150
150/*  for the console alone... */
151
152DEVICE_START( intv_cart );
153DEVICE_IMAGE_LOAD( intv_cart );
154
155/* for the console + keyboard component... */
156
157DEVICE_IMAGE_LOAD( intvkbd_cart );
158
159151#endif /* INTV_H_ */
trunk/src/mess/includes/nes.h
r20749r20750
126126   DECLARE_WRITE8_MEMBER(psg_4015_w);
127127   DECLARE_WRITE8_MEMBER(psg_4017_w);
128128   void nes_banks_restore();
129   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(nes_cart);
130   DECLARE_DEVICE_IMAGE_START_MEMBER(nes_disk);
131   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(nes_disk);
132   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(nes_disk);
129133
130134   ioport_port       *m_io_ctrlsel;
131135   ioport_port       *m_io_fckey[9];
r20749r20750
156160
157161/* protos */
158162
159DEVICE_IMAGE_LOAD(nes_cart);
160DEVICE_START(nes_disk);
161DEVICE_IMAGE_LOAD(nes_disk);
162DEVICE_IMAGE_UNLOAD(nes_disk);
163
164163int nes_ppu_vidaccess( device_t *device, int address, int data );
165164
166165void nes_partialhash(hash_collection &dest, const unsigned char *data, unsigned long length, const char *functions);
trunk/src/mess/includes/msx.h
r20749r20750
130130   DECLARE_WRITE8_MEMBER(msx_printer_strobe_w);
131131   DECLARE_WRITE8_MEMBER(msx_printer_data_w);
132132   DECLARE_READ8_MEMBER(msx_printer_status_r);
133
134   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( msx_cart );
135   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( msx_cart );
133136};
134137
135138
r20749r20750
139142extern const wd17xx_interface msx_wd17xx_interface;
140143/* start/stop functions */
141144
142DEVICE_IMAGE_LOAD( msx_cart );
143DEVICE_IMAGE_UNLOAD( msx_cart );
144
145145void msx_vdp_interrupt(device_t *, v99x8_device &device, int i);
146146
147147/* I/O functions */
trunk/src/mess/includes/gamecom.h
r20749r20750
260260   TIMER_CALLBACK_MEMBER(gamecom_scanline);
261261   DECLARE_WRITE8_MEMBER( gamecom_handle_dma );
262262   DECLARE_WRITE8_MEMBER( gamecom_update_timers );
263   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( gamecom_cart1 );
264   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( gamecom_cart2 );
263265
264266protected:
265267   required_memory_bank m_bank1;
r20749r20750
275277   required_ioport m_io_styy;
276278};
277279
278
279/*----------- defined in machine/gamecom.c -----------*/
280
281extern DEVICE_IMAGE_LOAD( gamecom_cart1 );
282extern DEVICE_IMAGE_LOAD( gamecom_cart2 );
283
284280#endif /* GAMECOM_H_ */
trunk/src/mess/includes/arcadia.h
r20749r20750
9393   virtual void palette_init();
9494   UINT32 screen_update_arcadia(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
9595   INTERRUPT_GEN_MEMBER(arcadia_video_line);
96   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( arcadia_cart );
9697
9798protected:
9899   required_device<arcadia_sound_device> m_custom;
trunk/src/mess/includes/thomson.h
r20749r20750
2828#include "machine/thomflop.h"
2929
3030
31class thomson_state : public driver_device
32{
33public:
34   thomson_state(const machine_config &mconfig, device_type type, const char *tag)
35      : driver_device(mconfig, type, tag)
36   { }
37
38   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( to7_cartridge );
39   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( mo5_cartridge );
40};
41
3142/*----------- defined in machine/thomson.c -----------*/
3243
3344/*************************** common ********************************/
r20749r20750
6677/***************************** TO7 / T9000 *************************/
6778
6879/* cartridge bank-switching */
69extern DEVICE_IMAGE_LOAD( to7_cartridge );
7080extern DECLARE_WRITE8_HANDLER ( to7_cartridge_w );
7181extern DECLARE_READ8_HANDLER  ( to7_cartridge_r );
7282
r20749r20750
113123extern DECLARE_WRITE8_HANDLER ( mo5_gatearray_w );
114124
115125/* cartridge / extended RAM bank-switching */
116extern DEVICE_IMAGE_LOAD( mo5_cartridge );
117126extern DECLARE_WRITE8_HANDLER ( mo5_ext_w );
118127extern DECLARE_WRITE8_HANDLER ( mo5_cartridge_w );
119128extern DECLARE_READ8_HANDLER  ( mo5_cartridge_r );
trunk/src/mess/includes/svi318.h
r20749r20750
109109   DECLARE_WRITE8_MEMBER(svi318_ppi_port_c_w);
110110   DECLARE_WRITE_LINE_MEMBER(svi_fdc_intrq_w);
111111   DECLARE_WRITE_LINE_MEMBER(svi_fdc_drq_w);
112   DECLARE_DEVICE_IMAGE_START_MEMBER(svi318_cart);
113   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(svi318_cart);
114   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER(svi318_cart);
112115
113116protected:
114117   required_device<cpu_device> m_maincpu;
r20749r20750
143146extern const ins8250_interface svi318_ins8250_interface[2];
144147extern const wd17xx_interface svi_wd17xx_interface;
145148
146DEVICE_START( svi318_cart );
147DEVICE_IMAGE_LOAD( svi318_cart );
148DEVICE_IMAGE_UNLOAD( svi318_cart );
149
150
151149int svi318_cassette_present(running_machine &machine, int id);
152150
153151MC6845_UPDATE_ROW( svi806_crtc6845_update_row );
trunk/src/mess/includes/pc.h
r20749r20750
148148   void mc1502_fdc_irq_drq(bool state);
149149   DECLARE_FLOPPY_FORMATS( floppy_formats );
150150   IRQ_CALLBACK_MEMBER(pc_irq_callback);
151
152   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( pcjr_cartridge );
151153};
152154
153155/*----------- defined in machine/pc.c -----------*/
r20749r20750
173175
174176void mess_init_pc_common( running_machine &machine, UINT32 flags, void (*set_keyb_int_func)(running_machine &, int), void (*set_hdc_int_func)(running_machine &,int,int));
175177
176
177DEVICE_IMAGE_LOAD( pcjr_cartridge );
178
179178void pc_rtc_init(running_machine &machine);
180179
181180
trunk/src/mess/includes/vc4000.h
r20749r20750
115115   virtual void palette_init();
116116   UINT32 screen_update_vc4000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
117117   INTERRUPT_GEN_MEMBER(vc4000_video_line);
118   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(vc4000_cart);
118119
119120protected:
120121   required_device<cpu_device> m_maincpu;
trunk/src/mess/includes/gamepock.h
r20749r20750
3030   DECLARE_WRITE8_MEMBER( port_b_w );
3131   DECLARE_READ8_MEMBER( port_c_r );
3232   UINT32 screen_update_gamepock(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
33   DECLARE_DEVICE_IMAGE_START_MEMBER(gamepock_cart);
34   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(gamepock_cart);
3335};
3436
3537
trunk/src/mess/includes/studio2.h
r20749r20750
5151   DECLARE_READ_LINE_MEMBER( ef4_r );
5252   DECLARE_WRITE_LINE_MEMBER( q_w );
5353   DECLARE_INPUT_CHANGED_MEMBER( reset_w );
54   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( studio2_cart_load );
5455
5556   /* keyboard state */
5657   UINT8 m_keylatch;
trunk/src/mess/includes/vtech2.h
r20749r20750
6868   DECLARE_READ8_MEMBER(mra_bank2);
6969   DECLARE_READ8_MEMBER(mra_bank3);
7070   DECLARE_READ8_MEMBER(mra_bank4);
71   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( laser_cart );
72   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( laser_cart );
7173};
7274
7375
74/*----------- defined in machine/vtech2.c -----------*/
75DEVICE_IMAGE_LOAD( laser_cart );
76DEVICE_IMAGE_UNLOAD( laser_cart );
77
7876#endif /* VTECH2_H_ */
trunk/src/mess/includes/a7800.h
r20749r20750
7070   DECLARE_READ8_MEMBER(riot_joystick_r);
7171   DECLARE_READ8_MEMBER(riot_console_button_r);
7272   DECLARE_WRITE8_MEMBER(riot_button_pullup_w);
73
74   DECLARE_DEVICE_IMAGE_START_MEMBER( a7800_cart );
75   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a7800_cart );
7376};
7477
7578/*----------- defined in machine/a7800.c -----------*/
r20749r20750
7881
7982void a7800_partialhash(hash_collection &dest, const unsigned char *data, unsigned long length, const char *functions);
8083
81DEVICE_START( a7800_cart );
82DEVICE_IMAGE_LOAD( a7800_cart );
83
8484#endif /* A7800_H_ */
trunk/src/mess/includes/nc.h
r20749r20750
9494   DECLARE_WRITE_LINE_MEMBER(nc200_fdc_interrupt);
9595
9696   void nc200_fdc_interrupt(bool state);
97
98   DECLARE_DEVICE_IMAGE_START_MEMBER( nc_pcmcia_card );
99   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( nc_pcmcia_card );
100   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( nc_pcmcia_card );
101
97102   void nc100_machine_stop();
98103   void nc200_machine_stop();
99104};
r20749r20750
112117
113118void nc_set_card_present_state(running_machine &machine, int state);
114119
115
116/*----------- defined in machine/nc.c -----------*/
117
118DEVICE_START( nc_pcmcia_card );
119DEVICE_IMAGE_LOAD( nc_pcmcia_card );
120DEVICE_IMAGE_UNLOAD( nc_pcmcia_card );
121
122120#endif /* NC_H_ */
trunk/src/mess/includes/nascom1.h
r20749r20750
5454   DECLARE_WRITE_LINE_MEMBER(nascom2_fdc_drq_w);
5555   DECLARE_READ8_MEMBER(nascom1_hd6402_si);
5656   DECLARE_WRITE8_MEMBER(nascom1_hd6402_so);
57   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( nascom1_cassette );
58   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( nascom1_cassette );
5759};
5860
5961
r20749r20750
6163
6264extern const wd17xx_interface nascom2_wd17xx_interface;
6365
64DEVICE_IMAGE_LOAD( nascom1_cassette );
65DEVICE_IMAGE_UNLOAD( nascom1_cassette );
6666SNAPSHOT_LOAD( nascom1 );
6767#endif /* NASCOM1_H_ */
trunk/src/mess/includes/pokemini.h
r20749r20750
7878   TIMER_CALLBACK_MEMBER(pokemini_prc_counter_callback);
7979   DECLARE_WRITE8_MEMBER(pokemini_hwreg_w);
8080   DECLARE_READ8_MEMBER(pokemini_hwreg_r);
81   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pokemini_cart);
8182
8283protected:
8384   required_device<speaker_sound_device> m_speaker;
r20749r20750
8889   void pokemini_update_sound();
8990};
9091
91
92/*----------- defined in machine/pokemini.c -----------*/
93DEVICE_IMAGE_LOAD( pokemini_cart );
94
9592#endif /* POKEMINI_H */
trunk/src/mess/includes/gb.h
r20749r20750
267267   TIMER_CALLBACK_MEMBER(gb_lcd_timer_proc);
268268   TIMER_CALLBACK_MEMBER(gbc_lcd_timer_proc);
269269   DECLARE_WRITE8_MEMBER(gb_timer_callback);
270   DECLARE_DEVICE_IMAGE_START_MEMBER(gb_cart);
271   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(gb_cart);
272   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(megaduck_cart);
270273
271274protected:
272275   required_device<lr35902_cpu_device> m_maincpu;
r20749r20750
308311
309312/*----------- defined in machine/gb.c -----------*/
310313
311DEVICE_START(gb_cart);
312DEVICE_IMAGE_LOAD(gb_cart);
313
314
315314/* -- Super Game Boy specific -- */
316315#define SGB_BORDER_PAL_OFFSET   64  /* Border colours stored from pal 4-7   */
317316#define SGB_XOFFSET             48  /* GB screen starts at column 48        */
318317#define SGB_YOFFSET             40  /* GB screen starts at row 40           */
319318
320319
321/* -- Megaduck specific -- */
322extern DEVICE_IMAGE_LOAD(megaduck_cart);
323
324
325
326320/*----------- defined in video/gb.c -----------*/
327321
328322enum
trunk/src/mess/includes/amstrad.h
r20749r20750
191191   DECLARE_FLOPPY_FORMATS( floppy_formats );
192192   
193193   IRQ_CALLBACK_MEMBER(amstrad_cpu_acknowledge_int);
194
195   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( amstrad_plus_cartridge );
194196};
195197
196198
r20749r20750
204206
205207SNAPSHOT_LOAD( amstrad );
206208
207DEVICE_IMAGE_LOAD(amstrad_plus_cartridge);
208
209209extern const mc6845_interface amstrad_mc6845_intf;
210210extern const mc6845_interface amstrad_plus_mc6845_intf;
211211
trunk/src/mess/includes/sms.h
r20749r20750
209209   DECLARE_WRITE_LINE_MEMBER(sms_pause_callback);
210210   DECLARE_WRITE_LINE_MEMBER(sms_store_int_callback);
211211   void sms_machine_stop();
212   DECLARE_DEVICE_IMAGE_START_MEMBER(sms_cart);
213   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(sms_cart);
212214protected:
213215   required_shared_ptr<UINT8> m_mainram;
214216
r20749r20750
229231
230232/*----------- defined in machine/sms.c -----------*/
231233
232DEVICE_START( sms_cart );
233DEVICE_IMAGE_LOAD( sms_cart );
234
235
236234#define IO_EXPANSION    (0x80)  /* Expansion slot enable (1= disabled, 0= enabled) */
237235#define IO_CARTRIDGE    (0x40)  /* Cartridge slot enable (1= disabled, 0= enabled) */
238236#define IO_CARD         (0x20)  /* Card slot disabled (1= disabled, 0= enabled) */
trunk/src/mess/includes/lynx.h
r20749r20750
145145   TIMER_CALLBACK_MEMBER(lynx_uart_loopback_timer);
146146   TIMER_CALLBACK_MEMBER(lynx_uart_timer);
147147   void lynx_postload();
148   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( lynx_cart );
148149};
149150
150151
trunk/src/mess/includes/svision.h
r20749r20750
6464   TIMER_CALLBACK_MEMBER(svision_timer);
6565   TIMER_DEVICE_CALLBACK_MEMBER(svision_pet_timer_dev);
6666   void svision_irq();
67   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(svision_cart);
6768
6869protected:
6970   required_device<cpu_device> m_maincpu;
trunk/src/mess/includes/spectrum.h
r20749r20750
123123   UINT32 screen_update_ts2068(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
124124   void screen_eof_spectrum(screen_device &screen, bool state);
125125   INTERRUPT_GEN_MEMBER(spec_interrupt);
126   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( spectrum_cart );
127   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( timex_cart );
128   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( timex_cart );
126129
127130   unsigned int m_previous_border_x, m_previous_border_y;
128131   bitmap_ind16 m_border_bitmap;
trunk/src/mess/includes/pce.h
r20749r20750
153153   TIMER_CALLBACK_MEMBER(pce_cd_clear_ack);
154154   TIMER_CALLBACK_MEMBER(pce_cd_adpcm_dma_timer_callback);
155155   DECLARE_WRITE_LINE_MEMBER(pce_irq_changed);
156   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pce_cart);
156157};
157158
158159
159160/*----------- defined in machine/pce.c -----------*/
160DEVICE_IMAGE_LOAD(pce_cart);
161161extern const msm5205_interface pce_cd_msm5205_interface;
162162
163163#endif /* PCE_H_ */
trunk/src/mess/includes/sg1000.h
r20749r20750
6767   DECLARE_READ8_MEMBER( tvdraw_data_r );
6868   DECLARE_READ8_MEMBER( joysel_r );
6969   DECLARE_INPUT_CHANGED_MEMBER( trigger_nmi );
70   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( sg1000_cart );
71   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( omv_cart );
7072
7173   /* keyboard state */
7274   UINT8 m_keylatch;
r20749r20750
126128   DECLARE_READ8_MEMBER( ppi_pa_r );
127129   DECLARE_READ8_MEMBER( ppi_pb_r );
128130   DECLARE_WRITE8_MEMBER( ppi_pc_w );
131   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( sc3000_cart );
129132
130133   ioport_port* m_key_row[16];
131134};
trunk/src/mess/includes/beta.h
r20749r20750
4747   DECLARE_WRITE8_MEMBER( riot_pb_w );
4848   DECLARE_INPUT_CHANGED_MEMBER( trigger_reset );
4949
50   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( beta_eprom );
51
5052   /* EPROM state */
5153   int m_eprom_oe;
5254   int m_eprom_ce;
trunk/src/mess/includes/x07.h
r20749r20750
199199   inline void draw_point(UINT8 x, UINT8 y, UINT8 color);
200200   inline void draw_udk();
201201
202   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( x07_card );
203
202204   /* general */
203205   UINT8 m_sleep;
204206   UINT8 m_warm_start;
trunk/src/mess/includes/bbc.h
r20749r20750
304304   DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_intrq_w);
305305   DECLARE_WRITE_LINE_MEMBER(bbc_wd177x_drq_w);
306306   DECLARE_WRITE_LINE_MEMBER(bbc_vsync);
307
308   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcb_cart );
307309};
308310
309311
r20749r20750
317319extern const via6522_interface bbcb_user_via;
318320extern const wd17xx_interface bbc_wd17xx_interface;
319321
320/* disc support */
321
322DEVICE_IMAGE_LOAD ( bbcb_cart );
323
324322/* tape support */
325323
326324
trunk/src/mess/includes/gba.h
r20749r20750
278278   TIMER_CALLBACK_MEMBER(perform_hbl);
279279   TIMER_CALLBACK_MEMBER(perform_scan);
280280   void gba_machine_stop();
281   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(gba_cart);
281282};
282283
283284/*----------- defined in video/gba.c -----------*/
trunk/src/mess/includes/portfoli.h
r20749r20750
112112   TIMER_DEVICE_CALLBACK_MEMBER(counter_tick);
113113   DECLARE_READ8_MEMBER(hd61830_rd_r);
114114   IRQ_CALLBACK_MEMBER(portfolio_int_ack);
115   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( portfolio_cart );
115116};
116117
117118#endif
trunk/src/mess/includes/wswan.h
r20749r20750
144144   TIMER_CALLBACK_MEMBER(wswan_rtc_callback);
145145   TIMER_CALLBACK_MEMBER(wswan_scanline_interrupt);
146146   void wswan_machine_stop();
147   DECLARE_DEVICE_IMAGE_START_MEMBER( wswan_cart );
148   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( wswan_cart );
147149
148150protected:
149151   /* Interrupt flags */
r20749r20750
176178};
177179
178180
179/*----------- defined in machine/wswan.c -----------*/
180
181
182
183
184DEVICE_START(wswan_cart);
185DEVICE_IMAGE_LOAD(wswan_cart);
186
187
188181/*----------- defined in video/wswan.c -----------*/
189182
190183void wswan_refresh_scanline( running_machine &machine );
trunk/src/mess/includes/atom.h
r20749r20750
116116   /* devices */
117117   int m_previous_i8271_int_state;
118118   TIMER_DEVICE_CALLBACK_MEMBER(cassette_output_tick);
119
120   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( atom_cart );
119121};
120122
121123class atomeb_state : public atom_state
trunk/src/mess/includes/coleco.h
r20749r20750
4848   TIMER_CALLBACK_MEMBER(paddle_pulse_callback);
4949   TIMER_DEVICE_CALLBACK_MEMBER(paddle_update_callback);
5050   DECLARE_WRITE_LINE_MEMBER(coleco_vdp_interrupt);
51   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(czz50_cart);
5152};
5253
5354#endif
trunk/src/mess/formats/timex_dck.c
r20749r20750
3131static timex_cart_t timex_cart;
3232
3333
34DEVICE_IMAGE_LOAD( timex_cart )
34DEVICE_IMAGE_LOAD_LEGACY( timex_cart )
3535{
3636   int file_size;
3737   UINT8 * file_data;
r20749r20750
111111   return IMAGE_INIT_PASS;
112112}
113113
114DEVICE_IMAGE_UNLOAD( timex_cart )
114DEVICE_IMAGE_UNLOAD_LEGACY( timex_cart )
115115{
116116   if (timex_cart.data)
117117   {
trunk/src/mess/formats/timex_dck.h
r20749r20750
2727
2828const timex_cart_t *timex_cart_data(void);
2929
30DEVICE_IMAGE_LOAD( timex_cart );
31DEVICE_IMAGE_UNLOAD( timex_cart );
30DEVICE_IMAGE_LOAD_LEGACY( timex_cart );
31DEVICE_IMAGE_UNLOAD_LEGACY( timex_cart );
3232
3333#endif  /* __TIMEX_DCK_H__ */
trunk/src/mess/formats/studio2_st2.c
r20749r20750
4747    DEVICE_IMAGE_LOAD( st2_cartslot_load )
4848-------------------------------------------------*/
4949
50DEVICE_IMAGE_LOAD( st2_cartslot_load )
50DEVICE_IMAGE_LOAD_LEGACY( st2_cartslot_load )
5151{
5252   st2_header header;
5353
trunk/src/mess/formats/studio2_st2.h
r20749r20750
1313
1414#include "emu.h"
1515
16DEVICE_IMAGE_LOAD( st2_cartslot_load );
16DEVICE_IMAGE_LOAD_LEGACY( st2_cartslot_load );
1717
1818#endif
trunk/src/mess/drivers/arcadia.c
r20749r20750
451451      colortable_entry_set_value(machine().colortable, i, arcadia_palette[i]);
452452}
453453
454static DEVICE_IMAGE_LOAD( arcadia_cart )
454DEVICE_IMAGE_LOAD_MEMBER( arcadia_state, arcadia_cart )
455455{
456456   UINT8 *rom = image.device().machine().root_device().memregion("maincpu")->base();
457457   int size;
r20749r20750
555555   MCFG_CARTSLOT_EXTENSION_LIST("bin")
556556   MCFG_CARTSLOT_NOT_MANDATORY
557557   MCFG_CARTSLOT_INTERFACE("arcadia_cart")
558   MCFG_CARTSLOT_LOAD(arcadia_cart)
558   MCFG_CARTSLOT_LOAD(arcadia_state,arcadia_cart)
559559
560560   /* Software lists */
561561   MCFG_SOFTWARE_LIST_ADD("cart_list","arcadia")
trunk/src/mess/drivers/thomson.c
r20749r20750
292292
293293
294294**********************************************************************/
295class thomson_state : public driver_device
296{
297public:
298   thomson_state(const machine_config &mconfig, device_type type, const char *tag)
299      : driver_device(mconfig, type, tag) { }
300295
301};
302
303
304296/* ------------ address maps ------------ */
305297
306298static ADDRESS_MAP_START ( to7, AS_PROGRAM, 8, thomson_state )
r20749r20750
692684   MCFG_CARTSLOT_ADD("cart")
693685   MCFG_CARTSLOT_EXTENSION_LIST("m7,rom")
694686   MCFG_CARTSLOT_NOT_MANDATORY
695   MCFG_CARTSLOT_LOAD(to7_cartridge)
687   MCFG_CARTSLOT_LOAD(thomson_state,to7_cartridge)
696688   MCFG_CARTSLOT_INTERFACE("to7_cart")
697689   MCFG_SOFTWARE_LIST_ADD("cart_list","to7_cart")
698690
r20749r20750
10671059
10681060   MCFG_CARTSLOT_MODIFY("cart")
10691061   MCFG_CARTSLOT_EXTENSION_LIST("m5,rom")
1070   MCFG_CARTSLOT_LOAD(mo5_cartridge)
1062   MCFG_CARTSLOT_LOAD(thomson_state,mo5_cartridge)
10711063   MCFG_CARTSLOT_INTERFACE("mo5_cart")
10721064
10731065   MCFG_DEVICE_REMOVE("cart_list")
r20749r20750
21072099
21082100   MCFG_CARTSLOT_MODIFY("cart")
21092101   MCFG_CARTSLOT_EXTENSION_LIST("m5,rom")
2110   MCFG_CARTSLOT_LOAD(mo5_cartridge)
2102   MCFG_CARTSLOT_LOAD(thomson_state, mo5_cartridge)
21112103
21122104   /* internal ram */
21132105   MCFG_RAM_MODIFY(RAM_TAG)
r20749r20750
23322324
23332325   MCFG_CARTSLOT_MODIFY("cart")
23342326   MCFG_CARTSLOT_EXTENSION_LIST("m5,rom")
2335   MCFG_CARTSLOT_LOAD(mo5_cartridge)
2327   MCFG_CARTSLOT_LOAD(thomson_state, mo5_cartridge)
23362328
23372329   /* internal ram */
23382330   MCFG_RAM_MODIFY(RAM_TAG)
trunk/src/mess/drivers/portfoli.c
r20749r20750
741741//  DEVICE_IMAGE_LOAD( portfolio_cart )
742742//-------------------------------------------------
743743
744static DEVICE_IMAGE_LOAD( portfolio_cart )
744DEVICE_IMAGE_LOAD_MEMBER( portfolio_state, portfolio_cart )
745745{
746746   return IMAGE_INIT_FAIL;
747747}
r20749r20750
862862   MCFG_CARTSLOT_ADD("cart")
863863   MCFG_CARTSLOT_EXTENSION_LIST("bin")
864864   MCFG_CARTSLOT_INTERFACE("portfolio_cart")
865   MCFG_CARTSLOT_LOAD(portfolio_cart)
865   MCFG_CARTSLOT_LOAD(portfolio_state,portfolio_cart)
866866
867867   /* memory card */
868868/*  MCFG_MEMCARD_ADD("memcard_a")
trunk/src/mess/drivers/pce.c
r20749r20750
270270   MCFG_CARTSLOT_EXTENSION_LIST("pce,bin")
271271   MCFG_CARTSLOT_MANDATORY
272272   MCFG_CARTSLOT_INTERFACE("pce_cart")
273   MCFG_CARTSLOT_LOAD(pce_cart)
273   MCFG_CARTSLOT_LOAD(pce_state,pce_cart)
274274   MCFG_CARTSLOT_PARTIALHASH(pce_partialhash)
275275   MCFG_SOFTWARE_LIST_ADD("cart_list","pce")
276276MACHINE_CONFIG_END
r20749r20750
280280   MCFG_CARTSLOT_EXTENSION_LIST("pce,bin")
281281   MCFG_CARTSLOT_MANDATORY
282282   MCFG_CARTSLOT_INTERFACE("tg16_cart")
283   MCFG_CARTSLOT_LOAD(pce_cart)
283   MCFG_CARTSLOT_LOAD(pce_state,pce_cart)
284284   MCFG_CARTSLOT_PARTIALHASH(pce_partialhash)
285285   MCFG_SOFTWARE_LIST_ADD("cart_list","tg16")
286286MACHINE_CONFIG_END
r20749r20750
290290   MCFG_CARTSLOT_EXTENSION_LIST("pce,bin")
291291   MCFG_CARTSLOT_MANDATORY
292292   MCFG_CARTSLOT_INTERFACE("pce_cart")
293   MCFG_CARTSLOT_LOAD(pce_cart)
293   MCFG_CARTSLOT_LOAD(pce_state,pce_cart)
294294   MCFG_CARTSLOT_PARTIALHASH(pce_partialhash)
295295   MCFG_SOFTWARE_LIST_ADD("cart_list","sgx")
296296MACHINE_CONFIG_END
trunk/src/mess/drivers/bbc.c
r20749r20750
820820   MCFG_CARTSLOT_ADD("cart1")
821821   MCFG_CARTSLOT_EXTENSION_LIST("rom")
822822   MCFG_CARTSLOT_NOT_MANDATORY
823   MCFG_CARTSLOT_LOAD(bbcb_cart)
823   MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart)
824824
825825   MCFG_CARTSLOT_ADD("cart2")
826826   MCFG_CARTSLOT_EXTENSION_LIST("rom")
827827   MCFG_CARTSLOT_NOT_MANDATORY
828   MCFG_CARTSLOT_LOAD(bbcb_cart)
828   MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart)
829829
830830   MCFG_CARTSLOT_ADD("cart3")
831831   MCFG_CARTSLOT_EXTENSION_LIST("rom")
832832   MCFG_CARTSLOT_NOT_MANDATORY
833   MCFG_CARTSLOT_LOAD(bbcb_cart)
833   MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart)
834834
835835   MCFG_CARTSLOT_ADD("cart4")
836836   MCFG_CARTSLOT_EXTENSION_LIST("rom")
837837   MCFG_CARTSLOT_NOT_MANDATORY
838   MCFG_CARTSLOT_LOAD(bbcb_cart)
838   MCFG_CARTSLOT_LOAD(bbc_state, bbcb_cart)
839839MACHINE_CONFIG_END
840840
841841static MACHINE_CONFIG_START( bbca, bbc_state )
trunk/src/mess/drivers/studio2.c
r20749r20750
433433   m_cti->reset();
434434}
435435
436DEVICE_IMAGE_LOAD( studio2_cart_load )
436DEVICE_IMAGE_LOAD_MEMBER( studio2_state, studio2_cart_load )
437437{
438438   if (image.software_entry() == NULL)
439439      return device_load_st2_cartslot_load(image);
r20749r20750
454454   MCFG_CARTSLOT_ADD("cart")
455455   MCFG_CARTSLOT_EXTENSION_LIST("st2,bin")
456456   MCFG_CARTSLOT_NOT_MANDATORY
457   MCFG_CARTSLOT_LOAD(studio2_cart_load)
457   MCFG_CARTSLOT_LOAD(studio2_state,studio2_cart_load)
458458   MCFG_CARTSLOT_INTERFACE("studio2_cart")
459459
460460   /* software lists */
trunk/src/mess/drivers/coleco.c
r20749r20750
286286//  return retval;
287287//}
288288
289static DEVICE_IMAGE_LOAD( czz50_cart )
289DEVICE_IMAGE_LOAD_MEMBER( coleco_state,czz50_cart )
290290{
291291   UINT8 *ptr = image.device().machine().root_device().memregion(Z80_TAG)->base() + 0x8000;
292292   UINT32 size;
r20749r20750
357357   MCFG_CARTSLOT_ADD("cart")
358358   MCFG_CARTSLOT_EXTENSION_LIST("rom,col,bin")
359359   MCFG_CARTSLOT_NOT_MANDATORY
360   MCFG_CARTSLOT_LOAD(czz50_cart)
360   MCFG_CARTSLOT_LOAD(coleco_state,czz50_cart)
361361   MCFG_CARTSLOT_INTERFACE("coleco_cart")
362362
363363   /* software lists */
trunk/src/mess/drivers/geniusiq.c
r20749r20750
239239
240240   DECLARE_READ16_MEMBER(unk0_r) { return 0; }
241241   DECLARE_READ16_MEMBER(unk_r) { return machine().rand(); }
242   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( iq128_cart );
243   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( iq128_cart );
242244
243245private:
244246   UINT16      m_gfx_y;
r20749r20750
762764   m_cart_state = IQ128_NO_CART;
763765}
764766
765static DEVICE_IMAGE_LOAD(iq128_cart)
767DEVICE_IMAGE_LOAD_MEMBER(geniusiq_state,iq128_cart)
766768{
767   return image.device().machine().driver_data<geniusiq_state>()->cart_load(image);
769   return cart_load(image);
768770}
769771
770static DEVICE_IMAGE_UNLOAD(iq128_cart)
772DEVICE_IMAGE_UNLOAD_MEMBER(geniusiq_state,iq128_cart)
771773{
772   image.device().machine().driver_data<geniusiq_state>()->cart_unload(image);
774   cart_unload(image);
773775}
774776
775777static MACHINE_CONFIG_START( iq128, geniusiq_state )
r20749r20750
794796   MCFG_CARTSLOT_ADD("cart")
795797   MCFG_CARTSLOT_EXTENSION_LIST("bin")
796798   MCFG_CARTSLOT_NOT_MANDATORY
797   MCFG_CARTSLOT_LOAD(iq128_cart)
798   MCFG_CARTSLOT_UNLOAD(iq128_cart)
799   MCFG_CARTSLOT_LOAD(geniusiq_state,iq128_cart)
800   MCFG_CARTSLOT_UNLOAD(geniusiq_state,iq128_cart)
799801   MCFG_CARTSLOT_INTERFACE("iq128_cart")
800802
801803   /* Software lists */
trunk/src/mess/drivers/a2600.c
r20749r20750
128128   DECLARE_WRITE8_MEMBER(switch_B_w);
129129   DECLARE_WRITE_LINE_MEMBER(irq_callback);
130130   DECLARE_READ8_MEMBER(riot_input_port_8_r);
131   DECLARE_DEVICE_IMAGE_START_MEMBER( a2600_cart );
132   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a2600_cart );
131133
132134protected:
133135   required_device<vcs_control_port_device> m_joy1;
r20749r20750
542544}
543545
544546
545static DEVICE_START( a2600_cart )
547DEVICE_IMAGE_START_MEMBER( a2600_state, a2600_cart )
546548{
547   a2600_state *state = device->machine().driver_data<a2600_state>();
548   state->m_banking_mode = 0xff;
549   m_banking_mode = 0xff;
549550}
550551
551552
552static DEVICE_IMAGE_LOAD( a2600_cart )
553DEVICE_IMAGE_LOAD_MEMBER( a2600_state, a2600_cart )
553554{
554   a2600_state *state = image.device().machine().driver_data<a2600_state>();
555   running_machine &machine = image.device().machine();
556   UINT8 *cart = CART;
555   UINT8 *cart = memregion("user1")->base();
557556
558557   if (image.software_entry() == NULL)
559      state->m_cart_size = image.length();
558      m_cart_size = image.length();
560559   else
561      state->m_cart_size = image.get_software_region_length("rom");
560      m_cart_size = image.get_software_region_length("rom");
562561
563   switch (state->m_cart_size)
562   switch (m_cart_size)
564563   {
565564   case 0x00800:
566565   case 0x01000:
r20749r20750
579578      return 1; /* unsupported image format */
580579   }
581580
582   state->m_current_bank = 0;
581   m_current_bank = 0;
583582
584583   if (image.software_entry() == NULL)
585584   {
586      image.fread(cart, state->m_cart_size);
585      image.fread(cart, m_cart_size);
587586   }
588587   else
589588   {
590      memcpy(cart, image.get_software_region("rom"), state->m_cart_size);
589      memcpy(cart, image.get_software_region("rom"), m_cart_size);
591590
592591      const char *mapper = software_part_get_feature((software_part*)image.part_entry(), "mapper");
593592
r20749r20750
616615            { "8in1",  mode8in1 },
617616         };
618617
619         for (int i = 0; i < ARRAY_LENGTH(mapper_types) && state->m_banking_mode == 0xff; i++)
618         for (int i = 0; i < ARRAY_LENGTH(mapper_types) && m_banking_mode == 0xff; i++)
620619         {
621620            if (!mame_stricmp(mapper, mapper_types[i].mapper_name))
622621            {
623               state->m_banking_mode = mapper_types[i].mapper_type;
622               m_banking_mode = mapper_types[i].mapper_type;
624623            }
625624         }
626625      }
627626   }
628627
629   if (!(state->m_cart_size == 0x4000 && detect_modef6(image.device().machine())))
628   if (!(m_cart_size == 0x4000 && detect_modef6(machine())))
630629   {
631      while (state->m_cart_size > 0x00800)
630      while (m_cart_size > 0x00800)
632631      {
633         if (!memcmp(cart, &cart[state->m_cart_size/2],state->m_cart_size/2)) state->m_cart_size /= 2;
632         if (!memcmp(cart, &cart[m_cart_size/2],m_cart_size/2)) m_cart_size /= 2;
634633         else break;
635634      }
636635   }
r20749r20750
19221921   MCFG_CARTSLOT_ADD("cart")
19231922   MCFG_CARTSLOT_EXTENSION_LIST("bin,a26")
19241923   MCFG_CARTSLOT_MANDATORY
1925   MCFG_CARTSLOT_START(a2600_cart)
1926   MCFG_CARTSLOT_LOAD(a2600_cart)
1924   MCFG_CARTSLOT_START(a2600_state,a2600_cart)
1925   MCFG_CARTSLOT_LOAD(a2600_state,a2600_cart)
19271926   MCFG_CARTSLOT_INTERFACE("a2600_cart")
19281927
19291928   /* software lists */
trunk/src/mess/drivers/amstrad.c
r20749r20750
828828   MCFG_CARTSLOT_EXTENSION_LIST("cpr,bin")
829829   MCFG_CARTSLOT_MANDATORY
830830   MCFG_CARTSLOT_INTERFACE("gx4000_cart")
831   MCFG_CARTSLOT_LOAD(amstrad_plus_cartridge)
831   MCFG_CARTSLOT_LOAD(amstrad_state,amstrad_plus_cartridge)
832832   MCFG_SOFTWARE_LIST_ADD("cart_list","gx4000")
833833MACHINE_CONFIG_END
834834
trunk/src/mess/drivers/nc.c
r20749r20750
16091609   MCFG_CARTSLOT_ADD("cart")
16101610   MCFG_CARTSLOT_EXTENSION_LIST("crd,card")
16111611   MCFG_CARTSLOT_NOT_MANDATORY
1612   MCFG_CARTSLOT_START(nc_pcmcia_card)
1613   MCFG_CARTSLOT_LOAD(nc_pcmcia_card)
1614   MCFG_CARTSLOT_UNLOAD(nc_pcmcia_card)
1612   MCFG_CARTSLOT_START(nc_state,nc_pcmcia_card)
1613   MCFG_CARTSLOT_LOAD(nc_state,nc_pcmcia_card)
1614   MCFG_CARTSLOT_UNLOAD(nc_state,nc_pcmcia_card)
16151615
16161616   /* internal ram */
16171617   MCFG_RAM_ADD(RAM_TAG)
trunk/src/mess/drivers/mekd2.c
r20749r20750
6666   UINT8 m_digit;
6767   UINT8 m_keydata;
6868   TIMER_CALLBACK_MEMBER(mekd2_trace);
69   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(mekd2_cart);
6970};
7071
7172
r20749r20750
295296   DEVCB_NULL                      /* out irq func */
296297};
297298
298static DEVICE_IMAGE_LOAD( mekd2_cart )
299DEVICE_IMAGE_LOAD_MEMBER( mekd2_state,mekd2_cart )
299300{
300301   static const char magic[] = "MEK6800D2";
301302   char buff[9];
r20749r20750
344345   MCFG_CARTSLOT_ADD("cart")
345346   MCFG_CARTSLOT_EXTENSION_LIST("d2")
346347   MCFG_CARTSLOT_NOT_MANDATORY
347   MCFG_CARTSLOT_LOAD(mekd2_cart)
348   MCFG_CARTSLOT_LOAD(mekd2_state,mekd2_cart)
348349
349350   /* Devices */
350351   MCFG_PIA6821_ADD("pia_s", mekd2_s_mc6821_intf)
trunk/src/mess/drivers/beta.c
r20749r20750
224224
225225/* Quickload */
226226
227static DEVICE_IMAGE_UNLOAD( beta_eprom )
227DEVICE_IMAGE_UNLOAD_MEMBER( beta_state, beta_eprom )
228228{
229   beta_state *state = image.device().machine().driver_data<beta_state>();
229   UINT8 *ptr = m_eprom->base();
230230
231   UINT8 *ptr = state->m_eprom->base();
232
233231   image.fwrite(ptr, 0x800);
234232}
235233
r20749r20750
271269   MCFG_CARTSLOT_ADD(EPROM_TAG)
272270   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
273271   MCFG_CARTSLOT_NOT_MANDATORY
274   MCFG_CARTSLOT_UNLOAD(beta_eprom)
272   MCFG_CARTSLOT_UNLOAD(beta_state,beta_eprom)
275273
276274   /* internal ram */
277275   MCFG_RAM_ADD(RAM_TAG)
trunk/src/mess/drivers/a7800.c
r20749r20750
302302   MCFG_CARTSLOT_ADD("cart")
303303   MCFG_CARTSLOT_EXTENSION_LIST("bin,a78")
304304   MCFG_CARTSLOT_NOT_MANDATORY
305   MCFG_CARTSLOT_START(a7800_cart)
306   MCFG_CARTSLOT_LOAD(a7800_cart)
305   MCFG_CARTSLOT_START(a7800_state,a7800_cart)
306   MCFG_CARTSLOT_LOAD(a7800_state,a7800_cart)
307307   MCFG_CARTSLOT_PARTIALHASH(a7800_partialhash)
308308   MCFG_CARTSLOT_INTERFACE("a7800_cart")
309309
trunk/src/mess/drivers/atom.c
r20749r20750
700700   { 0 }
701701};
702702
703static DEVICE_IMAGE_LOAD( atom_cart )
703DEVICE_IMAGE_LOAD_MEMBER( atom_state, atom_cart )
704704{
705705   UINT32 size;
706706   UINT8 *temp_copy;
r20749r20750
772772   MCFG_CARTSLOT_ADD(_tag) \
773773   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom") \
774774   MCFG_CARTSLOT_INTERFACE("atom_cart") \
775   MCFG_CARTSLOT_LOAD(atom_cart)
775   MCFG_CARTSLOT_LOAD(atom_state, atom_cart)
776776
777777
778778static MACHINE_CONFIG_START( atom, atom_state )
trunk/src/mess/drivers/pokemini.c
r20749r20750
9595   MCFG_CARTSLOT_EXTENSION_LIST("min,bin")
9696   MCFG_CARTSLOT_NOT_MANDATORY
9797   MCFG_CARTSLOT_INTERFACE("pokemini_cart")
98   MCFG_CARTSLOT_LOAD(pokemini_cart)
98   MCFG_CARTSLOT_LOAD(pokemini_state,pokemini_cart)
9999
100100   /* Software lists */
101101   MCFG_SOFTWARE_LIST_ADD("cart_list","pokemini")
trunk/src/mess/drivers/tutor.c
r20749r20750
207207   virtual void machine_start();
208208   virtual void machine_reset();
209209   TIMER_CALLBACK_MEMBER(tape_interrupt_handler);
210   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( tutor_cart );
211   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( tutor_cart );
210212};
211213
212214
r20749r20750
296298}
297299
298300
299static DEVICE_IMAGE_LOAD( tutor_cart )
301DEVICE_IMAGE_LOAD_MEMBER( tutor_state, tutor_cart )
300302{
301303   UINT32 size;
302304   UINT8 *ptr = image.device().machine().root_device().memregion("maincpu")->base();
r20749r20750
316318   return IMAGE_INIT_PASS;
317319}
318320
319static DEVICE_IMAGE_UNLOAD( tutor_cart )
321DEVICE_IMAGE_UNLOAD_MEMBER( tutor_state, tutor_cart )
320322{
321323   memset(image.device().machine().root_device().memregion("maincpu")->base() + cartridge_base, 0, 0x6000);
322324}
r20749r20750
781783   /* cartridge */
782784   MCFG_CARTSLOT_ADD("cart")
783785   MCFG_CARTSLOT_NOT_MANDATORY
784   MCFG_CARTSLOT_LOAD(tutor_cart)
785   MCFG_CARTSLOT_UNLOAD(tutor_cart)
786   MCFG_CARTSLOT_LOAD(tutor_state, tutor_cart)
787   MCFG_CARTSLOT_UNLOAD(tutor_state, tutor_cart)
786788   MCFG_CARTSLOT_INTERFACE("tutor_cart")
787789
788790   /* software lists */
trunk/src/mess/drivers/wswan.c
r20749r20750
155155   MCFG_CARTSLOT_EXTENSION_LIST("ws,wsc,bin")
156156   MCFG_CARTSLOT_MANDATORY
157157   MCFG_CARTSLOT_INTERFACE("wswan_cart")
158   MCFG_CARTSLOT_START(wswan_cart)
159   MCFG_CARTSLOT_LOAD(wswan_cart)
158   MCFG_CARTSLOT_START(wswan_state,wswan_cart)
159   MCFG_CARTSLOT_LOAD(wswan_state,wswan_cart)
160160
161161   /* software lists */
162162   MCFG_SOFTWARE_LIST_ADD("cart_list","wswan")
trunk/src/mess/drivers/sms.c
r20749r20750
402402   MCFG_CARTSLOT_EXTENSION_LIST("sms,bin")
403403   MCFG_CARTSLOT_NOT_MANDATORY
404404   MCFG_CARTSLOT_INTERFACE("sms_cart")
405   MCFG_CARTSLOT_START(sms_cart)
406   MCFG_CARTSLOT_LOAD(sms_cart)
405   MCFG_CARTSLOT_START(sms_state,sms_cart)
406   MCFG_CARTSLOT_LOAD(sms_state,sms_cart)
407407
408408   MCFG_SOFTWARE_LIST_ADD("cart_list","sms")
409409MACHINE_CONFIG_END
r20749r20750
413413   MCFG_CARTSLOT_EXTENSION_LIST("gg,bin")
414414   MCFG_CARTSLOT_MANDATORY
415415   MCFG_CARTSLOT_INTERFACE("gamegear_cart")
416   MCFG_CARTSLOT_START(sms_cart)
417   MCFG_CARTSLOT_LOAD(sms_cart)
416   MCFG_CARTSLOT_START(sms_state,sms_cart)
417   MCFG_CARTSLOT_LOAD(sms_state,sms_cart)
418418
419419   MCFG_SOFTWARE_LIST_ADD("cart_list","gamegear")
420420MACHINE_CONFIG_END
r20749r20750
495495   MCFG_CARTSLOT_EXTENSION_LIST("sms,bin") \
496496   MCFG_CARTSLOT_NOT_MANDATORY \
497497   MCFG_CARTSLOT_INTERFACE("sms_cart") \
498   MCFG_CARTSLOT_START(sms_cart) \
499   MCFG_CARTSLOT_LOAD(sms_cart)
498   MCFG_CARTSLOT_START(sms_state,sms_cart) \
499   MCFG_CARTSLOT_LOAD(sms_state,sms_cart)
500500
501501static MACHINE_CONFIG_DERIVED( sms_sdisp, sms2_ntsc )
502502
r20749r20750
512512   MCFG_CARTSLOT_EXTENSION_LIST("sms,bin")
513513   MCFG_CARTSLOT_MANDATORY
514514   MCFG_CARTSLOT_INTERFACE("sms_cart")
515   MCFG_CARTSLOT_START(sms_cart)
516   MCFG_CARTSLOT_LOAD(sms_cart)
515   MCFG_CARTSLOT_START(sms_state,sms_cart)
516   MCFG_CARTSLOT_LOAD(sms_state,sms_cart)
517517
518518   MCFG_SMSSDISP_CARTSLOT_ADD("cart2")
519519   MCFG_SMSSDISP_CARTSLOT_ADD("cart3")
r20749r20750
617617   MCFG_CARTSLOT_MODIFY("cart1")
618618   MCFG_CARTSLOT_EXTENSION_LIST("sms,bin,sg")
619619   MCFG_CARTSLOT_MANDATORY
620   MCFG_CARTSLOT_START(sms_cart)
621   MCFG_CARTSLOT_LOAD(sms_cart)
620   MCFG_CARTSLOT_START(sms_state,sms_cart)
621   MCFG_CARTSLOT_LOAD(sms_state,sms_cart)
622622MACHINE_CONFIG_END
623623
624624static MACHINE_CONFIG_DERIVED( sms2_fm, sms2_ntsc )
trunk/src/mess/drivers/microvsn.c
r20749r20750
4141   DECLARE_MACHINE_RESET(microvision);
4242
4343   void screen_vblank(screen_device &screen, bool state);
44   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( microvision_cart );
4445
4546   // i8021 interface
4647   DECLARE_WRITE8_MEMBER(i8021_p0_write);
r20749r20750
453454}
454455
455456
456static DEVICE_IMAGE_LOAD(microvision_cart)
457DEVICE_IMAGE_LOAD_MEMBER(microvision_state,microvision_cart)
457458{
458459   microvision_state *state = image.device().machine().driver_data<microvision_state>();
459460   UINT8 *rom1 = state->memregion("maincpu1")->base();
r20749r20750
640641   MCFG_CARTSLOT_EXTENSION_LIST("bin")
641642   MCFG_CARTSLOT_MANDATORY
642643   MCFG_CARTSLOT_INTERFACE("microvision_cart")
643   MCFG_CARTSLOT_LOAD(microvision_cart)
644   MCFG_CARTSLOT_LOAD(microvision_state,microvision_cart)
644645
645646   /* Software lists */
646647   MCFG_SOFTWARE_LIST_ADD("cart_list","microvision")
trunk/src/mess/drivers/x07.c
r20749r20750
10341034      }
10351035}
10361036
1037static DEVICE_IMAGE_LOAD( x07_card )
1037DEVICE_IMAGE_LOAD_MEMBER( x07_state, x07_card )
10381038{
1039   running_machine &machine = image.device().machine();
1040   x07_state *state = machine.driver_data<x07_state>();
1041   address_space &space = state->m_maincpu->space( AS_PROGRAM );
1042   UINT16 ram_size = state->m_ram->size();
1039   address_space &space = m_maincpu->space( AS_PROGRAM );
1040   UINT16 ram_size = m_ram->size();
10431041
10441042   if (image.software_entry() == NULL)
10451043   {
1046      UINT8 *rom = machine.memory().region_alloc( "card", image.length(), 1, ENDIANNESS_LITTLE )->base();
1044      UINT8 *rom = machine().memory().region_alloc( "card", image.length(), 1, ENDIANNESS_LITTLE )->base();
10471045      image.fread(rom, image.length());
10481046
10491047      space.install_ram(ram_size, ram_size + 0xfff);
r20749r20750
15371535   MCFG_CARTSLOT_ADD("card")
15381536   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
15391537   MCFG_CARTSLOT_NOT_MANDATORY
1540   MCFG_CARTSLOT_LOAD(x07_card)
1538   MCFG_CARTSLOT_LOAD(x07_state,x07_card)
15411539   MCFG_CARTSLOT_INTERFACE("x07_card")
15421540
15431541   /* cassette */
trunk/src/mess/drivers/pc.c
r20749r20750
13131313   MCFG_CARTSLOT_INTERFACE("ibmpcjr_cart")
13141314   MCFG_CARTSLOT_EXTENSION_LIST("jrc")
13151315   MCFG_CARTSLOT_NOT_MANDATORY
1316   MCFG_CARTSLOT_LOAD(pcjr_cartridge)
1316   MCFG_CARTSLOT_LOAD(pc_state,pcjr_cartridge)
13171317   MCFG_CARTSLOT_ADD("cart2")
13181318   MCFG_CARTSLOT_INTERFACE("ibmpcjr_cart")
13191319   MCFG_CARTSLOT_EXTENSION_LIST("jrc")
13201320   MCFG_CARTSLOT_NOT_MANDATORY
1321   MCFG_CARTSLOT_LOAD(pcjr_cartridge)
1321   MCFG_CARTSLOT_LOAD(pc_state,pcjr_cartridge)
13221322
13231323   /* internal ram */
13241324   MCFG_RAM_ADD(RAM_TAG)
trunk/src/mess/drivers/sg1000.c
r20749r20750
674674    DEVICE_IMAGE_LOAD( sg1000_cart )
675675-------------------------------------------------*/
676676
677static DEVICE_IMAGE_LOAD( sg1000_cart )
677DEVICE_IMAGE_LOAD_MEMBER( sg1000_state,sg1000_cart )
678678{
679679   running_machine &machine = image.device().machine();
680680   sg1000_state *state = machine.driver_data<sg1000_state>();
r20749r20750
788788    DEVICE_IMAGE_LOAD( omv_cart )
789789-------------------------------------------------*/
790790
791static DEVICE_IMAGE_LOAD( omv_cart )
791DEVICE_IMAGE_LOAD_MEMBER( sg1000_state,omv_cart )
792792{
793793   running_machine &machine = image.device().machine();
794794   sg1000_state *state = machine.driver_data<sg1000_state>();
r20749r20750
845845    DEVICE_IMAGE_LOAD( sc3000_cart )
846846-------------------------------------------------*/
847847
848static DEVICE_IMAGE_LOAD( sc3000_cart )
848DEVICE_IMAGE_LOAD_MEMBER( sc3000_state,sc3000_cart )
849849{
850850   running_machine &machine = image.device().machine();
851851   sc3000_state *state = machine.driver_data<sc3000_state>();
r20749r20750
10971097   MCFG_CARTSLOT_EXTENSION_LIST("sg,bin")
10981098   MCFG_CARTSLOT_MANDATORY
10991099   MCFG_CARTSLOT_INTERFACE("sg1000_cart")
1100   MCFG_CARTSLOT_LOAD(sg1000_cart)
1100   MCFG_CARTSLOT_LOAD(sg1000_state,sg1000_cart)
11011101
11021102   /* software lists */
11031103   MCFG_SOFTWARE_LIST_ADD("cart_list","sg1000")
r20749r20750
11191119   MCFG_CARTSLOT_MODIFY("cart")
11201120   MCFG_CARTSLOT_EXTENSION_LIST("sg,bin")
11211121   MCFG_CARTSLOT_NOT_MANDATORY
1122   MCFG_CARTSLOT_LOAD(omv_cart)
1122   MCFG_CARTSLOT_LOAD(sg1000_state,omv_cart)
11231123
11241124   MCFG_RAM_MODIFY(RAM_TAG)
11251125   MCFG_RAM_DEFAULT_SIZE("2K")
r20749r20750
11561156   MCFG_CARTSLOT_EXTENSION_LIST("sg,sc,bin")
11571157   MCFG_CARTSLOT_MANDATORY
11581158   MCFG_CARTSLOT_INTERFACE("sg1000_cart")
1159   MCFG_CARTSLOT_LOAD(sc3000_cart)
1159   MCFG_CARTSLOT_LOAD(sc3000_state,sc3000_cart)
11601160
11611161   /* software lists */
11621162   MCFG_SOFTWARE_LIST_ADD("cart_list","sg1000")
trunk/src/mess/drivers/uzebox.c
r20749r20750
4646   void line_update();
4747   int cart_load(device_image_interface &image);
4848   UINT32 screen_update_uzebox(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
49   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(uzebox_cart);
4950
5051private:
5152   int             m_vpos;
r20749r20750
290291   return IMAGE_INIT_PASS;
291292}
292293
293static DEVICE_IMAGE_LOAD(uzebox_cart)
294DEVICE_IMAGE_LOAD_MEMBER(uzebox_state,uzebox_cart)
294295{
295   return image.device().machine().driver_data<uzebox_state>()->cart_load(image);
296   return cart_load(image);
296297}
297298
298299/****************************************************\
r20749r20750
329330   MCFG_CARTSLOT_ADD("cart1")
330331   MCFG_CARTSLOT_EXTENSION_LIST("bin,uze")
331332   MCFG_CARTSLOT_MANDATORY
332   MCFG_CARTSLOT_LOAD(uzebox_cart)
333   MCFG_CARTSLOT_LOAD(uzebox_state,uzebox_cart)
333334   MCFG_CARTSLOT_INTERFACE("uzebox")
334335   MCFG_SOFTWARE_LIST_ADD("eprom_list","uzebox")
335336MACHINE_CONFIG_END
trunk/src/mess/drivers/pockstat.c
r20749r20750
126126   DECLARE_INPUT_CHANGED_MEMBER(input_update);
127127   TIMER_CALLBACK_MEMBER(timer_tick);
128128   TIMER_CALLBACK_MEMBER(rtc_tick);
129   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( pockstat_flash );
129130};
130131
131132
r20749r20750
956957   return 0;
957958}
958959
959static DEVICE_IMAGE_LOAD( pockstat_flash )
960DEVICE_IMAGE_LOAD_MEMBER( pockstat_state, pockstat_flash )
960961{
961962   int i, length;
962963   UINT8 *cart = image.device().machine().root_device().memregion("flash")->base();
r20749r20750
10071008   MCFG_CARTSLOT_ADD("cart")
10081009   MCFG_CARTSLOT_EXTENSION_LIST("gme")
10091010   MCFG_CARTSLOT_NOT_MANDATORY
1010   MCFG_CARTSLOT_LOAD(pockstat_flash)
1011   MCFG_CARTSLOT_LOAD(pockstat_state, pockstat_flash)
10111012MACHINE_CONFIG_END
10121013
10131014/* ROM definition */
trunk/src/mess/drivers/msx.c
r20749r20750
10531053   MCFG_CARTSLOT_EXTENSION_LIST("mx1,rom")
10541054   MCFG_CARTSLOT_NOT_MANDATORY
10551055   MCFG_CARTSLOT_INTERFACE("msx_cart")
1056   MCFG_CARTSLOT_LOAD(msx_cart)
1057   MCFG_CARTSLOT_UNLOAD(msx_cart)
1056   MCFG_CARTSLOT_LOAD(msx_state, msx_cart)
1057   MCFG_CARTSLOT_UNLOAD(msx_state, msx_cart)
10581058
10591059   MCFG_CARTSLOT_ADD("cart2")
10601060   MCFG_CARTSLOT_EXTENSION_LIST("mx1,rom")
10611061   MCFG_CARTSLOT_NOT_MANDATORY
10621062   MCFG_CARTSLOT_INTERFACE("msx_cart")
1063   MCFG_CARTSLOT_LOAD(msx_cart)
1064   MCFG_CARTSLOT_UNLOAD(msx_cart)
1063   MCFG_CARTSLOT_LOAD(msx_state, msx_cart)
1064   MCFG_CARTSLOT_UNLOAD(msx_state, msx_cart)
10651065MACHINE_CONFIG_END
10661066
10671067static MACHINE_CONFIG_START( msx, msx_state )
trunk/src/mess/drivers/gb.c
r20749r20750
590590   MCFG_CARTSLOT_EXTENSION_LIST("gb,gmb,cgb,gbc,sgb,bin")
591591   MCFG_CARTSLOT_NOT_MANDATORY
592592   MCFG_CARTSLOT_INTERFACE("gameboy_cart")
593   MCFG_CARTSLOT_START(gb_cart)
594   MCFG_CARTSLOT_LOAD(gb_cart)
593   MCFG_CARTSLOT_START(gb_state,gb_cart)
594   MCFG_CARTSLOT_LOAD(gb_state,gb_cart)
595595   MCFG_SOFTWARE_LIST_ADD("cart_list","gameboy")
596596   MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("gbc_list","gbcolor")
597597MACHINE_CONFIG_END
r20749r20750
648648   MCFG_CARTSLOT_EXTENSION_LIST("gb,gmb,cgb,gbc,sgb,bin")
649649   MCFG_CARTSLOT_NOT_MANDATORY
650650   MCFG_CARTSLOT_INTERFACE("gameboy_cart")
651   MCFG_CARTSLOT_START(gb_cart)
652   MCFG_CARTSLOT_LOAD(gb_cart)
651   MCFG_CARTSLOT_START(gb_state,gb_cart)
652   MCFG_CARTSLOT_LOAD(gb_state,gb_cart)
653653   MCFG_SOFTWARE_LIST_ADD("cart_list","gbcolor")
654654   MCFG_SOFTWARE_LIST_COMPATIBLE_ADD("gb_list","gameboy")
655655MACHINE_CONFIG_END
r20749r20750
689689   MCFG_CARTSLOT_EXTENSION_LIST("bin")
690690   MCFG_CARTSLOT_MANDATORY
691691   MCFG_CARTSLOT_INTERFACE("megaduck_cart")
692   MCFG_CARTSLOT_LOAD(megaduck_cart)
692   MCFG_CARTSLOT_LOAD(gb_state,megaduck_cart)
693693   MCFG_SOFTWARE_LIST_ADD("cart_list","megaduck")
694694MACHINE_CONFIG_END
695695
trunk/src/mess/drivers/svision.c
r20749r20750
471471   m_pet.timer = machine().scheduler().timer_alloc(timer_expired_delegate(FUNC(svision_state::svision_pet_timer),this));
472472}
473473
474static DEVICE_IMAGE_LOAD( svision_cart )
474DEVICE_IMAGE_LOAD_MEMBER( svision_state, svision_cart )
475475{
476476   UINT32 size;
477477   UINT8 *temp_copy;
r20749r20750
569569   MCFG_CARTSLOT_EXTENSION_LIST("bin,ws,sv")
570570   MCFG_CARTSLOT_MANDATORY
571571   MCFG_CARTSLOT_INTERFACE("svision_cart")
572   MCFG_CARTSLOT_LOAD(svision_cart)
572   MCFG_CARTSLOT_LOAD(svision_state, svision_cart)
573573
574574   /* Software lists */
575575   MCFG_SOFTWARE_LIST_ADD("cart_list","svision")
trunk/src/mess/drivers/n64.c
r20749r20750
2424   DECLARE_READ32_MEMBER(dd_null_r);
2525   DECLARE_MACHINE_START(n64dd);
2626   INTERRUPT_GEN_MEMBER(n64_reset_poll);
27   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(n64_cart);
2728};
2829
2930READ32_MEMBER(n64_mess_state::dd_null_r)
r20749r20750
171172   memcpy(pak, pak_header, 272);
172173}
173174
174static DEVICE_IMAGE_LOAD(n64_cart)
175DEVICE_IMAGE_LOAD_MEMBER(n64_mess_state,n64_cart)
175176{
176177   int i, length;
177178   n64_periphs *periphs = image.device().machine().device<n64_periphs>("rcp");
r20749r20750
309310   MCFG_CARTSLOT_EXTENSION_LIST("v64,z64,rom,n64,bin")
310311   MCFG_CARTSLOT_MANDATORY
311312   MCFG_CARTSLOT_INTERFACE("n64_cart")
312   MCFG_CARTSLOT_LOAD(n64_cart)
313   MCFG_CARTSLOT_LOAD(n64_mess_state,n64_cart)
313314
314315   /* software lists */
315316   MCFG_SOFTWARE_LIST_ADD("cart_list","n64")
trunk/src/mess/drivers/vtech2.c
r20749r20750
459459   MCFG_CARTSLOT_ADD("cart")
460460   MCFG_CARTSLOT_EXTENSION_LIST("rom")
461461   MCFG_CARTSLOT_NOT_MANDATORY
462   MCFG_CARTSLOT_LOAD(laser_cart)
463   MCFG_CARTSLOT_UNLOAD(laser_cart)
462   MCFG_CARTSLOT_LOAD(vtech2_state,laser_cart)
463   MCFG_CARTSLOT_UNLOAD(vtech2_state,laser_cart)
464464
465465   /* 5.25" Floppy drive */
466466   MCFG_LEGACY_FLOPPY_DRIVE_ADD( FLOPPY_0, vtech2_floppy_interface )
trunk/src/mess/drivers/pv1000.c
r20749r20750
106106   UINT32 screen_update_pv1000(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
107107   TIMER_CALLBACK_MEMBER(d65010_irq_on_cb);
108108   TIMER_CALLBACK_MEMBER(d65010_irq_off_cb);
109   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( pv1000_cart );
109110};
110111
111112
r20749r20750
237238}
238239
239240
240static DEVICE_IMAGE_LOAD( pv1000_cart )
241DEVICE_IMAGE_LOAD_MEMBER( pv1000_state, pv1000_cart )
241242{
242243   UINT8 *cart = image.device().machine().root_device().memregion("cart")->base();
243244   UINT32 size;
r20749r20750
439440   MCFG_CARTSLOT_EXTENSION_LIST("bin")
440441   MCFG_CARTSLOT_MANDATORY
441442   MCFG_CARTSLOT_INTERFACE("pv1000_cart")
442   MCFG_CARTSLOT_LOAD(pv1000_cart)
443   MCFG_CARTSLOT_LOAD(pv1000_state,pv1000_cart)
443444
444445   /* Software lists */
445446   MCFG_SOFTWARE_LIST_ADD("cart_list","pv1000")
trunk/src/mess/drivers/scv.c
r20749r20750
5757   virtual void palette_init();
5858   UINT32 screen_update_scv(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
5959   TIMER_CALLBACK_MEMBER(scv_vb_callback);
60   DECLARE_DEVICE_IMAGE_START_MEMBER( scv_cart );
61   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( scv_cart );
6062
6163protected:
6264   required_device<cpu_device> m_maincpu;
r20749r20750
358360}
359361
360362
361static DEVICE_START( scv_cart )
363DEVICE_IMAGE_START_MEMBER( scv_state, scv_cart )
362364{
363   scv_state *state = device->machine().driver_data<scv_state>();
364
365   state->m_cart_rom = state->memregion( "cart" )->base();
366   state->m_cart_rom_size = 0;
367   state->m_cart_ram = NULL;
368   state->m_cart_ram_size = 0;
365   m_cart_rom = memregion( "cart" )->base();
366   m_cart_rom_size = 0;
367   m_cart_ram = NULL;
368   m_cart_ram_size = 0;
369369}
370370
371371
372static DEVICE_IMAGE_LOAD( scv_cart )
372DEVICE_IMAGE_LOAD_MEMBER( scv_state, scv_cart )
373373{
374   scv_state *state = image.device().machine().driver_data<scv_state>();
375
376374   if ( image.software_entry() == NULL )
377375   {
378376      UINT8 *cart = image.device().machine().root_device().memregion( "cart" )->base();
379377      int size = image.length();
380378
381      if ( size > state->memregion( "cart" )->bytes() )
379      if ( size > memregion( "cart" )->bytes() )
382380      {
383381         image.seterror( IMAGE_ERROR_UNSPECIFIED, "Unsupported cartridge size" );
384382         return IMAGE_INIT_FAIL;
r20749r20750
390388         return IMAGE_INIT_FAIL;
391389      }
392390
393      state->m_cart_rom = cart;
394      state->m_cart_rom_size = size;
395      state->m_cart_ram = NULL;
396      state->m_cart_ram_size = 0;
391      m_cart_rom = cart;
392      m_cart_rom_size = size;
393      m_cart_ram = NULL;
394      m_cart_ram_size = 0;
397395   }
398396   else
399397   {
400      state->m_cart_rom = image.get_software_region( "rom" );
401      state->m_cart_rom_size = image.get_software_region_length( "rom" );
402      state->m_cart_ram = image.get_software_region( "ram" );
403      state->m_cart_ram_size = image.get_software_region_length( "ram" );
398      m_cart_rom = image.get_software_region( "rom" );
399      m_cart_rom_size = image.get_software_region_length( "rom" );
400      m_cart_ram = image.get_software_region( "ram" );
401      m_cart_ram_size = image.get_software_region_length( "ram" );
404402   }
405403
406404   return IMAGE_INIT_PASS;
r20749r20750
861859   MCFG_CARTSLOT_EXTENSION_LIST( "bin" )
862860   MCFG_CARTSLOT_NOT_MANDATORY
863861   MCFG_CARTSLOT_INTERFACE("scv_cart")
864   MCFG_CARTSLOT_START( scv_cart )
865   MCFG_CARTSLOT_LOAD( scv_cart )
862   MCFG_CARTSLOT_START( scv_state, scv_cart )
863   MCFG_CARTSLOT_LOAD( scv_state, scv_cart )
866864
867865   /* Software lists */
868866   MCFG_SOFTWARE_LIST_ADD("cart_list","scv")
trunk/src/mess/drivers/bbcbc.c
r20749r20750
2929   virtual void machine_start();
3030   virtual void machine_reset();
3131   DECLARE_WRITE_LINE_MEMBER(tms_interrupt);
32
33   DECLARE_DEVICE_IMAGE_START_MEMBER( bbcbc_cart );
34   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( bbcbc_cart );
3235};
3336
3437
r20749r20750
130133};
131134
132135
133static DEVICE_START( bbcbc_cart )
136DEVICE_IMAGE_START_MEMBER( bbcbc_state, bbcbc_cart )
134137{
135   UINT8 *cart = device->machine().root_device().memregion("maincpu" )->base() + 0x4000;
138   UINT8 *cart = machine().root_device().memregion("maincpu" )->base() + 0x4000;
136139
137140   memset( cart, 0xFF, 0x8000 );
138141}
139142
140143
141static DEVICE_IMAGE_LOAD( bbcbc_cart )
144DEVICE_IMAGE_LOAD_MEMBER( bbcbc_state, bbcbc_cart )
142145{
143   UINT8 *cart = image.device().machine().root_device().memregion("maincpu" )->base() + 0x4000;
146   UINT8 *cart = machine().root_device().memregion("maincpu" )->base() + 0x4000;
144147
145148   if ( image.software_entry() == NULL )
146149   {
r20749r20750
187190   MCFG_CARTSLOT_ADD("cart")
188191   MCFG_CARTSLOT_NOT_MANDATORY
189192   MCFG_CARTSLOT_INTERFACE("bbcbc_cart")
190   MCFG_CARTSLOT_START( bbcbc_cart )
191   MCFG_CARTSLOT_LOAD( bbcbc_cart )
193   MCFG_CARTSLOT_START( bbcbc_state, bbcbc_cart )
194   MCFG_CARTSLOT_LOAD( bbcbc_state, bbcbc_cart )
192195
193196   /* Software lists */
194197   MCFG_SOFTWARE_LIST_ADD("cart_list","bbcbc")
trunk/src/mess/drivers/gamecom.c
r20749r20750
127127   MCFG_CARTSLOT_ADD("cart1")
128128   MCFG_CARTSLOT_EXTENSION_LIST("bin,tgc")
129129   MCFG_CARTSLOT_INTERFACE("gamecom_cart")
130   MCFG_CARTSLOT_LOAD(gamecom_cart1)
130   MCFG_CARTSLOT_LOAD(gamecom_state,gamecom_cart1)
131131   MCFG_SOFTWARE_LIST_ADD("cart_list","gamecom")
132132   MCFG_CARTSLOT_ADD("cart2")
133133   MCFG_CARTSLOT_EXTENSION_LIST("bin,tgc")
134134   MCFG_CARTSLOT_INTERFACE("gamecom_cart")
135   MCFG_CARTSLOT_LOAD(gamecom_cart2)
135   MCFG_CARTSLOT_LOAD(gamecom_state,gamecom_cart2)
136136MACHINE_CONFIG_END
137137
138138ROM_START( gamecom )
trunk/src/mess/drivers/supracan.c
r20749r20750
207207   TIMER_CALLBACK_MEMBER(supracan_line_on_callback);
208208   TIMER_CALLBACK_MEMBER(supracan_line_off_callback);
209209   TIMER_CALLBACK_MEMBER(supracan_video_callback);
210   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(supracan_cart);
210211};
211212
212213
r20749r20750
17261727}
17271728
17281729
1729static DEVICE_IMAGE_LOAD( supracan_cart )
1730DEVICE_IMAGE_LOAD_MEMBER( supracan_state, supracan_cart )
17301731{
17311732   UINT8 *cart = image.device().machine().root_device().memregion("cart")->base();
17321733   UINT32 size = 0;
r20749r20750
19061907   MCFG_CARTSLOT_ADD("cart")
19071908   MCFG_CARTSLOT_EXTENSION_LIST("bin")
19081909   MCFG_CARTSLOT_INTERFACE("supracan_cart")
1909   MCFG_CARTSLOT_LOAD(supracan_cart)
1910   MCFG_CARTSLOT_LOAD(supracan_state,supracan_cart)
19101911
19111912   MCFG_SOFTWARE_LIST_ADD("cart_list","supracan")
19121913MACHINE_CONFIG_END
trunk/src/mess/drivers/channelf.c
r20749r20750
216216
217217
218218
219static DEVICE_IMAGE_LOAD( channelf_cart )
219DEVICE_IMAGE_LOAD_MEMBER( channelf_state, channelf_cart )
220220{
221221   UINT32 size;
222222
r20749r20750
251251   MCFG_CARTSLOT_ADD("cart")
252252   MCFG_CARTSLOT_EXTENSION_LIST("bin,chf")
253253   MCFG_CARTSLOT_INTERFACE("channelf_cart")
254   MCFG_CARTSLOT_LOAD(channelf_cart)
254   MCFG_CARTSLOT_LOAD(channelf_state,channelf_cart)
255255
256256   /* Software lists */
257257   MCFG_SOFTWARE_LIST_ADD("cart_list","channelf")
trunk/src/mess/drivers/gba.c
r20749r20750
29552955   return 0;
29562956}
29572957
2958static DEVICE_IMAGE_LOAD( gba_cart )
2958DEVICE_IMAGE_LOAD_MEMBER( gba_state, gba_cart )
29592959{
29602960   UINT8 *ROM = image.device().machine().root_device().memregion("cartridge")->base();
29612961   UINT32 cart_size;
r20749r20750
31293129   MCFG_CARTSLOT_ADD("cart")
31303130   MCFG_CARTSLOT_EXTENSION_LIST("gba,bin")
31313131   MCFG_CARTSLOT_INTERFACE("gba_cart")
3132   MCFG_CARTSLOT_LOAD(gba_cart)
3132   MCFG_CARTSLOT_LOAD(gba_state,gba_cart)
31333133   MCFG_SOFTWARE_LIST_ADD("cart_list","gba")
31343134MACHINE_CONFIG_END
31353135
trunk/src/mess/drivers/vii.c
r20749r20750
143143   INTERRUPT_GEN_MEMBER(vii_vblank);
144144   TIMER_CALLBACK_MEMBER(tmb1_tick);
145145   TIMER_CALLBACK_MEMBER(tmb2_tick);
146   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(vii_cart);
147   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(vsmile_cart);
146148};
147149
148150enum
r20749r20750
924926      PORT_BIT( 0x20, IP_ACTIVE_HIGH, IPT_BUTTON2 )        PORT_PLAYER(1) PORT_NAME("B Button")
925927INPUT_PORTS_END
926928
927static DEVICE_IMAGE_LOAD( vii_cart )
929DEVICE_IMAGE_LOAD_MEMBER( vii_state, vii_cart )
928930{
929   vii_state *state = image.device().machine().driver_data<vii_state>();
930   UINT8 *cart = state->memregion( "cart" )->base();
931   UINT8 *cart = memregion( "cart" )->base();
931932   if (image.software_entry() == NULL)
932933   {
933934      int size = image.length();
r20749r20750
942943      memcpy(cart, image.get_software_region("rom"), filesize);
943944   }
944945
945   memcpy(state->m_p_cart, cart + 0x4000*2, (0x400000 - 0x4000) * 2);
946   memcpy(m_p_cart, cart + 0x4000*2, (0x400000 - 0x4000) * 2);
946947
947948   if( cart[0x3cd808] == 0x99 &&
948949      cart[0x3cd809] == 0x99 &&
r20749r20750
953954      cart[0x3cd80e] == 0x78 &&
954955      cart[0x3cd80f] == 0x7f )
955956   {
956      state->m_centered_coordinates = 0;
957      m_centered_coordinates = 0;
957958   }
958959   return IMAGE_INIT_PASS;
959960}
960961
961static DEVICE_IMAGE_LOAD( vsmile_cart )
962DEVICE_IMAGE_LOAD_MEMBER( vii_state, vsmile_cart )
962963{
963   vii_state *state = image.device().machine().driver_data<vii_state>();
964   UINT8 *cart = state->memregion( "cart" )->base();
964   UINT8 *cart = memregion( "cart" )->base();
965965   if (image.software_entry() == NULL)
966966   {
967967      int size = image.length();
r20749r20750
977977      int filesize = image.get_software_region_length("rom");
978978      memcpy(cart, image.get_software_region("rom"), filesize);
979979   }
980   memcpy(state->m_p_cart, cart + 0x4000*2, (0x400000 - 0x4000) * 2);
980   memcpy(m_p_cart, cart + 0x4000*2, (0x400000 - 0x4000) * 2);
981981   return IMAGE_INIT_PASS;
982982}
983983
r20749r20750
11051105
11061106   MCFG_CARTSLOT_ADD( "cart" )
11071107   MCFG_CARTSLOT_EXTENSION_LIST( "bin" )
1108   MCFG_CARTSLOT_LOAD( vii_cart )
1108   MCFG_CARTSLOT_LOAD( vii_state, vii_cart )
11091109   MCFG_CARTSLOT_INTERFACE("vii_cart")
11101110
11111111   MCFG_SOFTWARE_LIST_ADD("vii_cart","vii")
r20749r20750
11281128   MCFG_CARTSLOT_ADD( "cart" )
11291129   MCFG_CARTSLOT_EXTENSION_LIST( "bin" )
11301130   MCFG_CARTSLOT_MANDATORY
1131   MCFG_CARTSLOT_LOAD( vsmile_cart )
1131   MCFG_CARTSLOT_LOAD( vii_state, vsmile_cart )
11321132MACHINE_CONFIG_END
11331133
11341134static const i2cmem_interface i2cmem_interface =
trunk/src/mess/drivers/pv2000.c
r20749r20750
6262   UINT8 m_cass_conf;
6363   virtual void machine_start();
6464   virtual void machine_reset();
65   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( pv2000_cart );
6566};
6667
6768
r20749r20750
377378   memset(&memregion("maincpu")->base()[0x7000], 0xff, 0x1000);    // initialize RAM
378379}
379380
380static DEVICE_IMAGE_LOAD( pv2000_cart )
381DEVICE_IMAGE_LOAD_MEMBER( pv2000_state, pv2000_cart )
381382{
382383   UINT8 *cart = image.device().machine().root_device().memregion("maincpu")->base() + 0xC000;
383384   UINT32 size;
r20749r20750
446447   MCFG_CARTSLOT_ADD("cart")
447448   MCFG_CARTSLOT_EXTENSION_LIST("rom,col,bin")
448449   MCFG_CARTSLOT_NOT_MANDATORY
449   MCFG_CARTSLOT_LOAD(pv2000_cart)
450   MCFG_CARTSLOT_LOAD(pv2000_state,pv2000_cart)
450451   MCFG_CARTSLOT_INTERFACE("pv2000_cart")
451452
452453   /* Software lists */
trunk/src/mess/drivers/rx78.c
r20749r20750
7878   DECLARE_DRIVER_INIT(rx78);
7979   required_device<cpu_device> m_maincpu;
8080   required_device<cassette_image_device> m_cass;
81   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( rx78_cart );
8182};
8283
8384
r20749r20750
401402{
402403}
403404
404static DEVICE_IMAGE_LOAD( rx78_cart )
405DEVICE_IMAGE_LOAD_MEMBER( rx78_state, rx78_cart )
405406{
406407   UINT8 *cart = image.device().machine().root_device().memregion("cart_img")->base();
407408   UINT32 size;
r20749r20750
480481   MCFG_CARTSLOT_ADD("cart")
481482   MCFG_CARTSLOT_EXTENSION_LIST("rom")
482483   MCFG_CARTSLOT_NOT_MANDATORY
483   MCFG_CARTSLOT_LOAD(rx78_cart)
484   MCFG_CARTSLOT_LOAD(rx78_state,rx78_cart)
484485   MCFG_CARTSLOT_INTERFACE("rx78_cart")
485486
486487   MCFG_RAM_ADD(RAM_TAG)
trunk/src/mess/drivers/atari400.c
r20749r20750
3939#include "video/gtia.h"
4040#include "sound/dac.h"
4141#include "machine/ram.h"
42#include "hashfile.h"
4243
44
4345/******************************************************************************
4446    Atari 800 memory map (preliminary)
4547
r20749r20750
229231    E000-FFFF ROM     BIOS ROM
230232******************************************************************************/
231233
234#define LEFT_CARTSLOT_MOUNTED  1
235#define RIGHT_CARTSLOT_MOUNTED 2
236
237/* PCB */
238enum
239{
240   A800_UNKNOWN = 0,
241   A800_4K, A800_8K, A800_12K, A800_16K,
242   A800_RIGHT_4K, A800_RIGHT_8K,
243   OSS_034M, OSS_M091, PHOENIX_8K, XEGS_32K,
244   BBSB, DIAMOND_64K, WILLIAMS_64K, EXPRESS_64,
245   SPARTADOS_X
246};
247
248
232249class a400_state : public driver_device
233250{
234251public:
235252   a400_state(const machine_config &mconfig, device_type type, const char *tag)
236      : driver_device(mconfig, type, tag) { }
253      : driver_device(mconfig, type, tag)
254      , m_a800_cart_loaded(0)
255      , m_atari(0)
256      , m_a800_cart_type(A800_UNKNOWN)
257   { }
237258
238259   DECLARE_DRIVER_INIT(xegs);
239260   DECLARE_DRIVER_INIT(a800xl);
r20749r20750
242263   DECLARE_WRITE8_MEMBER(a1200xl_pia_pb_w);
243264   DECLARE_WRITE8_MEMBER(a800xl_pia_pb_w);
244265   DECLARE_WRITE8_MEMBER(xegs_pia_pb_w);
266
267   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a800_cart );
268   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( a800_cart );
269
270   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a800_cart_right );
271   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( a800_cart_right );
272
273   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( a5200_cart );
274   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( a5200_cart );
275
276   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( xegs_cart );
277   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( xegs_cart );
278
279   void ms_atari_machine_start(int type, int has_cart);
280   void ms_atari800xl_machine_start(int type, int has_cart);
281
282protected:
283   int m_a800_cart_loaded;
284   int m_atari;
285   int m_a800_cart_type;
286
287   void a800_setbank(int cart_mounted);
288
245289};
246290
247291/**************************************************************
r20749r20750
902946   machine.root_device().membank("bank2")->set_base(base2);
903947}
904948
949
950// Currently, the drivers have fixed 40k RAM, however the function here is ready for different sizes too
951void a400_state::a800_setbank(int cart_mounted)
952{
953   offs_t ram_top;
954   // take care of 0x0000-0x7fff: RAM or NOP
955   ram_top = MIN(machine().device<ram_device>(RAM_TAG)->size(), 0x8000) - 1;
956   machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x0000, ram_top, "0000");
957   machine().root_device().membank("0000")->set_base(machine().device<ram_device>(RAM_TAG)->pointer());
958
959   // take care of 0x8000-0x9fff: A800 -> either right slot or RAM or NOP, others -> RAM or NOP
960   // is there anything in the right slot?
961   if (cart_mounted & RIGHT_CARTSLOT_MOUNTED)
962   {
963      machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
964      machine().root_device().membank("8000")->set_base(machine().root_device().memregion("rslot")->base());
965      machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
966   }
967   else if (m_a800_cart_type != BBSB)
968   {
969      ram_top = MIN(machine().device<ram_device>(RAM_TAG)->size(), 0xa000) - 1;
970      if (ram_top > 0x8000)
971      {
972         machine().device("maincpu")->memory().space(AS_PROGRAM).install_readwrite_bank(0x8000, ram_top, "8000");
973         machine().root_device().membank("8000")->set_base(machine().device<ram_device>(RAM_TAG)->pointer() + 0x8000);
974      }
975   }
976
977   // take care of 0xa000-0xbfff: is there anything in the left slot?
978   if (cart_mounted & LEFT_CARTSLOT_MOUNTED)
979   {
980      // FIXME: this is an hack to keep XL working until we clean up its memory map as well!
981      if (m_atari == ATARI_800XL)
982      {
983         if (m_a800_cart_type == A800_16K)
984         {
985            machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x9fff, "8000");
986            machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base());
987            machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0x9fff);
988
989            memcpy(machine().root_device().memregion("maincpu")->base() + 0x10000, machine().root_device().memregion("lslot")->base() + 0x2000, 0x2000);
990         }
991         else if (m_a800_cart_type == A800_8K)
992            memcpy(machine().root_device().memregion("maincpu")->base() + 0x10000, machine().root_device().memregion("lslot")->base(), 0x2000);
993         else
994            fatalerror("This type of cart is not supported yet in this driver. Please use a400 or a800.\n");
995      }
996      else if (m_a800_cart_type == A800_16K)
997      {
998         machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base());
999         machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x2000);
1000         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
1001      }
1002      else if (m_a800_cart_type == BBSB)
1003      {
1004         // this requires separate banking in 0x8000 & 0x9000!
1005         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x8000, 0x8fff, "8000");
1006         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0x9000, 0x9fff, "9000");
1007         machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base() + 0x0000);
1008         machine().root_device().membank("9000")->set_base(machine().root_device().memregion("lslot")->base() + 0x4000);
1009         machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x8000);
1010         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
1011      }
1012      else if (m_a800_cart_type == OSS_034M)
1013      {
1014         // this requires separate banking in 0xa000 & 0xb000!
1015         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
1016         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
1017         machine().root_device().membank("b000")->set_base(machine().root_device().memregion("lslot")->base() + 0x3000);
1018         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
1019      }
1020      else if (m_a800_cart_type == OSS_M091)
1021      {
1022         // this requires separate banking in 0xa000 & 0xb000!
1023         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xa000, 0xafff, "a000");
1024         machine().device("maincpu")->memory().space(AS_PROGRAM).install_read_bank(0xb000, 0xbfff, "b000");
1025         machine().root_device().membank("b000")->set_base(machine().root_device().memregion("lslot")->base());
1026         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
1027      }
1028      else if (m_a800_cart_type == XEGS_32K)
1029      {
1030         machine().root_device().membank("8000")->set_base(machine().root_device().memregion("lslot")->base());
1031         machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base() + 0x6000);
1032         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0x8000, 0xbfff);
1033      }
1034      else
1035      {
1036         machine().root_device().membank("a000")->set_base(machine().root_device().memregion("lslot")->base());
1037         machine().device("maincpu")->memory().space(AS_PROGRAM).unmap_write(0xa000, 0xbfff);
1038      }
1039   }
1040}
1041
1042
1043/* MESS specific parts that have to be started */
1044void a400_state::ms_atari_machine_start(int type, int has_cart)
1045{
1046   /* set atari type (temporarily not used) */
1047   m_atari = type;
1048   a800_setbank(m_a800_cart_loaded);
1049}
1050
1051void a400_state::ms_atari800xl_machine_start(int type, int has_cart)
1052{
1053   /* set atari type (temporarily not used) */
1054   m_atari = type;
1055   a800_setbank(m_a800_cart_loaded);
1056}
1057
1058
1059struct a800_pcb
1060{
1061   const char              *pcb_name;
1062   int                     pcb_id;
1063};
1064
1065// Here, we take the feature attribute from .xml (i.e. the PCB name) and we assign a unique ID to it
1066// WARNING: most of these are still unsupported by the driver
1067static const a800_pcb pcb_list[] =
1068{
1069   {"standard 4k", A800_8K},
1070   {"standard 8k", A800_8K},
1071   {"standard 12k", A800_16K},
1072   {"standard 16k", A800_16K},
1073   {"right slot 4k", A800_RIGHT_4K},
1074   {"right slot 8k", A800_RIGHT_8K},
1075
1076   {"oss 034m", OSS_034M},
1077   {"oss m091", OSS_M091},
1078   {"phoenix 8k", PHOENIX_8K},
1079   {"xegs 32k", XEGS_32K},
1080   {"bbsb", BBSB},
1081   {"diamond 64k", DIAMOND_64K},
1082   {"williams 64k", WILLIAMS_64K},
1083   {"express 64", EXPRESS_64},
1084   {"spartados x", SPARTADOS_X},
1085   {"N/A", A800_UNKNOWN}
1086};
1087
1088static int a800_get_pcb_id(const char *pcb)
1089{
1090   int i;
1091
1092   for (i = 0; i < ARRAY_LENGTH(pcb_list); i++)
1093   {
1094      if (!mame_stricmp(pcb_list[i].pcb_name, pcb))
1095         return pcb_list[i].pcb_id;
1096   }
1097
1098   return A800_UNKNOWN;
1099}
1100
1101
1102static WRITE8_HANDLER( x32_bank_w )
1103{
1104   //  printf("written %x\n", data);
1105   int bank = data & 0x03;
1106   space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + bank * 0x2000);
1107}
1108
1109
1110static WRITE8_HANDLER( w64_bank_w )
1111{
1112//  printf("write to %x\n", offset);
1113
1114   if (offset < 8)
1115      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + offset * 0x2000);
1116   else
1117      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base());
1118   // FIXME: writes to 0x8-0xf should disable the cart
1119}
1120
1121
1122// this covers Express 64, Diamond 64 and SpartaDOS (same bankswitch, but at different addresses)
1123static WRITE8_HANDLER( ex64_bank_w )
1124{
1125//  printf("write to %x\n", offset);
1126
1127   if (offset < 8)
1128      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + (7 - offset) * 0x2000);
1129   else
1130      space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base());
1131   // FIXME: writes to 0x8-0xf should disable the cart
1132}
1133
1134
1135static WRITE8_HANDLER( bbsb_bankl_w )
1136{
1137//  printf("write to %x\n", 0x8000 + offset);
1138   if (offset >= 0xff6 && offset <= 0xff9)
1139      space.machine().root_device().membank("8000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x0000 + (offset - 0xff6) * 0x1000);
1140}
1141
1142
1143static WRITE8_HANDLER( bbsb_bankh_w )
1144{
1145//  printf("write to %x\n", 0x9000 + offset);
1146   if (offset >= 0xff6 && offset <= 0xff9)
1147      space.machine().root_device().membank("9000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000 + (offset - 0xff6) * 0x1000);
1148}
1149
1150
1151static WRITE8_HANDLER( oss_034m_w )
1152{
1153   switch (offset & 0x0f)
1154   {
1155      case 0:
1156      case 1:
1157         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base());
1158         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1159         break;
1160      case 2:
1161      case 6:
1162         // docs says this should put 0xff in the 0xa000 bank -> let's point to the end of the cart
1163         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x4000);
1164         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1165         break;
1166      case 3:
1167      case 7:
1168         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000);
1169         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1170         break;
1171      case 4:
1172      case 5:
1173         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000);
1174         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1175         break;
1176      default:
1177         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000);
1178         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000);
1179         break;
1180   }
1181}
1182
1183
1184static WRITE8_HANDLER( oss_m091_w )
1185{
1186   switch (offset & 0x09)
1187   {
1188      case 0:
1189         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x1000);
1190         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
1191         break;
1192      case 1:
1193         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x3000);
1194         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
1195         break;
1196      case 8:
1197         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xa000);
1198         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("maincpu")->base() + 0xb000);
1199         break;
1200      case 9:
1201         space.machine().root_device().membank("a000")->set_base(space.machine().root_device().memregion("lslot")->base() + 0x2000);
1202         space.machine().root_device().membank("b000")->set_base(space.machine().root_device().memregion("lslot")->base());
1203         break;
1204   }
1205}
1206
1207
1208static UINT8 xegs_banks = 0;
1209static UINT8 xegs_cart = 0;
1210
1211static WRITE8_HANDLER( xegs_bankswitch )
1212{
1213   UINT8 *cart = space.machine().root_device().memregion("user1")->base();
1214   data &= xegs_banks - 1;
1215   space.machine().root_device().membank("bank0")->set_base(cart + data * 0x2000);
1216}
1217
1218MACHINE_START( xegs )
1219{
1220   address_space &space = machine.device("maincpu")->memory().space(AS_PROGRAM);
1221   UINT8 *cart = space.machine().root_device().memregion("user1")->base();
1222   UINT8 *cpu  = space.machine().root_device().memregion("maincpu")->base();
1223
1224   atari_machine_start(machine);
1225   space.install_legacy_write_handler(0xd500, 0xd5ff, FUNC(xegs_bankswitch));
1226
1227   if (xegs_cart)
1228   {
1229      machine.root_device().membank("bank0")->set_base(cart);
1230      machine.root_device().membank("bank1")->set_base(cart + (xegs_banks - 1) * 0x2000);
1231   }
1232   else
1233   {
1234      // point to built-in Missile Command (this does not work well, though... FIXME!!)
1235      machine.root_device().membank("bank0")->set_base(cpu + 0x10000);
1236      machine.root_device().membank("bank1")->set_base(cpu + 0x10000);
1237   }
1238}
1239
1240
1241// currently this does nothing, but it will eventually install the memory handlers required by the mappers
1242static void a800_setup_mappers(running_machine &machine, int type)
1243{
1244   switch (type)
1245   {
1246      case A800_4K:
1247      case A800_RIGHT_4K:
1248      case A800_12K:
1249      case A800_8K:
1250      case A800_16K:
1251      case A800_RIGHT_8K:
1252      case PHOENIX_8K:    // as normal 8k cart, but it can be disabled by writing to 0xd500-0xdfff
1253         break;
1254      case XEGS_32K:
1255         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(x32_bank_w));
1256         break;
1257      case OSS_034M:
1258         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_034m_w));
1259         break;
1260      case OSS_M091:
1261         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd5ff, FUNC(oss_m091_w));
1262         break;
1263      case BBSB:
1264         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x8000, 0x8fff, FUNC(bbsb_bankl_w));
1265         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0x9000, 0x9fff, FUNC(bbsb_bankh_w));
1266         break;
1267      case WILLIAMS_64K:
1268         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd500, 0xd50f, FUNC(w64_bank_w));
1269         break;
1270      case DIAMOND_64K:
1271         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5d0, 0xd5df, FUNC(ex64_bank_w));
1272         break;
1273      case EXPRESS_64:
1274         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd570, 0xd57f, FUNC(ex64_bank_w));
1275         break;
1276      case SPARTADOS_X:
1277         machine.device("maincpu")->memory().space(AS_PROGRAM).install_legacy_write_handler(0xd5e0, 0xd5ef, FUNC(ex64_bank_w));
1278         break;
1279      default:
1280         break;
1281   }
1282}
1283
1284
1285static int a800_get_type(device_image_interface &image)
1286{
1287   UINT8 header[16];
1288   image.fread(header, 0x10);
1289   int hdr_type, cart_type = A800_UNKNOWN;
1290
1291   // add check of CART format
1292   if (strncmp((const char *)header, "CART", 4))
1293      fatalerror("Invalid header detected!\n");
1294
1295   hdr_type = (header[4] << 24) + (header[5] << 16) +  (header[6] << 8) + (header[7] << 0);
1296   switch (hdr_type)
1297   {
1298      case 1:
1299         cart_type = A800_8K;
1300         break;
1301      case 2:
1302         cart_type = A800_16K;
1303         break;
1304      case 3:
1305         cart_type = OSS_034M;
1306         break;
1307      case 8:
1308         cart_type = WILLIAMS_64K;
1309         break;
1310      case 9:
1311         cart_type = DIAMOND_64K;
1312         break;
1313      case 10:
1314         cart_type = EXPRESS_64;
1315         break;
1316      case 11:
1317         cart_type = SPARTADOS_X;
1318         break;
1319      case 12:
1320         cart_type = XEGS_32K;
1321         break;
1322      case 15:
1323         cart_type = OSS_M091;
1324         break;
1325      case 18:
1326         cart_type = BBSB;
1327         break;
1328      case 21:
1329         cart_type = A800_RIGHT_8K;
1330         break;
1331      case 39:
1332         cart_type = PHOENIX_8K;
1333         break;
1334      case 4:
1335      case 6:
1336      case 7:
1337      case 16:
1338      case 19:
1339      case 20:
1340         fatalerror("Cart type \"%d\" means this is an Atari 5200 cart.\n", hdr_type);
1341         break;
1342      default:
1343         mame_printf_info("Cart type \"%d\" is currently unsupported.\n", hdr_type);
1344         break;
1345   }
1346   return cart_type;
1347}
1348
1349
1350static int a800_check_cart_type(device_image_interface &image)
1351{
1352   const char  *pcb_name;
1353   int type = A800_UNKNOWN;
1354
1355   if (image.software_entry() == NULL)
1356   {
1357      UINT32 size = image.length();
1358
1359      // check if there is an header, if so extract cart_type from it, otherwise
1360      // try to guess the cart_type from the file size (notice that after the
1361      // a800_get_type call, we point at the start of the data)
1362      if ((size % 0x1000) == 0x10)
1363         type = a800_get_type(image);
1364      else if (size == 0x4000)
1365         type = A800_16K;
1366      else if (size == 0x2000)
1367      {
1368         if (strcmp(image.device().tag(),":cart2") == 0)
1369            type = A800_RIGHT_8K;
1370         else
1371            type = A800_8K;
1372      }
1373   }
1374   else
1375   {
1376      if ((pcb_name = image.get_feature("cart_type")) != NULL)
1377         type = a800_get_pcb_id(pcb_name);
1378
1379      switch (type)
1380      {
1381         case A800_UNKNOWN:
1382         case A800_4K:
1383         case A800_RIGHT_4K:
1384         case A800_12K:
1385         case A800_8K:
1386         case A800_16K:
1387         case A800_RIGHT_8K:
1388            break;
1389         default:
1390            mame_printf_info("Cart type \"%s\" currently unsupported.\n", pcb_name);
1391            break;
1392      }
1393   }
1394
1395   if ((strcmp(image.device().tag(),":cart2") == 0) && (type != A800_RIGHT_8K))
1396      fatalerror("You cannot load this image '%s' in the right slot\n", image.filename());
1397
1398   return type;
1399}
1400
1401
1402DEVICE_IMAGE_LOAD_MEMBER( a400_state, a800_cart )
1403{
1404   UINT32 size, start = 0;
1405
1406   m_a800_cart_loaded = m_a800_cart_loaded & ~LEFT_CARTSLOT_MOUNTED;
1407   m_a800_cart_type = a800_check_cart_type(image);
1408
1409   a800_setup_mappers(image.device().machine(), m_a800_cart_type);
1410
1411   if (image.software_entry() == NULL)
1412   {
1413      size = image.length();
1414      // if there is an header, skip it
1415      if ((size % 0x1000) == 0x10)
1416      {
1417         size -= 0x10;
1418         start = 0x10;
1419      }
1420      image.fread(image.device().machine().root_device().memregion("lslot")->base(), size - start);
1421   }
1422   else
1423   {
1424      size = image.get_software_region_length("rom");
1425      memcpy(image.device().machine().root_device().memregion("lslot")->base(), image.get_software_region("rom"), size);
1426   }
1427
1428   m_a800_cart_loaded |= (size > 0x0000) ? 1 : 0;
1429
1430   logerror("%s loaded left cartridge '%s' size %dK\n", image.device().machine().system().name, image.filename(), size/1024);
1431   return IMAGE_INIT_PASS;
1432}
1433
1434
1435DEVICE_IMAGE_LOAD_MEMBER( a400_state, a800_cart_right )
1436{
1437   UINT32 size, start = 0;
1438
1439   m_a800_cart_loaded = m_a800_cart_loaded & ~RIGHT_CARTSLOT_MOUNTED;
1440   m_a800_cart_type = a800_check_cart_type(image);
1441
1442   a800_setup_mappers(image.device().machine(), m_a800_cart_type);
1443
1444   if (image.software_entry() == NULL)
1445   {
1446      size = image.length();
1447      // if there is an header, skip it
1448      if ((size % 0x1000) == 0x10)
1449      {
1450         size -= 0x10;
1451         start = 0x10;
1452      }
1453      image.fread(image.device().machine().root_device().memregion("rslot")->base(), size - start);
1454   }
1455   else
1456   {
1457      size = image.get_software_region_length("rom");
1458      memcpy(image.device().machine().root_device().memregion("rslot")->base(), image.get_software_region("rom"), size);
1459   }
1460
1461   m_a800_cart_loaded |= (size > 0x0000) ? 2 : 0;
1462
1463   logerror("%s loaded right cartridge '%s' size 8K\n", image.device().machine().system().name, image.filename());
1464   return IMAGE_INIT_PASS;
1465}
1466
1467
1468DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a800_cart )
1469{
1470   m_a800_cart_loaded = m_a800_cart_loaded & ~LEFT_CARTSLOT_MOUNTED;
1471   m_a800_cart_type = A800_UNKNOWN;
1472   a800_setbank(m_a800_cart_loaded);
1473}
1474
1475
1476DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a800_cart_right )
1477{
1478   m_a800_cart_loaded = m_a800_cart_loaded & ~RIGHT_CARTSLOT_MOUNTED;
1479   m_a800_cart_type = A800_UNKNOWN;
1480   a800_setbank(m_a800_cart_loaded);
1481}
1482
1483
1484DEVICE_IMAGE_LOAD_MEMBER( a400_state, a5200_cart )
1485{
1486   UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base();
1487   UINT32 size;
1488   bool A13_mirr = FALSE;
1489
1490   if (image.software_entry() == NULL)
1491   {
1492      /* load an optional (dual) cartidge */
1493      size = image.fread(&mem[0x4000], 0x8000);
1494      const char *info = hashfile_extrainfo(image);
1495      if (info && !strcmp(info, "A13MIRRORING"))
1496         A13_mirr = TRUE;
1497   }
1498   else
1499   {
1500      size = image.get_software_region_length("rom");
1501      memcpy(mem + 0x4000, image.get_software_region("rom"), size);
1502      const char *pcb_name = image.get_feature("cart_type");
1503      if (pcb_name && !strcmp(pcb_name, "A13MIRRORING"))
1504         A13_mirr = TRUE;
1505   }
1506
1507   if (size<0x8000) memmove(mem+0x4000+0x8000-size, mem+0x4000, size);
1508   // mirroring of smaller cartridges
1509   if (size <= 0x1000) memcpy(mem+0xa000, mem+0xb000, 0x1000);
1510   if (size <= 0x2000) memcpy(mem+0x8000, mem+0xa000, 0x2000);
1511   if (size <= 0x4000)
1512   {
1513      memcpy(&mem[0x4000], &mem[0x8000], 0x4000);
1514      if (A13_mirr)
1515      {
1516         memcpy(&mem[0x8000], &mem[0xa000], 0x2000);
1517         memcpy(&mem[0x6000], &mem[0x4000], 0x2000);
1518      }
1519   }
1520   logerror("A5200 loaded cartridge '%s' size %dK\n", image.filename() , size/1024);
1521   return IMAGE_INIT_PASS;
1522}
1523
1524
1525DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, a5200_cart )
1526{
1527   UINT8 *mem = image.device().machine().root_device().memregion("maincpu")->base();
1528   /* zap the cartridge memory (again) */
1529   memset(&mem[0x4000], 0x00, 0x8000);
1530}
1531
1532
1533DEVICE_IMAGE_LOAD_MEMBER( a400_state, xegs_cart )
1534{
1535   UINT32 size;
1536   UINT8 *ptr = image.device().machine().root_device().memregion("user1")->base();
1537
1538   if (image.software_entry() == NULL)
1539   {
1540      // skip the header
1541      image.fseek(0x10, SEEK_SET);
1542      size = image.length() - 0x10;
1543      if (image.fread(ptr, size) != size)
1544         return IMAGE_INIT_FAIL;
1545   }
1546   else
1547   {
1548      size = image.get_software_region_length("rom");
1549      memcpy(ptr, image.get_software_region("rom"), size);
1550   }
1551
1552   xegs_banks = size / 0x2000;
1553   xegs_cart = 1;
1554
1555   return IMAGE_INIT_PASS;
1556}
1557
1558
1559DEVICE_IMAGE_UNLOAD_MEMBER( a400_state, xegs_cart )
1560{
1561   xegs_cart = 0;
1562   xegs_banks = 0;
1563}
1564
1565
1566MACHINE_START( a400 )
1567{
1568   a400_state *state = machine.driver_data<a400_state>();
1569   atari_machine_start(machine);
1570   state->ms_atari_machine_start(ATARI_400, TRUE);
1571}
1572
1573
1574MACHINE_START( a800 )
1575{
1576   a400_state *state = machine.driver_data<a400_state>();
1577   atari_machine_start(machine);
1578   state->ms_atari_machine_start(ATARI_800, TRUE);
1579}
1580
1581
1582MACHINE_START( a800xl )
1583{
1584   a400_state *state = machine.driver_data<a400_state>();
1585   atari_machine_start(machine);
1586   state->ms_atari800xl_machine_start(ATARI_800XL, TRUE);
1587}
1588
1589
1590MACHINE_START( a5200 )
1591{
1592   a400_state *state = machine.driver_data<a400_state>();
1593   atari_machine_start(machine);
1594   state->ms_atari_machine_start(ATARI_800XL, TRUE);
1595}
1596
1597
1598
9051599/**************************************************************
9061600 *
9071601 * PIA interface
r20749r20750
10661760   MCFG_CARTSLOT_ADD("cart1")
10671761   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
10681762   MCFG_CARTSLOT_NOT_MANDATORY
1069   MCFG_CARTSLOT_LOAD(a800_cart)
1070   MCFG_CARTSLOT_UNLOAD(a800_cart)
1763   MCFG_CARTSLOT_LOAD(a400_state,a800_cart)
1764   MCFG_CARTSLOT_UNLOAD(a400_state,a800_cart)
10711765   MCFG_CARTSLOT_INTERFACE("a800_cart")
10721766MACHINE_CONFIG_END
10731767
r20749r20750
10751769   MCFG_CARTSLOT_ADD("cart1")
10761770   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
10771771   MCFG_CARTSLOT_NOT_MANDATORY
1078   MCFG_CARTSLOT_LOAD(a800_cart)
1079   MCFG_CARTSLOT_UNLOAD(a800_cart)
1772   MCFG_CARTSLOT_LOAD(a400_state,a800_cart)
1773   MCFG_CARTSLOT_UNLOAD(a400_state,a800_cart)
10801774   MCFG_CARTSLOT_INTERFACE("a800_cart")
10811775
10821776   MCFG_CARTSLOT_ADD("cart2")
10831777   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
10841778   MCFG_CARTSLOT_NOT_MANDATORY
1085   MCFG_CARTSLOT_LOAD(a800_cart_right)
1086   MCFG_CARTSLOT_UNLOAD(a800_cart_right)
1779   MCFG_CARTSLOT_LOAD(a400_state,a800_cart_right)
1780   MCFG_CARTSLOT_UNLOAD(a400_state,a800_cart_right)
10871781   MCFG_CARTSLOT_INTERFACE("a800_cart")
10881782MACHINE_CONFIG_END
10891783
r20749r20750
12791973   MCFG_CARTSLOT_ADD("cart1")
12801974   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
12811975   MCFG_CARTSLOT_NOT_MANDATORY
1282   MCFG_CARTSLOT_LOAD(xegs_cart)
1283   MCFG_CARTSLOT_UNLOAD(xegs_cart)
1976   MCFG_CARTSLOT_LOAD(a400_state,xegs_cart)
1977   MCFG_CARTSLOT_UNLOAD(a400_state,xegs_cart)
12841978   MCFG_CARTSLOT_INTERFACE("xegs_cart")
12851979
12861980   /* software lists */
r20749r20750
13132007   MCFG_CARTSLOT_ADD("cart")
13142008   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin,a52")
13152009   MCFG_CARTSLOT_NOT_MANDATORY
1316   MCFG_CARTSLOT_LOAD(a5200_cart)
1317   MCFG_CARTSLOT_UNLOAD(a5200_cart)
2010   MCFG_CARTSLOT_LOAD(a400_state,a5200_cart)
2011   MCFG_CARTSLOT_UNLOAD(a400_state,a5200_cart)
13182012   MCFG_CARTSLOT_INTERFACE("a5200_cart")
13192013
13202014   /* Software lists */
trunk/src/mess/drivers/vc4000.c
r20749r20750
335335   palette_set_colors(machine(), 0, vc4000_palette, ARRAY_LENGTH(vc4000_palette));
336336}
337337
338static DEVICE_IMAGE_LOAD( vc4000_cart )
338DEVICE_IMAGE_LOAD_MEMBER( vc4000_state, vc4000_cart )
339339{
340340   running_machine &machine = image.device().machine();
341   vc4000_state *state = machine.driver_data<vc4000_state>();
342341   address_space &memspace = machine.device("maincpu")->memory().space(AS_PROGRAM);
343342   UINT32 size;
344343
r20749r20750
353352   if (size > 0x1000)  /* 6k rom + 1k ram - Chess2 only */
354353   {
355354      memspace.install_read_bank(0x0800, 0x15ff, "bank1");    /* extra rom */
356      state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1000);
355      membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1000);
357356
358357      memspace.install_readwrite_bank(0x1800, 0x1bff, "bank2");   /* ram */
359      state->membank("bank2")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1800);
358      membank("bank2")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1800);
360359   }
361360   else if (size > 0x0800) /* some 4k roms have 1k of mirrored ram */
362361   {
363362      memspace.install_read_bank(0x0800, 0x0fff, "bank1");    /* extra rom */
364      state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x0800);
363      membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x0800);
365364
366365      memspace.install_readwrite_bank(0x1000, 0x15ff, 0, 0x800, "bank2"); /* ram */
367      state->membank("bank2")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1000);
366      membank("bank2")->set_base(machine.root_device().memregion("maincpu")->base() + 0x1000);
368367   }
369368   else if (size == 0x0800)    /* 2k roms + 2k ram - Hobby Module(Radofin) and elektor TVGC*/
370369   {
371370      memspace.install_readwrite_bank(0x0800, 0x0fff, "bank1"); /* ram */
372      state->membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x0800);
371      membank("bank1")->set_base(machine.root_device().memregion("maincpu")->base() + 0x0800);
373372   }
374373
375374   if (size > 0)
r20749r20750
417416   MCFG_CARTSLOT_EXTENSION_LIST("rom,bin")
418417   MCFG_CARTSLOT_NOT_MANDATORY
419418   MCFG_CARTSLOT_INTERFACE("vc4000_cart")
420   MCFG_CARTSLOT_LOAD(vc4000_cart)
419   MCFG_CARTSLOT_LOAD(vc4000_state,vc4000_cart)
421420
422421   /* software lists */
423422   MCFG_SOFTWARE_LIST_ADD("cart_list","vc4000")
trunk/src/mess/drivers/intv.c
r20749r20750
841841   /* cartridge */
842842   MCFG_CARTSLOT_ADD("cart")
843843   MCFG_CARTSLOT_EXTENSION_LIST("int,rom,bin,itv")
844   MCFG_CARTSLOT_LOAD(intv_cart)
844   MCFG_CARTSLOT_LOAD(intv_state,intv_cart)
845845   MCFG_CARTSLOT_INTERFACE("intv_cart")
846846   /* software lists */
847847   MCFG_SOFTWARE_LIST_ADD("cart_list","intv")
r20749r20750
890890   MCFG_CARTSLOT_ADD("cart1")
891891   MCFG_CARTSLOT_EXTENSION_LIST("int,rom,bin,itv")
892892   MCFG_CARTSLOT_NOT_MANDATORY
893   MCFG_CARTSLOT_LOAD(intvkbd_cart)
893   MCFG_CARTSLOT_LOAD(intv_state,intvkbd_cart)
894894   MCFG_CARTSLOT_INTERFACE("intv_cart")
895895
896896   MCFG_CARTSLOT_ADD("cart2")
897897   MCFG_CARTSLOT_EXTENSION_LIST("int,rom,bin,itv")
898898   MCFG_CARTSLOT_NOT_MANDATORY
899   MCFG_CARTSLOT_LOAD(intvkbd_cart)
899   MCFG_CARTSLOT_LOAD(intv_state,intvkbd_cart)
900900   MCFG_CARTSLOT_INTERFACE("intv_cart")
901901MACHINE_CONFIG_END
902902
trunk/src/mess/drivers/spectrum.c
r20749r20750
663663   NULL
664664};
665665
666static DEVICE_IMAGE_LOAD( spectrum_cart )
666DEVICE_IMAGE_LOAD_MEMBER( spectrum_state,spectrum_cart )
667667{
668668   UINT32 filesize;
669669
r20749r20750
732732   MCFG_CARTSLOT_ADD("cart")
733733   MCFG_CARTSLOT_EXTENSION_LIST("rom")
734734   MCFG_CARTSLOT_NOT_MANDATORY
735   MCFG_CARTSLOT_LOAD(spectrum_cart)
735   MCFG_CARTSLOT_LOAD(spectrum_state,spectrum_cart)
736736   MCFG_CARTSLOT_INTERFACE("spectrum_cart")
737737   MCFG_SOFTWARE_LIST_ADD("cart_list","spectrum")
738738MACHINE_CONFIG_END
trunk/src/mess/drivers/pc6001.c
r20749r20750
244244   DECLARE_WRITE8_MEMBER(pc6001_8255_portb_w);
245245   DECLARE_WRITE8_MEMBER(pc6001_8255_portc_w);
246246   DECLARE_READ8_MEMBER(pc6001_8255_portc_r);
247   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pc6001_cass);
247248};
248249
249250
r20749r20750
22612262   NULL
22622263};
22632264
2264static DEVICE_IMAGE_LOAD( pc6001_cass )
2265DEVICE_IMAGE_LOAD_MEMBER( pc6001_state,pc6001_cass )
22652266{
22662267   pc6001_state *state = image.device().machine().driver_data<pc6001_state>();
22672268   UINT8 *cas = state->memregion("cas")->base();
r20749r20750
23472348   MCFG_CARTSLOT_EXTENSION_LIST("cas,p6")
23482349   MCFG_CARTSLOT_NOT_MANDATORY
23492350   MCFG_CARTSLOT_INTERFACE("pc6001_cass")
2350   MCFG_CARTSLOT_LOAD(pc6001_cass)
2351   MCFG_CARTSLOT_LOAD(pc6001_state,pc6001_cass)
23512352
23522353   MCFG_SPEAKER_STANDARD_MONO("mono")
23532354   MCFG_SOUND_ADD("ay8910", AY8910, PC6001_MAIN_CLOCK/4)
trunk/src/mess/drivers/crvision.c
r20749r20750
829829    CARTRIDGE
830830***************************************************************************/
831831
832static DEVICE_IMAGE_LOAD( crvision_cart )
832DEVICE_IMAGE_LOAD_MEMBER( crvision_state, crvision_cart )
833833{
834834   UINT32 size;
835835   UINT8 *temp_copy;
r20749r20750
971971   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
972972   MCFG_CARTSLOT_MANDATORY
973973   MCFG_CARTSLOT_INTERFACE("crvision_cart")
974   MCFG_CARTSLOT_LOAD(crvision_cart)
974   MCFG_CARTSLOT_LOAD(crvision_state, crvision_cart)
975975
976976   // internal ram
977977   MCFG_RAM_ADD(RAM_TAG)
r20749r20750
10361036   MCFG_CARTSLOT_ADD("cart")
10371037   MCFG_CARTSLOT_EXTENSION_LIST("bin,rom")
10381038   MCFG_CARTSLOT_INTERFACE("crvision_cart")
1039   MCFG_CARTSLOT_LOAD(crvision_cart)
1039   MCFG_CARTSLOT_LOAD(crvision_state, crvision_cart)
10401040
10411041   // internal ram
10421042   MCFG_RAM_ADD(RAM_TAG)
trunk/src/mess/drivers/pegasus.c
r20749r20750
8282   UINT32 screen_update(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
8383   DECLARE_DRIVER_INIT(pegasus);
8484   TIMER_DEVICE_CALLBACK_MEMBER(pegasus_firq);
85   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_1);
86   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_2);
87   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_3);
88   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_4);
89   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(pegasus_cart_5);
8590};
8691
8792TIMER_DEVICE_CALLBACK_MEMBER(pegasus_state::pegasus_firq)
r20749r20750
433438   }
434439}
435440
436static DEVICE_IMAGE_LOAD( pegasus_cart_1 )
441DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_1 )
437442{
438443   image.fread(image.device().machine().root_device().memregion("maincpu")->base() + 0x0000, 0x1000);
439444   pegasus_decrypt_rom( image.device().machine(), 0x0000 );
r20749r20750
441446   return IMAGE_INIT_PASS;
442447}
443448
444static DEVICE_IMAGE_LOAD( pegasus_cart_2 )
449DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_2 )
445450{
446451   image.fread(image.device().machine().root_device().memregion("maincpu")->base() + 0x1000, 0x1000);
447452   pegasus_decrypt_rom( image.device().machine(), 0x1000 );
r20749r20750
449454   return IMAGE_INIT_PASS;
450455}
451456
452static DEVICE_IMAGE_LOAD( pegasus_cart_3 )
457DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_3 )
453458{
454459   image.fread(image.device().machine().root_device().memregion("maincpu")->base() + 0x2000, 0x1000);
455460   pegasus_decrypt_rom( image.device().machine(), 0x2000 );
r20749r20750
457462   return IMAGE_INIT_PASS;
458463}
459464
460static DEVICE_IMAGE_LOAD( pegasus_cart_4 )
465DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_4 )
461466{
462467   image.fread(image.device().machine().root_device().memregion("maincpu")->base() + 0xc000, 0x1000);
463468   pegasus_decrypt_rom( image.device().machine(), 0xc000 );
r20749r20750
465470   return IMAGE_INIT_PASS;
466471}
467472
468static DEVICE_IMAGE_LOAD( pegasus_cart_5 )
473DEVICE_IMAGE_LOAD_MEMBER( pegasus_state, pegasus_cart_5 )
469474{
470475   image.fread( image.device().machine().root_device().memregion("maincpu")->base() + 0xd000, 0x1000);
471476   pegasus_decrypt_rom( image.device().machine(), 0xd000 );
r20749r20750
518523   MCFG_PIA6821_ADD( "pia_u", pegasus_pia_u_intf )
519524   MCFG_CARTSLOT_ADD("cart1")
520525   MCFG_CARTSLOT_EXTENSION_LIST("bin")
521   MCFG_CARTSLOT_LOAD(pegasus_cart_1)
526   MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_1)
522527   MCFG_CARTSLOT_ADD("cart2")
523528   MCFG_CARTSLOT_EXTENSION_LIST("bin")
524   MCFG_CARTSLOT_LOAD(pegasus_cart_2)
529   MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_2)
525530   MCFG_CARTSLOT_ADD("cart3")
526531   MCFG_CARTSLOT_EXTENSION_LIST("bin")
527   MCFG_CARTSLOT_LOAD(pegasus_cart_3)
532   MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_3)
528533   MCFG_CARTSLOT_ADD("cart4")
529534   MCFG_CARTSLOT_EXTENSION_LIST("bin")
530   MCFG_CARTSLOT_LOAD(pegasus_cart_4)
535   MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_4)
531536   MCFG_CARTSLOT_ADD("cart5")
532537   MCFG_CARTSLOT_EXTENSION_LIST("bin")
533   MCFG_CARTSLOT_LOAD(pegasus_cart_5)
538   MCFG_CARTSLOT_LOAD(pegasus_state,pegasus_cart_5)
534539   MCFG_CASSETTE_ADD( CASSETTE_TAG, pegasus_cassette_interface )
535540MACHINE_CONFIG_END
536541
trunk/src/mess/drivers/ngp.c
r20749r20750
173173   UINT32 screen_update_ngp(screen_device &screen, bitmap_ind16 &bitmap, const rectangle &cliprect);
174174   DECLARE_INPUT_CHANGED_MEMBER(power_callback);
175175   TIMER_CALLBACK_MEMBER(ngp_seconds_callback);
176
177   DECLARE_DEVICE_IMAGE_START_MEMBER( ngp_cart );
178   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( ngp_cart);
179   DECLARE_DEVICE_IMAGE_UNLOAD_MEMBER( ngp_cart );
176180};
177181
178182
r20749r20750
630634}
631635
632636
633static DEVICE_START( ngp_cart )
637DEVICE_IMAGE_START_MEMBER( ngp_state, ngp_cart )
634638{
635   ngp_state *state = device->machine().driver_data<ngp_state>();
636   UINT8 *cart = state->memregion("cart")->base();
639   UINT8 *cart = memregion("cart")->base();
637640
638   state->m_flash_chip[0].present = 0;
639   state->m_flash_chip[0].state = F_READ;
640   state->m_flash_chip[0].data = cart;
641   m_flash_chip[0].present = 0;
642   m_flash_chip[0].state = F_READ;
643   m_flash_chip[0].data = cart;
641644
642   state->m_flash_chip[1].present = 0;
643   state->m_flash_chip[1].state = F_READ;
644   state->m_flash_chip[1].data = cart + 0x200000;
645   m_flash_chip[1].present = 0;
646   m_flash_chip[1].state = F_READ;
647   m_flash_chip[1].data = cart + 0x200000;
645648}
646649
647650
648static DEVICE_IMAGE_LOAD( ngp_cart )
651DEVICE_IMAGE_LOAD_MEMBER( ngp_state, ngp_cart )
649652{
650   ngp_state *state = image.device().machine().driver_data<ngp_state>();
651653   UINT32 filesize;
652654
653655   if (image.software_entry() == NULL)
r20749r20750
660662         return IMAGE_INIT_FAIL;
661663      }
662664
663      if (image.fread( image.device().machine().root_device().memregion("cart")->base(), filesize) != filesize)
665      if (image.fread( machine().root_device().memregion("cart")->base(), filesize) != filesize)
664666      {
665667         image.seterror(IMAGE_ERROR_UNSPECIFIED, "Error loading file");
666668         return IMAGE_INIT_FAIL;
r20749r20750
669671   else
670672   {
671673      filesize = image.get_software_region_length("rom");
672      memcpy(image.device().machine().root_device().memregion("cart")->base(), image.get_software_region("rom"), filesize);
674      memcpy(machine().root_device().memregion("cart")->base(), image.get_software_region("rom"), filesize);
673675   }
674676
675677   //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),
676678   //        (unsigned int) image.device().machine().root_device().memregion("cart")->u8(0x22), (unsigned int) image.device().machine().root_device().memregion("cart")->u8(0x23));
677   state->m_flash_chip[0].manufacturer_id = 0x98;
679   m_flash_chip[0].manufacturer_id = 0x98;
678680   switch( filesize )
679681   {
680682   case 0x8000:
681683   case 0x80000:
682      state->m_flash_chip[0].device_id = 0xab;
684      m_flash_chip[0].device_id = 0xab;
683685      break;
684686   case 0x100000:
685      state->m_flash_chip[0].device_id = 0x2c;
687      m_flash_chip[0].device_id = 0x2c;
686688      break;
687689   case 0x200000:
688      state->m_flash_chip[0].device_id = 0x2f;
690      m_flash_chip[0].device_id = 0x2f;
689691      break;
690692   case 0x400000:
691      state->m_flash_chip[0].device_id = 0x2f;
692      state->m_flash_chip[1].manufacturer_id = 0x98;
693      state->m_flash_chip[1].device_id = 0x2f;
694      state->m_flash_chip[1].present = 0;
695      state->m_flash_chip[1].state = F_READ;
693      m_flash_chip[0].device_id = 0x2f;
694      m_flash_chip[1].manufacturer_id = 0x98;
695      m_flash_chip[1].device_id = 0x2f;
696      m_flash_chip[1].present = 0;
697      m_flash_chip[1].state = F_READ;
696698      break;
697699   }
698700
699   state->m_flash_chip[0].org_data[0] = state->m_flash_chip[0].data[0];
700   state->m_flash_chip[0].org_data[1] = state->m_flash_chip[0].data[1];
701   state->m_flash_chip[0].org_data[2] = state->m_flash_chip[0].data[2];
702   state->m_flash_chip[0].org_data[3] = state->m_flash_chip[0].data[3];
703   state->m_flash_chip[0].org_data[4] = state->m_flash_chip[0].data[0x7c000];
704   state->m_flash_chip[0].org_data[5] = state->m_flash_chip[0].data[0x7c001];
705   state->m_flash_chip[0].org_data[6] = state->m_flash_chip[0].data[0x7c002];
706   state->m_flash_chip[0].org_data[7] = state->m_flash_chip[0].data[0x7c003];
707   state->m_flash_chip[0].org_data[8] = state->m_flash_chip[0].data[0xfc000];
708   state->m_flash_chip[0].org_data[9] = state->m_flash_chip[0].data[0xfc001];
709   state->m_flash_chip[0].org_data[10] = state->m_flash_chip[0].data[0xfc002];
710   state->m_flash_chip[0].org_data[11] = state->m_flash_chip[0].data[0xfc003];
711   state->m_flash_chip[0].org_data[12] = state->m_flash_chip[0].data[0x1fc000];
712   state->m_flash_chip[0].org_data[13] = state->m_flash_chip[0].data[0x1fc001];
713   state->m_flash_chip[0].org_data[14] = state->m_flash_chip[0].data[0x1fc002];
714   state->m_flash_chip[0].org_data[15] = state->m_flash_chip[0].data[0x1fc003];
701   m_flash_chip[0].org_data[0] = m_flash_chip[0].data[0];
702   m_flash_chip[0].org_data[1] = m_flash_chip[0].data[1];
703   m_flash_chip[0].org_data[2] = m_flash_chip[0].data[2];
704   m_flash_chip[0].org_data[3] = m_flash_chip[0].data[3];
705   m_flash_chip[0].org_data[4] = m_flash_chip[0].data[0x7c000];
706   m_flash_chip[0].org_data[5] = m_flash_chip[0].data[0x7c001];
707   m_flash_chip[0].org_data[6] = m_flash_chip[0].data[0x7c002];
708   m_flash_chip[0].org_data[7] = m_flash_chip[0].data[0x7c003];
709   m_flash_chip[0].org_data[8] = m_flash_chip[0].data[0xfc000];
710   m_flash_chip[0].org_data[9] = m_flash_chip[0].data[0xfc001];
711   m_flash_chip[0].org_data[10] = m_flash_chip[0].data[0xfc002];
712   m_flash_chip[0].org_data[11] = m_flash_chip[0].data[0xfc003];
713   m_flash_chip[0].org_data[12] = m_flash_chip[0].data[0x1fc000];
714   m_flash_chip[0].org_data[13] = m_flash_chip[0].data[0x1fc001];
715   m_flash_chip[0].org_data[14] = m_flash_chip[0].data[0x1fc002];
716   m_flash_chip[0].org_data[15] = m_flash_chip[0].data[0x1fc003];
715717
716   state->m_flash_chip[1].org_data[0] = state->m_flash_chip[1].data[0];
717   state->m_flash_chip[1].org_data[1] = state->m_flash_chip[1].data[1];
718   state->m_flash_chip[1].org_data[2] = state->m_flash_chip[1].data[2];
719   state->m_flash_chip[1].org_data[3] = state->m_flash_chip[1].data[3];
720   state->m_flash_chip[1].org_data[4] = state->m_flash_chip[1].data[0x7c000];
721   state->m_flash_chip[1].org_data[5] = state->m_flash_chip[1].data[0x7c001];
722   state->m_flash_chip[1].org_data[6] = state->m_flash_chip[1].data[0x7c002];
723   state->m_flash_chip[1].org_data[7] = state->m_flash_chip[1].data[0x7c003];
724   state->m_flash_chip[1].org_data[8] = state->m_flash_chip[1].data[0xfc000];
725   state->m_flash_chip[1].org_data[9] = state->m_flash_chip[1].data[0xfc001];
726   state->m_flash_chip[1].org_data[10] = state->m_flash_chip[1].data[0xfc002];
727   state->m_flash_chip[1].org_data[11] = state->m_flash_chip[1].data[0xfc003];
728   state->m_flash_chip[1].org_data[12] = state->m_flash_chip[1].data[0x1fc000];
729   state->m_flash_chip[1].org_data[13] = state->m_flash_chip[1].data[0x1fc001];
730   state->m_flash_chip[1].org_data[14] = state->m_flash_chip[1].data[0x1fc002];
731   state->m_flash_chip[1].org_data[15] = state->m_flash_chip[1].data[0x1fc003];
718   m_flash_chip[1].org_data[0] = m_flash_chip[1].data[0];
719   m_flash_chip[1].org_data[1] = m_flash_chip[1].data[1];
720   m_flash_chip[1].org_data[2] = m_flash_chip[1].data[2];
721   m_flash_chip[1].org_data[3] = m_flash_chip[1].data[3];
722   m_flash_chip[1].org_data[4] = m_flash_chip[1].data[0x7c000];
723   m_flash_chip[1].org_data[5] = m_flash_chip[1].data[0x7c001];
724   m_flash_chip[1].org_data[6] = m_flash_chip[1].data[0x7c002];
725   m_flash_chip[1].org_data[7] = m_flash_chip[1].data[0x7c003];
726   m_flash_chip[1].org_data[8] = m_flash_chip[1].data[0xfc000];
727   m_flash_chip[1].org_data[9] = m_flash_chip[1].data[0xfc001];
728   m_flash_chip[1].org_data[10] = m_flash_chip[1].data[0xfc002];
729   m_flash_chip[1].org_data[11] = m_flash_chip[1].data[0xfc003];
730   m_flash_chip[1].org_data[12] = m_flash_chip[1].data[0x1fc000];
731   m_flash_chip[1].org_data[13] = m_flash_chip[1].data[0x1fc001];
732   m_flash_chip[1].org_data[14] = m_flash_chip[1].data[0x1fc002];
733   m_flash_chip[1].org_data[15] = m_flash_chip[1].data[0x1fc003];
732734
733   state->m_flash_chip[0].present = 1;
734   state->m_flash_chip[0].state = F_READ;
735   m_flash_chip[0].present = 1;
736   m_flash_chip[0].state = F_READ;
735737
736738   return IMAGE_INIT_PASS;
737739}
738740
739741
740static DEVICE_IMAGE_UNLOAD( ngp_cart )
742DEVICE_IMAGE_UNLOAD_MEMBER( ngp_state, ngp_cart )
741743{
742   ngp_state *state = image.device().machine().driver_data<ngp_state>();
744   m_flash_chip[0].present = 0;
745   m_flash_chip[0].state = F_READ;
743746
744   state->m_flash_chip[0].present = 0;
745   state->m_flash_chip[0].state = F_READ;
746
747   state->m_flash_chip[1].present = 0;
748   state->m_flash_chip[1].state = F_READ;
747   m_flash_chip[1].present = 0;
748   m_flash_chip[1].state = F_READ;
749749}
750750
751751
r20749r20750
805805   MCFG_CARTSLOT_ADD("cart")
806806   MCFG_CARTSLOT_EXTENSION_LIST("bin,ngp,npc,ngc")
807807   MCFG_CARTSLOT_NOT_MANDATORY
808   MCFG_CARTSLOT_START(ngp_cart)
809   MCFG_CARTSLOT_LOAD(ngp_cart)
808   MCFG_CARTSLOT_START(ngp_state, ngp_cart)
809   MCFG_CARTSLOT_LOAD(ngp_state, ngp_cart)
810810   MCFG_CARTSLOT_INTERFACE("ngp_cart")
811   MCFG_CARTSLOT_UNLOAD(ngp_cart)
811   MCFG_CARTSLOT_UNLOAD(ngp_state, ngp_cart)
812812
813813   /* software lists */
814814   MCFG_SOFTWARE_LIST_ADD("cart_list","ngp")
r20749r20750
826826   MCFG_CARTSLOT_ADD("cart")
827827   MCFG_CARTSLOT_EXTENSION_LIST("bin,ngp,npc,ngc")
828828   MCFG_CARTSLOT_NOT_MANDATORY
829   MCFG_CARTSLOT_START(ngp_cart)
830   MCFG_CARTSLOT_LOAD(ngp_cart)
829   MCFG_CARTSLOT_START(ngp_state,ngp_cart)
830   MCFG_CARTSLOT_LOAD(ngp_state,ngp_cart)
831831   MCFG_CARTSLOT_INTERFACE("ngp_cart")
832   MCFG_CARTSLOT_UNLOAD(ngp_cart)
832   MCFG_CARTSLOT_UNLOAD(ngp_state,ngp_cart)
833833
834834   /* software lists */
835835   MCFG_SOFTWARE_LIST_ADD("cart_list","ngpc")
trunk/src/mess/drivers/nes.c
r20749r20750
474474   MCFG_CARTSLOT_EXTENSION_LIST("nes,unf")
475475   MCFG_CARTSLOT_MANDATORY
476476   MCFG_CARTSLOT_INTERFACE("nes_cart")
477   MCFG_CARTSLOT_LOAD(nes_cart)
477   MCFG_CARTSLOT_LOAD(nes_state,nes_cart)
478478   MCFG_CARTSLOT_PARTIALHASH(nes_partialhash)
479479   MCFG_SOFTWARE_LIST_ADD("cart_list","nes")
480480MACHINE_CONFIG_END
r20749r20750
526526   MCFG_CARTSLOT_MODIFY("cart")
527527   MCFG_CARTSLOT_EXTENSION_LIST("nes,unf")
528528   MCFG_CARTSLOT_NOT_MANDATORY
529   MCFG_CARTSLOT_LOAD(nes_cart)
529   MCFG_CARTSLOT_LOAD(nes_state,nes_cart)
530530   MCFG_CARTSLOT_PARTIALHASH(nes_partialhash)
531531
532532   MCFG_LEGACY_FLOPPY_DRIVE_ADD(FLOPPY_0, nes_floppy_interface)
trunk/src/mess/drivers/timex.c
r20749r20750
608608}
609609
610610
611DEVICE_IMAGE_LOAD_MEMBER( spectrum_state, timex_cart )
612{
613   return device_load_timex_cart( image );
614}
615
616
617DEVICE_IMAGE_UNLOAD_MEMBER( spectrum_state, timex_cart )
618{
619   device_unload_timex_cart( image );
620}
621
622
611623/* F4 Character Displayer - tc2048 code is inherited from the spectrum */
612624static const gfx_layout ts2068_charlayout =
613625{
r20749r20750
653665   MCFG_CARTSLOT_MODIFY("cart")
654666   MCFG_CARTSLOT_EXTENSION_LIST("dck")
655667   MCFG_CARTSLOT_NOT_MANDATORY
656   MCFG_CARTSLOT_LOAD(timex_cart)
657   MCFG_CARTSLOT_UNLOAD(timex_cart)
668   MCFG_CARTSLOT_LOAD(spectrum_state,timex_cart)
669   MCFG_CARTSLOT_UNLOAD(spectrum_state,timex_cart)
658670
659671   /* internal ram */
660672   MCFG_RAM_MODIFY(RAM_TAG)
trunk/src/mess/drivers/gamepock.c
r20749r20750
4545static const UPD7810_CONFIG gamepock_cpu_config = { TYPE_78C06, gamepock_io_callback };
4646
4747
48static DEVICE_START(gamepock_cart)
48DEVICE_IMAGE_START_MEMBER(gamepock_state,gamepock_cart)
4949{
50   gamepock_state *state = device->machine().driver_data<gamepock_state>();
51   state->membank( "bank1" )->set_base( state->memregion("user1" )->base() );
50   membank( "bank1" )->set_base( memregion("user1" )->base() );
5251}
5352
5453
55static DEVICE_IMAGE_LOAD(gamepock_cart) {
56   gamepock_state *state = image.device().machine().driver_data<gamepock_state>();
57   UINT8 *cart = state->memregion("user1" )->base();
54DEVICE_IMAGE_LOAD_MEMBER(gamepock_state,gamepock_cart) {
55   UINT8 *cart = memregion("user1" )->base();
5856
5957   if ( image.software_entry() == NULL )
6058   {
r20749r20750
6967      cart = image.get_software_region( "rom" );
7068   }
7169
72   state->membank( "bank1" )->set_base( cart );
70   membank( "bank1" )->set_base( cart );
7371
7472   return IMAGE_INIT_PASS;
7573}
r20749r20750
102100   MCFG_CARTSLOT_INTERFACE("gamepock_cart")
103101   MCFG_CARTSLOT_EXTENSION_LIST("bin")
104102   MCFG_CARTSLOT_NOT_MANDATORY
105   MCFG_CARTSLOT_START(gamepock_cart)
106   MCFG_CARTSLOT_LOAD(gamepock_cart)
103   MCFG_CARTSLOT_START(gamepock_state,gamepock_cart)
104   MCFG_CARTSLOT_LOAD(gamepock_state,gamepock_cart)
107105
108106   /* Software lists */
109107   MCFG_SOFTWARE_LIST_ADD("cart_list","gamepock")
trunk/src/mess/drivers/ng_aes.c
r20749r20750
15281528   MCFG_MACHINE_RESET_OVERRIDE(ng_aes_state, neogeo)
15291529
15301530   MCFG_CARTSLOT_ADD("cart")
1531   MCFG_CARTSLOT_LOAD(neo_cartridge)
1531   MCFG_CARTSLOT_LOAD(ng_aes_state,neo_cartridge)
15321532   MCFG_CARTSLOT_INTERFACE("neo_cart")
15331533   MCFG_CARTSLOT_MANDATORY
15341534
trunk/src/mess/drivers/ssem.c
r20749r20750
2424   virtual void machine_reset();
2525   UINT32 screen_update_ssem(screen_device &screen, bitmap_rgb32 &bitmap, const rectangle &cliprect);
2626   DECLARE_INPUT_CHANGED_MEMBER(panel_check);
27   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ssem_store);
2728};
2829
2930
r20749r20750
514515* Image loading                                      *
515516\****************************************************/
516517
517static DEVICE_IMAGE_LOAD(ssem_store)
518DEVICE_IMAGE_LOAD_MEMBER(ssem_state,ssem_store)
518519{
519520   ssem_state *state = image.device().machine().driver_data<ssem_state>();
520521   const char* image_name = image.filename();
r20749r20750
650651   /* cartridge */
651652   MCFG_CARTSLOT_ADD("cart")
652653   MCFG_CARTSLOT_EXTENSION_LIST("snp,asm")
653   MCFG_CARTSLOT_LOAD(ssem_store)
654   MCFG_CARTSLOT_LOAD(ssem_state,ssem_store)
654655MACHINE_CONFIG_END
655656
656657ROM_START( ssem )
trunk/src/mess/drivers/svi318.c
r20749r20750
299299   MCFG_CARTSLOT_EXTENSION_LIST("rom")
300300   MCFG_CARTSLOT_NOT_MANDATORY
301301   MCFG_CARTSLOT_INTERFACE("svi318_cart")
302   MCFG_CARTSLOT_START(svi318_cart)
303   MCFG_CARTSLOT_LOAD(svi318_cart)
304   MCFG_CARTSLOT_UNLOAD(svi318_cart)
302   MCFG_CARTSLOT_START(svi318_state,svi318_cart)
303   MCFG_CARTSLOT_LOAD(svi318_state,svi318_cart)
304   MCFG_CARTSLOT_UNLOAD(svi318_state,svi318_cart)
305305
306306   /* Software lists */
307307   MCFG_SOFTWARE_LIST_ADD("cart_list","svi318_cart")
trunk/src/mess/drivers/vboy.c
r20749r20750
218218   TIMER_DEVICE_CALLBACK_MEMBER(vboy_scanlineL);
219219   TIMER_DEVICE_CALLBACK_MEMBER(vboy_scanlineR);
220220   void vboy_machine_stop();
221   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(vboy_cart);
221222};
222223
223224
r20749r20750
13461347}
13471348
13481349
1349static DEVICE_IMAGE_LOAD( vboy_cart )
1350DEVICE_IMAGE_LOAD_MEMBER( vboy_state, vboy_cart )
13501351{
13511352   vboy_state *state = image.device().machine().driver_data<vboy_state>();
13521353   UINT32 chip = 0;
r20749r20750
14221423   MCFG_CARTSLOT_EXTENSION_LIST("vb,bin")
14231424   MCFG_CARTSLOT_MANDATORY
14241425   MCFG_CARTSLOT_INTERFACE("vboy_cart")
1425   MCFG_CARTSLOT_LOAD(vboy_cart)
1426   MCFG_CARTSLOT_LOAD(vboy_state, vboy_cart)
14261427
14271428   /* software lists */
14281429   MCFG_SOFTWARE_LIST_ADD("cart_list","vboy")
trunk/src/mame/machine/vectrex.c
r20749r20750
6464
6565*********************************************************************/
6666
67DEVICE_IMAGE_LOAD(vectrex_cart)
67DEVICE_IMAGE_LOAD_MEMBER(vectrex_state,vectrex_cart)
6868{
6969   vectrex_state *state = image.device().machine().driver_data<vectrex_state>();
7070   UINT8 *mem = state->memregion("maincpu")->base();
trunk/src/mame/machine/megadriv.c
r20749r20750
12711271
12721272// FIXME: non-softlist loading should keep using ROM_CART_LOAD in the ROM definitions,
12731273// once we better integrate softlist with the old loading procedures
1274static DEVICE_IMAGE_LOAD( _32x_cart )
1274DEVICE_IMAGE_LOAD_MEMBER( md_base_state, _32x_cart )
12751275{
12761276   UINT32 length;
12771277   UINT8 *temp_copy;
r20749r20750
13171317   MCFG_CARTSLOT_EXTENSION_LIST("32x,bin")
13181318   MCFG_CARTSLOT_MANDATORY
13191319   MCFG_CARTSLOT_INTERFACE("_32x_cart")
1320   MCFG_CARTSLOT_LOAD(_32x_cart)
1320   MCFG_CARTSLOT_LOAD(md_base_state, _32x_cart)
13211321   MCFG_SOFTWARE_LIST_ADD("cart_list","32x")
13221322MACHINE_CONFIG_END
13231323
trunk/src/mame/includes/neogeo.h
r20749r20750
231231   TIMER_CALLBACK_MEMBER(vblank_interrupt_callback);
232232   TIMER_CALLBACK_MEMBER(auto_animation_timer_callback);
233233   TIMER_CALLBACK_MEMBER(sprite_line_timer_callback);
234   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(neo_cartridge);
234235   void neogeo_postload();
235236   void regenerate_pens();
236237
r20749r20750
254255void neogeo_set_display_counter_lsb(address_space &space, UINT16 data);
255256void neogeo_acknowledge_interrupt(running_machine &machine, UINT16 data);
256257void neogeo_set_main_cpu_bank_address(address_space &space, UINT32 bank_address);
257DEVICE_IMAGE_LOAD( neo_cartridge );
258258void neogeo_audio_cpu_banking_init( running_machine &machine );
259259void neogeo_main_cpu_banking_init( running_machine &machine );
260260void neogeo_set_main_cpu_vector_table_source( running_machine &machine, UINT8 data );
trunk/src/mame/includes/stv.h
r20749r20750
247247   DECLARE_READ8_MEMBER( saturn_SMPC_r );
248248   DECLARE_WRITE8_MEMBER( saturn_SMPC_w );
249249
250   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( sat_cart );
251   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( stv_cart );
250252};
251253
252254#define MASTER_CLOCK_352 57272720
trunk/src/mame/includes/megadriv.h
r20749r20750
111111   DECLARE_WRITE8_MEMBER(megadriv_68k_YM2612_write);
112112   IRQ_CALLBACK_MEMBER(genesis_int_callback);
113113   void megadriv_init_common();
114
115   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( _32x_cart );
114116};
115117
116118class md_boot_state : public md_base_state
r20749r20750
335337
336338   int m_cart_is_genesis[8];
337339
340   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( megatech_cart );
341
338342   /* Megatech BIOS specific */
339343   UINT8* m_megatech_banked_ram;
340344   DECLARE_DRIVER_INIT(mt_crt);
trunk/src/mame/includes/snes.h
r20749r20750
552552   TIMER_CALLBACK_MEMBER(snes_scanline_tick);
553553   TIMER_CALLBACK_MEMBER(snes_hblank_tick);
554554   DECLARE_WRITE_LINE_MEMBER(snes_extern_irq_w);
555   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(snes_cart);
556   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(sufami_cart);
557   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(bsx_cart);
558   DECLARE_DEVICE_IMAGE_LOAD_MEMBER(bsx2slot_cart);
555559};
556560
557561/* Special chips, checked at init and used in memory handlers */
trunk/src/mame/includes/vectrex.h
r20749r20750
8484   DECLARE_WRITE8_MEMBER(v_via_pa_w);
8585   DECLARE_WRITE8_MEMBER(v_via_ca2_w);
8686   DECLARE_WRITE8_MEMBER(v_via_cb2_w);
87   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( vectrex_cart );
8788};
8889
8990
9091/*----------- defined in machine/vectrex.c -----------*/
9192
92DEVICE_IMAGE_LOAD( vectrex_cart );
9393void vectrex_configuration(running_machine &machine);
9494void vectrex_via_irq (device_t *device, int level);
9595
trunk/src/mame/includes/jaguar.h
r20749r20750
215215   void cart_start();
216216   int cart_load(device_image_interface &image);
217217   IRQ_CALLBACK_MEMBER(jaguar_irq_callback);
218   DECLARE_DEVICE_IMAGE_START_MEMBER( jaguar_cart );
219   DECLARE_DEVICE_IMAGE_LOAD_MEMBER( jaguar_cart );
218220protected:
219221   // timer IDs
220222   enum
trunk/src/mame/drivers/megatech.c
r20749r20750
566566   { 0 }
567567};
568568
569static DEVICE_IMAGE_LOAD( megatech_cart )
569DEVICE_IMAGE_LOAD_MEMBER( mtech_state, megatech_cart )
570570{
571571   mtech_state *state = image.device().machine().driver_data<mtech_state>();
572572   const struct megatech_cart_region *mt_cart = &megatech_cart_table[0], *this_cart;
r20749r20750
620620#define MCFG_MEGATECH_CARTSLOT_ADD(_tag) \
621621   MCFG_CARTSLOT_ADD(_tag) \
622622   MCFG_CARTSLOT_INTERFACE("megatech_cart") \
623   MCFG_CARTSLOT_LOAD(megatech_cart)
623   MCFG_CARTSLOT_LOAD(mtech_state, megatech_cart)
624624
625625MACHINE_CONFIG_FRAGMENT( megatech_cartslot )
626626   MCFG_MEGATECH_CARTSLOT_ADD("cart1")
trunk/src/mame/drivers/saturn.c
r20749r20750
21612161
21622162
21632163
2164static DEVICE_IMAGE_LOAD( sat_cart )
2164DEVICE_IMAGE_LOAD_MEMBER( saturn_state, sat_cart )
21652165{
21662166   UINT8 *ROM = image.device().machine().root_device().memregion("maincpu")->base()+0x080000;
21672167   UINT32 length;
r20749r20750
22452245
22462246   MCFG_CARTSLOT_ADD("cart")
22472247   MCFG_CARTSLOT_INTERFACE("sat_cart")
2248   MCFG_CARTSLOT_LOAD(sat_cart)
2248   MCFG_CARTSLOT_LOAD(saturn_state, sat_cart)
22492249   MCFG_SOFTWARE_LIST_ADD("cart_list","sat_cart")
22502250
22512251MACHINE_CONFIG_END
r20749r20750
22572257
22582258   MCFG_CARTSLOT_ADD("cart")
22592259   MCFG_CARTSLOT_INTERFACE("sat_cart")
2260   MCFG_CARTSLOT_LOAD(sat_cart)
2260   MCFG_CARTSLOT_LOAD(saturn_state, sat_cart)
22612261   MCFG_SOFTWARE_LIST_ADD("cart_list","sat_cart")
22622262
22632263MACHINE_CONFIG_END
r20749r20750
22692269
22702270   MCFG_CARTSLOT_ADD("cart")
22712271   MCFG_CARTSLOT_INTERFACE("sat_cart")
2272   MCFG_CARTSLOT_LOAD(sat_cart)
2272   MCFG_CARTSLOT_LOAD(saturn_state, sat_cart)
22732273   MCFG_SOFTWARE_LIST_ADD("cart_list","sat_cart")
22742274
22752275MACHINE_CONFIG_END
r20749r20750
23382338   { 0 }
23392339};
23402340
2341static DEVICE_IMAGE_LOAD( stv_cart )
2341DEVICE_IMAGE_LOAD_MEMBER( saturn_state, stv_cart )
23422342{
23432343//  saturn_state *state = image.device().machine().driver_data<saturn_state>();
23442344   const struct stv_cart_region *stv_cart = &stv_cart_table[0], *this_cart;
r20749r20750
23912391#define MCFG_STV_CARTSLOT_ADD(_tag) \
23922392   MCFG_CARTSLOT_ADD(_tag) \
23932393   MCFG_CARTSLOT_INTERFACE("stv_cart") \
2394   MCFG_CARTSLOT_LOAD(stv_cart)
2394   MCFG_CARTSLOT_LOAD(saturn_state,stv_cart)
23952395
23962396MACHINE_CONFIG_FRAGMENT( stv_cartslot )
23972397   MCFG_STV_CARTSLOT_ADD("cart1")
trunk/src/mame/drivers/vectrex.c
r20749r20750
124124   MCFG_CARTSLOT_ADD("cart")
125125   MCFG_CARTSLOT_EXTENSION_LIST("bin,gam,vec")
126126   MCFG_CARTSLOT_NOT_MANDATORY
127   MCFG_CARTSLOT_LOAD(vectrex_cart)
127   MCFG_CARTSLOT_LOAD(vectrex_state,vectrex_cart)
128128   MCFG_CARTSLOT_INTERFACE("vectrex_cart")
129129
130130   /* software lists */
trunk/src/mame/drivers/jaguar.c
r20749r20750
348348#define M68K_CLOCK          XTAL_50MHz
349349
350350static QUICKLOAD_LOAD( jaguar );
351static DEVICE_START( jaguar_cart );
352static DEVICE_IMAGE_LOAD( jaguar );
353351
354352
355
356353/*************************************
357354 *
358355 *  Local variables
r20749r20750
16441641   MCFG_CARTSLOT_ADD("cart")
16451642   MCFG_CARTSLOT_EXTENSION_LIST("j64,rom")
16461643   MCFG_CARTSLOT_INTERFACE("jaguar_cart")
1647   MCFG_CARTSLOT_START(jaguar_cart)
1648   MCFG_CARTSLOT_LOAD(jaguar)
1644   MCFG_CARTSLOT_START(jaguar_state,jaguar_cart)
1645   MCFG_CARTSLOT_LOAD(jaguar_state,jaguar_cart)
16491646
16501647   /* software lists */
16511648   MCFG_SOFTWARE_LIST_ADD("cart_list","jaguar")
r20749r20750
17701767   return IMAGE_INIT_PASS;
17711768}
17721769
1773static DEVICE_START( jaguar_cart )
1770DEVICE_IMAGE_START_MEMBER( jaguar_state, jaguar_cart )
17741771{
1775   device->machine().driver_data<jaguar_state>()->cart_start();
1772   cart_start();
17761773}
17771774
17781775void jaguar_state::cart_start()
r20749r20750
17821779   memset( m_cart_base, 0, memshare("cart")->bytes() );
17831780}
17841781
1785static DEVICE_IMAGE_LOAD( jaguar )
1782DEVICE_IMAGE_LOAD_MEMBER( jaguar_state, jaguar_cart )
17861783{
1787   return image.device().machine().driver_data<jaguar_state>()->cart_load(image);
1784   return cart_load(image);
17881785}
17891786
17901787int jaguar_state::cart_load(device_image_interface &image)
trunk/src/mame/drivers/neogeo.c
r20749r20750
13161316
13171317
13181318
1319DEVICE_IMAGE_LOAD( neo_cartridge )
1319DEVICE_IMAGE_LOAD_MEMBER( neogeo_state, neo_cartridge )
13201320{
13211321   UINT32 size;
13221322   device_t* ym = image.device().machine().device("ymsnd");
r20749r20750
14401440
14411441static MACHINE_CONFIG_DERIVED( mvs, neogeo )
14421442   MCFG_CARTSLOT_ADD("cart")
1443   MCFG_CARTSLOT_LOAD(neo_cartridge)
1443   MCFG_CARTSLOT_LOAD(neogeo_state,neo_cartridge)
14441444   MCFG_CARTSLOT_INTERFACE("neo_cart")
14451445
14461446   MCFG_SOFTWARE_LIST_ADD("cart_list","neogeo")

Previous 199869 Revisions Next


© 1997-2024 The MAME Team