Mercurial > repos > blastem
diff cdd_mcu.c @ 2516:69c28808b49a
Fix some TOC/CUE parser bugs and simplify how "fake" pregap is handled
author | Michael Pavone <pavone@retrodev.com> |
---|---|
date | Sat, 05 Oct 2024 01:03:57 -0700 |
parents | bcfa5e272f5e |
children |
line wrap: on
line diff
--- a/cdd_mcu.c Thu Sep 05 23:44:01 2024 -0700 +++ b/cdd_mcu.c Sat Oct 05 01:03:57 2024 -0700 @@ -221,7 +221,7 @@ if (context->head_pba > 3*(context->media->num_tracks + 2)) { context->toc_valid = 1; context->seeking = 1; - context->seek_pba = LEADIN_SECTORS + context->media->tracks[0].start_lba + context->media->tracks[0].fake_pregap; + context->seek_pba = LEADIN_SECTORS + context->media->tracks[0].start_lba; context->status = DS_PAUSE; } @@ -267,15 +267,6 @@ for (uint32_t i = 0; i < context->media->num_tracks; i++) { if (lba < context->media->tracks[i].end_lba) { - if (context->media->tracks[i].fake_pregap) { - if (lba > context->media->tracks[i].fake_pregap) { - lba -= context->media->tracks[i].fake_pregap; - } else { - //relative time counts down to 0 in pregap - lba = context->media->tracks[i].fake_pregap - lba; - break; - } - } if (lba < context->media->tracks[i].start_lba) { //relative time counts down to 0 in pregap lba = context->media->tracks[i].start_lba - lba; @@ -283,8 +274,6 @@ lba -= context->media->tracks[i].start_lba; } break; - } else if (context->media->tracks[i].fake_pregap) { - lba -= context->media->tracks[i].fake_pregap; } } lba_to_status(context, lba); @@ -300,24 +289,7 @@ for (i = 0; i < context->media->num_tracks; i++) { if (lba < context->media->tracks[i].end_lba) { - if (context->media->tracks[i].fake_pregap) { - if (lba > context->media->tracks[i].fake_pregap) { - lba -= context->media->tracks[i].fake_pregap; - } else { - //relative time counts down to 0 in pregap - lba = context->media->tracks[i].fake_pregap - lba; - break; - } - } - if (lba < context->media->tracks[i].start_lba) { - //relative time counts down to 0 in pregap - lba = context->media->tracks[i].start_lba - lba; - } else { - lba -= context->media->tracks[i].start_lba; - } break; - } else if (context->media->tracks[i].fake_pregap) { - lba -= context->media->tracks[i].fake_pregap; } } context->status_buffer.b.track.track_high = (i + 1) / 10; @@ -337,12 +309,7 @@ break; case SF_TOCO: if (context->toc_valid) { - uint32_t total_fake_pregap = 0; - for (uint32_t i = 0; i < context->media->num_tracks; i++) - { - total_fake_pregap += context->media->tracks[i].fake_pregap; - } - lba_to_status(context, context->media->tracks[context->media->num_tracks - 1].end_lba + total_fake_pregap); + lba_to_status(context, context->media->tracks[context->media->num_tracks - 1].end_lba); context->status_buffer.format = SF_TOCO; } else { context->status_buffer.format = SF_NOTREADY; @@ -367,9 +334,6 @@ exit(0); } uint32_t lba = context->media->tracks[context->requested_track - 1].start_lba; - for (uint32_t i = 0; i < context->requested_track; i++) { - lba += context->media->tracks[i].fake_pregap; - } lba_to_status(context, lba); if (context->media->tracks[context->requested_track - 1].type == TRACK_DATA) { context->status_buffer.b.tocn.frame_high |= 0x8; @@ -462,7 +426,7 @@ context->cmd_buffer.b.time.sec_high, context->cmd_buffer.b.time.sec_low, context->cmd_buffer.b.time.frame_high, context->cmd_buffer.b.time.frame_low ); - if (lba >= context->media->tracks[0].fake_pregap + context->media->tracks[context->media->num_tracks - 1].end_lba) { + if (lba >= context->media->tracks[context->media->num_tracks - 1].end_lba) { context->error_status = DS_CMD_ERROR; break; } @@ -534,7 +498,7 @@ } if (context->status == DS_STOP) { context->seeking = 1; - context->seek_pba = LEADIN_SECTORS + context->media->tracks[0].fake_pregap + context->media->tracks[0].start_lba; + context->seek_pba = LEADIN_SECTORS + context->media->tracks[0].start_lba; printf("CDD CMD: PAUSE, seeking to %u\n", context->seek_pba); } else { uint32_t lba = context->head_pba - LEADIN_SECTORS; @@ -572,7 +536,7 @@ } if (context->status == DS_STOP || context->status == DS_TOC_READ) { context->seeking = 1; - context->seek_pba = LEADIN_SECTORS + context->media->tracks[0].fake_pregap + context->media->tracks[0].start_lba - 4; + context->seek_pba = LEADIN_SECTORS + context->media->tracks[0].start_lba - 4; printf("CDD CMD: PLAY, seeking to %u\n", context->seek_pba); } else { puts("CDD CMD: PLAY");