summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices')
-rw-r--r--src/devices/bus/oricext/jasmin.cpp6
-rw-r--r--src/devices/imagedev/floppy.cpp19
-rw-r--r--src/devices/imagedev/floppy.h17
3 files changed, 27 insertions, 15 deletions
diff --git a/src/devices/bus/oricext/jasmin.cpp b/src/devices/bus/oricext/jasmin.cpp
index dabae07c7c9..a7188667b09 100644
--- a/src/devices/bus/oricext/jasmin.cpp
+++ b/src/devices/bus/oricext/jasmin.cpp
@@ -3,6 +3,7 @@
#include "emu.h"
#include "jasmin.h"
#include "formats/oric_dsk.h"
+#include "formats/fs_oric_jasmin.h"
DEFINE_DEVICE_TYPE(ORIC_JASMIN, oric_jasmin_device, "oric_jasmin", "Jasmin floppy drive interface")
@@ -15,6 +16,9 @@ void oric_jasmin_device::floppy_formats(format_registration &fr)
{
fr.add_mfm_containers();
fr.add(FLOPPY_ORIC_DSK_FORMAT);
+ fr.add(FLOPPY_ORIC_JASMIN_FORMAT);
+
+ fr.add(FS_ORIC_JASMIN);
}
static void jasmin_floppies(device_slot_interface &device)
@@ -24,7 +28,7 @@ static void jasmin_floppies(device_slot_interface &device)
INPUT_PORTS_START( jasmin )
PORT_START("JASMIN")
- PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_KEYBOARD ) PORT_NAME("Boot") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHANGED_MEMBER(DEVICE_SELF, oric_jasmin_device, boot_pressed, 0)
+ PORT_BIT( 0x01, IP_ACTIVE_HIGH, IPT_OTHER ) PORT_NAME("Boot") PORT_CODE(KEYCODE_F1) PORT_CHAR(UCHAR_MAMEKEY(F1)) PORT_CHANGED_MEMBER(DEVICE_SELF, oric_jasmin_device, boot_pressed, 0)
INPUT_PORTS_END
void oric_jasmin_device::map(address_map &map)
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<u8> 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
diff --git a/src/devices/imagedev/floppy.h b/src/devices/imagedev/floppy.h
index f847e525a05..0747e1bef3a 100644
--- a/src/devices/imagedev/floppy.h
+++ b/src/devices/imagedev/floppy.h
@@ -56,17 +56,17 @@ public:
u32 m_key;
const char *m_description;
- fs_info(const filesystem_manager_t *manager, floppy_format_type type, u32 image_size, const char *name, u32 key, const char *description) :
+ fs_info(const filesystem_manager_t *manager, floppy_format_type type, u32 image_size, const char *name, const char *description) :
m_manager(manager),
m_type(type),
m_image_size(image_size),
m_name(name),
- m_key(key),
+ m_key(0),
m_description(description)
{}
- fs_info(const filesystem_manager_t *manager, const char *name, u32 key, const char *description) :
- m_manager(manager),
+ fs_info(const char *name, u32 key, const char *description) :
+ m_manager(nullptr),
m_type(nullptr),
m_image_size(0),
m_name(name),
@@ -80,7 +80,8 @@ public:
void set_formats(std::function<void (format_registration &fr)> formats);
floppy_image_format_t *get_formats() const;
- const std::vector<fs_info> &get_fs() const { return m_fs; }
+ const std::vector<fs_info> &get_create_fs() const { return m_create_fs; }
+ const std::vector<fs_info> &get_io_fs() const { return m_io_fs; }
floppy_image_format_t *get_load_format() const;
floppy_image_format_t *identify(std::string filename);
void set_rpm(float rpm);
@@ -158,8 +159,8 @@ protected:
floppy_image_device *m_fid;
fs_enum(floppy_image_device *fid) : filesystem_manager_t::floppy_enumerator(), m_fid(fid) {};
- virtual void add(const filesystem_manager_t *manager, floppy_format_type type, u32 image_size, const char *name, u32 key, const char *description) override;
- virtual void add_raw(const filesystem_manager_t *manager, const char *name, u32 key, const char *description) override;
+ virtual void add(const filesystem_manager_t *manager, floppy_format_type type, u32 image_size, const char *name, const char *description) override;
+ virtual void add_raw(const char *name, u32 key, const char *description) override;
};
floppy_image_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock);
@@ -186,7 +187,7 @@ protected:
std::unique_ptr<floppy_image> image;
char extension_list[256];
floppy_image_format_t *fif_list;
- std::vector<fs_info> m_fs;
+ std::vector<fs_info> m_create_fs, m_io_fs;
std::vector<std::unique_ptr<filesystem_manager_t>> m_fs_managers;
emu_timer *index_timer;