1 #ifndef DEVICES_CD_H 2 #define DEVICES_CD_H 3 4 /* 5 cd.device include 6 7 Copyright © 2002 The MorphOS Development Team, All Rights Reserved. 8 */ 9 10 #ifndef EXEC_TYPES_H 11 # include <exec/types.h> 12 #endif 13 14 #ifndef EXEC_NODES_H 15 # include <exec/nodes.h> 16 #endif 17 18 #ifndef EXEC_IO_H 19 # include <exec/io.h> 20 #endif 21 22 #pragma pack(2) 23 24 25 /* CD commands */ 26 27 #define CD_RESET (CMD_RESET) 28 #define CD_READ (CMD_READ) 29 #define CD_WRITE (CMD_WRITE) 30 #define CD_UPDATE (CMD_UPDATE) 31 #define CD_CLEAR (CMD_CLEAR) 32 #define CD_STOP (CMD_STOP) 33 #define CD_START (CMD_START) 34 #define CD_FLUSH (CMD_FLUSH) 35 36 #define CD_MOTOR (CMD_NONSTD + 0) 37 #define CD_SEEK (CMD_NONSTD + 1) 38 #define CD_FORMAT (CMD_NONSTD + 2) 39 #define CD_REMOVE (CMD_NONSTD + 3) 40 #define CD_CHANGENUM (CMD_NONSTD + 4) 41 #define CD_CHANGESTATE (CMD_NONSTD + 5) 42 #define CD_PROTSTATUS (CMD_NONSTD + 6) 43 44 #define CD_GETDRIVETYPE (CMD_NONSTD + 9) 45 #define CD_GETNUMTRACKS (CMD_NONSTD + 10) 46 #define CD_ADDCHANGEINT (CMD_NONSTD + 11) 47 #define CD_REMCHANGEINT (CMD_NONSTD + 12) 48 #define CD_GETGEOMETRY (CMD_NONSTD + 13) 49 #define CD_EJECT (CMD_NONSTD + 14) 50 51 #define CD_INFO (CMD_NONSTD + 23) 52 #define CD_CONFIG (CMD_NONSTD + 24) 53 #define CD_TOCMSF (CMD_NONSTD + 25) 54 #define CD_TOCLSN (CMD_NONSTD + 26) 55 56 #define CD_READXL (CMD_NONSTD + 27) 57 58 #define CD_PLAYTRACK (CMD_NONSTD + 28) 59 #define CD_PLAYMSF (CMD_NONSTD + 29) 60 #define CD_PLAYLSN (CMD_NONSTD + 30) 61 #define CD_PAUSE (CMD_NONSTD + 31) 62 #define CD_SEARCH (CMD_NONSTD + 32) 63 64 #define CD_QCODEMSF (CMD_NONSTD + 33) 65 #define CD_QCODELSN (CMD_NONSTD + 34) 66 #define CD_ATTENUATE (CMD_NONSTD + 35) 67 68 #define CD_ADDFRAMEINT (CMD_NONSTD + 36) 69 #define CD_REMFRAMEINT (CMD_NONSTD + 37) 70 71 72 /* CD errors */ 73 74 #define CDERR_OPENFAIL (-1) 75 #define CDERR_ABORTED (-2) 76 #define CDERR_NOCMD (-3) 77 #define CDERR_BADLENGTH (-4) 78 #define CDERR_BADADDRESS (-5) 79 #define CDERR_UNITBUSY (-6) 80 #define CDERR_SELFTEST (-7) 81 82 #define CDERR_NotSpecified 20 83 #define CDERR_NoSecHdr 21 84 #define CDERR_BadSecPreamble 22 85 #define CDERR_BadSecID 23 86 #define CDERR_BadHdrSum 24 87 #define CDERR_BadSecSum 25 88 #define CDERR_TooFewSecs 26 89 #define CDERR_BadSecHdr 27 90 #define CDERR_WriteProt 28 91 #define CDERR_NoDisk 29 92 #define CDERR_SeekError 30 93 #define CDERR_NoMem 31 94 #define CDERR_BadUnitNum 32 95 #define CDERR_BadDriveType 33 96 #define CDERR_DriveInUse 34 97 #define CDERR_PostReset 35 98 #define CDERR_BadDataType 36 99 #define CDERR_InvalidState 37 100 101 #define CDERR_Phase 42 102 #define CDERR_NoBoard 50 103 104 105 /* CD config */ 106 107 #define TAGCD_PLAYSPEED 0x0001 108 #define TAGCD_READSPEED 0x0002 109 #define TAGCD_READXLSPEED 0x0003 110 #define TAGCD_SECTORSIZE 0x0004 111 #define TAGCD_XLECC 0x0005 112 #define TAGCD_EJECTRESET 0x0006 113 114 115 struct CDInfo 116 { 117 UWORD PlaySpeed; 118 UWORD ReadSpeed; 119 UWORD ReadXLSpeed; 120 UWORD SectorSize; 121 UWORD XLECC; 122 UWORD EjectReset; 123 UWORD Reserved1[4]; 124 125 UWORD MaxSpeed; 126 UWORD AudioPrecision; 127 UWORD Status; 128 UWORD Reserved2[4]; 129 }; 130 131 132 /* CD status-flags */ 133 134 #define CDSTSB_CLOSED 0 135 #define CDSTSB_DISK 1 136 #define CDSTSB_SPIN 2 137 #define CDSTSB_TOC 3 138 #define CDSTSB_CDROM 4 139 #define CDSTSB_PLAYING 5 140 #define CDSTSB_PAUSED 6 141 #define CDSTSB_SEARCH 7 142 #define CDSTSB_DIRECTION 8 143 144 #define CDSTSF_CLOSED 0x0001 145 #define CDSTSF_DISK 0x0002 146 #define CDSTSF_SPIN 0x0004 147 #define CDSTSF_TOC 0x0008 148 #define CDSTSF_CDROM 0x0010 149 #define CDSTSF_PLAYING 0x0020 150 #define CDSTSF_PAUSED 0x0040 151 #define CDSTSF_SEARCH 0x0080 152 #define CDSTSF_DIRECTION 0x0100 153 154 155 /* CD_SEARCH modes */ 156 157 #define CDMODE_NORMAL 0 158 #define CDMODE_FFWD 1 159 #define CDMODE_FREV 2 160 161 162 struct RMSF 163 { 164 UBYTE Reserved; 165 UBYTE Minute; 166 UBYTE Second; 167 UBYTE Frame; 168 }; 169 170 union LSNMSF 171 { 172 struct RMSF MSF; 173 ULONG LSN; 174 }; 175 176 177 struct CDXL 178 { 179 struct MinNode Node; 180 char *Buffer; 181 LONG Length; 182 LONG Actual; 183 APTR IntData; 184 VOID (*IntCode)(VOID); 185 }; 186 187 188 struct TOCSummary 189 { 190 UBYTE FirstTrack; 191 UBYTE LastTrack; 192 union LSNMSF LeadOut; 193 }; 194 195 196 struct TOCEntry 197 { 198 UBYTE CtlAdr; 199 UBYTE Track; 200 union LSNMSF Position; 201 }; 202 203 204 union CDTOC 205 { 206 struct TOCSummary Summary; 207 struct TOCEntry Entry; 208 }; 209 210 211 struct QCode 212 { 213 UBYTE CtlAdr; 214 UBYTE Track; 215 UBYTE Index; 216 UBYTE Zero; 217 union LSNMSF TrackPosition; 218 union LSNMSF DiskPosition; 219 }; 220 221 222 #define CTLADR_CTLMASK 0xF0 223 224 #define CTL_CTLMASK 0xD0 225 226 #define CTL_2AUD 0x00 227 #define CTL_2AUDEMPH 0x10 228 #define CTL_4AUD 0x80 229 #define CTL_4AUDEMPH 0x90 230 #define CTL_DATA 0x40 231 232 #define CTL_COPYMASK 0x20 233 234 #define CTL_COPY 0x20 235 236 #define CTLADR_ADRMASK 0x0F 237 238 #define ADR_POSITION 0x01 239 #define ADR_UPC 0x02 240 #define ADR_ISRC 0x03 241 #define ADR_HYBRID 0x05 242 243 244 #pragma pack() 245 246 #endif