f7be7d5e1bb3d6487a8123351cbe2d817e06672d
[picodrive.git] / Pico / cd / cd_sys.h
1 #ifndef _CD_SYS_H\r
2 #define _CD_SYS_H\r
3 \r
4 #include "cd_file.h"\r
5 \r
6 #include <stdio.h> // FILE\r
7 \r
8 #ifdef __cplusplus\r
9 extern "C" {\r
10 #endif\r
11 \r
12 \r
13 #define INT_TO_BCDB(c)                                                                          \\r
14 ((c) > 99)?(0x99):((((c) / 10) << 4) + ((c) % 10));\r
15 \r
16 #define INT_TO_BCDW(c)                                                                          \\r
17 ((c) > 99)?(0x0909):((((c) / 10) << 8) + ((c) % 10));\r
18 \r
19 #define BCDB_TO_INT(c)                                                                          \\r
20 (((c) >> 4) * 10) + ((c) & 0xF);\r
21 \r
22 #define BCDW_TO_INT(c)                                                                          \\r
23 (((c) >> 8) * 10) + ((c) & 0xF);\r
24 \r
25 \r
26 typedef struct\r
27 {\r
28   unsigned char M;\r
29   unsigned char S;\r
30   unsigned char F;\r
31 } _msf;\r
32 \r
33 typedef struct\r
34 {\r
35 //      unsigned char Type; // always 1 (data) for 1st track, 0 (audio) for others\r
36 //      unsigned char Num; // unused\r
37         _msf MSF;\r
38         //\r
39         char ftype; // TYPE_ISO, TYPE_BIN, TYPE_MP3\r
40         FILE *F;\r
41         int Length;\r
42         short KBtps; // kbytes per sec for mp3s (bitrate / 1000 / 8)\r
43         short pad;\r
44 } _scd_track;\r
45 \r
46 typedef struct\r
47 {\r
48 //      unsigned char First_Track; // always 1\r
49         _scd_track Tracks[100];\r
50         unsigned int Last_Track;\r
51 } _scd_toc;\r
52 \r
53 typedef struct {\r
54         unsigned int Status_CDD;\r
55         unsigned int Status_CDC;\r
56         int Cur_LBA;\r
57         unsigned int Cur_Track;\r
58         int File_Add_Delay;\r
59         char CDD_Complete;\r
60         int pad[6];\r
61 } _scd;\r
62 \r
63 \r
64 void LBA_to_MSF(int lba, _msf *MSF);\r
65 int Track_to_LBA(int track);\r
66 \r
67 \r
68 void Check_CD_Command(void);\r
69 \r
70 int  Init_CD_Driver(void);\r
71 void End_CD_Driver(void);\r
72 int  Insert_CD(char *iso_name, int is_bin);\r
73 void Stop_CD(void);\r
74 void Change_CD(void);\r
75 void Reset_CD(void);\r
76 \r
77 int Get_Status_CDD_c0(void);\r
78 int Stop_CDD_c1(void);\r
79 int Get_Pos_CDD_c20(void);\r
80 int Get_Track_Pos_CDD_c21(void);\r
81 int Get_Current_Track_CDD_c22(void);\r
82 int Get_Total_Lenght_CDD_c23(void);\r
83 int Get_First_Last_Track_CDD_c24(void);\r
84 int Get_Track_Adr_CDD_c25(void);\r
85 int Play_CDD_c3(void);\r
86 int Seek_CDD_c4(void);\r
87 int Pause_CDD_c6(void);\r
88 int Resume_CDD_c7(void);\r
89 int Fast_Foward_CDD_c8(void);\r
90 int Fast_Rewind_CDD_c9(void);\r
91 int CDD_cA(void);\r
92 int Close_Tray_CDD_cC(void);\r
93 int Open_Tray_CDD_cD(void);\r
94 \r
95 int CDD_Def(void);\r
96 \r
97 //void Write_CD_Audio(short *Buf, int rate, int channel, int lenght);\r
98 //void Update_CD_Audio(int **Buf, int lenght);\r
99 \r
100 \r
101 #ifdef __cplusplus\r
102 };\r
103 #endif\r
104 \r
105 #endif\r
106 \r