--- /dev/null
+/***********************************************************\r
+ * *\r
+ * This source was taken from the Gens project *\r
+ * Written by Stéphane Dallongeville *\r
+ * Copyright (c) 2002 by Stéphane Dallongeville *\r
+ * Modified/adapted for PicoDrive by notaz, 2007 *\r
+ * *\r
+ ***********************************************************/\r
+\r
+#ifndef _CD_SYS_H\r
+#define _CD_SYS_H\r
+\r
+#include "cd_file.h"\r
+\r
+#ifdef __cplusplus\r
+extern "C" {\r
+#endif\r
+\r
+\r
+#define INT_TO_BCDB(c) \\r
+((c) > 99)?(0x99):((((c) / 10) << 4) + ((c) % 10));\r
+\r
+#define INT_TO_BCDW(c) \\r
+((c) > 99)?(0x0909):((((c) / 10) << 8) + ((c) % 10));\r
+\r
+#define BCDB_TO_INT(c) \\r
+(((c) >> 4) * 10) + ((c) & 0xF);\r
+\r
+#define BCDW_TO_INT(c) \\r
+(((c) >> 8) * 10) + ((c) & 0xF);\r
+\r
+\r
+typedef struct\r
+{\r
+ unsigned char M;\r
+ unsigned char S;\r
+ unsigned char F;\r
+} _msf;\r
+\r
+typedef struct\r
+{\r
+// unsigned char Type; // always 1 (data) for 1st track, 0 (audio) for others\r
+// unsigned char Num; // unused\r
+ _msf MSF;\r
+ //\r
+ char ftype; // TYPE_ISO, TYPE_BIN, TYPE_MP3\r
+ void *F;\r
+ int Length;\r
+ int Offset; // sector offset, when single file is used for multiple virtual tracks\r
+ short KBtps; // kbytes per sec for mp3s (bitrate / 1000 / 8)\r
+ short pad;\r
+} _scd_track;\r
+\r
+typedef struct\r
+{\r
+// unsigned char First_Track; // always 1\r
+ _scd_track Tracks[100];\r
+ unsigned int Last_Track;\r
+} _scd_toc;\r
+\r
+typedef struct {\r
+ unsigned int Status_CDD;\r
+ unsigned int Status_CDC;\r
+ int Cur_LBA;\r
+ unsigned int Cur_Track;\r
+ int File_Add_Delay;\r
+ char CDD_Complete;\r
+ int pad[6];\r
+} _scd;\r
+\r
+\r
+PICO_INTERNAL void LBA_to_MSF(int lba, _msf *MSF);\r
+PICO_INTERNAL int Track_to_LBA(int track);\r
+\r
+// moved to pico.h\r
+// int Insert_CD(char *iso_name, int is_bin);\r
+// void Stop_CD(void);\r
+\r
+PICO_INTERNAL void Check_CD_Command(void);\r
+\r
+PICO_INTERNAL int Init_CD_Driver(void);\r
+PICO_INTERNAL void End_CD_Driver(void);\r
+PICO_INTERNAL void Reset_CD(void);\r
+\r
+PICO_INTERNAL int Get_Status_CDD_c0(void);\r
+PICO_INTERNAL int Stop_CDD_c1(void);\r
+PICO_INTERNAL int Get_Pos_CDD_c20(void);\r
+PICO_INTERNAL int Get_Track_Pos_CDD_c21(void);\r
+PICO_INTERNAL int Get_Current_Track_CDD_c22(void);\r
+PICO_INTERNAL int Get_Total_Lenght_CDD_c23(void);\r
+PICO_INTERNAL int Get_First_Last_Track_CDD_c24(void);\r
+PICO_INTERNAL int Get_Track_Adr_CDD_c25(void);\r
+PICO_INTERNAL int Play_CDD_c3(void);\r
+PICO_INTERNAL int Seek_CDD_c4(void);\r
+PICO_INTERNAL int Pause_CDD_c6(void);\r
+PICO_INTERNAL int Resume_CDD_c7(void);\r
+PICO_INTERNAL int Fast_Foward_CDD_c8(void);\r
+PICO_INTERNAL int Fast_Rewind_CDD_c9(void);\r
+PICO_INTERNAL int CDD_cA(void);\r
+PICO_INTERNAL int Close_Tray_CDD_cC(void);\r
+PICO_INTERNAL int Open_Tray_CDD_cD(void);\r
+\r
+PICO_INTERNAL int CDD_Def(void);\r
+\r
+\r
+#ifdef __cplusplus\r
+};\r
+#endif\r
+\r
+#endif\r
+\r