Entwickler-Ecke

Internet / Netzwerk - Pascalbefehle unter Delphi..?


Snakebyte - Di 09.11.04 14:15
Titel: Pascalbefehle unter Delphi..?
Hallo,

ich habe mir aus einem älteren Pascalpogramm ein paar Quelltext-passagen rauskopiert und versucht diese in ein Delphi-pogramm einzufügen. Es geht um die ansteuerung des Gameports am rechner. Der fehler liegt im Befehl "PORT".(Rot markiert!!)

Fehlermeldung: "Undefinierter Bezeichner"

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
CONST gameadr=$201;     {Gameport-Adresse}
TYPE  Bit=0..1;
VAR   allesch: Byte;
      Schalter0, Schalter1, Schalter2, Schalter3,
      ReglerS0, ReglerS1, ReglerS2, ReglerS3: Boolean;
      E1, E2, E3, E4, E5, E6, E7, E8: Bit;


  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);

begin
                                      
  allesch := PORT [gameadr];      // <---
  Schalter0 := (allesch AND 16)=0;         
  Schalter1 := (allesch AND (16 shl 1))=0
  Schalter2 := (allesch AND (16 shl 2))=0
  Schalter3 := (allesch AND (16 shl 3))=0;

Wie heißt dieser Befehl in Delphi??--oder--Wie mache ich das Delphi pascal-befehle nimmt? Habt ihr noch andere Ideen für ansteuerung des Gameports??(Falls der text Rotz ist!!!)

Vielen Dank

Max Schulz

Moderiert von user profile iconUGrohne: Delphi-Tags hinzugefügt.
Moderiert von user profile iconTino: Überflüssige Absätze entfernt.


.Chef - Di 09.11.04 14:26

Ab Win2K kannst du nicht mehr direkt auf die Ports zugreifen. Such mal im Forum zu Beiträgen über den Parallelport, da ist das Problem meistens erklärt.

Gruß,
Jörg


Snakebyte - Di 09.11.04 14:33

Ich programiere nur unter W98!!!
Klappt ja auch sonst alles.
Das pascallprog. läuft top.
Nur der besch... Port befehl haut nicht hin..


.Chef - Di 09.11.04 14:42

Probier mal den Assemblercode aus diesem Beitrag [http://www.delphi-forum.de/viewtopic.php?t=10115].


Snakebyte - Di 09.11.04 15:09

Danke für den Tipp.
Doch leider sehe ich bei diesem Quelltext nicht durch.
Was machen die ganzen funktionen im einzelnen?
Und die Port-Stellen sehen ja im grunde so aus wie meinen!
-------------------------------------------------------------------------------------

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
{$IFDEF Win32}  
FUNCTION PortIn(Addr: WORD): BYTE; AssemblerStdCall;  
  ASM  
    mov dx, Addr // Adresse ins DX-Register schreiben  
    in al, dx    // Port lesen. (AL entspricht Result)  
  END;  
{$ELSE}  
FUNCTION PortIn(Addr: WORD): BYTE;  
BEGIN  
  Portin := Port[Addr];  // <---
END;  
{$ENDIF}  

 
{$IFDEF Win32}  
PROCEDURE PortOut(Addr: Word; Data: Byte); AssemblerStdCall;  
  ASM  
    mov dx, Addr    // Adresse nach DX  
    mov al, Data    // Datenbyte nach AL  
    out dx, al      // Port schreiben  
  END;  
{$ELSE}  
PROCEDURE PortOut(Addr: WORD; Data: BYTE);  
BEGIN  
  Port[Addr] := Data;  
END;  
{$ENDIF}


Moderiert von user profile iconUGrohne: Delphi-Tags hinzugefügt.


.Chef - Di 09.11.04 15:24

Eigentlich brauchst du nur das:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
FUNCTION PortIn(Addr: WORD): BYTE; AssemblerStdCall;  
ASM  
  mov dx, Addr // Adresse ins DX-Register schreiben  
  in al, dx    // Port lesen. (AL entspricht Result)  
END;  

PROCEDURE PortOut(Addr: Word; Data: Byte); AssemblerStdCall;  
ASM  
  mov dx, Addr    // Adresse nach DX  
  mov al, Data    // Datenbyte nach AL  
  out dx, al      // Port schreiben  
END;

Was genau passiert, steht ja dahinter. Probier das mal aus, und sag mir mal, obs ging. ;-)