This commit is contained in:
Jasmine Iwanek
2022-03-13 09:37:19 -04:00
parent a7edaf0608
commit 369f6774f9
12 changed files with 424 additions and 271 deletions

View File

@@ -52,49 +52,60 @@ hdc_log(const char *fmt, ...)
#define hdc_log(fmt, ...)
#endif
static void *
null_init(const device_t *info)
nullhdc_init(const device_t *info)
{
return(NULL);
}
static void
null_close(void *priv)
nullhdc_close(void *priv)
{
}
static void *
inthdc_init(const device_t *info)
{
return(NULL);
}
static void
inthdc_close(void *priv)
{
}
static const device_t hdc_none_device = {
"None", "none", 0, 0,
null_init, null_close, NULL,
{ NULL }, NULL, NULL, NULL
};
static const device_t hdc_internal_device = {
"Internal", "internal", 0, 0,
inthdc_init, inthdc_close, NULL,
{ NULL }, NULL, NULL, NULL
.name = "None",
.internal_name = "none",
.flags = 0,
.local = 0,
.init = nullhdc_init,
.close = nullhdc_close,
.reset = NULL,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
static const device_t hdc_internal_device = {
.name = "Internal",
.internal_name = "internal",
.flags = 0,
.local = 0,
.init = inthdc_init,
.close = inthdc_close,
.reset = NULL,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
static const struct {
// clang-format off
const device_t *device;
} controllers[] = {
// clang-format off
{ &hdc_none_device },
{ &hdc_internal_device },
{ &st506_xt_xebec_device },
@@ -118,7 +129,7 @@ static const struct {
{ &ide_pci_2ch_device },
{ &ide_vlb_device },
{ &ide_vlb_2ch_device },
{ NULL }
{ NULL }
// clang-format on
};

View File

@@ -845,12 +845,15 @@ wd1007vse1_available(void)
const device_t esdi_at_wd1007vse1_device = {
"Western Digital WD1007V-SE1 (ESDI)",
"esdi_at",
DEVICE_ISA | DEVICE_AT,
0,
wd1007vse1_init, wd1007vse1_close, NULL,
{ wd1007vse1_available },
NULL, NULL,
NULL
.name = "Western Digital WD1007V-SE1 (ESDI)",
.internal_name = "esdi_at",
.flags = DEVICE_ISA | DEVICE_AT,
.local = 0,
.init = wd1007vse1_init,
.close = wd1007vse1_close,
.reset = NULL,
{ .available = wd1007vse1_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};

View File

@@ -1180,9 +1180,15 @@ esdi_available(void)
const device_t esdi_ps2_device = {
"IBM PS/2 ESDI Fixed Disk Adapter (MCA)",
"esdi_mca",
DEVICE_MCA, 0,
esdi_init, esdi_close, NULL,
{ esdi_available }, NULL, NULL, NULL
.name = "IBM PS/2 ESDI Fixed Disk Adapter (MCA)",
.internal_name = "esdi_mca",
.flags = DEVICE_MCA,
.local = 0,
.init = esdi_init,
.close = esdi_close,
.reset = NULL,
{ .available = esdi_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};

View File

@@ -3064,57 +3064,87 @@ ide_close(void *priv)
const device_t ide_isa_device = {
"ISA PC/AT IDE Controller",
"ide_isa",
DEVICE_ISA | DEVICE_AT,
0,
ide_init, ide_close, ide_reset,
{ NULL }, NULL, NULL, NULL
.name = "ISA PC/AT IDE Controller",
.internal_name = "ide_isa",
.flags = DEVICE_ISA | DEVICE_AT,
.local = 0,
.init = ide_init,
.close = ide_close,
.reset = ide_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_isa_2ch_device = {
"ISA PC/AT IDE Controller (Dual-Channel)",
"ide_isa_2ch",
DEVICE_ISA | DEVICE_AT,
1,
ide_init, ide_close, ide_reset,
{ NULL }, NULL, NULL, NULL
.name = "ISA PC/AT IDE Controller (Dual-Channel)",
.internal_name = "ide_isa_2ch",
.flags = DEVICE_ISA | DEVICE_AT,
.local = 1,
.init = ide_init,
.close = ide_close,
.reset = ide_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_vlb_device = {
"VLB IDE Controller",
"ide_vlb",
DEVICE_VLB | DEVICE_AT,
2,
ide_init, ide_close, ide_reset,
{ NULL }, NULL, NULL, NULL
.name = "VLB IDE Controller",
.internal_name = "ide_vlb",
.flags = DEVICE_VLB | DEVICE_AT,
.local = 2,
.init = ide_init,
.close = ide_close,
.reset = ide_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_vlb_2ch_device = {
"VLB IDE Controller (Dual-Channel)",
"ide_vlb_2ch",
DEVICE_VLB | DEVICE_AT,
3,
ide_init, ide_close, ide_reset,
{ NULL }, NULL, NULL, NULL
.name = "VLB IDE Controller (Dual-Channel)",
.internal_name = "ide_vlb_2ch",
.flags = DEVICE_VLB | DEVICE_AT,
.local = 3,
.init = ide_init,
.close = ide_close,
.reset = ide_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_pci_device = {
"PCI IDE Controller",
"ide_pci",
DEVICE_PCI | DEVICE_AT,
4,
ide_init, ide_close, ide_reset,
{ NULL }, NULL, NULL, NULL
.name = "PCI IDE Controller",
.internal_name = "ide_pci",
.flags = DEVICE_PCI | DEVICE_AT,
.local = 4,
.init = ide_init,
.close = ide_close,
.reset = ide_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_pci_2ch_device = {
"PCI IDE Controller (Dual-Channel)",
"ide_pci_2ch",
DEVICE_PCI | DEVICE_AT,
5,
ide_init, ide_close, ide_reset,
{ NULL }, NULL, NULL, NULL
.name = "PCI IDE Controller (Dual-Channel)",
.internal_name = "ide_pci_2ch",
.flags = DEVICE_PCI | DEVICE_AT,
.local = 5,
.init = ide_init,
.close = ide_close,
.reset = ide_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
// clang-format off
@@ -3160,41 +3190,57 @@ static const device_config_t ide_qua_config[] = {
// clang-format on
const device_t ide_ter_device = {
"Tertiary IDE Controller",
"ide_ter",
DEVICE_AT,
0,
ide_ter_init, ide_ter_close, NULL,
{ NULL }, NULL, NULL,
ide_ter_config
.name = "Tertiary IDE Controller",
.internal_name = "ide_ter",
.flags = DEVICE_AT,
.local = 0,
.init = ide_ter_init,
.close = ide_ter_close,
.reset = NULL,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = ide_ter_config
};
const device_t ide_ter_pnp_device = {
"Tertiary IDE Controller (Plug and Play only)",
"ide_ter_pnp",
DEVICE_AT,
1,
ide_ter_init, ide_ter_close, NULL,
{ NULL }, NULL, NULL,
NULL
.name = "Tertiary IDE Controller (Plug and Play only)",
.internal_name = "ide_ter_pnp",
.flags = DEVICE_AT,
.local = 1,
.init = ide_ter_init,
.close = ide_ter_close,
.reset = NULL,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_qua_device = {
"Quaternary IDE Controller",
"ide_qua",
DEVICE_AT,
0,
ide_qua_init, ide_qua_close, NULL,
{ NULL }, NULL, NULL,
ide_qua_config
.name = "Quaternary IDE Controller",
.internal_name = "ide_qua",
.flags = DEVICE_AT,
.local = 0,
.init = ide_qua_init,
.close = ide_qua_close,
.reset = NULL,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = ide_qua_config
};
const device_t ide_qua_pnp_device = {
"Quaternary IDE Controller (Plug and Play only)",
"ide_qua_pnp",
DEVICE_AT,
1,
ide_qua_init, ide_qua_close, NULL,
{ NULL }, NULL, NULL,
ide_qua_config
.name = "Quaternary IDE Controller (Plug and Play only)",
.internal_name = "ide_qua_pnp",
.flags = DEVICE_AT,
.local = 1,
.init = ide_qua_init,
.close = ide_qua_close,
.reset = NULL,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = ide_qua_config
};

View File

@@ -493,51 +493,71 @@ cmd640_init(const device_t *info)
const device_t ide_cmd640_vlb_device = {
"CMD PCI-0640B VLB",
"ide_cmd640_vlb",
DEVICE_VLB,
0x0078,
cmd640_init, cmd640_close, cmd640_reset,
{ NULL }, NULL, NULL,
NULL
.name = "CMD PCI-0640B VLB",
.internal_name = "ide_cmd640_vlb",
.flags = DEVICE_VLB,
.local = 0x0078,
.init = cmd640_init,
.close = cmd640_close,
.reset = cmd640_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_cmd640_vlb_178_device = {
"CMD PCI-0640B VLB (Port 178h)",
"ide_cmd640_vlb_178",
DEVICE_VLB,
0x0178,
cmd640_init, cmd640_close, cmd640_reset,
{ NULL }, NULL, NULL,
NULL
.name = "CMD PCI-0640B VLB (Port 178h)",
.internal_name = "ide_cmd640_vlb_178",
.flags = DEVICE_VLB,
.local = 0x0178,
.init = cmd640_init,
.close = cmd640_close,
.reset = cmd640_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_cmd640_pci_device = {
"CMD PCI-0640B PCI",
"ide_cmd640_pci",
DEVICE_PCI,
0x0a,
cmd640_init, cmd640_close, cmd640_reset,
{ NULL }, NULL, NULL,
NULL
.name = "CMD PCI-0640B PCI",
.internal_name = "ide_cmd640_pci",
.flags = DEVICE_PCI,
.local = 0x0a,
.init = cmd640_init,
.close = cmd640_close,
.reset = cmd640_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_cmd640_pci_legacy_only_device = {
"CMD PCI-0640B PCI (Legacy Mode Only)",
"ide_cmd640_pci_legacy_only",
DEVICE_PCI,
0x00,
cmd640_init, cmd640_close, cmd640_reset,
{ NULL }, NULL, NULL,
NULL
.name = "CMD PCI-0640B PCI (Legacy Mode Only)",
.internal_name = "ide_cmd640_pci_legacy_only",
.flags = DEVICE_PCI,
.local = 0x00,
.init = cmd640_init,
.close = cmd640_close,
.reset = cmd640_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_cmd640_pci_single_channel_device = {
"CMD PCI-0640B PCI",
"ide_cmd640_pci_single_channel",
DEVICE_PCI,
0x2000a,
cmd640_init, cmd640_close, cmd640_reset,
{ NULL }, NULL, NULL,
NULL
.name = "CMD PCI-0640B PCI",
.internal_name = "ide_cmd640_pci_single_channel",
.flags = DEVICE_PCI,
.local = 0x2000a,
.init = cmd640_init,
.close = cmd640_close,
.reset = cmd640_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};

View File

@@ -408,31 +408,43 @@ cmd646_init(const device_t *info)
const device_t ide_cmd646_device = {
"CMD PCI-0646",
"ide_cmd646",
DEVICE_PCI,
0x8a,
cmd646_init, cmd646_close, cmd646_reset,
{ NULL }, NULL, NULL,
NULL
.name = "CMD PCI-0646",
.internal_name = "ide_cmd646",
.flags = DEVICE_PCI,
.local = 0x8a,
.init = cmd646_init,
.close = cmd646_close,
.reset = cmd646_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_cmd646_legacy_only_device = {
"CMD PCI-0646 (Legacy Mode Only)",
"ide_cmd646_legacy_only",
DEVICE_PCI,
0x80,
cmd646_init, cmd646_close, cmd646_reset,
{ NULL }, NULL, NULL,
NULL
.name = "CMD PCI-0646 (Legacy Mode Only)",
.internal_name = "ide_cmd646_legacy_only",
.flags = DEVICE_PCI,
.local = 0x80,
.init = cmd646_init,
.close = cmd646_close,
.reset = cmd646_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t ide_cmd646_single_channel_device = {
"CMD PCI-0646",
"ide_cmd646_single_channel",
DEVICE_PCI,
0x2008a,
cmd646_init, cmd646_close, cmd646_reset,
{ NULL }, NULL, NULL,
NULL
.name = "CMD PCI-0646",
.internal_name = "ide_cmd646_single_channel",
.flags = DEVICE_PCI,
.local = 0x2008a,
.init = cmd646_init,
.close = cmd646_close,
.reset = cmd646_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};

View File

@@ -313,11 +313,15 @@ opti611_init(const device_t *info)
const device_t ide_opti611_vlb_device = {
"OPTi 82C611/82C611A VLB",
"ide_opti611_vlb",
0,
0,
opti611_init, opti611_close, NULL,
{ NULL }, NULL, NULL,
NULL
.name = "OPTi 82C611/82C611A VLB",
.internal_name = "ide_opti611_vlb",
.flags = DEVICE_VLB,
.local = 0,
.init = opti611_init,
.close = opti611_close,
.reset = NULL,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};

View File

@@ -587,15 +587,15 @@ static void
const device_t sff8038i_device =
{
"SFF-8038i IDE Bus Master",
"sff8038i",
DEVICE_PCI,
0,
sff_init,
sff_close,
sff_reset,
{ NULL },
NULL,
NULL,
NULL
.name = "SFF-8038i IDE Bus Master",
.internal_name = "sff8038i",
.flags = DEVICE_PCI,
.local = 0,
.init = sff_init,
.close = sff_close,
.reset = sff_reset,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};

View File

@@ -769,10 +769,15 @@ mfm_close(void *priv)
const device_t st506_at_wd1003_device = {
"WD1003 AT MFM/RLL Controller",
"st506_at",
DEVICE_ISA | DEVICE_AT,
0,
mfm_init, mfm_close, NULL,
{ NULL }, NULL, NULL, NULL
.name = "WD1003 AT MFM/RLL Controller",
.internal_name = "st506_at",
.flags = DEVICE_ISA | DEVICE_AT,
.local = 0,
.init = mfm_init,
.close = mfm_close,
.reset = NULL,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};

View File

@@ -1737,67 +1737,85 @@ static const device_config_t wd_rll_config[] = {
// clang-format on
const device_t st506_xt_xebec_device = {
"IBM PC Fixed Disk Adapter (MFM)",
"st506_xt",
DEVICE_ISA,
(HDD_BUS_MFM << 8) | 0,
st506_init, st506_close, NULL,
{ xebec_available },
NULL, NULL,
NULL
.name = "IBM PC Fixed Disk Adapter (MFM)",
.internal_name = "st506_xt",
.flags = DEVICE_ISA,
.local = (HDD_BUS_MFM << 8) | 0,
.init = st506_init,
.close = st506_close,
.reset = NULL,
{ .available = xebec_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t st506_xt_dtc5150x_device = {
"DTC 5150X MFM Fixed Disk Adapter",
"st506_xt_dtc5150x",
DEVICE_ISA,
(HDD_BUS_MFM << 8) | 1,
st506_init, st506_close, NULL,
{ dtc5150x_available },
NULL, NULL,
dtc_config
.name = "DTC 5150X MFM Fixed Disk Adapter",
.internal_name = "st506_xt_dtc5150x",
.flags = DEVICE_ISA,
.local = (HDD_BUS_MFM << 8) | 1,
.init = st506_init,
.close = st506_close,
.reset = NULL,
{ .available = dtc5150x_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = dtc_config
};
const device_t st506_xt_st11_m_device = {
"ST-11M MFM Fixed Disk Adapter",
"st506_xt_st11_m",
DEVICE_ISA,
(HDD_BUS_MFM << 8) | 11,
st506_init, st506_close, NULL,
{ st11_m_available },
NULL, NULL,
st11_config
.name = "ST-11M MFM Fixed Disk Adapter",
.internal_name = "st506_xt_st11_m",
.flags = DEVICE_ISA,
.local = (HDD_BUS_MFM << 8) | 11,
.init = st506_init,
.close = st506_close,
.reset = NULL,
{ .available = st11_m_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = st11_config
};
const device_t st506_xt_st11_r_device = {
"ST-11R RLL Fixed Disk Adapter",
"st506_xt_st11_r",
DEVICE_ISA,
(HDD_BUS_MFM << 8) | 12,
st506_init, st506_close, NULL,
{ st11_r_available },
NULL, NULL,
st11_config
.name = "ST-11R RLL Fixed Disk Adapter",
.internal_name = "st506_xt_st11_r",
.flags = DEVICE_ISA,
.local = (HDD_BUS_MFM << 8) | 12,
.init = st506_init,
.close = st506_close,
.reset = NULL,
{ .available = st11_r_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = st11_config
};
const device_t st506_xt_wd1002a_wx1_device = {
"WD1002A-WX1 MFM Fixed Disk Adapter",
"st506_xt_wd1002a_wx1",
DEVICE_ISA,
(HDD_BUS_MFM << 8) | 21,
st506_init, st506_close, NULL,
{ wd1002a_wx1_available },
NULL, NULL,
wd_config
.name = "WD1002A-WX1 MFM Fixed Disk Adapter",
.internal_name = "st506_xt_wd1002a_wx1",
.flags = DEVICE_ISA,
.local = (HDD_BUS_MFM << 8) | 21,
.init = st506_init,
.close = st506_close,
.reset = NULL,
{ .available = wd1002a_wx1_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = wd_config
};
const device_t st506_xt_wd1002a_27x_device = {
"WD1002A-27X RLL Fixed Disk Adapter",
"st506_xt_wd1002a_27x",
DEVICE_ISA,
(HDD_BUS_MFM << 8) | 22,
st506_init, st506_close, NULL,
{ wd1002a_27x_available },
NULL, NULL,
wd_rll_config
.name = "WD1002A-27X RLL Fixed Disk Adapter",
.internal_name = "st506_xt_wd1002a_27x",
.flags = DEVICE_ISA,
.local = (HDD_BUS_MFM << 8) | 22,
.init = st506_init,
.close = st506_close,
.reset = NULL,
{ .available = wd1002a_27x_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = wd_rll_config
};

View File

@@ -1134,21 +1134,29 @@ static const device_config_t wdxt150_config[] = {
};
const device_t xta_wdxt150_device = {
"WDXT-150 XTA Fixed Disk Controller",
"xta_wdxt150",
DEVICE_ISA,
0,
xta_init, xta_close, NULL,
{ xta_available }, NULL, NULL,
wdxt150_config
.name = "WDXT-150 XTA Fixed Disk Controller",
.internal_name = "xta_wdxt150",
.flags = DEVICE_ISA,
.local = 0,
.init = xta_init,
.close = xta_close,
.reset = NULL,
{ .available = xta_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = wdxt150_config
};
const device_t xta_hd20_device = {
"EuroPC HD20 Fixed Disk Controller",
"xta_hd20",
DEVICE_ISA,
1,
xta_init, xta_close, NULL,
{ NULL }, NULL, NULL,
NULL
.name = "EuroPC HD20 Fixed Disk Controller",
.internal_name = "xta_hd20",
.flags = DEVICE_ISA,
.local = 1,
.init = xta_init,
.close = xta_close,
.reset = NULL,
{ .available = NULL },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};

View File

@@ -261,51 +261,71 @@ xtide_at_close(void *priv)
const device_t xtide_device = {
"PC/XT XTIDE",
"xtide",
DEVICE_ISA,
0,
xtide_init, xtide_close, NULL,
{ xtide_available }, NULL, NULL,
NULL
.name = "PC/XT XTIDE",
.internal_name = "xtide",
.flags = DEVICE_ISA,
.local = 0,
.init = xtide_init,
.close = xtide_close,
.reset = NULL,
{ .available = xtide_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t xtide_at_device = {
"PC/AT XTIDE",
"xtide_at",
DEVICE_ISA | DEVICE_AT,
0,
xtide_at_init, xtide_at_close, NULL,
{ xtide_at_available }, NULL, NULL,
NULL
.name = "PC/AT XTIDE",
.internal_name = "xtide_at",
.flags = DEVICE_ISA | DEVICE_AT,
.local = 0,
.init = xtide_at_init,
.close = xtide_at_close,
.reset = NULL,
{ .available = xtide_at_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t xtide_at_386_device = {
"PC/AT XTIDE (386)",
"xtide_at_386",
DEVICE_ISA | DEVICE_AT,
1,
xtide_at_init, xtide_at_close, NULL,
{ xtide_at_386_available }, NULL, NULL,
NULL
.name = "PC/AT XTIDE (386)",
.internal_name = "xtide_at_386",
.flags = DEVICE_ISA | DEVICE_AT,
.local = 1,
.init = xtide_at_init,
.close = xtide_at_close,
.reset = NULL,
{ .available = xtide_at_386_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t xtide_acculogic_device = {
"Acculogic XT IDE",
"xtide_acculogic",
DEVICE_ISA,
0,
xtide_acculogic_init, xtide_close, NULL,
{ xtide_acculogic_available }, NULL, NULL,
NULL
.name = "Acculogic XT IDE",
.internal_name = "xtide_acculogic",
.flags = DEVICE_ISA,
.local = 0,
.init = xtide_acculogic_init,
.close = xtide_close,
.reset = NULL,
{ .available = xtide_acculogic_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};
const device_t xtide_at_ps2_device = {
"PS/2 AT XTIDE (1.1.5)",
"xtide_at_ps2",
DEVICE_ISA | DEVICE_AT,
0,
xtide_at_ps2_init, xtide_at_close, NULL,
{ xtide_at_ps2_available }, NULL, NULL,
NULL
.name = "PS/2 AT XTIDE (1.1.5)",
.internal_name = "xtide_at_ps2",
.flags = DEVICE_ISA | DEVICE_AT,
.local = 0,
.init = xtide_at_ps2_init,
.close = xtide_at_close,
.reset = NULL,
{ .available = xtide_at_ps2_available },
.speed_changed = NULL,
.force_redraw = NULL,
.config = NULL
};