Reverted Direct3D to 2048x2048 buffer and suppressed the EGA/(S)VGA overscan, if enabled, in 2048x modes, fixes Direct3D freezes;

Improved the BusLogic incoming mailbox code;
The BusLogic callback is now three-phases and outgoing mailbox interrupts are emulated correctly;
Fixed the CD-ROM command READ DISC INFORMATION (0x51), fixes NetBSD crashing 86Box with segmentation fault when using the AHA-154x;
Added the CD-ROM command PAUSE/RESUME ALT (0xC2).
This commit is contained in:
OBattler
2017-01-24 01:03:23 +01:00
parent bd28cc5e57
commit bc5ac4a699
21 changed files with 308 additions and 278 deletions

View File

@@ -117,6 +117,7 @@ uint8_t cdrom_command_flags[0x100] =
[GPCMD_MECHANISM_STATUS] = IMPLEMENTED,
[GPCMD_READ_CD] = IMPLEMENTED | CHECK_READY,
[GPCMD_SEND_DVD_STRUCTURE] = IMPLEMENTED | CHECK_READY,
[GPCMD_PAUSE_RESUME_ALT] = IMPLEMENTED | CHECK_READY | SCSI_ONLY,
[GPCMD_SCAN_ALT] = IMPLEMENTED | CHECK_READY | SCSI_ONLY,
[GPCMD_SET_SPEED_ALT] = IMPLEMENTED | SCSI_ONLY
};
@@ -2084,6 +2085,10 @@ void cdrom_command(uint8_t id, uint8_t *cdb)
break;
case GPCMD_READ_DISC_INFORMATION:
max_len = cdb[7];
max_len <<= 8;
max_len |= cdb[8];
if (cdrom_drives[id].handler->pass_through)
{
ret = cdrom_pass_through(id, &len);
@@ -2105,7 +2110,7 @@ void cdrom_command(uint8_t id, uint8_t *cdb)
len=34;
}
cdrom_data_command_finish(id, len, len, alloc_length, 0);
cdrom_data_command_finish(id, len, len, max_len, 0);
break;
case GPCMD_READ_TRACK_INFORMATION:
@@ -2156,7 +2161,7 @@ void cdrom_command(uint8_t id, uint8_t *cdb)
}
}
cdrom_data_command_finish(id, len, len, alloc_length, 0);
cdrom_data_command_finish(id, len, len, max_len, 0);
break;
case GPCMD_PLAY_AUDIO_10:
@@ -2326,11 +2331,6 @@ void cdrom_command(uint8_t id, uint8_t *cdb)
{
ret = cdrom_read_dvd_structure(id, format, cdb, cdbufferb);
/* if (!ret)
{
cdrom_cmd_error(id, SENSE_ILLEGAL_REQUEST, -ret, 0);
}
else */
if (ret)
{
cdrom_data_command_finish(id, len, len, alloc_length, 0);
@@ -2467,6 +2467,7 @@ atapi_out:
cdrom_command_complete(id);
break;
case GPCMD_PAUSE_RESUME_ALT:
case GPCMD_PAUSE_RESUME:
if (cdb[8] & 1)
{