⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 使用ASPI读SCSI/IDE/ATAPI的CDROM数据或音乐磁道数据的程序
💻 PAS
📖 第 1 页 / 共 3 页
字号:
        writeln(Log, '     Returned record TCdRomSubQinfo :');
        writeln(Log, '       AudioStatus = ',TAudioStatusName[AudioStatus]);
        writeln(Log, '       ADR         = ',TsubchannelADRname[ADR]);
        writeln(Log, '       PreEmphasis = ', PreEmphasis);
        writeln(Log, '       CopyPermit  = ', CopyPermit);
        writeln(Log, '       DataTrack   = ', DataTrack);
        writeln(Log, '       QuadAudio   = ', QuadAudio);
        writeln(Log, '       TrackNumber = ', TrackNumber);
        writeln(Log, '       IndexNumber = ', IndexNumber);
        writeln(Log, '       UPC  = "', UPC,  '"');
        writeln(Log, '       ISRC = "', ISRC, '"');
        if MSFform.Checked then begin
          writeln(Log, '       AbsAddress = ',AbsAddressM:2,' : ',
             AbsAddressS:2,' : ',AbsAddressF:2,'  // in MSF');
          writeln(Log, '       RelAddress = ',RelAddressM:2,' : ',
             RelAddressS:2,' : ',RelAddressF:2,'  //   form');
        end else begin
          writeln(Log, '       AbsAddress = ',AbsAddress,'  // in LBA');
          writeln(Log, '       RelAddress = ',RelAddress,'  //   form');
        end;
        flush(Log);
   end; end;
end; end;


procedure TForm1.ReadToc1Click(Sender: TObject);
var
   Toc : TCdRomToc;
   i   : integer;
begin with ReadTocDlg do begin
   if ShowModal = mrOk then begin
      Report('Trying: SCSIreadToc('+BVal(MSFform)+DVal(Start)+
             'var Toc : TCdRomToc);',
        CdRom1.SCSIreadToc(MSFform.Checked, BYTE(Start.Value), Toc));
      with Toc do begin
        writeln(Log, '     Returned record TCdRomToc :');
        writeln(Log, '       FirstTrack = ', FirstTrack);
        writeln(Log, '       LastTrack  = ', LastTrack);
        writeln(Log, '       TrackCount = ', TrackCount,
           '  // Real tracks + lead-off area (TrackNumber=170)');
        writeln(Log, '       InMSF      = ', InMSF);
      end;
      for i := 0 to Toc.TrackCount-1 do
       with Toc.Track[i] do begin
        writeln(Log, '       TrackNumber = ', TrackNumber);
        writeln(Log, '       ADR         = ',TsubchannelADRname[ADR]);
        writeln(Log, '       PreEmphasis = ', PreEmphasis);
        writeln(Log, '       CopyPermit  = ', CopyPermit);
        writeln(Log, '       DataTrack   = ', DataTrack);
        writeln(Log, '       QuadAudio   = ', QuadAudio);
        if MSFform.Checked then
          writeln(Log, '       Address = ',AddressM:2,' : ',
             AddressS:2,' : ',AddressF:2,'  // in MSF form')
        else
          writeln(Log, '       Address = ',Address,'  // in LBA form');
      end;
      flush(Log);
   end;
end; end;

procedure TForm1.PreFetch1Click(Sender: TObject);
begin with PreFetchDlg do begin
   if ShowModal = mrOk then
      Report('Trying: SCSIpreFetch('
             + BVal(IMM) + DVal(GLBA) + DVal(Sectors),
             CdRom1.SCSIpreFetch(IMM.Checked,
                     GLBA.Value, WORD(Sectors.Value)));
end; end;

procedure TForm1.LockUnlockCache1Click(Sender: TObject);
begin with LockCacheDlg do begin
   if ShowModal = mrOk then
      Report('Trying: SCSIlockUnlockCache('
             + BVal(LOK) + DVal(GLBA) + DVal(Sectors),
             CdRom1.SCSIlockUnlockCache(LOK.Checked,
                         GLBA.Value, WORD(Sectors.Value)));
end; end;

procedure TForm1.PlayAudio101Click(Sender: TObject);
begin with PlayAudio10Dlg do begin
   if ShowModal = mrOk then
      Report('Trying: SCSIplayAydio10(' + DVal(GLBA) + DVal(Sectors),
             CdRom1.SCSIplayAudio10(GLBA.Value, WORD(Sectors.Value)));
end; end;

procedure TForm1.PlayAudio121Click(Sender: TObject);
begin with PlayAudio12Dlg do begin
   if ShowModal = mrOk then
      Report('Trying: SCSIplayAydio12(' + DVal(GLBA) + DVal(Sectors),
             CdRom1.SCSIplayAudio12(GLBA.Value, Sectors.Value));
end; end;

procedure TForm1.PlayAudioTI1Click(Sender: TObject);
begin with PlayAudioTIDlg do begin
   if ShowModal = mrOk then
      Report('Trying: SCSIplayAydioTI('
             + DVal(StartTrack) + DVal(StartIndex)
             + DVal(StopTrack)  + DVal(StopIndex),
             CdRom1.SCSIplayAudioTI(
             BYTE(StartTrack.Value), BYTE(StartIndex.Value),
             BYTE(StopTrack.Value), BYTE(StopIndex.Value)));
end; end;


procedure TForm1.PlayAudioMSF1Click(Sender: TObject);
begin with PlayAudioMSFDlg do begin
   if ShowModal = mrOk then
      Report('Trying: SCSIplayAydioMSF('
             + DVal(StartM) + DVal(StartS) + DVal(StartF)
             + DVal(StopM)  + DVal(StopS)  + DVal(StopF),
             CdRom1.SCSIplayAudioMSF(
               BYTE(StartM.Value), BYTE(StartS.Value), BYTE(StartF.Value),
               BYTE(StopM.Value), BYTE(StopS.Value), BYTE(StopF.Value)));
end; end;


procedure TForm1.ReadLong1Click(Sender: TObject);
var Leng : DWORD;
begin with ReadLongDlg do begin
   if ShowModal = mrOk then begin
      Leng := BufLen.Value;
      Report('Trying: SCSIreadLong(' + BVal(CORR) + DVal(GLBA)
             + 'Buf : Pointer, ' + DVal(BufLen),
             CdRom1.SCSIreadLong(CORR.Checked, GLBA.Value, @IObuf, Leng));
      if (CdRom1.LastError = Err_None) AND (Leng > 0) then begin
         writeln(Log, '     Returned Data Buffer :');
         LogHex(@IObuf, Leng);
      end;
   end;
end; end;


procedure TForm1.Read101Click(Sender: TObject);
var Leng : DWORD;
begin with Read10Dlg do begin
   if ShowModal = mrOk then begin
      Leng := BufLen.Value;
      Report('Trying: SCSIread10(' + BVal(DPO) + BVal(FUA) + DVal(GLBA)
             + DVal(Sectors) + 'Buf : Pointer, ' + DVal(BufLen),
             CdRom1.SCSIread10(DPO.Checked, FUA.Checked, GLBA.Value,
             Sectors.Value, @IObuf, Leng));
      if (CdRom1.LastError = Err_None) AND (Leng > 0) then begin
         writeln(Log, '     Returned Data Buffer :');
         LogHex(@IObuf, Leng);
      end;
   end;
end; end;




procedure TForm1.ModeSenseRecoverEX1Click(Sender: TObject);
var
   PSAV : boolean;
   RLEV, RETR : byte;
begin with ModeSenseRecoverEXDlg do begin
   if ShowModal = mrOk then begin
      Report('Trying: SCSIModeSenseRecoverEX(PCTL='
         + TCdRomModePageTypeName[TCdRomModePageType(PCTL.ItemIndex)]
         + '; var PSAV : boolean; var RLEV, RETR : byte);',
         CdRom1.SCSIModeSenseRecoverEX(
            TCdRomModePageType(PCTL.ItemIndex), PSAV, RLEV, RETR));
      writeln(Log, '     Returned PSAV = ', PSAV);
      writeln(Log, '     Returned RLEV = ', RLEV, ' decimal');
      writeln(Log, '     Returned RETR = ', RETR, ' decimal');
      flush(Log);
   end;
end; end;


procedure TForm1.ModeSenseMediumEX1Click(Sender: TObject);
var
   PSAV : boolean;
   Med1,Med2,Med3,Med4 : TCdRomMediumType;
begin with ModeSenseMediumEXDlg do begin
   if ShowModal = mrOk then begin
      Report('Trying: SCSIModeSenseMediumEX(PCTL='
         + TCdRomModePageTypeName[TCdRomModePageType(PCTL.ItemIndex)]
         + '; var PSAV : boolean; var Med1,Med2,Med3,Med4 : TCdRomMediumType);',
         CdRom1.SCSIModeSenseMediumEX(
            TCdRomModePageType(PCTL.ItemIndex), PSAV, Med1,Med2,Med3,Med4));
      writeln(Log, '     Returned PSAV = ', PSAV);
      writeln(Log, '     Returned Med1 = ', TCdRomMediumName[Med1]);
      writeln(Log, '     Returned Med2 = ', TCdRomMediumName[Med2]);
      writeln(Log, '     Returned Med3 = ', TCdRomMediumName[Med3]);
      writeln(Log, '     Returned Med4 = ', TCdRomMediumName[Med4]);
      flush(Log);
   end;
end; end;


procedure TForm1.ModeSenseDeviceEX1Click(Sender: TObject);
var
   PSAV : boolean;
   ITimer : byte;
   SperMunits, FperSunits : word;
begin with ModeSenseDeviceEXDlg do begin
   if ShowModal = mrOk then begin
      Report('Trying: SCSIModeSenseDeviceEX(PCTL='
         + TCdRomModePageTypeName[TCdRomModePageType(PCTL.ItemIndex)]
         + '; var ITimer : byte; var SperMunits, FperSunits : word);',
         CdRom1.SCSIModeSenseDeviceEX(
            TCdRomModePageType(PCTL.ItemIndex),
            PSAV, ITimer, SperMunits, FperSunits));
      writeln(Log, '     Returned PSAV = ', PSAV);
      writeln(Log, '     Returned ITimer = ', ITimer, ' decimal');
      writeln(Log, '     Returned SperMunits = ', SperMunits, ' decimal');
      writeln(Log, '     Returned FperSunits = ', FperSunits, ' decimal');
      flush(Log);
   end;
end; end;


procedure TForm1.ModeSenseAudioEX1Click(Sender: TObject);
var APage : TCdRomModePageAudio;
begin with ModeSenseAudioEXDlg do begin
   if ShowModal = mrOk then begin
      Report('Trying: SCSImodeSenseAudioEX(PCTL='
         + TCdRomModePageTypeName[TCdRomModePageType(PCTL.ItemIndex)]
         + '; var sh: TCdRomModePageAudio);',
          CdRom1.SCSImodeSenseAudioEX(
              TCdRomModePageType(PCTL.ItemIndex), APage));
      with APage do begin
         writeln(Log, '     Returned record TCdRomModePageAudio :');
         writeln(Log, '       PSAV = ', PSAV);
         writeln(Log, '       IMM  = ', IMM);
         writeln(Log, '       SOTC = ', SOTC);
         writeln(Log, '       APRV = ', APRV);
         writeln(Log, '       LBAformat = ', LBAformat);
         writeln(Log, '       LBSaudio  = ', LBSaudio);
         writeln(Log, Format('       Volume  = [%2x, %2x, %2x, %2x] hex',
             [Volume[0],  Volume[1],  Volume[2],  Volume[3]]));
         writeln(Log, Format('       Channel = [%2x, %2x, %2x, %2x] hex',
             [Channel[0], Channel[1], Channel[2], Channel[3]]));
         flush(Log);
   end; end;
end; end;


procedure TForm1.TASPI1Click(Sender: TObject);
begin
   writeln(Log, 'TASPIdevice fields :');
   with CdRom1 do begin
      writeln(Log, '   HAcount = ', HAcount);
      writeln(Log, '   Sense[0..', sizeof(Sense)-1, '] in table form:');
      LogHex(@Sense, sizeof(Sense));
      writeln(Log, '   LastError = ', SCSIerrorName[LastError]);
      writeln(Log, '   ShortTimeout  = ', ShortTimeout,  ' mSec');
      writeln(Log, '   MediumTimeout = ', MediumTimeout, ' mSec');
      writeln(Log, '   LongTimeout   = ', LongTimeout,   ' mSec');
      writeln(Log, '   AudioTimeout  = ', AudioTimeout,  ' mSec');
      writeln(Log, '   DeviceID   = ',
          DeviceID.Adapter, ',', DeviceID.Target, ',', DeviceID.Lun);
      writeln(Log, '   DeviceType = ', TScsiDeviceTypeName[DeviceType]);
   end;
   LogDeviceInfo;
   flush(Log);
end;

procedure TForm1.EnumDevices1Click(Sender: TObject);
var
   i  : integer;
   DT : TScsiDeviceType;
begin with EnumDevicesDlg do begin
   if ShowModal = mrOk then begin
      DT := TScsiDeviceType(DType.ItemIndex);
      if DT = TSDInvalid then DT := TSDAny;
      Report('Trying: EnumDevices(DType=' + TScsiDeviceTypeName[DT]
         + '; CBack: TCallBackProc);', TRUE);
      i := CdRom1.EnumDevices(DT, LogNewDevice);
      write(Log, '**** ');
      if i < 2 then begin
         if i = 0 then write(Log, 'No') else write(Log, 'Only');
         writeln(Log, ' one device found.');
      end else writeln(Log, '**** Total ', i, ' devices found.');
      flush(Log);
   end;
end; end;

procedure TForm1.RequestSense1Click(Sender: TObject);
var Leng : integer;
begin
   Leng := SizeOf(TscsiSenseInfo);
   Report(Format('Trying: SCSIrequestSense(Buf : Pointer, BufLen=%d);',
          [Leng]),  CdRom1.SCSIrequestSense(@IObuf, Leng));
   if (CdRom1.LastError = Err_None) AND (Leng > 0) then begin
      writeln(Log, '     Returned Data Buffer :');
      LogHex(@IObuf, Leng);
end; end;




end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -