Fixed more CD-ROM bugs.
This commit is contained in:
@@ -9,7 +9,7 @@
|
|||||||
* Implementation of the CD-ROM drive with SCSI(-like)
|
* Implementation of the CD-ROM drive with SCSI(-like)
|
||||||
* commands, for both ATAPI and SCSI usage.
|
* commands, for both ATAPI and SCSI usage.
|
||||||
*
|
*
|
||||||
* Version: @(#)cdrom.c 1.0.37 2018/03/17
|
* Version: @(#)cdrom.c 1.0.38 2018/03/17
|
||||||
*
|
*
|
||||||
* Author: Miran Grca, <mgrca8@gmail.com>
|
* Author: Miran Grca, <mgrca8@gmail.com>
|
||||||
*
|
*
|
||||||
@@ -451,8 +451,6 @@ void cdrom_init(int id, int cdb_len_setting)
|
|||||||
|
|
||||||
if (id >= CDROM_NUM)
|
if (id >= CDROM_NUM)
|
||||||
return;
|
return;
|
||||||
if (!cdrom[id])
|
|
||||||
cdrom[id] = (cdrom_t *) malloc(sizeof(cdrom_t));
|
|
||||||
dev = cdrom[id];
|
dev = cdrom[id];
|
||||||
memset(dev, 0, sizeof(cdrom_t));
|
memset(dev, 0, sizeof(cdrom_t));
|
||||||
dev->requested_blocks = 1;
|
dev->requested_blocks = 1;
|
||||||
@@ -856,16 +854,16 @@ static void cdrom_command_common(uint8_t id)
|
|||||||
switch(dev->current_cdb[0]) {
|
switch(dev->current_cdb[0]) {
|
||||||
case 0x0b:
|
case 0x0b:
|
||||||
case 0x2b:
|
case 0x2b:
|
||||||
/* Seek time is in ms. */
|
/* Seek time is in us. */
|
||||||
period = cdrom_seek_time(id) * ((double) TIMER_USEC) * 1000.0;
|
period = cdrom_seek_time(id) * ((double) TIMER_USEC);
|
||||||
dev->callback += ((int64_t) period);
|
dev->callback += ((int64_t) period);
|
||||||
cdrom_set_callback(id);
|
cdrom_set_callback(id);
|
||||||
return;
|
return;
|
||||||
case 0x08:
|
case 0x08:
|
||||||
case 0x28:
|
case 0x28:
|
||||||
case 0xa8:
|
case 0xa8:
|
||||||
/* Seek time is in ms. */
|
/* Seek time is in us. */
|
||||||
period = cdrom_seek_time(id) * ((double) TIMER_USEC) * 1000.0;
|
period = cdrom_seek_time(id) * ((double) TIMER_USEC);
|
||||||
dev->callback += ((int64_t) period);
|
dev->callback += ((int64_t) period);
|
||||||
case 0x25:
|
case 0x25:
|
||||||
case 0x42:
|
case 0x42:
|
||||||
|
@@ -9,7 +9,7 @@
|
|||||||
* Implementation of the IDE emulation for hard disks and ATAPI
|
* Implementation of the IDE emulation for hard disks and ATAPI
|
||||||
* CD-ROM devices.
|
* CD-ROM devices.
|
||||||
*
|
*
|
||||||
* Version: @(#)hdc_ide.c 1.0.38 2018/03/16
|
* Version: @(#)hdc_ide.c 1.0.39 2018/03/17
|
||||||
*
|
*
|
||||||
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
* Authors: Sarah Walker, <http://pcem-emulator.co.uk/>
|
||||||
* Miran Grca, <mgrca8@gmail.com>
|
* Miran Grca, <mgrca8@gmail.com>
|
||||||
@@ -1515,14 +1515,14 @@ void writeide(int ide_board, uint16_t addr, uint8_t val)
|
|||||||
zip[atapi_zip_drives[ide->channel]].packet_status = ZIP_PHASE_IDLE;
|
zip[atapi_zip_drives[ide->channel]].packet_status = ZIP_PHASE_IDLE;
|
||||||
zip[atapi_zip_drives[ide->channel]].pos=0;
|
zip[atapi_zip_drives[ide->channel]].pos=0;
|
||||||
zip[atapi_zip_drives[ide->channel]].phase = 1;
|
zip[atapi_zip_drives[ide->channel]].phase = 1;
|
||||||
zip[atapi_zip_drives[ide->channel]].status = READY_STAT | DRQ_STAT | (zip[cur_ide[ide_board]].status & ERR_STAT);
|
zip[atapi_zip_drives[ide->channel]].status = READY_STAT | DRQ_STAT | (zip[atapi_zip_drives[ide->channel]].status & ERR_STAT);
|
||||||
}
|
}
|
||||||
else if (ide_drive_is_cdrom(ide))
|
else if (ide_drive_is_cdrom(ide))
|
||||||
{
|
{
|
||||||
cdrom[atapi_cdrom_drives[ide->channel]]->packet_status = CDROM_PHASE_IDLE;
|
cdrom[atapi_cdrom_drives[ide->channel]]->packet_status = CDROM_PHASE_IDLE;
|
||||||
cdrom[atapi_cdrom_drives[ide->channel]]->pos=0;
|
cdrom[atapi_cdrom_drives[ide->channel]]->pos=0;
|
||||||
cdrom[atapi_cdrom_drives[ide->channel]]->phase = 1;
|
cdrom[atapi_cdrom_drives[ide->channel]]->phase = 1;
|
||||||
cdrom[atapi_cdrom_drives[ide->channel]]->status = READY_STAT | DRQ_STAT | (cdrom[cur_ide[ide_board]]->status & ERR_STAT);
|
cdrom[atapi_cdrom_drives[ide->channel]]->status = READY_STAT | DRQ_STAT | (cdrom[atapi_cdrom_drives[ide->channel]]->status & ERR_STAT);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
12
src/pc.c
12
src/pc.c
@@ -665,13 +665,13 @@ again2:
|
|||||||
|
|
||||||
hdc_init(hdc_name);
|
hdc_init(hdc_name);
|
||||||
|
|
||||||
|
cdrom_hard_reset();
|
||||||
|
zip_hard_reset();
|
||||||
|
|
||||||
ide_reset_hard();
|
ide_reset_hard();
|
||||||
|
|
||||||
scsi_card_init();
|
scsi_card_init();
|
||||||
|
|
||||||
cdrom_hard_reset();
|
|
||||||
zip_hard_reset();
|
|
||||||
|
|
||||||
pc_full_speed();
|
pc_full_speed();
|
||||||
shadowbios = 0;
|
shadowbios = 0;
|
||||||
|
|
||||||
@@ -817,15 +817,15 @@ pc_reset_hard_init(void)
|
|||||||
/* Reset the video card. */
|
/* Reset the video card. */
|
||||||
video_reset(gfxcard);
|
video_reset(gfxcard);
|
||||||
|
|
||||||
|
cdrom_hard_reset();
|
||||||
|
zip_hard_reset();
|
||||||
|
|
||||||
/* Reset the Hard Disk Controller module. */
|
/* Reset the Hard Disk Controller module. */
|
||||||
hdc_reset();
|
hdc_reset();
|
||||||
|
|
||||||
/* Reset and reconfigure the SCSI layer. */
|
/* Reset and reconfigure the SCSI layer. */
|
||||||
scsi_card_init();
|
scsi_card_init();
|
||||||
|
|
||||||
cdrom_hard_reset();
|
|
||||||
zip_hard_reset();
|
|
||||||
|
|
||||||
/* Reset and reconfigure the Network Card layer. */
|
/* Reset and reconfigure the Network Card layer. */
|
||||||
network_reset();
|
network_reset();
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user