comparison cdd_mcu.c @ 2124:ad346054ca78

Return "not ready" status sometimes when seeking. Fixes issues in multiple games
author Michael Pavone <pavone@retrodev.com>
date Fri, 11 Mar 2022 00:40:17 -0800
parents bb478feccca2
children 28b6453cf7e3
comparison
equal deleted inserted replaced
2123:50385ae2617b 2124:ad346054ca78
183 gate_array[GAO_CDD_CTRL] &= ~BIT_MUTE; 183 gate_array[GAO_CDD_CTRL] &= ~BIT_MUTE;
184 } 184 }
185 } 185 }
186 break; 186 break;
187 } 187 }
188 uint8_t force_not_ready = 0;
189 if (context->seeking && context->head_pba - prev_pba != 1) {
190 //BIOS depends on getting a not ready status during seeking to clear certain state
191 force_not_ready = context->status_buffer.format != SF_NOTREADY;
192 }
188 if (context->first_cmd_received) { 193 if (context->first_cmd_received) {
189 switch (context->requested_format) 194 switch (force_not_ready ? SF_NOTREADY : context->requested_format)
190 { 195 {
191 case SF_ABSOLUTE: 196 case SF_ABSOLUTE:
192 if (context->toc_valid && prev_pba >= LEADIN_SECTORS) { 197 if (context->toc_valid && prev_pba >= LEADIN_SECTORS) {
193 lba_to_status(context, prev_pba - LEADIN_SECTORS); 198 lba_to_status(context, prev_pba - LEADIN_SECTORS);
194 context->status_buffer.format = SF_ABSOLUTE; 199 context->status_buffer.format = SF_ABSOLUTE;