libds.pas 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. unit libds;
  2. interface
  3. uses libstd;
  4. const
  5. // CD-ROM Mode (used int CdlSetmode)
  6. DslModeStream = $100;// Normal Streaming
  7. DslModeStream2 = $120;// SUB HEADER information includes
  8. DslModeSpeed = $80;// 0: normal speed 1: double speed
  9. DslModeRT = $40;// 0: ADPCM off 1: ADPCM on
  10. DslModeSize1 = $20;// 0: 2048 byte 1: 2340byte
  11. DslModeSize0 = $10;// 0: - 1: 2328byte
  12. DslModeSF = $08;// 0: Channel off 1: Channel on
  13. slModeRept = $04;// 0: Report off 1: Report on
  14. DslModeAP = $02;// 0: AutoPause off 1: AutoPause on
  15. DslModeDA = $01;// 0: CD-DA off 1: CD-DA on
  16. // Status contents
  17. DslStatPlay = $80;// playing CD-DA
  18. DslStatSeek = $40;// seeking
  19. DslStatRead = $20;// reading data sectors
  20. DslStatShellOpen = $10;// once shell open
  21. DslStatSeekError = $04;// seek error detected
  22. DslStatStandby = $02;// spindle motor rotating
  23. DslStatError = $01;// command error detected
  24. // Macros for DsGetDiskType()
  25. DslStatNoDisk = $01;
  26. DslOtherFormat = $02;
  27. DslCdromFormat = $04;
  28. // CD-ROM Primitive Commands
  29. DslNop = $01;// no operation
  30. DslSetloc = $02;// set head position
  31. DslPlay = $03;// play CD-DA
  32. DslForward = $04;// forward DA play
  33. DslBackward = $05;// backward DA play
  34. DslReadN = $06;// read data with retry
  35. DslStandby = $07;// start spindle motor
  36. DslStop = $08;// stop spindle motor
  37. DslPause = $09;// pause
  38. DslMute = $0b;// mute on
  39. DslDemute = $0c;// mute off
  40. DslSetfilter = $0d;// set subheader filter
  41. DslSetmode = $0e;// set mode
  42. DslGetparam = $0f;// get mode
  43. DslGetlocL = $10;// get head position (data sector)
  44. DslGetlocP = $11;// get head position (DA sector)
  45. DslGetTN = $13;// get number of TOC
  46. DslGetTD = $14;// get TOC data
  47. DslSeekL = $15;// logical seek
  48. DslSeekP = $16;// phisical seek
  49. DslReadS = $1B;// read data without retry
  50. // Interrupts
  51. DslNoIntr = $00;// No interrupt
  52. DslDataReady = $01;// Data Read
  53. DslComplete = $02;// Command Complete
  54. DslAcknowledge = $03;// Acknowledge (reserved)
  55. DslDataEnd = $04;// End of Data Detected
  56. DslDiskError = 405;// Error Detected
  57. DslNoResult = $06;
  58. DslFinished = $07;
  59. function btoi(b: longint): byte; // BCD to u_char
  60. function itob(i: byte): longint; // u_char to BCD
  61. // Position
  62. const
  63. DslMAXTOC = 100;
  64. // Callback
  65. //typedef void ( *DslRCB )( u_char, u_char*, u_long* );
  66. type
  67. DslCB = procedure (b: byte; p: pchar);
  68. DslRCB = procedure (b: byte; p: pchar; l: Plongint);
  69. // Location
  70. type
  71. DslLOC = packed record
  72. minute : byte; // minute (BCD)
  73. second : byte; // second (BCD)
  74. sector : byte; // sector (BCD)
  75. track : byte; // track (void)
  76. end;
  77. PDslLOC = ^DslLOC;
  78. // ADPCM Filter
  79. DslFILTER = packed record
  80. _file : byte; // file ID (always 1)
  81. chan : byte; // channel ID
  82. pad : u_short;
  83. end;
  84. // Attenuator
  85. DslATV = packed record
  86. val0 : byte; // volume for CD(L) -> SPU (L)
  87. val1 : byte; // volume for CD(L) -> SPU (R)
  88. val2 : byte; // volume for CD(R) -> SPU (L)
  89. val3 : byte; // volume for CD(R) -> SPU (R)
  90. end;
  91. PDslATV = ^DslATV;
  92. // Low Level File System for DsSearchFile()
  93. const
  94. DslMAXFILE = 64; // max number of files in a directory
  95. DslMAXDIR = 128; // max number of total directories
  96. DslMAXLEVEL = 8; // max levels of directories
  97. type
  98. DslFILE = packed record
  99. pos : DslLOC; // file location
  100. size : dword; // file size
  101. name : array [0..15] of char; // file name (body)
  102. end;
  103. PDslFILE = ^DslFILE;
  104. // system status
  105. const
  106. DslReady = 1;
  107. DslBusy = 2;
  108. DslNoCD = 3;
  109. // maximum number of commands that can be added to the queue
  110. DslMaxCOMMANDS = 8;
  111. // maximum number of command execution results
  112. DslMaxRESULTS = 8;
  113. function DsInit: integer; stdcall external;
  114. function DsReset: integer; stdcall external;
  115. procedure DsClose; stdcall external;
  116. function DsCommand(com: byte; param: pchar; cbsync: DslCB; count: integer ): integer; stdcall external;
  117. function DsPacket(mode: byte; pos:PDslLOC; com: byte; func: DslCB; count: integer): integer; stdcall external;
  118. function DsSyncCallback(func: DslCB): DslCB; stdcall external;
  119. function DsReadyCallback(func: DslCB): DslCB; stdcall external;
  120. function DsSync(id: integer; res: pointer): integer; stdcall external;
  121. function DsReady(res: pointer): integer; stdcall external;
  122. procedure DsFlush; stdcall external;
  123. function DsSystemStatus: integer; stdcall external;
  124. function DsQueueLen: integer; stdcall external;
  125. function DsStatus: byte; stdcall external;
  126. function DsShellOpen: integer; stdcall external;
  127. function DsMix(vol: PDslATV): integer; stdcall external;
  128. function DsGetSector(madr: pointer; size: integer): integer; stdcall external;
  129. function DsGetSector2(madr: pointer; size: integer): integer; stdcall external;
  130. function DsGetToc(loc: PDslLOC): integer; stdcall external;
  131. procedure DsDataCallback(func: pointer); stdcall external;
  132. function DsDataSync(mode: integer): integer; stdcall external;
  133. function DsIntToPos(i: integer; p: PDslLOC): PDslLOC; stdcall external;
  134. function DsPosToInt(p: PDslLOC): integer; stdcall external;
  135. function DsSetDebug(level: integer ): integer; stdcall external;
  136. function DsLastPos(p: PDslLOC): PDslLOC; stdcall external;
  137. function DsLastCom: byte; stdcall external;
  138. function DsComstr(com: byte): pchar; stdcall external;
  139. function DsIntstr(intr: byte): pchar; stdcall external;
  140. function DsStartReadySystem(func: DslRCB; count: integer): integer; stdcall external;
  141. procedure DsEndReadySystem; stdcall external;
  142. function DsReadySystemMode(mode: integer): integer; stdcall external;
  143. function DsControlF(com: byte; param: pchar): integer; stdcall external;
  144. function DsControl(com: byte; param: pchar; res: pointer): integer; stdcall external;
  145. function DsControlB(com: byte; param: pchar; res: pointer): integer; stdcall external;
  146. function DsRead(pos: PDslLOC; sectors: integer; buf: Plongint; mode: integer): integer; stdcall external;
  147. function DsReadSync(res: pointer): integer; stdcall external;
  148. function DsReadCallback(func: DslCB): DslCB; stdcall external;
  149. procedure DsReadBreak; stdcall external;
  150. function DsRead2(pos: PDslLOC; mode: integer): integer; stdcall external;
  151. function DsSearchFile(fp: PDslFILE; name: pchar ): PDslFILE; stdcall external;
  152. function DsReadFile(_file: pchar; addr: Plongint; nbyte: integer): integer; stdcall external;
  153. //struct EXEC* DsReadExec( char* file ); stdcall external;
  154. function DsPlay(mode: integer; tracks: Pinteger; offset: integer): integer; stdcall external;
  155. procedure DsGetDiskType; stdcall external;
  156. implementation
  157. function btoi(b: longint): byte;
  158. begin
  159. btoi:= b div 16 * 10 + b mod 16;
  160. end;
  161. function itob(i: byte): longint;
  162. begin
  163. itob:= i div 10 * 16 + i mod 10;
  164. end;
  165. begin
  166. end.