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