diff --git a/src/disk/hdc_ide.c b/src/disk/hdc_ide.c
index 2de441abb..50651cd1f 100644
--- a/src/disk/hdc_ide.c
+++ b/src/disk/hdc_ide.c
@@ -9,7 +9,7 @@
* Implementation of the IDE emulation for hard disks and ATAPI
* CD-ROM devices.
*
- * Version: @(#)hdc_ide.c 1.0.26 2018/02/14
+ * Version: @(#)hdc_ide.c 1.0.27 2018/02/25
*
* Authors: Sarah Walker,
* Miran Grca,
@@ -1137,6 +1137,33 @@ void writeide(int ide_board, uint16_t addr, uint8_t val)
{
cdrom[atapi_cdrom_drives[ide->channel]].error = 0;
}
+ if (val >= WIN_SEEK) && (val <= 0x7F)
+ {
+ if (ide_drive_is_zip(ide))
+ {
+ zip[atapi_zip_drives[ide->channel]].status = READY_STAT;
+ }
+ else if (ide_drive_is_cdrom(ide))
+ {
+ cdrom[atapi_cdrom_drives[ide->channel]].status = READY_STAT;
+ }
+ else
+ {
+ ide->atastat = READY_STAT;
+ }
+ timer_process();
+ if (ide_drive_is_zip(ide))
+ {
+ zip[atapi_zip_drives[ide->channel]].callback = 100LL*IDE_TIME;
+ }
+ if (ide_drive_is_cdrom(ide))
+ {
+ cdrom[atapi_cdrom_drives[ide->channel]].callback = 100LL*IDE_TIME;
+ }
+ idecallback[ide_board]=100LL*IDE_TIME;
+ timer_update_outstanding();
+ return;
+ }
switch (val)
{
case WIN_SRST: /* ATAPI Device Reset */
@@ -1166,7 +1193,6 @@ void writeide(int ide_board, uint16_t addr, uint8_t val)
return;
case WIN_RESTORE:
- case WIN_SEEK:
if (ide_drive_is_zip(ide))
{
zip[atapi_zip_drives[ide->channel]].status = READY_STAT;
@@ -1888,6 +1914,27 @@ void callbackide(int ide_board)
zip_id = atapi_zip_drives[cur_ide[ide_board]];
zip_id_other = atapi_zip_drives[cur_ide[ide_board] ^ 1];
+ if ((ide->command >= WIN_SEEK) && (ide->command <= 0x7F))
+ {
+ if (ide_drive_is_zip(ide) || ide_drive_is_cdrom(ide))
+ {
+ goto abort_cmd;
+ }
+ if (ide_drive_is_zip(ide))
+ {
+ zip[zip_id].status = READY_STAT | DSC_STAT;
+ }
+ else if (ide_drive_is_cdrom(ide))
+ {
+ cdrom[cdrom_id].status = READY_STAT | DSC_STAT;
+ }
+ else
+ {
+ ide->atastat = READY_STAT | DSC_STAT;
+ }
+ ide_irq_raise(ide);
+ return;
+ }
switch (ide->command)
{
/* Initialize the Task File Registers as follows: Status = 00h, Error = 01h, Sector Count = 01h, Sector Number = 01h,
@@ -1920,7 +1967,6 @@ void callbackide(int ide_board)
return;
case WIN_RESTORE:
- case WIN_SEEK:
if (ide_drive_is_zip(ide) || ide_drive_is_cdrom(ide))
{
goto abort_cmd;