PICO_INTERNAL int Get_Current_Track_CDD_c22(void) { cdprintf("Status CDD = %.4X Status = %.4X", Pico_mcd->scd.Status_CDD, Pico_mcd->cdd.Status); CHECK_TRAY_OPEN Pico_mcd->cdd.Status &= 0xFF; if (!CD_Present) { Pico_mcd->scd.Status_CDD = NOCD; Pico_mcd->cdd.Status |= Pico_mcd->scd.Status_CDD; } // else if (!(CDC.CTRL.B.B0 & 0x80)) Pico_mcd->cdd.Status |= Pico_mcd->scd.Status_CDD; Pico_mcd->cdd.Status |= Pico_mcd->scd.Status_CDD; Pico_mcd->scd.Cur_Track = LBA_to_Track(Pico_mcd->scd.Cur_LBA); if (Pico_mcd->scd.Cur_Track == 100) Pico_mcd->cdd.Minute = 0x0A02; else Pico_mcd->cdd.Minute = INT_TO_BCDW(Pico_mcd->scd.Cur_Track); Pico_mcd->cdd.Seconde = 0; Pico_mcd->cdd.Frame = 0; Pico_mcd->cdd.Ext = 0; Pico_mcd->scd.CDD_Complete = 1; return 0; }
PICO_INTERNAL int Get_Track_Pos_CDD_c21(void) { int elapsed_time; _msf MSF; cdprintf("command 201 : Cur LBA = %d", Pico_mcd->scd.Cur_LBA); CHECK_TRAY_OPEN Pico_mcd->cdd.Status &= 0xFF; if (!CD_Present) { Pico_mcd->scd.Status_CDD = NOCD; Pico_mcd->cdd.Status |= Pico_mcd->scd.Status_CDD; } // else if (!(CDC.CTRL.B.B0 & 0x80)) Pico_mcd->cdd.Status |= Pico_mcd->scd.Status_CDD; Pico_mcd->cdd.Status |= Pico_mcd->scd.Status_CDD; elapsed_time = Pico_mcd->scd.Cur_LBA - Track_to_LBA(LBA_to_Track(Pico_mcd->scd.Cur_LBA)); LBA_to_MSF(elapsed_time - 150, &MSF); cdprintf(" elapsed = %d", elapsed_time); Pico_mcd->cdd.Minute = INT_TO_BCDW(MSF.M); Pico_mcd->cdd.Seconde = INT_TO_BCDW(MSF.S); Pico_mcd->cdd.Frame = INT_TO_BCDW(MSF.F); Pico_mcd->cdd.Ext = 0; Pico_mcd->scd.CDD_Complete = 1; return 0; }
int Get_Current_Track_CDD_c22 (void) { #ifdef DEBUG_CD fprintf (debug_SCD_file, "Status CDD = %.4X Status = %.4X\n", SCD.Status_CDD, CDD.Status); #endif CHECK_TRAY_OPEN CDD.Status &= 0xFF; if (!CD_Present) { SCD.Status_CDD = NOCD; CDD.Status |= SCD.Status_CDD; } // else if (!(CDC.CTRL.B.B0 & 0x80)) CDD.Status |= SCD.Status_CDD; CDD.Status |= SCD.Status_CDD; SCD.Cur_Track = LBA_to_Track (SCD.Cur_LBA); if (SCD.Cur_Track == 100) CDD.Minute = 0x0A02; else CDD.Minute = INT_TO_BCDW (SCD.Cur_Track); CDD.Seconde = 0; CDD.Frame = 0; CDD.Ext = 0; CDD_Complete = 1; return 0; }
int Get_Track_Pos_CDD_c21 (void) { int elapsed_time; _msf MSF; #ifdef DEBUG_CD fprintf (debug_SCD_file, "command 201 : Cur LBA = %d", SCD.Cur_LBA); #endif CHECK_TRAY_OPEN CDD.Status &= 0xFF; if (!CD_Present) { SCD.Status_CDD = NOCD; CDD.Status |= SCD.Status_CDD; } // else if (!(CDC.CTRL.B.B0 & 0x80)) CDD.Status |= SCD.Status_CDD; CDD.Status |= SCD.Status_CDD; elapsed_time = SCD.Cur_LBA - Track_to_LBA (LBA_to_Track (SCD.Cur_LBA)); LBA_to_MSF (elapsed_time - 150, &MSF); #ifdef DEBUG_CD fprintf (debug_SCD_file, " elapsed = %d\n", elapsed_time); #endif CDD.Minute = INT_TO_BCDW (MSF.M); CDD.Seconde = INT_TO_BCDW (MSF.S); CDD.Frame = INT_TO_BCDW (MSF.F); CDD.Ext = 0; CDD_Complete = 1; return 0; }
PICO_INTERNAL int Resume_CDD_c7(void) { CHECK_TRAY_OPEN CHECK_CD_PRESENT Pico_mcd->scd.Cur_Track = LBA_to_Track(Pico_mcd->scd.Cur_LBA); #ifdef DEBUG_CD { _msf MSF; LBA_to_MSF(Pico_mcd->scd.Cur_LBA, &MSF); cdprintf("Resume read : Cur LBA = %d, M=%d, S=%d, F=%d", Pico_mcd->scd.Cur_LBA, MSF.M, MSF.S, MSF.F); } #endif Pico_mcd->scd.Status_CDD = PLAYING; Pico_mcd->cdd.Status = 0x0102; if (Pico_mcd->scd.Cur_Track == 1) { Pico_mcd->s68k_regs[0x36] |= 0x01; // DATA } else { Pico_mcd->s68k_regs[0x36] &= ~0x01; // AUDIO cdda_start_play(); } if (Pico_mcd->scd.Cur_Track == 100) Pico_mcd->cdd.Minute = 0x0A02; else Pico_mcd->cdd.Minute = INT_TO_BCDW(Pico_mcd->scd.Cur_Track); Pico_mcd->cdd.Seconde = 0; Pico_mcd->cdd.Frame = 0; Pico_mcd->cdd.Ext = 0; Pico_mcd->scd.Status_CDC |= 1; // Read data with CDC Pico_mcd->scd.CDD_Complete = 1; return 0; }
FILE* GetMP3TrackFile(int trackIndex, int* pDontLeaveFileOpen, int* pWhere_read) { FILE* decodedFile = Tracks[trackIndex].F_decoded; int usePartiallyDecodedFile = 0; char str [1024]; int curTrack = LBA_to_Track(SCD.Cur_LBA); int lbaOffset = SCD.Cur_LBA - Track_to_LBA(curTrack); int lba = lbaOffset; int outRead = 0; int forceNoDecode = 0; int& where_read = *pWhere_read; where_read = (lba) * 588*4 + 16; if(where_read < 0) where_read = 0; #ifdef _WIN32 if(!decodedFile) { Waiting_For_Preload_MP3_Synchronous = true; Preload_MP3(&Tracks[trackIndex].F_decoded, trackIndex); DWORD tgtime = timeGetTime(); //Modif N - give frame advance sound: bool soundCleared = false; sprintf(str, "%s/" PRELOADED_MP3_DIRECTORY PRELOADED_MP3_FILENAME, Gens_Path, trackIndex+1); while(!usePartiallyDecodedFile) { if(!decodedFile) decodedFile = fopen(str, "rb"); if(decodedFile) { int decodedSize; fseek(decodedFile, 0, SEEK_END); decodedSize = ftell(decodedFile); if(decodedSize >= where_read + 588*4) usePartiallyDecodedFile = 1; } if(!usePartiallyDecodedFile && noTracksQueued) { if(decodedFile) fclose(decodedFile); decodedFile = NULL; break; } #ifdef _WIN32 if(!usePartiallyDecodedFile) Sleep(5); #endif // win32 if(!soundCleared && timeGetTime() - tgtime >= 125) //eliminate stutter { int Clear_Sound_Buffer(void); Clear_Sound_Buffer(); soundCleared = true; } } if(!decodedFile) decodedFile = Tracks[trackIndex].F_decoded; Waiting_For_Preload_MP3_Synchronous = false; } #endif // threaded *pDontLeaveFileOpen = usePartiallyDecodedFile; return decodedFile; }