Forum: PC-Programmierung Frage zu LTP - PASCAL


von daniel (Gast)


Angehängte Dateien:

Lesenswert?

HI,

ist die LPT ansteuerung in dem Source richtig?
     c:='1';                          {w}
     base := memw[$40:8];             {o}
     if ParamStr(2) = '2' then        {r}
     begin                            {k}
          base := memw[$40:10];       { }
          c:='2';                     {o}
     end;                             {u}
     if ParamStr(2) = '3' then        {t}
     begin                            { }
          base := memw[$40:12];       {p}
          c:='3';                     {o}
     end;                             {r}
     If base = 0 then                 {t}
     begin
          Writeln('Parallel port does not exist!');
          Halt(2);
     end;
die Timing funktionen nms(), startdel(), delay_mks() habe ich nicht 
verstanden. Kann das jemand verstehen?
Das Timing bei der Aufgabe ist besonders wichtig! Es muss auf mikrosec 
genau sein!

Das hier ist der Source von einer Programmersoftware, jedoch 
funktioniert das ganze nicht. Ich denke der Fehler liegt in dem Code.
Ich habe WinXP, wie der entwickler geschrieben hatte sollte es nicht 
funktionieren. Naja habs trotzdem ausprobiert und die Software lief 
fehlerfrei durch. Nur mein Drucktreiber spielte verrueckt.
Habe dann eine Startdiskette erstellt und es dann ausprobiert. Wieder 
lief die Software fehlerfrei durch. Aber das Ergebnis auf dem MC ist = 
0.

Cod Auszuege aus der Datei im Anhang

Wenn mir jemand das erklaeren oder weiterhelfen koennte, bin ich sehr 
dankbar!

Daniel

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Der von Dir angegebene Quelltextausschnitt steuert keinen Parallelport 
an, sondern er bestimmt die I/O-Adressen, in dem ein BIOS-Datenbereich 
ausgelesen wird.

Das Programm selbst wird - mal von Timingungenauigkeiten abgesehen - 
schon irgendwas richtiges tun, nur kann es das unter Windows XP nicht 
ohne Nachhilfe. Wie unter jeder Version von Windows NT dürfen Programme 
auch hier nicht einfach irgendwelche Hardware-I/O-Zugriffe durchführen.

Dafür bedarf es eines Devicetreibers.

Oder eines Tricks, nämlich der Abschaltung der I/O-Überwachung des 
Betriebssystems.

Mehr dazu hier:
http://www.beyondlogic.org/porttalk/porttalk.htm

von daniel (Gast)


Lesenswert?

Hallo,
vielen Dank erstmal.

Und wenn ich es mit einer von XP erstellten MS-Dos Startdiskette 
ausfuehere, dann duerfte es doch keine Windowsueberwachung mehr geben, 
oder?

Diese I/O Adressen sind diese PC-spezifisch oder sind sie von PC zu PC 
unterschiedlich. Habe im Bios, glaube, 0x37F fuer meinen LPT 
eingestellt.
Funktioniert das dann?


daniel

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Wenn Du Dein Programm unter DOS laufen lässt, sieht die Situation 
natürlich anders aus. Dann läuft es unter DOS und nicht unter Windows.

Die I/O-Adressen sind gewissermaßen genormt, es gibt drei 
unterschiedliche Basisadressen für LPT1, LPT2 und LPT3.

Der in Deinem Softwarefragment zitierte Code kann unter DOS die 
verwendeten Adressen bestimmen; das BIOS des Rechners trägt nämlich die 
verwendeten I/O-Adressen in den im Code ausgelesenen Datenbereich ein.

von daniel (Gast)


Lesenswert?

Hi,
also es arbeitet ja auch fehlerfrei, sowohl unter DOS wie auch unter 
WinXP. Es kommt keine Fehlermeldung in WinXP das es keinen 
Schreibzugriff gibt.

Das Programm laeuft auch fehlerfrei durch.
Wie sind diese Adressen ?
$40:8 - LPT 1?
$40:10 - LTP 2?
$40:12 - LPT 3?

Kann man sich sicher sein, dass das Timing zumindest mit der Dos 
Startdiskette genau ist ?

Vielen Dank
Daniel

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Das Nichtvorhandensein einer Fehlermeldung von XP bei versuchten 
Schreibzugriffen auf den Parallelport hat nichts zu besagen, die 
DOS-Emulationsumgebung fängt I/O-Zugriffe auf serielle und parallele 
Schnittstellen ab und versucht diese entsprechend umzusetzen, was bei 
simplem Drucken funktioniert, aber oft auch schief geht.

Fehlermeldungen gibt es erst, wenn auf andere Hardware zugegriffen 
werden soll als die von der virtuellen DOS-Maschine (NTVDM) emulierte.

Wirklich funktionierende Hardwarezugriffe auf die Parallelschnittstelle 
unter XP mit einem DOS-Programm sind aber nur mit solchen Hilfsmitteln 
wie Porttalk, giveio etc. möglich.

Von einer DOS-Diskette gestartet verhält sich ein DOS-Programm so, wie 
es sich unter DOS verhält, das hat also GARNICHTS mit dem Betrieb unter 
XP zu tun.

Ob das Timingverhalten auf Deinem Rechner korrekt ist, hängt in diesem 
Falle davon ab, auf welche Art und Weise das Timing realisiert wurde und 
wie alt das betreffende DOS-Programm ist. Einfache Verzögerungsschleifen 
werden kaum richtig funktionieren, da Dein XP-Rechner sicherlich mehrere 
Größenordnungen schneller ist als die DOS-Kiste, für die das 
ursprünglich mal programmiert wurde.

Aber das ist kein Problem - wenn Du Dir mal den Kommentar im von Dir 
selbst geposteten Quelltext angesehen hättest, wüsstest Du es schon 
selbst:

  (...) I've rewritten parts of it so that it should
  work ok on any computer BUT ONLY IN REAL DOS MODE.

  it will NOT work under  windows, use py2051 if you
  need that.

  It has been written so it should work
  on any speed pc, I've tried it on a PIII 850,
  and on a 16MHZ 286 and it worked on both.

Vielleicht liegt Dein Problem ja auch ganz woanders, nämlich in der von 
Dir am Parallelport angeschlossenen Hardware?

von daniel (Gast)


Lesenswert?

Hi,
vielen Dank fuer die Antwort.

Habe mir das Quelltextprogramm angesehen. Und auch zu genuege. Ich frage 
halt nur weil ich nicht weiss ob meine Startdiskette ein REAL DOS MODE 
ist. Und weil im Quelltext steht, es SOLLTE eigentlich gehen.

Bei mir gehts eben nicht und deswegen wollte ich nachvollziehen was der 
da macht. Besonders das Timing und wie diese Timings erzeugt werden. 
Oder ob mein der LPT port vielleicht nicht richtig ist, wenn ich da eine 
1 ( fuer LPT 1) eingebe. Ob mein PC um die 700 MHz vielleicht da etwas 
falsch macht.
Naja werde weitersuchen. Auch an der Hardware.

Nochmals Danke fuer die Antworten
Daniel

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

> Ich frage halt nur weil ich nicht weiss ob meine Startdiskette
> ein REAL DOS MODE ist.

Ah, das erklärt das Verständnisproblem.

Ja, DOS, gestartet von einer Diskette, ist "REAL DOS MODE".

Sobald aber irgendwo Windows ins Spiel kommt, das DOS also aus Windows 
heraus aufgerufen wird, ist es kein "reines" DOS mehr. Bereits Windows 
3.1 verfügte über eine DOS-Virtualisierung.

Bevor Du Dir aber unnötige Probleme machst: Welchen µC möchtest Du 
eigentlich mit welcher Hardware programmieren? Vielleicht findet sich da 
ja auch eine andere Lösung...

von daniel (Gast)


Lesenswert?

Hi,
naja die Loesung ist schon gebaut, das Problem zur Programmierung 
(Hardware/ Software ) laeuft im Forum schon in einem anderen Thread. Und 
zwar diesen:

Beitrag "Programmer Problem - BlowIt - AT89C2051"

Da steht auch alles ueber meine verwendeten Einstellungen und 
Begebenheiten zur Hardwaren und Software.

Aber in Kurzform, moechte mit dem Programmer BlowIt eine AT89C2051 
beschreiben. Bis jetzt schlugen aber alle Versuche fehl :( .

Diese Thread hier ist nur zur Programmierung, ob mir halt jemand die 
Ports aus dem Quelltext erklaeren koennte und wie das mit diesen 
Timingfunktionen programmiert ist. (Ist aber bereits schon erklaert von 
dir, Danke  :)  )

daniel

von daniel (Gast)


Lesenswert?

Hallo,

nur zur Anmerkung auf einem alten Rechner unter Windows 95 laeuft die 
Software wunderbar. Vielleicht haben sich ja inzwischen die Bios 
Register geaendert fuer die Parallele Schnittstelle.

daniel

von Rufus Τ. F. (rufus) Benutzerseite


Lesenswert?

Windows 95 ist nicht Windows NT, Windows XP aber ist Windows NT*.

Windows 95 und seine verschiedenen Aufgüsse (98/98se/Me) sehen keine 
Hardwarevirtualisierung vor, daher verhalten sich DOS-Programme unter 
ihnen anders als unter Windows NT.


*) und zwar Windows NT 5.1. Vista ist Windows NT 6.0

von Bobby (Gast)


Lesenswert?

>Vielleicht haben sich ja inzwischen die Bios
>Register geaendert fuer die Parallele Schnittstelle.

Ich habe auch den Verdacht, dass es am BIOS liegt.
Wenn (unter DOS) die Adressen der Ports vorhanden sind,
so hat sie üblicherweise das BIOS vorher dort abgelegt.

Aber heutzutage ist ja alles Plug & Pray. Daher auch nicht sicher, dass 
die Daten überhaupt gesetzt werden.
In den BIOS-Einstellung kann man überlicherweise angeben, dass ein 
Plug&Play-OS gestartet wird: Das kannst du ja mal abschalten.

von Spess53 (Gast)


Lesenswert?

Hi

Die Portadressen der verfügbaren LPT-Ports lassen sich auch über den 
Gerätemanager feststellen. Üblicherweise ist LPT1 I/O 378H-37FH und
LPT2 278H-27FH. Übrigens macht obiger Programmabschnitt keine 
I/O-Zugriff sondern einen Speicherzugriff auf das 
BIOS-Variablen-Segment. Auf Adresse
0040:0008H steht die I/O-Adresse von LPT1 usw. Das stammt zwar noch aus 
DOS-Zeiten , aber wie ich MS kenne wird das noch in 100 Jahren so sein.

MfG Spess

von *.* (Gast)


Lesenswert?

> aber wie ich MS kenne wird das noch in 100 Jahren so sein.

Zumindest noch so lange wie die PCs DOS booten können.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.