atom.cpp: Replace machine().device with finder array (nw)

This commit is contained in:
AJR 2018-06-14 23:34:04 -04:00
parent 65c4569652
commit a6e481e111
2 changed files with 30 additions and 57 deletions

View File

@ -662,8 +662,8 @@ void atom_state::machine_start()
m_baseram[0x0a] = machine().rand() & 0x0ff; m_baseram[0x0a] = machine().rand() & 0x0ff;
m_baseram[0x0b] = machine().rand() & 0x0ff; m_baseram[0x0b] = machine().rand() & 0x0ff;
if (m_cart && m_cart->exists()) if (m_cart.found() && m_cart->exists())
m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xafff, read8_delegate(FUNC(generic_slot_device::read_rom),(generic_slot_device*)m_cart)); m_maincpu->space(AS_PROGRAM).install_read_handler(0xa000, 0xafff, read8_delegate(FUNC(generic_slot_device::read_rom), &*m_cart));
} }
/*------------------------------------------------- /*-------------------------------------------------
@ -679,9 +679,9 @@ void atomeb_state::machine_start()
MACHINE DRIVERS MACHINE DRIVERS
***************************************************************************/ ***************************************************************************/
image_init_result atom_state::load_cart(device_image_interface &image, generic_slot_device *slot) image_init_result atom_state::load_cart(device_image_interface &image, generic_slot_device &slot)
{ {
uint32_t size = slot->common_get_size("rom"); uint32_t size = slot.common_get_size("rom");
if (size > 0x1000) if (size > 0x1000)
{ {
@ -689,8 +689,8 @@ image_init_result atom_state::load_cart(device_image_interface &image, generic_s
return image_init_result::FAIL; return image_init_result::FAIL;
} }
slot->rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE); slot.rom_alloc(size, GENERIC_ROM8_WIDTH, ENDIANNESS_LITTLE);
slot->common_load_rom(slot->get_rom_base(), size, "rom"); slot.common_load_rom(slot.get_rom_base(), size, "rom");
return image_init_result::PASS; return image_init_result::PASS;
} }
@ -793,22 +793,22 @@ MACHINE_CONFIG_START(atomeb_state::atomeb)
/* cartridges */ /* cartridges */
MCFG_DEVICE_REMOVE("cartslot") MCFG_DEVICE_REMOVE("cartslot")
MCFG_ATOM_ROM_ADD("rom_a0", a0_load) MCFG_ATOM_ROM_ADD("rom_a0", ext_load<0x0>)
MCFG_ATOM_ROM_ADD("rom_a1", a1_load) MCFG_ATOM_ROM_ADD("rom_a1", ext_load<0x1>)
MCFG_ATOM_ROM_ADD("rom_a2", a2_load) MCFG_ATOM_ROM_ADD("rom_a2", ext_load<0x2>)
MCFG_ATOM_ROM_ADD("rom_a3", a3_load) MCFG_ATOM_ROM_ADD("rom_a3", ext_load<0x3>)
MCFG_ATOM_ROM_ADD("rom_a4", a4_load) MCFG_ATOM_ROM_ADD("rom_a4", ext_load<0x4>)
MCFG_ATOM_ROM_ADD("rom_a5", a5_load) MCFG_ATOM_ROM_ADD("rom_a5", ext_load<0x5>)
MCFG_ATOM_ROM_ADD("rom_a6", a6_load) MCFG_ATOM_ROM_ADD("rom_a6", ext_load<0x6>)
MCFG_ATOM_ROM_ADD("rom_a7", a7_load) MCFG_ATOM_ROM_ADD("rom_a7", ext_load<0x7>)
MCFG_ATOM_ROM_ADD("rom_a8", a8_load) MCFG_ATOM_ROM_ADD("rom_a8", ext_load<0x8>)
MCFG_ATOM_ROM_ADD("rom_a9", a9_load) MCFG_ATOM_ROM_ADD("rom_a9", ext_load<0x9>)
MCFG_ATOM_ROM_ADD("rom_aa", aa_load) MCFG_ATOM_ROM_ADD("rom_aa", ext_load<0xa>)
MCFG_ATOM_ROM_ADD("rom_ab", ab_load) MCFG_ATOM_ROM_ADD("rom_ab", ext_load<0xb>)
MCFG_ATOM_ROM_ADD("rom_ac", ac_load) MCFG_ATOM_ROM_ADD("rom_ac", ext_load<0xc>)
MCFG_ATOM_ROM_ADD("rom_ad", ad_load) MCFG_ATOM_ROM_ADD("rom_ad", ext_load<0xd>)
MCFG_ATOM_ROM_ADD("rom_ae", ae_load) MCFG_ATOM_ROM_ADD("rom_ae", ext_load<0xe>)
MCFG_ATOM_ROM_ADD("rom_af", af_load) MCFG_ATOM_ROM_ADD("rom_af", ext_load<0xf>)
MCFG_ATOM_ROM_ADD("rom_e0", e0_load) MCFG_ATOM_ROM_ADD("rom_e0", e0_load)
MCFG_ATOM_ROM_ADD("rom_e1", e1_load) MCFG_ATOM_ROM_ADD("rom_e1", e1_load)
@ -974,17 +974,6 @@ ROM_END
// ROM_LOAD( "atommc2-2.9-a000.rom", 0x2000, 0x1000, CRC(ba73e36c) SHA1(ea9739e96f3283c90b5306288c796fc01144b771) ) // ROM_LOAD( "atommc2-2.9-a000.rom", 0x2000, 0x1000, CRC(ba73e36c) SHA1(ea9739e96f3283c90b5306288c796fc01144b771) )
//ROM_END //ROM_END
void atomeb_state::init_atomeb()
{
// these have to be set here, so that we can pass m_ext[*] to device_image_load!
char str[8];
for (int i = 0; i < 16; i++)
{
sprintf(str,"rom_a%x", i);
m_ext[i] = machine().device<generic_slot_device>(str);
}
}
/*************************************************************************** /***************************************************************************
SYSTEM DRIVERS SYSTEM DRIVERS
@ -992,7 +981,7 @@ void atomeb_state::init_atomeb()
/* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */ /* YEAR NAME PARENT COMPAT MACHINE INPUT CLASS INIT COMPANY FULLNAME FLAGS */
COMP( 1979, atom, 0, 0, atom, atom, atom_state, empty_init, "Acorn", "Atom", 0) COMP( 1979, atom, 0, 0, atom, atom, atom_state, empty_init, "Acorn", "Atom", 0)
COMP( 1979, atomeb, atom, 0, atomeb, atom, atomeb_state, init_atomeb, "Acorn", "Atom with Eprom Box", 0) COMP( 1979, atomeb, atom, 0, atomeb, atom, atomeb_state, empty_init, "Acorn", "Atom with Eprom Box", 0)
COMP( 1982, atombb, atom, 0, atombb, atom, atom_state, empty_init, "Acorn", "Atom with BBC Basic", 0) COMP( 1982, atombb, atom, 0, atombb, atom, atom_state, empty_init, "Acorn", "Atom with BBC Basic", 0)
//COMP( 1983, prophet2, atom, 0, prophet2, atom, driver_device, empty_init, "Busicomputers", "Prophet 2", 0) //COMP( 1983, prophet2, atom, 0, prophet2, atom, driver_device, empty_init, "Busicomputers", "Prophet 2", 0)
//COMP( 1983, prophet3, atom, 0, prophet3, atom, driver_device, empty_init, "Busicomputers", "Prophet 3", 0) //COMP( 1983, prophet3, atom, 0, prophet3, atom, driver_device, empty_init, "Busicomputers", "Prophet 3", 0)

View File

@ -115,8 +115,8 @@ public:
DECLARE_FLOPPY_FORMATS(floppy_formats); DECLARE_FLOPPY_FORMATS(floppy_formats);
TIMER_DEVICE_CALLBACK_MEMBER(cassette_output_tick); TIMER_DEVICE_CALLBACK_MEMBER(cassette_output_tick);
image_init_result load_cart(device_image_interface &image, generic_slot_device *slot); image_init_result load_cart(device_image_interface &image, generic_slot_device &slot);
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load) { return load_cart(image, m_cart); } DECLARE_DEVICE_IMAGE_LOAD_MEMBER(cart_load) { return load_cart(image, *m_cart); }
DECLARE_QUICKLOAD_LOAD_MEMBER(atom_atm); DECLARE_QUICKLOAD_LOAD_MEMBER(atom_atm);
void atombb(machine_config &config); void atombb(machine_config &config);
void atom(machine_config &config); void atom(machine_config &config);
@ -130,6 +130,7 @@ class atomeb_state : public atom_state
public: public:
atomeb_state(const machine_config &mconfig, device_type type, const char *tag) atomeb_state(const machine_config &mconfig, device_type type, const char *tag)
: atom_state(mconfig, type, tag), : atom_state(mconfig, type, tag),
m_ext(*this, "rom_a%x", 0),
m_e0(*this, "rom_e0"), m_e0(*this, "rom_e0"),
m_e1(*this, "rom_e1") m_e1(*this, "rom_e1")
{ {
@ -142,33 +143,16 @@ public:
DECLARE_READ8_MEMBER(ext_r); DECLARE_READ8_MEMBER(ext_r);
DECLARE_READ8_MEMBER(dos_r); DECLARE_READ8_MEMBER(dos_r);
void init_atomeb();
/* eprom state */ /* eprom state */
int m_eprom; int m_eprom;
generic_slot_device *m_ext[16]; required_device_array<generic_slot_device, 16> m_ext;
required_device<generic_slot_device> m_e0; required_device<generic_slot_device> m_e0;
required_device<generic_slot_device> m_e1; required_device<generic_slot_device> m_e1;
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a0_load) { return load_cart(image, m_ext[0x0]); } template<int I> DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ext_load) { return load_cart(image, *m_ext[I]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a1_load) { return load_cart(image, m_ext[0x1]); } DECLARE_DEVICE_IMAGE_LOAD_MEMBER(e0_load) { return load_cart(image, *m_e0); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a2_load) { return load_cart(image, m_ext[0x2]); } DECLARE_DEVICE_IMAGE_LOAD_MEMBER(e1_load) { return load_cart(image, *m_e1); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a3_load) { return load_cart(image, m_ext[0x3]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a4_load) { return load_cart(image, m_ext[0x4]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a5_load) { return load_cart(image, m_ext[0x5]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a6_load) { return load_cart(image, m_ext[0x6]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a7_load) { return load_cart(image, m_ext[0x7]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a8_load) { return load_cart(image, m_ext[0x8]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(a9_load) { return load_cart(image, m_ext[0x9]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(aa_load) { return load_cart(image, m_ext[0xa]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ab_load) { return load_cart(image, m_ext[0xb]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ac_load) { return load_cart(image, m_ext[0xc]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ad_load) { return load_cart(image, m_ext[0xd]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(ae_load) { return load_cart(image, m_ext[0xe]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(af_load) { return load_cart(image, m_ext[0xf]); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(e0_load) { return load_cart(image, m_e0); }
DECLARE_DEVICE_IMAGE_LOAD_MEMBER(e1_load) { return load_cart(image, m_e1); }
void atomeb(machine_config &config); void atomeb(machine_config &config);
void atomeb_mem(address_map &map); void atomeb_mem(address_map &map);
}; };