ESDI MCA changes of the late night (September 18th, 2024)

1. More logs.
2. Placed the required bits in the reset routine to make Xenix 2.3.4q work (at least getting past the reset detection).
3. Some more fixes for OS/2 1.x (proposed by WNT50)
This commit is contained in:
TC1995
2024-09-18 01:00:19 +02:00
parent c0f4fb35e1
commit fe5c89785f

View File

@@ -372,7 +372,9 @@ esdi_callback(void *priv)
if (dev->in_reset) {
esdi_mca_log("ESDI reset.\n");
dev->in_reset = 0;
dev->status = STATUS_IRQ;
dev->status = STATUS_IRQ | STATUS_TRANSFER_REQ | STATUS_STATUS_OUT_FULL;
dev->status_len = 1; /*ToDo: better implementation for Xenix?*/
dev->status_data[0] = STATUS_LEN(1) | ATTN_HOST_ADAPTER;
dev->irq_status = IRQ_HOST_ADAPTER | IRQ_RESET_COMPLETE;
return;
}
@@ -1055,8 +1057,10 @@ esdi_readw(uint16_t port, void *priv)
switch (port & 7) {
case 0: /*Status Interface Register*/
if (dev->status_pos >= dev->status_len)
if (dev->status_pos >= dev->status_len) {
esdi_mca_log("esdi_readw port=%04x, ret=0000 (pos=%d, len=%d).\n", port, dev->status_pos, dev->status_len);
return 0;
}
ret = dev->status_data[dev->status_pos++];
if (dev->status_pos >= dev->status_len) {
dev->status &= ~STATUS_STATUS_OUT_FULL;
@@ -1068,6 +1072,7 @@ esdi_readw(uint16_t port, void *priv)
fatal("esdi_readw port=%04x\n", port);
}
esdi_mca_log("esdi_readw port=%04x, ret=%04x.\n", port, ret);
return ret;
}
@@ -1250,7 +1255,7 @@ esdi_init(UNUSED(const device_t *info))
drive->spt = hdd[i].spt;
drive->hpc = hdd[i].hpc;
drive->tracks = hdd[i].tracks;
drive->sectors = hdd_image_get_last_sector(i) + 1;
drive->sectors = hdd_image_get_last_sector(i);
drive->hdd_num = i;
/* Mark drive as present. */