summaryrefslogtreecommitdiffstatshomepage
path: root/src/devices/imagedev/flopdrv.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/devices/imagedev/flopdrv.h')
-rw-r--r--src/devices/imagedev/flopdrv.h115
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