diff options
| author | 2023-05-08 20:40:19 +0200 | |
|---|---|---|
| committer | 2023-05-08 20:40:31 +0200 | |
| commit | 73ec0c4c68f0f93118bad3d9571dc6f7dff4431d (patch) | |
| tree | eda7aceb5e62f55e841904403e34458f64820ac8 | |
| parent | b2cbad36f20f9d788c54d3a7fea001a434a48a9d (diff) | |
image: Fix initialisation order, fix file menu enable, refine gdrom support
| -rw-r--r-- | src/devices/imagedev/cdromimg.cpp | 9 | ||||
| -rw-r--r-- | src/devices/imagedev/harddriv.cpp | 6 | ||||
| -rw-r--r-- | src/emu/diimage.cpp | 9 | ||||
| -rw-r--r-- | src/emu/diimage.h | 2 | ||||
| -rw-r--r-- | src/emu/image.cpp | 3 | ||||
| -rw-r--r-- | src/frontend/mame/ui/mainmenu.cpp | 8 |
6 files changed, 21 insertions, 16 deletions
diff --git a/src/devices/imagedev/cdromimg.cpp b/src/devices/imagedev/cdromimg.cpp index 9871f630289..ecf6302787c 100644 --- a/src/devices/imagedev/cdromimg.cpp +++ b/src/devices/imagedev/cdromimg.cpp @@ -65,11 +65,7 @@ void cdrom_image_device::device_config_complete() void cdrom_image_device::device_start() { if (has_preset_images()) - { - set_image_tag(); - set_user_loadable(false); setup_current_preset_image(); - } else { m_cdrom_handle.reset(); @@ -83,7 +79,7 @@ void cdrom_image_device::setup_current_preset_image() m_dvdrom_handle.reset(); chd_file *chd = current_preset_image_chd(); - if (chd->is_cd() || chd->is_gd()) + if (chd->is_cd() || (m_gd_compat && chd->is_gd())) m_cdrom_handle = std::make_unique<cdrom_file>(chd); else if(m_dvd_compat && chd->is_dvd()) m_dvdrom_handle = std::make_unique<dvdrom_file>(chd); @@ -101,6 +97,7 @@ void cdrom_image_device::device_stop() std::pair<std::error_condition, std::string> cdrom_image_device::call_load() { + fprintf(stderr, "HERE B\n"); if (has_preset_images()) { setup_current_preset_image(); @@ -130,7 +127,7 @@ std::pair<std::error_condition, std::string> cdrom_image_device::call_load() // open the CHD file if (chd) { - if (chd->is_cd() || chd->is_gd()) + if (chd->is_cd() || (m_gd_compat && chd->is_gd())) m_cdrom_handle.reset(new cdrom_file(chd)); else if(m_dvd_compat && chd->is_dvd()) m_dvdrom_handle.reset(new dvdrom_file(chd)); diff --git a/src/devices/imagedev/harddriv.cpp b/src/devices/imagedev/harddriv.cpp index e9ac553f866..400fb1f8c6f 100644 --- a/src/devices/imagedev/harddriv.cpp +++ b/src/devices/imagedev/harddriv.cpp @@ -107,11 +107,9 @@ void harddisk_image_device::device_start() m_chd = nullptr; - if (has_preset_images()) { - set_image_tag(); - set_user_loadable(false); + if (has_preset_images()) setup_current_preset_image(); - } else + else m_hard_disk_handle.reset(); } diff --git a/src/emu/diimage.cpp b/src/emu/diimage.cpp index 87dc2d8fda8..96cad8c0844 100644 --- a/src/emu/diimage.cpp +++ b/src/emu/diimage.cpp @@ -116,10 +116,11 @@ void device_image_interface::interface_config_complete() } //------------------------------------------------- -// interface_pre_start - lookup the chds, if any +// check_preset_images - lookup the chds from the +// region(s), if any //------------------------------------------------- -void device_image_interface::interface_pre_start() +void device_image_interface::check_preset_images() { if (!m_possible_preset_regions.empty()) { @@ -133,6 +134,8 @@ void device_image_interface::interface_pre_start() if (m_current_region == int(m_preset_images.size())) fatalerror("%s: No configured region has an image\n", device().tag()); } + set_image_tag(); + set_user_loadable(false); } else { @@ -143,6 +146,8 @@ void device_image_interface::interface_pre_start() m_possible_preset_regions.push_back(tag); m_preset_images.push_back(chd); m_current_region = 0; + set_image_tag(); + set_user_loadable(false); } } } diff --git a/src/emu/diimage.h b/src/emu/diimage.h index dfd9c82cfc7..328d7e440e7 100644 --- a/src/emu/diimage.h +++ b/src/emu/diimage.h @@ -102,6 +102,7 @@ public: int current_preset_image_id() const; void switch_preset_image(int id); chd_file *current_preset_image_chd() const; + void check_preset_images(); const image_device_format *device_get_indexed_creatable_format(int index) const noexcept { return (index < m_formatlist.size()) ? m_formatlist.at(index).get() : nullptr; } const image_device_format *device_get_named_creatable_format(std::string_view format_name) const noexcept; @@ -221,7 +222,6 @@ public: protected: // interface-level overrides virtual void interface_config_complete() override; - virtual void interface_pre_start() override; virtual const software_list_loader &get_software_list_loader() const; virtual bool use_software_list_file_extension_for_filetype() const noexcept { return false; } diff --git a/src/emu/image.cpp b/src/emu/image.cpp index b808c599250..ee228b051c1 100644 --- a/src/emu/image.cpp +++ b/src/emu/image.cpp @@ -40,6 +40,9 @@ image_manager::image_manager(running_machine &machine) // make sure that any required devices have been allocated for (device_image_interface &image : image_interface_enumerator(machine.root_device())) { + // see if region-based chds are available + image.check_preset_images(); + // ignore things not user loadable if (!image.user_loadable()) continue; diff --git a/src/frontend/mame/ui/mainmenu.cpp b/src/frontend/mame/ui/mainmenu.cpp index 240ac30f1ee..3e0acb5059a 100644 --- a/src/frontend/mame/ui/mainmenu.cpp +++ b/src/frontend/mame/ui/mainmenu.cpp @@ -127,16 +127,18 @@ void menu_main::populate() item_append(_("menu-main", "Warning Information"), 0, (void *)WARN_INFO); for (device_image_interface &image : image_interface_enumerator(machine().root_device())) - { if (image.user_loadable()) { item_append(_("menu-main", "Media Image Information"), 0, (void *)IMAGE_MENU_IMAGE_INFO); + break; + } + for (device_image_interface &image : image_interface_enumerator(machine().root_device())) + if (image.user_loadable() || image.has_preset_images_selection()) + { item_append(_("menu-main", "File Manager"), 0, (void *)IMAGE_MENU_FILE_MANAGER); - break; } - } if (cassette_device_enumerator(machine().root_device()).first() != nullptr) item_append(_("menu-main", "Tape Control"), 0, (void *)TAPE_CONTROL); |
