diff --git a/src/disk/hdc_esdi_at.c b/src/disk/hdc_esdi_at.c index 8efdf6657..759dd5a51 100644 --- a/src/disk/hdc_esdi_at.c +++ b/src/disk/hdc_esdi_at.c @@ -398,7 +398,9 @@ esdi_readw(uint16_t port, void *priv) if (port > 0x01f0) { temp = esdi_read(port, priv); - if (port != 0x01f7) + if (port == 0x01f7) + temp |= 0xff00; + else temp |= (esdi_read(port + 1, priv) << 8); } else { temp = esdi->buffer[esdi->pos >> 1]; diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c index 8cffe3dbd..374f9d0c5 100644 --- a/src/disk/hdc_ide.c +++ b/src/disk/hdc_ide.c @@ -1898,7 +1898,7 @@ ide_readw(uint16_t addr, void *priv) temp = ide_read_data(ide, 2); break; case 0x7: - temp = ide_readb(addr, priv); + temp = ide_readb(addr, priv) | 0xff00; break; default: temp = ide_readb(addr, priv) | (ide_readb(addr + 1, priv) << 8); @@ -1933,7 +1933,7 @@ ide_readl(uint16_t addr, void *priv) temp = temp2 | (ide_readw(addr + 2, priv) << 16); break; case 0x6: case 0x7: - temp = ide_readw(addr, priv); + temp = ide_readw(addr, priv) | 0xffff0000; break; default: temp = ide_readw(addr, priv) | (ide_readw(addr + 2, priv) << 16); diff --git a/src/disk/hdc_st506_at.c b/src/disk/hdc_st506_at.c index d43088d1c..5fcf24dfd 100644 --- a/src/disk/hdc_st506_at.c +++ b/src/disk/hdc_st506_at.c @@ -466,7 +466,9 @@ mfm_readw(uint16_t port, void *priv) if (port > 0x01f0) { ret = mfm_read(port, priv); - if (port != 0x01f7) + if (port == 0x01f7) + ret |= 0xff00; + else ret |= (mfm_read(port + 1, priv) << 8); } else { ret = mfm->buffer[mfm->pos >> 1];