Reduced the MPU-401 reset timer multiplier to 33, should make Harball 3 work on most, if not all, emulated machines;

The Read TOC command no longer sends more data than requested, and it always returns the correct value in the data field if the request data length is smaller than the actual data length.
This commit is contained in:
OBattler
2017-05-13 02:58:36 +02:00
parent bce795b632
commit 5ba88cba30
2 changed files with 12 additions and 6 deletions

View File

@@ -271,7 +271,7 @@ static void MPU401_WriteCommand(mpu_t *mpu, uint8_t val)
break;
case 0xff: /* Reset MPU-401 */
pclog("MPU-401:Reset %X\n",val);
mpu401_reset_callback = MPU401_RESETBUSY * 200 * TIMER_USEC;
mpu401_reset_callback = MPU401_RESETBUSY * 33 * TIMER_USEC;
mpu->state.reset=1;
MPU401_Reset(mpu);
if (mpu->mode==M_UART) return;//do not send ack in UART mode

View File

@@ -2424,19 +2424,17 @@ void cdrom_command(uint8_t id, uint8_t *cdb)
toc_format = (cdb[9] >> 6) & 3;
}
len = cdb[8] + (cdb[7] << 8);
switch (toc_format)
{
case 0: /*Normal*/
len = cdrom_drives[id].handler->readtoc(id, cdbufferb, cdb[6], msf, len, 0);
len = cdrom_drives[id].handler->readtoc(id, cdbufferb, cdb[6], msf, max_len, 0);
break;
case 1: /*Multi session*/
len = cdrom_drives[id].handler->readtoc_session(id, cdbufferb, msf, len);
len = cdrom_drives[id].handler->readtoc_session(id, cdbufferb, msf, max_len);
cdbufferb[0] = 0; cdbufferb[1] = 0xA;
break;
case 2: /*Raw*/
len = cdrom_drives[id].handler->readtoc_raw(id, cdbufferb, msf, len);
len = cdrom_drives[id].handler->readtoc_raw(id, cdbufferb, msf, max_len);
break;
default:
cdrom_invalid_field(id);
@@ -2444,6 +2442,14 @@ void cdrom_command(uint8_t id, uint8_t *cdb)
}
}
if (len > max_len)
{
len = max_len;
cdbufferb[0] = ((len - 2) >> 8) & 0xff;
cdbufferb[1] = (len - 2) & 0xff;
}
cdrom_data_command_finish(id, len, len, len, 0);
/* cdrom_log("CD-ROM %i: READ_TOC_PMA_ATIP format %02X, length %i (%i)\n", id, toc_format, ide->cylinder, cdbufferb[1]); */
return;