Mercurial > repos > blastem
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; |