mirror of
https://github.com/holub/mame
synced 2025-04-26 02:07:14 +03:00
Image instance name refactoring and bug fixing (nw)
- update_names no longer takes arguments; the device type can be obtained easily, and the custom instance names are now overrides. Devices might not need to explicitly call update_names in the future. - Fix the frontend crash/assert failure resulting from instance names not being generated properly.
This commit is contained in:
parent
e27a978955
commit
3ad77eae8a
@ -64,6 +64,8 @@ public:
|
||||
virtual bool is_reset_on_load() const override { return 0; }
|
||||
virtual bool support_command_line_image_creation() const override { return 1; }
|
||||
virtual const char *file_extensions() const override { return "awd"; }
|
||||
virtual const char *custom_instance_name() const override { return "disk"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "disk"; }
|
||||
|
||||
virtual image_init_result call_create(int format_type, util::option_resolution *format_options) override;
|
||||
protected:
|
||||
@ -1319,7 +1321,7 @@ omti_disk_image_device::omti_disk_image_device(const machine_config &mconfig, co
|
||||
|
||||
void omti_disk_image_device::device_config_complete()
|
||||
{
|
||||
update_names(OMTI_DISK, "disk", "disk");
|
||||
update_names();
|
||||
}
|
||||
|
||||
|
||||
|
@ -1311,7 +1311,7 @@ sc499_ctape_image_device::sc499_ctape_image_device(const machine_config &mconfig
|
||||
|
||||
void sc499_ctape_image_device::device_config_complete()
|
||||
{
|
||||
update_names(SC499_CTAPE, "ctape", "ct");
|
||||
update_names();
|
||||
}
|
||||
|
||||
|
||||
|
@ -43,6 +43,8 @@ public:
|
||||
virtual bool support_command_line_image_creation() const override { return 1; }
|
||||
virtual const char *image_interface() const override { return "sc499_cass"; }
|
||||
virtual const char *file_extensions() const override { return "act,ct"; }
|
||||
virtual const char *custom_instance_name() const override { return "ctape"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "ct"; }
|
||||
|
||||
uint8_t *read_block(int block_num);
|
||||
void write_block(int block_num, uint8_t *ptr);
|
||||
|
@ -39,7 +39,7 @@ public:
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_config_complete() override { update_names(MSX_SLOT_CARTRIDGE, "cartridge", "cart"); }
|
||||
virtual void device_config_complete() override { update_names(); }
|
||||
|
||||
// image-level overrides
|
||||
virtual image_init_result call_load() override;
|
||||
@ -53,6 +53,8 @@ public:
|
||||
virtual bool is_reset_on_load() const override { return true; }
|
||||
virtual const char *image_interface() const override { return "msx_cart"; }
|
||||
virtual const char *file_extensions() const override { return "mx1,bin,rom"; }
|
||||
virtual const char *custom_instance_name() const override { return "cartridge"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "cart"; }
|
||||
|
||||
// slot interface overrides
|
||||
virtual std::string get_default_card_software() override;
|
||||
@ -78,9 +80,10 @@ public:
|
||||
msx_slot_yamaha_expansion_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual void device_start() override;
|
||||
virtual void device_config_complete() override { update_names(MSX_SLOT_YAMAHA_EXPANSION, "cartridge60pin", "cart60p"); }
|
||||
|
||||
virtual const char *image_interface() const override { return "msx_yamaha_60pin"; }
|
||||
virtual const char *custom_instance_name() const override { return "cartridge60pin"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "cart60p"; }
|
||||
};
|
||||
|
||||
|
||||
|
@ -45,6 +45,8 @@ public:
|
||||
virtual bool must_be_loaded() const override { return 0; }
|
||||
virtual bool is_reset_on_load() const override { return 0; }
|
||||
virtual const char *file_extensions() const override { return "img"; }
|
||||
virtual const char *custom_instance_name() const override { return "disk"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "disk"; }
|
||||
|
||||
virtual image_init_result call_load() override;
|
||||
virtual void call_unload() override;
|
||||
@ -72,7 +74,7 @@ messimg_disk_image_device::messimg_disk_image_device(const machine_config &mconf
|
||||
|
||||
void messimg_disk_image_device::device_config_complete()
|
||||
{
|
||||
update_names(MESSIMG_DISK, "disk", "disk");
|
||||
update_names();
|
||||
}
|
||||
|
||||
|
||||
|
@ -30,33 +30,33 @@ class nubus_image_device :
|
||||
public device_nubus_card_interface
|
||||
{
|
||||
public:
|
||||
// construction/destruction
|
||||
nubus_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
nubus_image_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source);
|
||||
// construction/destruction
|
||||
nubus_image_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
nubus_image_device(const machine_config &mconfig, device_type type, const char *name, const char *tag, device_t *owner, uint32_t clock, const char *shortname, const char *source);
|
||||
|
||||
// optional information overrides
|
||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
// optional information overrides
|
||||
virtual machine_config_constructor device_mconfig_additions() const override;
|
||||
virtual const tiny_rom_entry *device_rom_region() const override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_reset() override;
|
||||
|
||||
DECLARE_READ32_MEMBER(image_status_r);
|
||||
DECLARE_WRITE32_MEMBER(image_status_w);
|
||||
DECLARE_READ32_MEMBER(image_r);
|
||||
DECLARE_WRITE32_MEMBER(image_w);
|
||||
DECLARE_READ32_MEMBER(image_super_r);
|
||||
DECLARE_WRITE32_MEMBER(image_super_w);
|
||||
DECLARE_READ32_MEMBER(file_cmd_r);
|
||||
DECLARE_WRITE32_MEMBER(file_cmd_w);
|
||||
DECLARE_READ32_MEMBER(file_data_r);
|
||||
DECLARE_WRITE32_MEMBER(file_data_w);
|
||||
DECLARE_READ32_MEMBER(file_len_r);
|
||||
DECLARE_WRITE32_MEMBER(file_len_w);
|
||||
DECLARE_READ32_MEMBER(file_name_r);
|
||||
DECLARE_WRITE32_MEMBER(file_name_w);
|
||||
DECLARE_READ32_MEMBER(image_status_r);
|
||||
DECLARE_WRITE32_MEMBER(image_status_w);
|
||||
DECLARE_READ32_MEMBER(image_r);
|
||||
DECLARE_WRITE32_MEMBER(image_w);
|
||||
DECLARE_READ32_MEMBER(image_super_r);
|
||||
DECLARE_WRITE32_MEMBER(image_super_w);
|
||||
DECLARE_READ32_MEMBER(file_cmd_r);
|
||||
DECLARE_WRITE32_MEMBER(file_cmd_w);
|
||||
DECLARE_READ32_MEMBER(file_data_r);
|
||||
DECLARE_WRITE32_MEMBER(file_data_w);
|
||||
DECLARE_READ32_MEMBER(file_len_r);
|
||||
DECLARE_WRITE32_MEMBER(file_len_w);
|
||||
DECLARE_READ32_MEMBER(file_name_r);
|
||||
DECLARE_WRITE32_MEMBER(file_name_w);
|
||||
|
||||
public:
|
||||
messimg_disk_image_device *m_image;
|
||||
|
@ -106,7 +106,7 @@ void psxcard_device::device_reset()
|
||||
|
||||
void psxcard_device::device_config_complete()
|
||||
{
|
||||
update_names(PSXCARD, "memcard", "mc");
|
||||
update_names();
|
||||
}
|
||||
|
||||
//
|
||||
|
@ -109,12 +109,14 @@ public:
|
||||
|
||||
// device-level overrides
|
||||
virtual void device_start() override;
|
||||
virtual void device_config_complete() override { update_names(SEGA8_CART_SLOT, "cartridge", "cart"); }
|
||||
virtual void device_config_complete() override { update_names(); }
|
||||
|
||||
// image-level overrides
|
||||
virtual image_init_result call_load() override;
|
||||
virtual void call_unload() override;
|
||||
virtual const software_list_loader &get_software_list_loader() const override { return rom_software_list_loader::instance(); }
|
||||
virtual const char *custom_instance_name() const override { return "cartridge"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "cart"; }
|
||||
|
||||
int get_type() { return m_type; }
|
||||
int get_cart_type(uint8_t *ROM, uint32_t len);
|
||||
@ -166,7 +168,8 @@ public:
|
||||
// construction/destruction
|
||||
sega8_card_slot_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock);
|
||||
|
||||
virtual void device_config_complete() override { update_names(SEGA8_CARD_SLOT, "card", "card"); }
|
||||
virtual const char *custom_instance_name() const override { return "card"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "card"; }
|
||||
};
|
||||
|
||||
|
||||
|
@ -74,7 +74,7 @@ void bitbanger_device::device_start(void)
|
||||
|
||||
void bitbanger_device::device_config_complete(void)
|
||||
{
|
||||
update_names(BITBANGER, "bitbngr", "bitb");
|
||||
update_names();
|
||||
}
|
||||
|
||||
|
||||
|
@ -32,6 +32,8 @@ public:
|
||||
virtual bool is_reset_on_load() const override { return 0; }
|
||||
virtual const char *image_interface() const override { return m_interface; }
|
||||
virtual const char *file_extensions() const override { return ""; }
|
||||
virtual const char *custom_instance_name() const override { return "bitbanger"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "bitb"; }
|
||||
|
||||
void output(uint8_t data);
|
||||
uint32_t input(void *buffer, uint32_t length);
|
||||
|
@ -133,7 +133,7 @@ const image_device_type_info *device_image_interface::find_device_type(iodevice_
|
||||
const char *device_image_interface::device_typename(iodevice_t type)
|
||||
{
|
||||
const image_device_type_info *info = find_device_type(type);
|
||||
return (info != nullptr) ? info->m_name : nullptr;
|
||||
return (info != nullptr) ? info->m_name : "unknown";
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -144,7 +144,7 @@ const char *device_image_interface::device_typename(iodevice_t type)
|
||||
const char *device_image_interface::device_brieftypename(iodevice_t type)
|
||||
{
|
||||
const image_device_type_info *info = find_device_type(type);
|
||||
return (info != nullptr) ? info->m_shortname : nullptr;
|
||||
return (info != nullptr) ? info->m_shortname : "unk";
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
@ -1301,7 +1301,7 @@ const util::option_guide &device_image_interface::create_option_guide() const
|
||||
// update_names - update brief and instance names
|
||||
//-------------------------------------------------
|
||||
|
||||
void device_image_interface::update_names(const device_type device_type, const char *inst, const char *brief)
|
||||
void device_image_interface::update_names()
|
||||
{
|
||||
int count = 0;
|
||||
int index = -1;
|
||||
@ -1309,11 +1309,17 @@ void device_image_interface::update_names(const device_type device_type, const c
|
||||
{
|
||||
if (this == &image)
|
||||
index = count;
|
||||
if ((image.image_type() == image_type() && device_type == nullptr) || (device_type == image.device().type()))
|
||||
if ((image.image_type() == image_type() && custom_instance_name() == nullptr) || (device().type() == image.device().type()))
|
||||
count++;
|
||||
}
|
||||
const char *inst_name = (device_type!=nullptr) ? inst : device_typename(image_type());
|
||||
const char *brief_name = (device_type!=nullptr) ? brief : device_brieftypename(image_type());
|
||||
|
||||
const char *inst_name = custom_instance_name();
|
||||
const char *brief_name = custom_brief_instance_name();
|
||||
if (inst_name == nullptr)
|
||||
inst_name = device_typename(image_type());
|
||||
if (brief_name == nullptr)
|
||||
brief_name = device_brieftypename(image_type());
|
||||
|
||||
if (count > 1)
|
||||
{
|
||||
m_instance_name = string_format("%s%d", inst_name, index + 1);
|
||||
@ -1321,8 +1327,8 @@ void device_image_interface::update_names(const device_type device_type, const c
|
||||
}
|
||||
else
|
||||
{
|
||||
m_instance_name = inst_name ? inst_name : "";
|
||||
m_brief_instance_name = brief_name ? brief_name : "";
|
||||
m_instance_name = inst_name;
|
||||
m_brief_instance_name = brief_name;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -162,6 +162,8 @@ public:
|
||||
virtual const char *image_interface() const { return nullptr; }
|
||||
virtual const char *file_extensions() const = 0;
|
||||
virtual const util::option_guide &create_option_guide() const;
|
||||
virtual const char *custom_instance_name() const { return nullptr; }
|
||||
virtual const char *custom_brief_instance_name() const { return nullptr; }
|
||||
|
||||
const image_device_format *device_get_indexed_creatable_format(int index) const { if (index < m_formatlist.size()) return m_formatlist.at(index).get(); else return nullptr; }
|
||||
const image_device_format *device_get_named_creatable_format(const std::string &format_name);
|
||||
@ -272,7 +274,7 @@ protected:
|
||||
|
||||
void run_hash(void (*partialhash)(util::hash_collection &, const unsigned char *, unsigned long, const char *), util::hash_collection &hashes, const char *types);
|
||||
void image_checkhash();
|
||||
void update_names(device_type device_type = nullptr, const char *inst = nullptr, const char *brief = nullptr);
|
||||
void update_names();
|
||||
|
||||
const software_part *find_software_item(const std::string &identifier, bool restrict_to_interface, software_list_device **device = nullptr) const;
|
||||
bool load_software_part(const std::string &identifier);
|
||||
|
@ -58,9 +58,7 @@ bool mame_options::add_slot_options(emu_options &options, std::function<void(emu
|
||||
|
||||
// allow opportunity to specify this value
|
||||
if (value_specifier)
|
||||
{
|
||||
value_specifier(options, name);
|
||||
}
|
||||
}
|
||||
}
|
||||
return (options.options_count() != starting_count);
|
||||
|
@ -371,6 +371,8 @@ public:
|
||||
virtual image_init_result call_load() override;
|
||||
virtual image_init_result call_create(int format_type, util::option_resolution *format_options) override;
|
||||
virtual void call_unload() override;
|
||||
virtual const char *custom_instance_name() const override { return "node_id"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "ni"; }
|
||||
|
||||
void set_node_id_from_disk();
|
||||
|
||||
|
@ -191,10 +191,13 @@ public:
|
||||
virtual bool must_be_loaded() const override { return 0; }
|
||||
virtual bool is_reset_on_load() const override { return 0; }
|
||||
virtual const char *file_extensions() const override { return "crd"; }
|
||||
virtual const char *custom_instance_name() const override { return "port"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "p"; }
|
||||
|
||||
virtual image_init_result call_load() override;
|
||||
virtual void call_unload() override;
|
||||
virtual image_init_result call_create(int format_type, util::option_resolution *format_options) override;
|
||||
|
||||
protected:
|
||||
// device-level overrides
|
||||
virtual void device_config_complete() override;
|
||||
|
@ -885,7 +885,7 @@ apollo_ni::~apollo_ni()
|
||||
|
||||
void apollo_ni::device_config_complete()
|
||||
{
|
||||
update_names(APOLLO_NI, "node_id", "ni");
|
||||
update_names();
|
||||
}
|
||||
|
||||
//-------------------------------------------------
|
||||
|
@ -1018,7 +1018,7 @@ hp48_port_image_device::hp48_port_image_device(const machine_config &mconfig, co
|
||||
|
||||
void hp48_port_image_device::device_config_complete()
|
||||
{
|
||||
update_names(HP48_PORT, "port", "p");
|
||||
update_names();
|
||||
}
|
||||
|
||||
/***************************************************************************
|
||||
|
@ -32,7 +32,7 @@ x68k_hdc_image_device::x68k_hdc_image_device(const machine_config &mconfig, cons
|
||||
|
||||
void x68k_hdc_image_device::device_config_complete()
|
||||
{
|
||||
update_names(X68KHDC, "sasihd", "sasi");
|
||||
update_names();
|
||||
}
|
||||
|
||||
void x68k_hdc_image_device::device_timer(emu_timer &timer, device_timer_id id, int param, void *ptr)
|
||||
|
@ -92,6 +92,8 @@ public:
|
||||
virtual bool must_be_loaded() const override { return 0; }
|
||||
virtual bool is_reset_on_load() const override { return 0; }
|
||||
virtual const char *file_extensions() const override { return "hdf"; }
|
||||
virtual const char *custom_instance_name() const override { return "sasihd"; }
|
||||
virtual const char *custom_brief_instance_name() const override { return "sasi"; }
|
||||
virtual image_init_result call_create(int format_type, util::option_resolution *format_options) override;
|
||||
|
||||
DECLARE_WRITE16_MEMBER( hdc_w );
|
||||
|
Loading…
Reference in New Issue
Block a user