Announcement

Collapse
No announcement yet.

outp/inp

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • outp/inp

    Wie realisiere ich in Delphi oder BC++ in NT und 95/98 den einfachsten Weg inp und outp Befehle ?
    Ich möchte mit einfachen Mitteln auf Ports zugreifen, d.h. lesen und schreiben. Z.B. Byte byte = inp(0x02f8);

    Danke khn

  • #2
    Schau mal unter <br>
    http://www.bluewatersystems.com/<br>

    Suche dort nach WinRT

    Dies ist ein OCX, welches das gewünscht unter Win95/98 und NT ermöglicht

    Comment


    • #3
      Programm zum Lesen u. Schreiben der Ports für jede Delphi-Version in Assembler.
      (PC Magazin 11.98 S. 205)

      function InPort(PortAddr: Word): Byte;

      {$IFDEF WIN32}

      assembler; stdcall;

      asm

      mov dx,PortAddr

      in al,dx

      end;

      {$ELSE}

      begin

      Result := Port[PortAddr];

      end;

      {$ENDIF}

      procedure OutPort(PortAddr: Word; DataByte: Byte);

      {$IFDEF WIN32}

      assembler; stdcall;

      asm

      mov al,DataByte

      mov dx,PortAddr

      out dx,al

      end;

      {$ELSE}

      begin

      Port[PortAddr] := DataByte;

      end;

      {$ENDIF

      Comment


      • #4
        Hallo,

        aber vorsicht mit IO-Befehlen unter WIN32. Diese werden nämlich grundsätzlich alle vom Betriebssystem getrapped. Das bedeutet, daß Windows entscheidet, ob der Befehl sofort, später oder garnicht ausgeführt wird. Auch der Debugger lügt hier. Obwohl der Befehl beim durchsteppen scheinbar ausgeführt wird, heist das noch lange nicht, daß der Port physikalisch wirklich angesprochen wird. Hier hilft letzlich nur ein Device-Treiber auf Ring 0 der CPU.

        Zu weitere Info:
        Windows teilt der CPU (ab 386) beim Start mit, welche IO-Adressen zunächst einen Interrupt erzeugen und direkt beim Dekodieren in einen Windows-Treiber springen sollen. Hier passiert dann genau das, was man manchmal eben nicht nachvollziehen kann. Unter Windows ist eben alles, sogar die Hardware, zunächst virtuell.

        Direkte IO's-für den Druckerport funktionieren zwar, werden aber in der Regel verspätet ausgeführt.

        mfg Peter Kaisle

        Comment

        Working...
        X