PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Turbo-Pascal-Programme unter MS-WinNT?



nobody0
11-12-2003, 16:41
Ich habe einige Turbo-Pascal-Programme, die unter DOS u. MS-Win3.x gut liefen, aber unter MS-WinNT nicht auf die Hardware-Ports zugreifen können; das MS-WinNT (4.0, 2000, XP) liefert nur binäre Einsen (d. h. bytemäßig 0xff) :(
Wie kann man die Programme wieder richtig verwenden, also so, dass die auf die Hardware zugreifen? :confused:

peschmae
11-12-2003, 17:02
nein. Der direkte Harwarezugriff, wie er unter Win9x und Dos gang und gäbe war geht nicht mehr. Auf jeden Fall nicht mehr so wie vorher. afaik.

Aber wie du dir schon denken kannst, gibts hier nicht wirklich nt-freaks. :D

MfG Peschmä

anda_skoa
11-12-2003, 17:14
Original geschrieben von nobody0
Ich habe einige Turbo-Pascal-Programme, die unter DOS u. MS-Win3.x gut liefen, aber unter MS-WinNT nicht auf die Hardware-Ports zugreifen können; das MS-WinNT (4.0, 2000, XP) liefert nur binäre Einsen (d. h. bytemäßig 0xff) :(
Wie kann man die Programme wieder richtig verwenden, also so, dass die auf die Hardware zugreifen? :confused:

Du kannst höchstens noch versuchen, die maximalsten Rechte zu vergeben.
Wenn das nichts hilft, was zu erwarten ist, geht es nicht.

DOS und Windows-auf-DOS hatten keine Rechtetrennung, auch nicht zwischen System und Anwendungen.
Normale Betriebsysteme schon, meistens ist es gar nicht erlaubt, mit einer Anwendung direkt auf Hardware zuzugreifen, sondern nur über einen Teil im System, also zB ein Treiber.

Ciao,
_

nobody0
11-12-2003, 20:49
Original geschrieben von anda_skoa

Normale Betriebsysteme schon, meistens ist es gar nicht erlaubt, mit einer Anwendung direkt auf Hardware zuzugreifen, sondern nur über einen Teil im System, also zB ein Treiber.


Es sind Treiber; das ist ja das Problem, dass die unter NT nicht funktionieren, weil die phantom-Werte vom Windoof bekommen.
Unter Linux ist es so einfach wie mit Turbo-Pascal, aber einige wollen es auch für Windoof haben. :(

anda_skoa
11-12-2003, 21:10
Original geschrieben von nobody0
Es sind Treiber; das ist ja das Problem, dass die unter NT nicht funktionieren, weil die phantom-Werte vom Windoof bekommen.
Unter Linux ist es so einfach wie mit Turbo-Pascal, aber einige wollen es auch für Windoof haben. :(

Hmm, sind die auch korrekt auf die WinNT Treiber API portiert?

Die Linux Treiber werden ja auch spezielle angepasst worden sein, wahrscheinlich sogar in C geschrieben, oder?

Ciao,
_

nobody0
12-12-2003, 13:28
Original geschrieben von anda_skoa
Hmm, sind die auch korrekt auf die WinNT Treiber API portiert?

Die Linux Treiber werden ja auch spezielle angepasst worden sein, wahrscheinlich sogar in C geschrieben, oder?

Ciao,
_

Die Linux-Treiber sind ganz einfach so:

iopl(3); // open I/O-space
outb(123, 123); // write
input_byte = inb(0x4711); // read
iopl(0);

Unter TP ist es praktisch gleich, nur dass dort kein iopl nötig ist, aber sowas wie iopl / requestregion / ioperm muss es ja auch unter MS-WinNT geben, denn auch da können die Treiber natürlich nicht mehr machen als auf Ardressen im I/O-Space (bzw. spezielle Register) Lesen/Schreiben.

Es muss doch eine einfache Möglichkeit geben die TP-Programme auch unter MS-WinNT verwenden zu können.

anda_skoa
12-12-2003, 15:17
Original geschrieben von nobody0
Die Linux-Treiber sind ganz einfach so:

iopl(3); // open I/O-space
outb(123, 123); // write
input_byte = inb(0x4711); // read
iopl(0);

Hmm, sieht mir eher nach Userspace Code aus. Ein Kernelmodul muss normalerweise keine Permissions einholen.



Unter TP ist es praktisch gleich, nur dass dort kein iopl nötig ist

Ist auch in Pascal nötig, wenn das Betriebsystem das so erfordert.
Unter DOS natürlich nicht :)



aber sowas wie iopl / requestregion / ioperm muss es ja auch unter MS-WinNT geben, denn auch da können die Treiber natürlich nicht mehr machen als auf Ardressen im I/O-Space (bzw. spezielle Register) Lesen/Schreiben.


Ja, möglicherweise ist es auch unter NT erlaubt, vom Userspace aus auf Ports zuzugreifen, aber es wäre auch möglich, dass es wirklich nur einem Treiber erlaubt ist.
Sowas findet man sicher in der MSDN.

Ciao,
_

arthur
17-12-2003, 12:56
Hi,
NT erlaubt keinen direkten zugriff auf ports (für ring 3),
hier genauere infos + mögliche lösung des problems:
http://www.beyondlogic.org/porttalk/porttalk.htm

gruss
Arhur

nobody0
17-12-2003, 20:47
Original geschrieben von anda_skoa
Hmm, sieht mir eher nach Userspace Code aus. Ein Kernelmodul muss normalerweise keine Permissions einholen.

Ist auch in Pascal nötig, wenn das Betriebsystem das so erfordert.
Unter DOS natürlich nicht :)

Ja, möglicherweise ist es auch unter NT erlaubt, vom Userspace aus auf Ports zuzugreifen, aber es wäre auch möglich, dass es wirklich nur einem Treiber erlaubt ist.
Sowas findet man sicher in der MSDN.

Ciao,
_

Also das hängt natürlich vom OS ab, aber unter Linux kann man beides machen - mit Anmeldung (z. B. request_region) und ohne (z. B. iopl(3)), aber ohne riskiert man Konflikte, denn ein Port kann ja nur von einem Thread zur Zeit genutzt werden und Deadlocks sind ein hartes Problem der Informatik.
Zumind. unter Linux gibt´s aber sogar noch einen dritten Weg: Aus dem User Space am Kernel vorbei auf die Hardware zugreifen; das nennt sich Raw I/O und bringt erheblichen Performance-Schub in einigen Fällen.


@arthur:
Ich sehe mir das mal an, danke :)