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