summaryrefslogtreecommitdiffstatshomepage
diff options
context:
space:
mode:
author AJR <ajrhacker@users.noreply.github.com>2021-04-14 23:44:15 -0400
committer AJR <ajrhacker@users.noreply.github.com>2021-04-14 23:44:34 -0400
commit2f4d7eec4e3faeab1d95ece39cfb80263d792909 (patch)
treec0d5d6c3181afb4717d5651baf9cc40beb219310
parent2f5ebeb8b166bf71e8202c04a077f0c867522852 (diff)
Allow UI file manager to create floppy images before machine is started
-rw-r--r--src/devices/imagedev/floppy.cpp5
-rw-r--r--src/frontend/mame/ui/floppycntrl.cpp8
2 files changed, 9 insertions, 4 deletions
diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp
index 2d3fd334afb..b01a7943935 100644
--- a/src/devices/imagedev/floppy.cpp
+++ b/src/devices/imagedev/floppy.cpp
@@ -377,7 +377,8 @@ void floppy_image_device::set_rpm(float _rpm)
void floppy_image_device::setup_write(floppy_image_format_t *_output_format)
{
output_format = _output_format;
- commit_image();
+ if(image)
+ commit_image();
}
void floppy_image_device::commit_image()
@@ -713,6 +714,7 @@ static io_generic *ram_open(std::vector<u8> &data)
void floppy_image_device::init_fs(const fs_info *fs)
{
+ assert(image);
if (fs->m_type)
{
std::vector<u8> img(fs->m_image_size);
@@ -722,7 +724,6 @@ void floppy_image_device::init_fs(const fs_info *fs)
source_format->load(iog, floppy_image::FF_UNKNOWN, variants, image.get());
delete source_format;
delete iog;
-
} else
fs->m_manager->floppy_instantiate_raw(fs->m_key, image.get());
}
diff --git a/src/frontend/mame/ui/floppycntrl.cpp b/src/frontend/mame/ui/floppycntrl.cpp
index 4d6239ded4a..15dc69944f4 100644
--- a/src/frontend/mame/ui/floppycntrl.cpp
+++ b/src/frontend/mame/ui/floppycntrl.cpp
@@ -49,8 +49,12 @@ void menu_control_floppy_image::do_load_create()
machine().popmessage("Error: %s", fd.error());
return;
}
- if (create_fs)
- fd.init_fs(create_fs);
+ if (create_fs) {
+ // HACK: ensure the floppy_image structure is created since device_image_interface may not otherwise do so during "init phase"
+ err = fd.finish_load();
+ if (err != image_init_result::PASS)
+ fd.init_fs(create_fs);
+ }
} else {
image_init_result err = fd.load(input_filename);
if ((err == image_init_result::PASS) && (output_filename.compare("") != 0))