Added the option to disable updating status bar icons (doing so gains performance during disk I/O);
Reduced sound gain options to one (because the per-source gain does not work right); Added the Diamond SpeedStar PRO (CL-GD 5428), per patch from TheCollector1995.
This commit is contained in:
@@ -9,7 +9,7 @@
|
||||
* Implementation of the IDE emulation for hard disks and ATAPI
|
||||
* CD-ROM devices.
|
||||
*
|
||||
* Version: @(#)hdc_ide.c 1.0.24 2018/01/21
|
||||
* Version: @(#)hdc_ide.c 1.0.25 2018/02/08
|
||||
*
|
||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||
* Miran Grca, <mgrca8@gmail.com>
|
||||
@@ -1348,84 +1348,50 @@ void writeide(int ide_board, uint16_t addr, uint8_t val)
|
||||
return;
|
||||
|
||||
case WIN_DRIVE_DIAGNOSTICS: /* Execute Drive Diagnostics */
|
||||
if (ide_drive_is_zip(ide))
|
||||
zip[atapi_zip_drives[ide->channel]].status = BUSY_STAT;
|
||||
else if (ide_drive_is_cdrom(ide))
|
||||
cdrom[atapi_cdrom_drives[ide->channel]].status = BUSY_STAT;
|
||||
else
|
||||
ide->atastat = BUSY_STAT;
|
||||
|
||||
if (ide_drive_is_zip(ide_other))
|
||||
zip[atapi_zip_drives[ide_other->channel]].status = BUSY_STAT;
|
||||
else if (ide_drive_is_cdrom(ide_other))
|
||||
cdrom[atapi_cdrom_drives[ide_other->channel]].status = BUSY_STAT;
|
||||
else
|
||||
ide_other->atastat = BUSY_STAT;
|
||||
|
||||
timer_process();
|
||||
if (ide_drive_is_zip(ide))
|
||||
zip[atapi_zip_drives[ide->channel]].callback = 200LL * IDE_TIME;
|
||||
else if (ide_drive_is_cdrom(ide))
|
||||
cdrom[atapi_cdrom_drives[ide->channel]].callback = 200LL * IDE_TIME;
|
||||
idecallback[ide_board] = 200LL * IDE_TIME;
|
||||
timer_update_outstanding();
|
||||
return;
|
||||
|
||||
case WIN_PIDENTIFY: /* Identify Packet Device */
|
||||
case WIN_SET_MULTIPLE_MODE: /* Set Multiple Mode */
|
||||
case WIN_SET_FEATURES: /* Set Features */
|
||||
case WIN_NOP:
|
||||
case WIN_STANDBYNOW1:
|
||||
case WIN_IDLENOW1:
|
||||
case WIN_SETIDLE1: /* Idle */
|
||||
case WIN_CHECKPOWERMODE1:
|
||||
case WIN_SLEEP1:
|
||||
if (val == WIN_DRIVE_DIAGNOSTICS)
|
||||
{
|
||||
if (ide_drive_is_zip(ide))
|
||||
{
|
||||
zip[atapi_zip_drives[ide->channel]].status = BUSY_STAT;
|
||||
}
|
||||
else if (ide_drive_is_cdrom(ide))
|
||||
{
|
||||
cdrom[atapi_cdrom_drives[ide->channel]].status = BUSY_STAT;
|
||||
}
|
||||
else
|
||||
{
|
||||
ide->atastat = BUSY_STAT;
|
||||
}
|
||||
|
||||
if (ide_drive_is_zip(ide_other))
|
||||
{
|
||||
zip[atapi_zip_drives[ide_other->channel]].status = BUSY_STAT;
|
||||
}
|
||||
else if (ide_drive_is_cdrom(ide_other))
|
||||
{
|
||||
cdrom[atapi_cdrom_drives[ide_other->channel]].status = BUSY_STAT;
|
||||
}
|
||||
else
|
||||
{
|
||||
ide_other->atastat = BUSY_STAT;
|
||||
}
|
||||
|
||||
timer_process();
|
||||
if (ide_drive_is_zip(ide))
|
||||
{
|
||||
zip[atapi_zip_drives[ide->channel]].callback = 200LL * IDE_TIME;
|
||||
}
|
||||
else if (ide_drive_is_cdrom(ide))
|
||||
{
|
||||
cdrom[atapi_cdrom_drives[ide->channel]].callback = 200LL * IDE_TIME;
|
||||
}
|
||||
idecallback[ide_board] = 200LL * IDE_TIME;
|
||||
timer_update_outstanding();
|
||||
}
|
||||
if (ide_drive_is_zip(ide))
|
||||
zip[atapi_zip_drives[ide->channel]].status = BUSY_STAT;
|
||||
else if (ide_drive_is_cdrom(ide))
|
||||
cdrom[atapi_cdrom_drives[ide->channel]].status = BUSY_STAT;
|
||||
else
|
||||
{
|
||||
if (ide_drive_is_zip(ide))
|
||||
{
|
||||
zip[atapi_zip_drives[ide->channel]].status = BUSY_STAT;
|
||||
}
|
||||
else if (ide_drive_is_cdrom(ide))
|
||||
{
|
||||
cdrom[atapi_cdrom_drives[ide->channel]].status = BUSY_STAT;
|
||||
}
|
||||
else
|
||||
{
|
||||
ide->atastat = BUSY_STAT;
|
||||
}
|
||||
timer_process();
|
||||
if (ide_drive_is_zip(ide))
|
||||
{
|
||||
zip[atapi_zip_drives[ide->channel]].callback = 30LL * IDE_TIME;
|
||||
}
|
||||
else if (ide_drive_is_cdrom(ide))
|
||||
{
|
||||
cdrom[atapi_cdrom_drives[ide->channel]].callback = 30LL * IDE_TIME;
|
||||
}
|
||||
idecallback[ide_board] = 30LL * IDE_TIME;
|
||||
timer_update_outstanding();
|
||||
}
|
||||
ide->atastat = BUSY_STAT;
|
||||
timer_process();
|
||||
callbackide(ide_board);
|
||||
timer_update_outstanding();
|
||||
return;
|
||||
|
||||
case WIN_IDENTIFY: /* Identify Device */
|
||||
case WIN_SET_FEATURES: /* Set Features */
|
||||
case WIN_READ_NATIVE_MAX:
|
||||
if (ide_drive_is_zip(ide))
|
||||
{
|
||||
@@ -1472,7 +1438,7 @@ void writeide(int ide_board, uint16_t addr, uint8_t val)
|
||||
{
|
||||
ide->atastat = BUSY_STAT;
|
||||
timer_process();
|
||||
idecallback[ide_board]=1LL;
|
||||
idecallback[ide_board]=200LL*IDE_TIME;
|
||||
timer_update_outstanding();
|
||||
ide->pos=0;
|
||||
}
|
||||
|
||||
@@ -8,7 +8,7 @@
|
||||
*
|
||||
* Handling of hard disk image files.
|
||||
*
|
||||
* Version: @(#)hdd_image.c 1.0.11 2018/02/07
|
||||
* Version: @(#)hdd_image.c 1.0.12 2018/02/08
|
||||
*
|
||||
* Authors: Miran Grca, <mgrca8@gmail.com>
|
||||
* Fred N. van Kempen, <decwiz@yahoo.com>
|
||||
@@ -332,7 +332,7 @@ void hdd_image_seek(uint8_t id, uint32_t sector)
|
||||
|
||||
void hdd_image_read(uint8_t id, uint32_t sector, uint32_t count, uint8_t *buffer)
|
||||
{
|
||||
hdd_image_seek(id, sector);
|
||||
fseeko64(hdd_images[id].file, ((uint64_t)sector * 512) + hdd_images[id].base, SEEK_SET);
|
||||
fread(buffer, 1, count * 512, hdd_images[id].file);
|
||||
}
|
||||
|
||||
@@ -350,7 +350,7 @@ int hdd_image_read_ex(uint8_t id, uint32_t sector, uint32_t count, uint8_t *buff
|
||||
if ((sectors - sector) < transfer_sectors)
|
||||
transfer_sectors = sectors - sector;
|
||||
|
||||
hdd_image_seek(id, sector);
|
||||
fseeko64(hdd_images[id].file, ((uint64_t)sector * 512) + hdd_images[id].base, SEEK_SET);
|
||||
fread(buffer, 1, transfer_sectors * 512, hdd_images[id].file);
|
||||
|
||||
if (count != transfer_sectors)
|
||||
@@ -360,7 +360,7 @@ int hdd_image_read_ex(uint8_t id, uint32_t sector, uint32_t count, uint8_t *buff
|
||||
|
||||
void hdd_image_write(uint8_t id, uint32_t sector, uint32_t count, uint8_t *buffer)
|
||||
{
|
||||
hdd_image_seek(id, sector);
|
||||
fseeko64(hdd_images[id].file, ((uint64_t)sector * 512) + hdd_images[id].base, SEEK_SET);
|
||||
fwrite(buffer, count * 512, 1, hdd_images[id].file);
|
||||
}
|
||||
|
||||
@@ -372,7 +372,7 @@ int hdd_image_write_ex(uint8_t id, uint32_t sector, uint32_t count, uint8_t *buf
|
||||
if ((sectors - sector) < transfer_sectors)
|
||||
transfer_sectors = sectors - sector;
|
||||
|
||||
hdd_image_seek(id, sector);
|
||||
fseeko64(hdd_images[id].file, ((uint64_t)sector * 512) + hdd_images[id].base, SEEK_SET);
|
||||
fwrite(buffer, transfer_sectors * 512, 1, hdd_images[id].file);
|
||||
|
||||
if (count != transfer_sectors)
|
||||
@@ -384,7 +384,7 @@ void hdd_image_zero(uint8_t id, uint32_t sector, uint32_t count)
|
||||
{
|
||||
int i = 0;
|
||||
|
||||
hdd_image_seek(id, sector);
|
||||
fseeko64(hdd_images[id].file, ((uint64_t)sector * 512) + hdd_images[id].base, SEEK_SET);
|
||||
for (i = 0; i < count; i++)
|
||||
fwrite(empty_sector, 512, 1, hdd_images[id].file);
|
||||
}
|
||||
@@ -399,7 +399,7 @@ int hdd_image_zero_ex(uint8_t id, uint32_t sector, uint32_t count)
|
||||
if ((sectors - sector) < transfer_sectors)
|
||||
transfer_sectors = sectors - sector;
|
||||
|
||||
hdd_image_seek(id, sector);
|
||||
fseeko64(hdd_images[id].file, ((uint64_t)sector * 512) + hdd_images[id].base, SEEK_SET);
|
||||
for (i = 0; i < transfer_sectors; i++)
|
||||
fwrite(empty_sector, 1, 512, hdd_images[id].file);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user