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

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

?? usb.pas

?? USB 訪問的源代碼,學習操作控制USB設備
?? 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一区二区三区免费野_久草精品视频
91美女蜜桃在线| ...xxx性欧美| 日韩毛片一二三区| 精品亚洲porn| 欧美日韩成人一区二区| 国产欧美日韩综合精品一区二区 | 青青草国产精品亚洲专区无| 成人av高清在线| 精品国产乱码久久久久久免费 | 国产欧美精品国产国产专区| 爽好多水快深点欧美视频| 波多野结衣在线一区| www成人在线观看| 日韩电影一区二区三区| 欧美色综合久久| 一区二区三区国产| 色94色欧美sute亚洲13| 亚洲丝袜精品丝袜在线| 国产ts人妖一区二区| 日韩三级中文字幕| 亚洲18女电影在线观看| 欧美中文字幕一区| 亚洲欧美福利一区二区| 91在线国内视频| 国产精品美日韩| 波多野结衣中文字幕一区| 中文字幕欧美国产| 99久久精品免费看国产免费软件| 久久精品一区二区三区不卡牛牛 | 日韩电影一区二区三区| 欧美日韩免费高清一区色橹橹| 亚洲伦理在线免费看| 91麻豆swag| 一区二区高清在线| 欧美人狂配大交3d怪物一区| 日产欧产美韩系列久久99| 91精品国产手机| 国产在线视频一区二区三区| 亚洲精品一区二区三区精华液| 国产精品一区二区男女羞羞无遮挡 | 国产99久久久国产精品免费看| 国产亚洲一二三区| 91美女视频网站| 亚洲高清一区二区三区| 日韩一区二区在线看片| 国产一区二区三区免费看 | 国产91丝袜在线播放0| 日本一区二区三区视频视频| 成人晚上爱看视频| 又紧又大又爽精品一区二区| 欧美日韩久久久一区| 久久成人免费网| 国产精品电影院| 欧美日韩www| 国产精品1区2区3区在线观看| 亚洲欧美日韩小说| 欧美一区二区三区影视| 国产精品一区久久久久| 一区二区免费在线播放| 欧美一区二区日韩| 成人sese在线| 日本午夜一本久久久综合| 欧美国产日韩精品免费观看| 在线观看日韩毛片| 国产一区在线视频| 一区二区三区精品在线观看| 日韩精品最新网址| 91亚洲精品乱码久久久久久蜜桃| 午夜亚洲国产au精品一区二区| 欧美不卡123| 一本久道久久综合中文字幕| 美女脱光内衣内裤视频久久网站| 国产精品精品国产色婷婷| 欧美一区二区福利在线| 91网站在线播放| 紧缚奴在线一区二区三区| 一区二区三区四区蜜桃| 久久久久国产精品麻豆ai换脸| 欧美色精品在线视频| 高清成人在线观看| 男人操女人的视频在线观看欧美| 中文字幕一区二区三区四区| 欧美成人在线直播| 欧美视频中文字幕| 99riav久久精品riav| 国产精品亚洲第一| 免费的成人av| 日韩精品色哟哟| 亚洲色图在线看| 久久久久久99精品| 日韩精品一区二区三区在线播放| 欧美日韩一级视频| 99久久er热在这里只有精品15 | av午夜一区麻豆| 国产综合色精品一区二区三区| 亚洲电影一区二区三区| 国产精品福利一区二区三区| 久久精品视频在线免费观看| 884aa四虎影成人精品一区| 在线观看成人免费视频| 91麻豆国产精品久久| 成人动漫在线一区| 国产盗摄视频一区二区三区| 国内精品免费**视频| 美女精品一区二区| 日本一区中文字幕| 日韩极品在线观看| 日本午夜一本久久久综合| 午夜av一区二区三区| 婷婷中文字幕综合| 亚洲国产精品人人做人人爽| 一级女性全黄久久生活片免费| 亚洲欧美日韩国产成人精品影院| 国产精品理论片| 综合色中文字幕| 亚洲免费色视频| 一区二区不卡在线播放| 亚洲精品高清在线| 性做久久久久久久免费看| 五月婷婷激情综合网| 日本免费在线视频不卡一不卡二| 日本中文字幕一区二区视频| 麻豆成人免费电影| 国产一区二区三区在线观看免费 | 夜夜嗨av一区二区三区网页| 一区二区三区在线视频免费| 一个色综合网站| 日韩av在线发布| 韩国精品一区二区| 成人午夜激情影院| 91国产免费观看| 日韩免费高清电影| 欧美激情一区二区三区| 国产精品福利电影一区二区三区四区| 亚洲精品免费播放| 天堂一区二区在线| 国产成人亚洲综合色影视| a4yy欧美一区二区三区| 在线视频一区二区免费| 日韩无一区二区| 国产丝袜美腿一区二区三区| 亚洲欧美日韩精品久久久久| 亚洲成人一区二区在线观看| 久久国产精品99久久久久久老狼 | 成人黄色免费短视频| 色欧美日韩亚洲| 精品国产一区二区三区av性色| 国产日韩欧美精品综合| 亚洲女同女同女同女同女同69| 免费在线观看不卡| 成人综合日日夜夜| 在线播放欧美女士性生活| 日本一区二区三区电影| 亚洲成人免费在线| 成人伦理片在线| 日韩一区二区在线观看视频| 国产精品视频一二三区 | 波多野结衣中文字幕一区| 欧美日本一区二区在线观看| 国产亚洲1区2区3区| 亚洲国产综合色| a美女胸又www黄视频久久| 3751色影院一区二区三区| 中文字幕视频一区二区三区久| 久久精品久久99精品久久| 色八戒一区二区三区| 国产女人18毛片水真多成人如厕| 偷拍一区二区三区四区| 一本大道久久a久久综合| 欧美精品一区二区三区蜜桃视频| 亚洲最大成人网4388xx| 大胆欧美人体老妇| 久久免费看少妇高潮| 日韩精品一级中文字幕精品视频免费观看 | 亚洲天堂成人在线观看| 色噜噜狠狠一区二区三区果冻| 久久这里只有精品首页| 天天影视网天天综合色在线播放| 97se亚洲国产综合自在线| 久久久久久久网| 久久成人麻豆午夜电影| 在线成人av网站| 亚洲超碰精品一区二区| 在线免费不卡视频| 国产精品久久久久久久久搜平片| 国产一区二区三区在线观看精品| 制服视频三区第一页精品| 一区二区三区毛片| 在线观看日韩电影| 亚洲激情图片qvod| 色香蕉成人二区免费| 国产精品久久久久久久久久免费看| 国产精品91一区二区| 国产欧美日韩久久| 成人一区在线看| 国产精品大尺度| 91玉足脚交白嫩脚丫在线播放| 中文字幕制服丝袜一区二区三区 | 国产麻豆精品theporn| 久久久久久久综合日本|