Autor Beitrag
Physikerpepe
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Mi 11.08.04 22:22 
Hallo,

kann mir jemand sagen, wie ich unter Delphi Zugriff auf die Registers bekomme?
Unter TurboPascal sah das ganze so aus:

ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function xxx(  command   : word;
               param_ptr : pointer ) : pointer; far;
  var  reg : registers;
  begin
    reg.ds:=seg(param_ptr^);
    reg.dx:=ofs(param_ptr^);
    reg.ax:=command;
    intr(test_interrupt, reg);
    if reg.ax=0 then
      xxx:=ptr(reg.ds, reg.dx)
    else
      begin
        ...
      end;
  end;


Leider gibt es unter Delphi keine Variablen vom Typ Registers.

Ich könnte zu Not die Register mit dem Assambler ansprechen:
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
asm
mov ds,param_ptr^
mov dx,param_ptr^
mov ax,command
end;


Allerdings weiß ich nicht, was die befehle "seg" und "ofs" bedeuten und wie sie in Delphi heißen!
Weiterhin weiß ich nicht wie man die Zeile "intr(test_interrupt, reg)" (ein Interrupt wird ausgeführt) nach Delphi übersetzt!
Kann mir jemand helfen?

pepe
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Do 12.08.04 00:01 
Moin!

1. Interrupts gibt es zwar noch, aber unter Win32 werden diese nicht mehr genutzt und deine Win32 Anwendung greift auf Funktionen aus DLLs zu, die dir Windows und andere Programme zur Verfügung stellen.
2. Im Win32 werden lineare Adressen verwendet ohne Segmente/Offsets zur Adressierung sondern mit einem Deskriptor und einem 32 Bit Offset. Daher gibt es kein Seg mehr und auch keine Ofs() Funktion mehr.
3. Was willst du überhaupt machen, als dass du noch alte Interrupt Funktionen nutzt?

MfG
Muetze1
teebee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 109


D6 Prof
BeitragVerfasst: Do 12.08.04 08:44 
Schau mal hier: search.microsoft.com...=4&s=1&swc=4, geht aber nur unter Win9x.

Gruß, teebee
Physikerpepe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Do 12.08.04 09:36 
@muetzel:
Verdammt ich habe geahnt das sowas in der Richtung kommt! :(
Ich habe eine sehr alte Hardware die ich ansprechen möchte! Diese Hardware stammt aus DOS-Zeite und hat KEINE DLL!
Das Gerät wird vor der Verwendung mit einer EXE-Datei (zu der ich keinen Quellcode habe) initialisiert und dann über Interrupts angesprochen! Damit diese Hardware angesprochen werden kann stellte der Hersteller ein alltes TurboPascall zur Verfügung (den kompletten Quelltext findest du in dem Tread "altes TP-Programm unter Delphi").
Ich habe das alte Programm nun schon fast komplett übersetzt, nur komme ich an der Stelle mit dem Interrupt nicht weiter!
Da die Hardware auf einem Rechner mit Windows98 läuft, also noch direkter Hardwarezugiff erlaubt ist, muss das doch irgendwie zu bewerkstelligen sein!??

@teebee:
Leider funktioniert der Link bei mir nicht! :(

Pepe
Muetze1
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 346



BeitragVerfasst: Do 12.08.04 10:47 
Moin!

Ähm, nein. Naja, oder: vielleicht. Also:

Grundlegend hast du die Möglichkeit unter Windows 9x/ME direkten Hardwarezugriff zu machen - genauso wie bei NT/2000/XP, nur das bei Win9x das OS dies nicht überwacht (besser: überwachen kann) und daher nicht meckert. Aber: du willst nicht auf die Hardware sondern auf Software, weil die Funktionen sich vom Treiber ja anscheinend auf einem Soft-Int installieren. Da ist aber wiederrum das Problem, das man das nur mit viel Aufwand und Umwegen von einem Windows 32 Bit Programm aus machen kann. Wenn du direkten Hardwarezugriff machen willst, dann musst du aber auch über die Hardware Bescheid wissen (Ports, Interrupts, Speicherbereiche, Befehle, Statusinformationen, etc) und genau diese Informationen hast du IMHO nicht.

Dann könntest du ja noch sagen, dass du den Treiber beim Starten unter 98 Laden kannst und dann unter Windows auf die installierten Routinen zugreifen kannst - auch nicht so ohne weiteres möglich, da Win32 in einem 32 Bit System arbeitet und der Treiber in einem 16 Bit System. Es werden aber nun keine 16 Bit Software ISR/INT Handler in das 32 Bit System gelegt und umgekehrt auch nicht. Der letzte Weg geht aber mit viel Aufwand noch, aber das lohnt sich wirklich nicht.

Für mich stellt sich die Frage ob du nicht wirklich eine DLL oder andere Möglichkeit findest diese Karte unter Windows zu betreiben. Vielleicht hat ja schon ein anderer mal eine DLL oder anderes zum ansprechen der Hardware programmiert.

MfG
Muetze1
teebee
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 109


D6 Prof
BeitragVerfasst: Do 12.08.04 11:16 
Physikerpepe hat folgendes geschrieben:
@teebee:
Leider funktioniert der Link bei mir nicht! :(
Bei mir tut er,
gib im MSDN mal 'Interrupt 21h' in die Suche ein,

Gruß, teebee
Physikerpepe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Do 12.08.04 11:45 
@muetzel:

Ohhh, du hast soeben alle meine Befürchtungen wahr werden lassen :-)
Nun, da kann ich leider nicht´s machen!

Habe das Problem "vorläufig" so gelöst:

Habe das alte TP-Programm (in TurboPascal) umgeschrieben, sodass es sich jetzt jede Sekunde den aktuellen Befehl aus einer Textdatei holt.
Mit meinem neuen Delphi-Programm schreibe ich nun per Push-Button-Ereigniss den aktuellen Befehl in diese Datei!

Das Ganze klappt reibungslos, aber ich weiß das es mich bis in alle Zeiten ärgern wird im Hintergrund dieses blöde DOS-Fenster zu sehen :shock:
Wollte doch alles schön in EINER GUI vereinbaren!

Aber man kann nix erzwingen :-)

PS: Kann ich unter TurboPascal das vorhandene Programm "einfach" zu einer Dll compilieren?

pepe
Physikerpepe Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 27



BeitragVerfasst: Do 12.08.04 11:49 
@teebee:

Der link funzt jetz, nur kann ich damit leider nix anfangen :?

Aber trotzdem Danke!

pepe
OlafSt
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 486
Erhaltene Danke: 99

Win7, Win81, Win10
Tokyo, VS2017
BeitragVerfasst: Fr 13.08.04 15:52 
Ob es nicht vielleicht einfacher wäre, einen Device-Treiber für die Hardware zu schreiben ?

Software-Interrupts in das Win32-System "einzuschleusen" ist beinahe ebensoviel Aufwand - und ob das mit der nächsten Windows-Version auch noch funktioniert, steht auf einem anderen Blatt Papier.