 unit SB;

 interface

 uses
     NewCrt,NewTypes,SysProc,DMA,Errors_e;

  var
     portD,ResetP       ,
     ReadData,WriteCom  ,
     WriteBuf,DataAvail ,
     MixerAdd,MixerData ,
     PCM16bit,MPU401Add ,
     AcknowledgePort    ,
     DMABufferSize2     ,
     DMACount           : word;
     DMA8Channel        ,
     DMA16Channel       ,
     SB_IRQ             ,
     HardwareRes        ,
     StopDMA            ,
     OutputMode         : byte;
     DSP_Version        : string[4];
     BufferReady        : boolean;

  const
       MaxSBProFreq    = 21740;

 procedure WriteDSP(Comm : byte);
 function  ReadDSP:byte;
 procedure ResetDSP;
 procedure StartSB16AutoDMA(Comm,Mode : byte;DMABufferSize2 : word;var StopDMA : byte);
 procedure SetSB16OutSamplingRate(Freq : word);
 procedure SetSBTimeConstant(Freq : word;Stereo : byte);
 procedure SetDSPBlock(Size : word);
 procedure StartDMATransfert;
 procedure StopDMATransfert;
 procedure PauseDMA;
 procedure ContinueDMA;
 procedure ResetPIC;
 procedure Set_Output_Freq(Freq : word;var ChangeFreq : word);
 procedure Set_Output_Mode(var OutMode : byte;var MinOutput,MaxOutput : word);
 procedure Modify_Output_Mode(OutMode : byte;var MinOutput,MaxOutput,FreqSortie : word);
 procedure Modify_Output_Freq(Freq : word;Reset : boolean);
 procedure Adjust_Freq(var Freq : word);
 procedure InitSB;
 procedure Get_Hardware_Info(var Hardware_Info:string);
 procedure EnterUARTMode(var success : boolean);
 procedure LeaveUARTMode(var success : boolean);
 procedure Init_Buffer;
 procedure Calc_Vol_Table;



   {* set desired output frequency}
      returns closest frequency
   procedure Set_Output_Freq(Freq : word;var ChangeFreq : word);

   {* set desired output mode}
      returns available output mode and frequency range
   procedure Set_Output_Mode(var OutMode : byte;var MinOutput,MaxOutput : word);

   {* modify output mode (when a module is playing)}
   procedure Modify_Output_Mode(OutMode : byte;var MinOutput,MaxOutput,FreqSortie : word);

   {* modify output frequency (when a module is playing)}
      Reset inverts the current DMA buffer half to be read by sound card}
   procedure Modify_Output_Freq(Freq : word;Reset : boolean);

   {* return closest output frequency available with current hardware}
   procedure Adjust_Freq(var Freq : word);

   {* returns DSP info}
   procedure Get_Hardware_Info(var Hardware_Info:string);


 end.
