diff options
Diffstat (limited to 'src/devices/bus/ieee488/grid2102.h')
| -rw-r--r-- | src/devices/bus/ieee488/grid2102.h | 41 |
1 files changed, 32 insertions, 9 deletions
diff --git a/src/devices/bus/ieee488/grid2102.h b/src/devices/bus/ieee488/grid2102.h index 437bae8fb97..6f0dc2b6364 100644 --- a/src/devices/bus/ieee488/grid2102.h +++ b/src/devices/bus/ieee488/grid2102.h @@ -13,7 +13,9 @@ #include "ieee488.h" +#include <array> #include <queue> +#include <string_view> #include <vector> @@ -22,13 +24,31 @@ //************************************************************************** // ======================> grid210x_device -class grid210x_device : public device_t, +class grid210x_device : public device_t, public device_ieee488_interface, public device_image_interface { public: + struct disk_status + { + uint16_t sector_size; + uint16_t logical_sector_size; + uint16_t sector_count; + uint8_t drive_status; + uint16_t bitmap_fid; + uint16_t superblock_fid; + uint16_t min_dir_pages; + uint8_t flush; + std::string_view name; + uint16_t bytes_per_sector; + uint16_t sectors_per_track; + uint16_t tracks_per_cylinder; + + std::array<uint8_t, 52> serialize() const; + }; + // construction/destruction - grid210x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int bus_addr, uint8_t *identify_response, attotime read_delay = attotime::from_msec(5)); + grid210x_device(const machine_config &mconfig, device_type type, const char *tag, device_t *owner, uint32_t clock, int bus_addr, attotime read_delay = attotime::from_msec(5)); protected: // device-level overrides @@ -56,6 +76,8 @@ protected: void accept_transfer(); void update_ndac(int atn); + virtual disk_status get_status() = 0; + private: TIMER_CALLBACK_MEMBER(delay_tick); @@ -71,7 +93,6 @@ private: uint8_t serial_poll_byte; uint32_t floppy_sector_number; int bus_addr; - uint8_t *identify_response_ptr; std::vector<uint8_t> m_data_buffer; std::queue<uint8_t> m_output_data_buffer; uint16_t io_size; @@ -85,16 +106,18 @@ class grid2102_device : public grid210x_device { public: // construction/destruction grid2102_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -private: - static uint8_t identify_response[]; + +protected: + virtual disk_status get_status() override; }; class grid2101_floppy_device : public grid210x_device { public: // construction/destruction grid2101_floppy_device(const machine_config &mconfig, const char *tag, device_t *owner, uint32_t clock); -private: - static uint8_t identify_response[]; + +protected: + virtual disk_status get_status() override; }; class grid2101_hdd_device : public grid210x_device { @@ -106,8 +129,8 @@ public: virtual const char *image_type_name() const noexcept override { return "harddisk"; } virtual const char *image_brief_type_name() const noexcept override { return "hard"; } -private: - static uint8_t identify_response[]; +protected: + virtual disk_status get_status() override; }; // device type definition |
