diff options
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 |
commit | 2f4d7eec4e3faeab1d95ece39cfb80263d792909 (patch) | |
tree | c0d5d6c3181afb4717d5651baf9cc40beb219310 | |
parent | 2f5ebeb8b166bf71e8202c04a077f0c867522852 (diff) |
Allow UI file manager to create floppy images before machine is started
-rw-r--r-- | src/devices/imagedev/floppy.cpp | 5 | ||||
-rw-r--r-- | src/frontend/mame/ui/floppycntrl.cpp | 8 |
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)) |