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:
@@ -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
|
||||
|
||||
16
src/cdrom.c
16
src/cdrom.c
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user