Seite 1 von 1

MRT - Versuch Assembler

Verfasst: 07.12.2011 10:29
von ThatGuy
Funktioniert eigentlich bei irgendjemandem der Matrixdisplay-Emulator hier aus dem Forum? Habe den auf zwei Rechnern unter WinXP ausprobiert. Ich kann zwar das Programm starten, doch entweder passiert darin nach dem Laden der Assemblerprogramm-Executable gar nichts oder es kommt nur Murks.

Dass es auf meinem Notebook nicht geht, liegt wahrscheinlich daran, dass es über keinen Parallelport verfügt und daher die Aufrufe der Portadressen 0x378-0x37A ins Leere laufen. Bei meinem Desktop-Rechner tut sich auf dem Display immerhin etwas, es ist allerdings nicht das Muster, was ich erwarten würde. Selbst mit dem in der Anleitung vorgegebenen Beispiel Einzelpunkt leuchten mehr LEDs als beabsichtigt. Läuft evtl. der Rechner zu schnell für das Ding? Wenn ich mir im Programm die Daten ansehe, die über den Parallelport laufen, scheint das Ganze trotz der Warteschleifen im Programm in wahnsinnigem Tempo abzulaufen.

Re: MRT - Versuch Assembler

Verfasst: 07.12.2011 11:09
von Hans Oberlander
Ging bei mir schon damals vor vielen Jahren nicht.

Re: MRT - Versuch Assembler

Verfasst: 07.12.2011 14:10
von ThatGuy
Gut zu wissen. Da brauche ich mich mit dem Ding also nicht weiter zu beschäftigen. Sollte ich mal irgendwann ganz viel Zeit und Muße haben, werd' ich eventuell einen gescheiten Emulator schreiben. Sollte eigentlich nicht so kompliziert sein. Immerhin klappt bei mir das Debuggen mit CodeView auf der Live-DVD. Damit lässt sich das Programm wenigstens mal vorher durchspielen.

Re: MRT - Versuch Assembler

Verfasst: 29.03.2012 09:40
von ThatGuy
ThatGuy hat geschrieben:[...], werd' ich eventuell einen gescheiten Emulator schreiben. Sollte eigentlich nicht so kompliziert sein.
Da hatte ich damals offensichtlich zu kurz gedacht. Nachdem ich mich inzwischen noch mal dem Thema gewidmet und einen Emulator - sowohl in Assembler als auch mit Delphi - zu schreiben versucht habe, musste ich feststellen, dass es weniger trivial ist als anfänglich vermutet. Bekomme mit meinen Emulatoren das selbe Ergebnis wie mit dem aus dem Forum.

Der Knackpunkt ist schlicht die Geschwindigkeit. Während vom Prozessor das Assembler-Programm zur Darstellung des Pfeils abgearbeitet wird, kann nicht gleichzeitig der Emulator laufen und den Parallelport abfragen. Dazu müsste man den Emulator wirklich in Echtzeit parallel zum Laufen kriegen. Das scheint meinen Versuchen nach aber nicht mal mit Multitasking bzw. Multiprocessing auf Mehrkernrechnern zu klappen. Musste für einigermaßen erkennbare Ergebnisse die Darstellung des Pfeils extrem verlangsamen.

So, wie ich das derzeit einschätze, düfte die einfachste Lösung ein Nachbau des Matrixdisplays, z.B. mit einer Mikrocontroller-Schaltung sein. Von einer Umsetzung in Programmcode würde ich dagegen eher abraten. Macht also nicht noch mal den selben Fehler wie ich und probiert da unnötig herum. Das lohnt sich nur, falls es jemand auf dem Gebiet richtig drauf hat und eventuell bessere Ansätze kennt.

Jenen, die ihr Assembler-Programm trotzdem gerne vorher ausprobieren möchten, sei der Debugger CodeView auf der Live-CD ans Herz gelegt. Hat mir zumindest sehr geholfen unser Programm nachzuvollziehen. Ansonsten einfach mal ganz dreist versuchen sich an einem Praktikumstermin später an einen freien Platz zu setzen und das Ding zu testen. Unter Umständen erwischt man einen netten Betreuer, der da nix dagegen hat (man muss ja nicht unbedingt erwähnen, dass man den Versuch noch vor sich hat. Kann schließlich auch nachträglich noch was ausprobieren wollen).

Re: MRT - Versuch Assembler

Verfasst: 08.01.2014 15:41
von juri
Schade, dass das damals nicht geklappt hat. Wir haben allerdings auch mit CodeView ein Problem.

Der Assembler läuft problemfrei durch, CodeView funktioniert auch soweit. Unser Problem liegt aber in den Werten der Variablen.
Wir haben z.b. ein Byte entsprechend der Anleitung "Bitmuster", in dem binär 8 (also 1000b, 08h) stehen soll. Das Listfile vom Assemblieren sagt uns das auch. Im Code steht

Code: Alles auswählen

BITMUSTER	DB	00001000b
Im CodeView in der Speicheransicht steht nun aber was komplett anderes im Speicher, es wird beim Befehl

Code: Alles auswählen

MOV AH, BITMUSTER
auch falsch übernommen. Woran kann das liegen? Schon jemand ähnliche Probleme gehabt? Egal welchen Wert wir zuweisen, es steht immer der selbe, falsche Wert an der Speicherstelle...
Analog verhält es sich mit anderen zu speichernden Werten.
Hat jemand eine Idee?

Re: MRT - Versuch Assembler

Verfasst: 17.01.2014 23:25
von Blade
Wenn ihr es nicht schon gelöst habt, hätte ich folgende Idee:
Wenn es alle Variablen betrifft, dann könnte die Zuweisung der Adresse des Datensegments am Anfang des Hauptprogramms fehlen:

mov dx, @data
mov ds, dx

Mit diesen zwei Zeilen werden die Variablen dem Compiler erst bekannt gemacht.