diff options
Diffstat (limited to 'src/devices/imagedev/flopdrv.h')
-rw-r--r-- | src/devices/imagedev/flopdrv.h | 115 |
1 files changed, 33 insertions, 82 deletions
diff --git a/src/devices/imagedev/flopdrv.h b/src/devices/imagedev/flopdrv.h index 97ae6a77859..24ab79ef7c1 100644 --- a/src/devices/imagedev/flopdrv.h +++ b/src/devices/imagedev/flopdrv.h @@ -2,22 +2,12 @@ // copyright-holders:Nathan Woods, Miodrag Milanovic /* flopdrv provides simple emulation of a disc drive */ -#ifndef MAME_DEVICES_IMAGEDV_FLOPDRV_H -#define MAME_DEVICES_IMAGEDV_FLOPDRV_H +#ifndef MAME_IMAGEDEV_FLOPDRV_H +#define MAME_IMAGEDEV_FLOPDRV_H #pragma once -#include "formats/flopimg.h" -#include "softlist_dev.h" - -#define FLOPPY_0 "floppy0" -#define FLOPPY_1 "floppy1" -#define FLOPPY_2 "floppy2" -#define FLOPPY_3 "floppy3" - -#define FLOPPY_TYPE_REGULAR 0 -#define FLOPPY_TYPE_APPLE 1 -#define FLOPPY_TYPE_SONY 2 +#include "formats/flopimg_legacy.h" #define FLOPPY_DRIVE_2_8_INCH 1 #define FLOPPY_DRIVE_3_INCH 2 @@ -108,92 +98,60 @@ public: void set_floppy_config(const floppy_interface *config) { m_config = config; } auto out_idx_cb() { return m_out_idx_func.bind(); } - static void add_4drives(machine_config &mconfig, const floppy_interface *config) - { - LEGACY_FLOPPY(mconfig, FLOPPY_0, 0, config); - LEGACY_FLOPPY(mconfig, FLOPPY_1, 0, config); - LEGACY_FLOPPY(mconfig, FLOPPY_2, 0, config); - LEGACY_FLOPPY(mconfig, FLOPPY_3, 0, config); - } - - static void add_2drives(machine_config &mconfig, const floppy_interface *config) - { - LEGACY_FLOPPY(mconfig, FLOPPY_0, 0, config); - LEGACY_FLOPPY(mconfig, FLOPPY_1, 0, config); - } - - virtual image_init_result call_load() override; - virtual const software_list_loader &get_software_list_loader() const override { return image_software_list_loader::instance(); } - virtual image_init_result call_create(int format_type, util::option_resolution *format_options) override; + virtual std::pair<std::error_condition, std::string> call_load() override; + virtual std::pair<std::error_condition, std::string> call_create(int format_type, util::option_resolution *format_options) override; virtual void call_unload() override; - virtual iodevice_t image_type() const override { return IO_FLOPPY; } + virtual bool is_readable() const noexcept override { return true; } + virtual bool is_writeable() const noexcept override { return true; } + virtual bool is_creatable() const noexcept override; + virtual bool is_reset_on_load() const noexcept override { return false; } + virtual const char *image_interface() const noexcept override; + virtual const char *file_extensions() const noexcept override { return m_extension_list; } + virtual const char *image_type_name() const noexcept override { return "floppydisk"; } + virtual const char *image_brief_type_name() const noexcept override { return "flop"; } + virtual const util::option_guide &create_option_guide() const override { return floppy_option_guide(); } - virtual bool is_readable() const override { return 1; } - virtual bool is_writeable() const override { return 1; } - virtual bool is_creatable() const override; - virtual bool must_be_loaded() const override { return 0; } - virtual bool is_reset_on_load() const override { return 0; } - virtual const char *image_interface() const override; - virtual const char *file_extensions() const override { return m_extension_list; } - virtual const util::option_guide &create_option_guide() const override { return floppy_option_guide; } - - floppy_image_legacy *flopimg_get_image(); - void floppy_drive_set_geometry(floppy_type_t type); - void floppy_drive_set_flag_state(int flag, int state); void floppy_drive_set_ready_state(int state, int flag); int floppy_drive_get_flag_state(int flag); void floppy_drive_seek(signed int signed_tracks); - int floppy_drive_get_next_id(int side, chrn_id *id); - void floppy_drive_read_track_data_info_buffer(int side, void *ptr, int *length ); - void floppy_drive_write_track_data_info_buffer(int side, const void *ptr, int *length ); - void floppy_drive_format_sector(int side, int sector_index,int c,int h, int r, int n, int filler); void floppy_drive_read_sector_data(int side, int index1, void *ptr, int length); void floppy_drive_write_sector_data(int side, int index1, const void *ptr,int length, int ddam); void floppy_install_load_proc(void (*proc)(device_image_interface &image, bool is_created)); void floppy_install_unload_proc(void (*proc)(device_image_interface &image)); - void floppy_drive_set_index_pulse_callback(void (*callback)(device_t *controller,device_t *image, int state)); int floppy_drive_get_current_track(); - uint64_t floppy_drive_get_current_track_size(int head); void floppy_drive_set_rpm(float rpm); void floppy_drive_set_controller(device_t *controller); - int floppy_get_drive_type(); - void floppy_set_type(int ftype); - WRITE_LINE_MEMBER( floppy_ds0_w ); - WRITE_LINE_MEMBER( floppy_ds1_w ); - WRITE_LINE_MEMBER( floppy_ds2_w ); - WRITE_LINE_MEMBER( floppy_ds3_w ); - WRITE8_MEMBER( floppy_ds_w ); - WRITE_LINE_MEMBER( floppy_mon_w ); - WRITE_LINE_MEMBER( floppy_drtn_w ); - WRITE_LINE_MEMBER( floppy_wtd_w ); - WRITE_LINE_MEMBER( floppy_stp_w ); - WRITE_LINE_MEMBER( floppy_wtg_w ); - READ_LINE_MEMBER( floppy_wpt_r ); - READ_LINE_MEMBER( floppy_tk00_r ); - READ_LINE_MEMBER( floppy_dskchg_r ); - READ_LINE_MEMBER( floppy_twosid_r ); - READ_LINE_MEMBER( floppy_index_r ); - READ_LINE_MEMBER( floppy_ready_r ); + void floppy_ds_w(int state); + void floppy_mon_w(int state); + void floppy_drtn_w(int state); + void floppy_stp_w(int state); + void floppy_wtg_w(int state); + int floppy_tk00_r(); + int floppy_index_r(); + int floppy_ready_r(); private: - int flopimg_get_sectors_per_track(int side); - void flopimg_get_id_callback(chrn_id *id, int id_index, int side); void log_readwrite(const char *name, int head, int track, int sector, const char *buf, int length); + void floppy_drive_set_flag_state(int flag, int state); void floppy_drive_set_geometry_absolute(int tracks, int sides); + void floppy_drive_set_geometry(floppy_type_t type); TIMER_CALLBACK_MEMBER(floppy_drive_index_callback); void floppy_drive_init(); void floppy_drive_index_func(); - image_init_result internal_floppy_device_load(bool is_create, int create_format, util::option_resolution *create_args); + std::error_condition internal_floppy_device_load(bool is_create, int create_format, util::option_resolution *create_args); TIMER_CALLBACK_MEMBER( set_wpt ); protected: legacy_floppy_image_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock); - // device overrides + // device_t implementation virtual void device_config_complete() override; - virtual void device_start() override; + virtual void device_start() override ATTR_COLD; + + // device_image_interface implementation + virtual const software_list_loader &get_software_list_loader() const override; /* callbacks */ devcb_write_line m_out_idx_func; @@ -208,12 +166,10 @@ protected: int m_idx; /* index pulse */ int m_tk00; /* track 00 */ int m_wpt; /* write protect */ - int m_rdy; /* ready */ int m_dskchg; /* disk changed */ /* drive select logic */ - int m_drive_id; - int m_active; + bool m_active; const floppy_interface *m_config; @@ -234,7 +190,7 @@ protected: /* rotation per minute => gives index pulse frequency */ float m_rpm; - int m_id_index; + emu_timer *m_wpt_timer; device_t *m_controller; @@ -242,13 +198,8 @@ protected: int m_track; void (*m_load_proc)(device_image_interface &image, bool is_created); void (*m_unload_proc)(device_image_interface &image); - int m_floppy_drive_type; char m_extension_list[256]; }; -legacy_floppy_image_device *floppy_get_device(running_machine &machine,int drive); -legacy_floppy_image_device *floppy_get_device_by_type(running_machine &machine,int ftype,int drive); -int floppy_get_drive_by_type(legacy_floppy_image_device *image,int ftype); - -#endif // MAME_DEVICES_IMAGEDV_FLOPDRV_H +#endif // MAME_IMAGEDEV_FLOPDRV_H |