From 8709e06b673765ef76594de2878a4c48aa011b42 Mon Sep 17 00:00:00 2001 From: Olivier Galibert Date: Wed, 28 Apr 2021 16:17:41 +0200 Subject: floppy: start block-devicing fielsystem support --- src/devices/imagedev/floppy.cpp | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'src/devices/imagedev/floppy.cpp') diff --git a/src/devices/imagedev/floppy.cpp b/src/devices/imagedev/floppy.cpp index b01a7943935..2decede8498 100644 --- a/src/devices/imagedev/floppy.cpp +++ b/src/devices/imagedev/floppy.cpp @@ -21,6 +21,7 @@ #include "formats/pc_dsk.h" #include "formats/fs_unformatted.h" +#include "formats/fsblk_vec.h" #include "speaker.h" #include "formats/imageutl.h" @@ -308,14 +309,17 @@ void floppy_image_device::setup_led_cb(led_cb cb) cur_led_cb = cb; } -void floppy_image_device::fs_enum::add(const filesystem_manager_t *manager, floppy_format_type type, u32 image_size, const char *name, u32 key, const char *description) +void floppy_image_device::fs_enum::add(const filesystem_manager_t *manager, floppy_format_type type, u32 image_size, const char *name, const char *description) { - m_fid->m_fs.emplace_back(fs_info(manager, type, image_size, name, key, description)); + if(manager->can_format()) + m_fid->m_create_fs.emplace_back(fs_info(manager, type, image_size, name, description)); + if(manager->can_read()) + m_fid->m_io_fs.emplace_back(fs_info(manager, type, image_size, name, description)); } -void floppy_image_device::fs_enum::add_raw(const filesystem_manager_t *manager, const char *name, u32 key, const char *description) +void floppy_image_device::fs_enum::add_raw(const char *name, u32 key, const char *description) { - m_fid->m_fs.emplace_back(fs_info(manager, name, key, description)); + m_fid->m_create_fs.emplace_back(fs_info(name, key, description)); } void floppy_image_device::register_formats() @@ -718,14 +722,17 @@ void floppy_image_device::init_fs(const fs_info *fs) if (fs->m_type) { std::vector img(fs->m_image_size); - fs->m_manager->floppy_instantiate(fs->m_key, img); + fsblk_vec_t blockdev(img); + auto cfs = fs->m_manager->mount(blockdev); + cfs->format(); + auto iog = ram_open(img); auto source_format = fs->m_type(); 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()); + fs_unformatted::format(fs->m_key, image.get()); } /* write protect, active high -- cgit v1.2.3