diff --git a/src/SOUND/snd_mpu401.c b/src/SOUND/snd_mpu401.c index 837186188..eace343f3 100644 --- a/src/SOUND/snd_mpu401.c +++ b/src/SOUND/snd_mpu401.c @@ -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 diff --git a/src/cdrom.c b/src/cdrom.c index 74968157d..8617e35af 100644 --- a/src/cdrom.c +++ b/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;