diff --git a/src/emu/diimage.c b/src/emu/diimage.c index 66cf2ca9cfd..05472201375 100644 --- a/src/emu/diimage.c +++ b/src/emu/diimage.c @@ -82,6 +82,7 @@ device_image_interface::device_image_interface(const machine_config &mconfig, de m_full_software_name(NULL), m_software_info_ptr(NULL), m_software_part_ptr(NULL), + m_software_list_name(NULL), m_readonly(false), m_created(false), m_formatlist(NULL), @@ -865,11 +866,11 @@ bool device_image_interface::load_internal(const char *path, bool is_create, int /* Check if there's a software list defined for this device and use that if we're not creating an image */ if (!filename_has_period) { - softload = load_software_part( device().machine().options(), this, path, &m_software_info_ptr, &m_software_part_ptr, &m_full_software_name ); + softload = load_software_part( device().machine().options(), this, path, &m_software_info_ptr, &m_software_part_ptr, &m_full_software_name, &m_software_list_name ); // if we had launched from softlist with a specified part, e.g. "shortname:part" // we would have recorded the wrong name, so record it again based on software_info - if (m_software_info_ptr && m_software_info_ptr->shortname) - m_err = set_image_filename(m_software_info_ptr->shortname); + if (m_software_info_ptr && m_full_software_name) + m_err = set_image_filename(m_full_software_name); m_from_swlist = TRUE; } @@ -1045,6 +1046,7 @@ void device_image_interface::clear() m_full_software_name = NULL; m_software_info_ptr = NULL; m_software_part_ptr = NULL; + m_software_list_name = NULL; } /*------------------------------------------------- @@ -1104,6 +1106,13 @@ ui_menu_control_device_image::ui_menu_control_device_image(running_machine &mach image = _image; sld = 0; + if (image->software_list_name()) { + software_list_device_iterator iter(machine.config().root_device()); + for (const software_list_device *swlist = iter.first(); swlist != NULL; swlist = iter.next()) + { + if (strcmp(swlist->list_name(),image->software_list_name())==0) sld = swlist; + } + } swi = image->software_entry(); swp = image->part_entry(); @@ -1185,7 +1194,9 @@ void ui_menu_control_device_image::test_create(bool &can_create, bool &need_conf void ui_menu_control_device_image::load_software_part() { - astring temp_name(swi->shortname); + astring temp_name(sld->list_name()); + temp_name.cat(":"); + temp_name.cat(swi->shortname); temp_name.cat(":"); temp_name.cat(swp->name); hook_load(temp_name, true); @@ -1251,7 +1262,8 @@ void ui_menu_control_device_image::handle() ui_menu::stack_push(auto_alloc_clear(machine(), ui_menu_software_parts(machine(), container, swi, image->image_interface(), &swp, false, &submenu_result))); state = SELECT_ONE_PART; } else { - image->load(software_info_name); + swp = software_find_part(swi, NULL, NULL); + load_software_part(); software_list_close(swl); ui_menu::stack_pop(machine()); } diff --git a/src/emu/diimage.h b/src/emu/diimage.h index 299a3010006..9ed0c97e4f5 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -221,6 +221,7 @@ public: const software_info *software_entry() { return m_software_info_ptr; } const software_part *part_entry() { return m_software_part_ptr; } + const char *software_list_name() { return m_software_list_name; } void set_working_directory(const char *working_directory) { m_working_directory = working_directory; } const char * working_directory(); @@ -296,6 +297,7 @@ protected: char *m_full_software_name; software_info *m_software_info_ptr; software_part *m_software_part_ptr; + char *m_software_list_name; /* info read from the hash file/software list */ astring m_longname; diff --git a/src/emu/romload.c b/src/emu/romload.c index d8379bbcda9..7b512676c7e 100644 --- a/src/emu/romload.c +++ b/src/emu/romload.c @@ -539,7 +539,7 @@ static void display_loading_rom_message(rom_load_data *romdata, const char *name else sprintf(buffer, "Loading Complete"); - ui_set_startup_text(romdata->machine(), buffer, FALSE); + if (!ui_is_menu_active()) ui_set_startup_text(romdata->machine(), buffer, FALSE); } diff --git a/src/emu/softlist.c b/src/emu/softlist.c index c3470d897c2..6c20d9cecc3 100644 --- a/src/emu/softlist.c +++ b/src/emu/softlist.c @@ -1675,7 +1675,7 @@ static void find_software_item(const machine_config &config, emu_options &option sw_info and sw_part are also set. -------------------------------------------------*/ -bool load_software_part(emu_options &options, device_image_interface *image, const char *path, software_info **sw_info, software_part **sw_part, char **full_sw_name) +bool load_software_part(emu_options &options, device_image_interface *image, const char *path, software_info **sw_info, software_part **sw_part, char **full_sw_name, char**list_name) { software_list *software_list_ptr = NULL; software_info *software_info_ptr = NULL; @@ -1685,6 +1685,7 @@ bool load_software_part(emu_options &options, device_image_interface *image, con bool result = false; *sw_info = NULL; *sw_part = NULL; + *list_name = NULL; find_software_item(image->device().machine().config(), options, image, path, &software_list_ptr, &software_info_ptr, &software_part_ptr, &swlist_name); @@ -1751,6 +1752,7 @@ bool load_software_part(emu_options &options, device_image_interface *image, con } new_part++; } + *list_name = auto_strdup( image->device().machine(), swlist_name ); /* Tell the world which part we actually loaded */ *full_sw_name = auto_alloc_array( image->device().machine(), char, strlen(swlist_name) + strlen(software_info_ptr->shortname) + strlen(software_part_ptr->name) + 3 ); diff --git a/src/emu/softlist.h b/src/emu/softlist.h index d4391e812c8..5e7b561af8e 100644 --- a/src/emu/softlist.h +++ b/src/emu/softlist.h @@ -192,7 +192,7 @@ const char *software_get_clone(emu_options &options, char *swlist, const char *s UINT32 software_get_support(emu_options &options, char *swlist, const char *swname); const char *software_part_get_feature(const software_part *part, const char *feature_name); -bool load_software_part(emu_options &options, device_image_interface *image, const char *path, software_info **sw_info, software_part **sw_part, char **full_sw_name); +bool load_software_part(emu_options &options, device_image_interface *image, const char *path, software_info **sw_info, software_part **sw_part, char **full_sw_name, char**list_name); void software_display_matches(const machine_config &config, emu_options &options,const char *interface,const char *swname_bckp);