亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb.pas

?? USB for DOS in pascal
?? PAS
?? 第 1 頁 / 共 2 頁
字號:
{$A+,B-,D+,E+,F-,G+,I+,L+,N-,O-,P-,Q-,R-,S+,T-,V+,X+,Y+}

{ ************************************************************************ }
{ USB.PAS:   SB BASIC Routines by Dieter R. Pawelczak <dieterp@bigfoot.de> }
{ ======================================================================== }
{                                                                          }
{              Unit to initialize and address the USB Host Controller      }
{                                                                          }
{ (c) 1998 by Dieter Pawelczak, <dieterp@bigfoot.de>                       }
{ This is public domain Software - selling this software is prohibeted!    }
{                                                                          }
{ function DetectVirtualRealMode(..) detects virtual real mode
{ function USBdetect(..);     detects an PCI USB Controller - done by INIT
{ function USBEnable          enables USB Controller PCI-BUS Master
{ function USBGetDeviceIOSpace(..)        reads I/O port address
{ function USBSetDeviceIOSpace(..)        sets I/O port address
{ function USBReadCommandReg  read access IOCommandRegister
{ procedure USBWriteCommandReg write access IOCommandRegister
{
{ Initialization should first check the USB device (test USBdetected),
{ read the I/O address space and if zero set an unused port address space
{ (32 byte), now PIC-BUS Master Control can be enabled by USBenable
{                                                                          }
{ ************************************************************************ }

{$define DEBUG} { Enables DEBUG Output }

unit usb;

interface

{$IFDEF DEBUG}
uses PCI,dutils;
{$ELSE}
uses PCI;
{$ENDIF}





const { USB-Command Regiser }

      MAXP=$80;
      CF=$40;
      SWDBG=$20;
      FGR=$10;
      EGSM=$08;
      GRESET=$04;
      HCRESET=$02;
      RS=$01;



type FrameListPointer = longint;            { 32 bit address + Q & T flag }
type FrameListPointerArray = Array[0..1023] of FrameListPointer;
type FrameList = ^FrameListPointerArray;


type LinkPointer = longint;            { 32 bit address + Vf & Q & T flag }
type BufferPointer = longint;          { 32 bit address of the data buffer }

type TransferDescriptor = record
        next:LinkPointer;                   { points to next T/Q descriptor or indicates termination by T-flag }
        ActLen: word;                       { presents the actual length (11 bit ) = and 2047 }
        Status: byte;                       { presents the Status }
        Flags:Byte;                         { Flags SPD(5), C_ERR(4,3), LS(2), ISO(1), IOC (0)}
        Token: longint;                   { MaxLen/R/R/EndPt/DeviceAddr/PID to be sent }
        BufferPtr: BufferPointer;              { Buffer Pointer for Data }
        res:array[0..3] of longint;
     end;
type transmitstatusptr=^byte;
type QueueHeadLinkPointer = longint;        { 32 bit address + Q & T flag }
type QueueHeadElementPointer = longint;     { 32 bit address + Q & T flag, bit 2 is undefined (write as 0) }

type QueueHead = record
        next:QueueHeadLinkPointer;          { points to next T/Q descriptor or indicates termination by T-flag }
        Element:QueueHeadElementPointer;    { points to next Queue Operation or indicates termination by T-flag }
     end;

type PortState = (port_disabled, port_newAttached, port_enabled, port_configured);

type USBRequest = record
        bmRequestType:Byte;
        bRequest:byte;
        wValue:word;
        wIndex:word;
        wLength:word;
    end;

const GetDeviceDescriptor : USBRequest =
       (bmRequestType:$80;bRequest:$06;wValue:$0001;wIndex:$0000;wLength:$0012);
const SetAddress : USBRequest =
       (bmRequestType:$00;bRequest:$05;wValue:$0001;wIndex:$0000;wLength:$0000);


var USBDeviceID,USBVendorID:word;           { PCI-Identification USB Controller }
    USBBusNumber,USBFunctionNumber:Byte;
    USBDescription:string;                  { Text Description }
    USBIOSpace:word;                        { I/O address space set/read }
    USBdetected:boolean;                    { Flag set by INIT }


var ISADeviceID,ISAVendorID:word;           { PCI-Identification PCI-ISA Controller }
    ISABusNumber,ISAFunctionNumber:Byte;    { needed by USBSetInt }
    ISADescription:string;                  { Text Description }
    ISAdetected:boolean;                    { Flag set by INIT }

var FrameListPtr:FrameList;                 { pointer to the frame list }
    FrameListBase:longint;                  { frame list 32 bit base address}
    FrameListHandle:pointer;                { TP memory handle }


{ LOW LEVEL: USB-Host Controller and PCI functions }
function USBdetect(Var DeviceID,VendorID:word;VAR BusNumber,FunctionNumber:Byte;var Description:string):boolean;
function USBEnable:boolean;
function USBDisable:boolean;
function USBGetDeviceIOSpace(var IOSpace:word):boolean;
function USBSetDeviceIOSpace(IOSpace:word):boolean;
function USBReadCommandReg:word;
function USBReadStatusReg:word;
function USBReadPort0Reg:word;
function USBReadPort1Reg:word;
function USBReadInterruptReg:word;
function USBReadFrameBaseReg:longint;
function USBReadFrameNumberReg:word;
procedure USBWriteCommandReg(value:word);
procedure USBWriteStatusReg(value:word);
procedure USBWriteInterruptReg(value:word);
procedure USBWriteFrameNumberReg(value:word);
procedure USBWritePort0Reg(value:word);
procedure USBWritePort1Reg(value:word);
function USBSetInterruptNumber(IntNo:word; active:boolean):boolean;
function USBGetInterruptNumber(Var IntNo:word;Var active:boolean):boolean;
function USBAllocateFrameList(Var FList:FrameList;VAR FLBase:FrameListPointer):boolean;
procedure USBCommandRun;
procedure USBCommandStop;
procedure USBDone;
procedure usbclearframelist;

{ General USB Functions }

function AllocateTransferDescriptor:pointer; { Returns pointer to TD or nil }
procedure FreeTransferDescriptor(p:pointer);
function CreateTransferDescriptor(Terminate,Queue,Depth:boolean;Link:linkpointer;
                                  Actln:word;State:word;IOC,IOS,LS:Boolean;C_error:byte;SPD:boolean;
                                  PID,DeviceAddress,EndPt:Byte;DataToggle:boolean;MaxLen:word;
                                  BPtr:BufferPointer):pointer; { Allocates and configures TD - Returns pointer to TD or nil }
procedure AlterTransferDescriptor(p:pointer;Actln:word;State:word;IOC,IOS,LS:Boolean;C_error:byte;SPD:boolean);

procedure InsertQueueDescriptorInFrameList(Number:word;p:pointer);
procedure InsertTransferDescriptorInFrameList(Number:word;p:pointer);
function GetLinkPointerFromTransferDescriptor(p:pointer):LinkPointer;
function GetLinkPointerFromFrameList(number:word):LinkPointer;
function GetTransferDescriptorFromFrameList(number:word):pointer;
function GetTransferDescriptorFromLinkPointer(l:linkpointer):pointer;
{ Helpers }

function DetectVirtualRealMode:boolean;
function GetPtrBase(p:pointer):longint;
function GetBasePtr(b:longint):pointer;


{$IFDEF DEBUG}
procedure USBprintTD(P:pointer);
procedure USBprintFrameList;
{$ENDIF}

implementation

function USBdetect(Var DeviceID,VendorID:word;VAR BusNumber,FunctionNumber:Byte;var Description:string):boolean;
var i:byte;
    error,found:boolean;
begin
  BusNumber:=0;FunctionNumber:=0;
  USBdetect:=false;
  i:=0;
  error:=false;
  found:=false;
  repeat { check different possible USB-PCI devices ... }
  case i of
    0: begin deviceId:=$7020;vendorId:=$8086; description:='Intel 82371SB USB controller'; end;
    1: begin deviceId:=$7112;vendorId:=$8086; description:='Intel PIIX4 USB controller'; end;
    2: begin deviceId:=$0571;vendorId:=$1106; description:='VIA AMD-645 USB controller'; end;
    3: begin deviceId:=$A0F8;vendorID:=$1045; description:='Opti 82C750 (Vendetta) USB controller'; end;
    4: begin deviceId:=$C861;vendorID:=$1045; description:='Opti 82C861/871 (Firelink/FireBlast) USB controller'; end;
  end;
  inc(i);
  found:=detectPCIdevice(deviceId,vendorId,BusNumber,FunctionNumber);
  error:=i>4;
  until error or found;
  USBdetect:=found;
end;

function ISAdetect(Var DeviceID,VendorID:word;VAR BusNumber,FunctionNumber:Byte;var Description:string):boolean;
var i:byte;
    error,found:boolean;
begin
  BusNumber:=0;FunctionNumber:=0;
  ISAdetect:=false;
  i:=0;
  error:=false;
  found:=false;
  repeat { check different possible ISA-PCI devices ... }
  case i of
    0: begin deviceId:=$7000;vendorId:=$8086; description:='Intel 82371SB ISA-PCI controller'; end;
    1: begin deviceId:=$7110;vendorId:=$8086; description:='Intel PIIX4 ISA-PCI controller'; end;
{    2: begin deviceId:=$0571;vendorId:=$1106; description:='VIA AMD-645 USB controller'; end;
    3: begin deviceId:=$A0F8;vendorID:=$1045; description:='Opti 82C750 (Vendetta) USB controller'; end;
    4: begin deviceId:=$C861;vendorID:=$1045; description:='Opti 82C861/871 (Firelink/FireBlast) USB controller'; end; }
  end;
  inc(i);
  found:=detectPCIdevice(deviceId,vendorId,BusNumber,FunctionNumber);
  error:=i>2;
  until error or found;
  ISAdetect:=found;
end;

function USBGetDeviceIOSpace(var IOSpace:word):boolean;
var okay:boolean;
    result:word;
    setiospace:word;
begin
  okay:=false;
  if readPCIRegisterWord($20,USBBusNumber,USBFunctionNumber,result) then
    begin
      okay:=true;
      IOSpace:=result and $FFFE;
      USBIOSpace:=IOSpace;
    end;
  USBGetDeviceIOSpace:=okay;
end;

function USBSetDeviceIOSpace(IOSpace:word):boolean;
var okay:boolean;
    result:word;
    setiospace:word;
begin
  okay:=false;
  IOSpace:=IOSpace ;
  if writePCIRegisterWord($20,USBBusNumber,USBFunctionNumber,IOSpace) then
    begin
      okay:=true;
      USBIOSpace:=IOSpace;
    end;
  USBSetDeviceIOSpace:=okay;
end;

function USBReadCommandReg:word;
begin
  USBReadCommandReg:=portw[USBIOSpace];
end;

function USBReadStatusReg:word;
begin
  USBReadStatusReg:=portw[USBIOSpace+2];
end;

function USBReadInterruptReg:word;
begin
  USBReadInterruptReg:=portw[USBIOSpace+4];
end;

function USBReadPort0Reg:word;
begin
  USBReadPort0Reg:=portw[USBIOSpace+16];
end;

procedure USBWritePort0Reg(value:word);
begin
  portw[USBIOSpace+16]:=value;
end;

function USBReadPort1Reg:word;
begin
  USBReadPort1Reg:=portw[USBIOSpace+18];
end;

procedure USBWritePort1Reg(value:word);
begin
  portw[USBIOSpace+18]:=value;
end;

procedure USBWriteInterruptReg(value:word);
begin
  portw[USBIOSpace+4]:=value;
end;

procedure USBWriteStatusReg(value:word);
begin
  portw[USBIOSpace+2]:=value;
end;

procedure USBWriteCommandReg(value:word);
begin
  portw[USBIOSpace]:=value;
end;

procedure USBWriteFrameNumberReg(value:word);
begin
  portw[USBIOSpace+6]:=value;
end;

function USBReadFrameNumberReg:word;
begin
  USBReadFrameNumberReg:=portw[USBIOSpace+6];
end;

function USBReadFrameBaseReg:longint;
begin
  asm
        mov dx,USBIOSpace
        add dx,08h
        db 66h; in ax,dx                       { in dx,eax  }
        db 66h; mov word ptr FrameListBase,ax  { mov ..,eax }
  end;
  USBReadFrameBaseReg:=FrameListBase;
end;

function USBEnable:boolean;
var okay:boolean;
    command:word;
begin
  okay:=false;
  if usbdetected and (USBIOspace<>0) then
    if readPCIRegisterWord($4,USBBusNumber,USBFunctionNumber,command) then
      begin
        okay:=command and 5=5;
        command:=command or 5;
        if writePCIRegisterWord($4,USBBusNumber,USBFunctionNumber,command) then
          okay:=true;
      end;
  USBenable:=okay;
end;

function USBGetInterruptNumber(Var IntNo:word;Var active:boolean):boolean;
var okay:boolean;
    command:longint;
    command2:longint;
begin
  okay:=false;
  active:=false;
  if isadetected then
      if readPCIRegisterDWord($60,ISABusNumber,ISAFunctionNumber,command) then
        begin
          intno:=command shr 24;
          active:=intno and 128=0;
          intno:=intno and 15;
          okay:=true;
        end;
   USBGetInterruptNumber:=okay;
end;

function USBSetInterruptNumber(IntNo:word;active:boolean):boolean;
var okay:boolean;
    command:byte;
    command2:word;
    dummy:word;
begin
  okay:=false;
  asm
    cli
  end;
  if isadetected then
      if readPCIRegisterByte($63,ISABusNumber,ISAFunctionNumber,command) then

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩久久久久久| 一区二区中文字幕在线| 亚洲女子a中天字幕| 国产盗摄视频一区二区三区| 91在线视频观看| 国产精品你懂的| 成人小视频免费在线观看| 久久久久久久一区| 久久国产精品色婷婷| 欧美系列日韩一区| 亚洲自拍与偷拍| 精品视频在线免费| 久久久亚洲精品石原莉奈| 韩国一区二区在线观看| 欧美成人官网二区| 激情六月婷婷久久| 国产人伦精品一区二区| 狠狠色丁香久久婷婷综| 欧美精品一区二区久久久| 韩国女主播一区| 欧美精品一区视频| 成人午夜在线播放| 一区二区三区资源| 欧美另类高清zo欧美| 日本欧美一区二区三区| 欧美日韩卡一卡二| 美腿丝袜在线亚洲一区| 久久综合九色综合欧美亚洲| 国产成人亚洲综合a∨婷婷 | 在线精品亚洲一区二区不卡| 国产精品福利av| 欧美日韩免费电影| 国产69精品一区二区亚洲孕妇| 亚洲欧美福利一区二区| 久久综合成人精品亚洲另类欧美 | 日本特黄久久久高潮| 国产欧美日韩三区| 欧美猛男gaygay网站| 国产精品一色哟哟哟| 污片在线观看一区二区| 国产精品美女久久久久久久久久久| 欧美色图激情小说| 国产99久久久精品| 精品中文字幕一区二区| 夜夜夜精品看看| 中文字幕在线一区| 亚洲精品一线二线三线无人区| 欧美日韩一区精品| eeuss鲁片一区二区三区| 久久丁香综合五月国产三级网站| 亚洲欧美欧美一区二区三区| 中文字幕成人av| 精品欧美乱码久久久久久| 91色porny蝌蚪| 国产一区二区三区久久久| 亚洲风情在线资源站| 亚洲女人的天堂| 日本一区二区三区久久久久久久久不 | 久久女同性恋中文字幕| 欧美一级一区二区| 欧美色区777第一页| 日本乱人伦一区| 成人高清免费在线播放| 裸体健美xxxx欧美裸体表演| 午夜久久久久久久久久一区二区| 亚洲码国产岛国毛片在线| 国产精品视频你懂的| 国产婷婷色一区二区三区四区 | 91免费国产在线| 成人开心网精品视频| 国产精一区二区三区| 蜜桃视频免费观看一区| 轻轻草成人在线| 青青草成人在线观看| 青青草成人在线观看| 日韩—二三区免费观看av| 亚洲h动漫在线| 亚洲超碰97人人做人人爱| 亚洲成国产人片在线观看| 亚洲一二三区视频在线观看| 一区二区高清免费观看影视大全| 亚洲丝袜自拍清纯另类| 亚洲欧美另类久久久精品2019| 亚洲人成精品久久久久久| 亚洲欧美日韩在线| 香蕉成人伊视频在线观看| 日韩专区一卡二卡| 蜜桃视频第一区免费观看| 激情成人午夜视频| 国产成都精品91一区二区三| 成人动漫中文字幕| 日本高清不卡一区| 51精品视频一区二区三区| 日韩一区二区精品| 久久久亚洲精华液精华液精华液| 国产欧美精品一区二区色综合朱莉| 国产日韩综合av| 一区二区久久久| 日日夜夜精品视频免费| 国产一区二区调教| 不卡的电影网站| 欧美视频完全免费看| 日韩精品中文字幕一区二区三区| 久久精品一区蜜桃臀影院| 亚洲精品中文字幕乱码三区| 亚洲高清免费在线| 精品在线观看视频| 成人黄色电影在线 | av日韩在线网站| 欧美美女一区二区| 国产网站一区二区| 一区二区三区免费观看| 日韩影视精彩在线| 国产成人免费视频精品含羞草妖精 | 日韩av在线发布| 国产福利一区在线| 一本大道久久a久久精二百| 欧美福利一区二区| 国产精品欧美久久久久无广告| 亚洲激情自拍偷拍| 黄色日韩网站视频| 欧美在线小视频| 久久久久久免费| 亚洲成人免费视频| 成人禁用看黄a在线| 欧美高清视频不卡网| 国产精品第一页第二页第三页| 日本强好片久久久久久aaa| 成人高清在线视频| 日韩三级视频中文字幕| 国产精品大尺度| 日本一区中文字幕| 成人午夜视频福利| 欧美一级高清大全免费观看| 亚洲另类色综合网站| 久久精品99国产精品日本| 色伊人久久综合中文字幕| 久久久久久综合| 蜜臀av一区二区| 91黄视频在线观看| 欧美国产精品v| 麻豆精品视频在线观看| 欧美三级在线视频| 国产精品成人在线观看| 国产成人在线网站| 欧美xxxxxxxxx| 亚洲444eee在线观看| 91麻豆精品在线观看| 日本一区二区三区四区在线视频| 免费高清成人在线| 欧美视频完全免费看| 亚洲男女毛片无遮挡| 东方欧美亚洲色图在线| 精品国产免费一区二区三区四区 | 国产91精品露脸国语对白| 欧美一区二区人人喊爽| 亚洲另类在线视频| 91在线丨porny丨国产| 国产精品女人毛片| 成人激情免费网站| 欧美激情在线一区二区三区| 经典三级视频一区| 日韩午夜av电影| 免费精品99久久国产综合精品| 欧美色大人视频| 亚洲国产欧美日韩另类综合| 欧美色倩网站大全免费| 亚洲大片免费看| 欧美日韩和欧美的一区二区| 亚洲一区在线观看免费 | 精品一区二区三区在线观看| 日韩一区二区三区观看| 日韩av二区在线播放| 91麻豆精品国产| 秋霞国产午夜精品免费视频| 91精品国产一区二区| 日本网站在线观看一区二区三区 | 久久综合狠狠综合久久综合88| 久久er99热精品一区二区| 日韩一卡二卡三卡| 国内外成人在线视频| 久久精品亚洲精品国产欧美| 国产成人精品午夜视频免费| 国产精品三级av| 色综合视频在线观看| 亚洲国产另类av| 日韩免费观看高清完整版| 精品一区二区三区不卡| 欧美极品少妇xxxxⅹ高跟鞋 | 91影院在线观看| 亚洲h精品动漫在线观看| 日韩欧美激情四射| 国产999精品久久久久久绿帽| 国产精品不卡在线观看| 欧美日韩精品免费观看视频| 麻豆成人91精品二区三区| 日本一区二区免费在线 | 亚洲第一主播视频| 精品粉嫩aⅴ一区二区三区四区| 国产成人aaa|