DV3-Info
Start-Deutsch
Ergebnisse
Assembler und DV3
Downloads!
Mailing-List!
Thanks to...
Links!
Assembler und DV3

Kapitel 4

DV3 Zeichensatz-Matrix :
Wenn wir uns die Textzeichen genauer betrachten, die auf der LCD-Anzeige ausgegeben werden, dann scheint es, daß ein Zeichen 5 Pixel breit ist und max. 7 Pixel hoch.
Über die in Kapitel 3 beschriebenen Experimente können wir feststellen, daß es unmöglich ist, zwei Zeichen direkt nebeneinander auf der Anzeige auszugeben. Selbst wenn wir veranlassen, daß ein Zeichen teilweise ein anderes überschreibt, besteht immer eine Lücke zwischen zwei Zeichen, die mindestens 1 Pixel breit ist. Tatsächlich ist nämlich die Zeichensatz-Matrix 7 x 9 Pixel groß ! Die unge- setzten Randpixel der Matrix ergeben einen “farblosen” Rahmen.

Zeilen- und Spaltenpositionierung von Zeichen :
Indem wir den Zeilenwert eines Text-Strings auf 0 setzen (z.B. an Adresse 8201A0h D8 F2 46 00 -> D8 F2 00 00), wird dieser am oberen Rand der Anzeige ausgegeben (inkl. der zeichensatzbedingten “1-Pixel Lücke” !).
Setzen wir den Spaltenwert auf 0 (z.B. an Adresse 8201A6h C9 23 -> C9 20), so wird der String am linken Rand der Anzeige ausgegeben (ebenfalls mit einer Lücke von einem Pixel zum tatsächlichen Anzeigenrand !).
Erhöhen wir den Zeilenwert Stück für Stück, bewegt sich der Text-String vom oberen zum unteren Rand der Anzeige.
Bei einem max. Zeilenwert von 98h (152 dez.) wird der Text-String lückenlos genau am unteren Rand der Anzeige ausgegeben. Lückenlos deshalb, weil die unterste Pixelreihe der Zeichen-Matrix bei diesem Zeilenwert bereits außerhalb der Anzeige ist. Der Zeilenwert läßt sich sogar weiter erhöhen, so daß z.B. nur noch die obere Hälfte des Text-Strings auf der Anzeige zu sehen bleibt !
Da der Zeilenwert die Position der ersten oberen Pixelreihe eines Zeichens be- stimmt, können wir schlußfolgern, daß die vertikale Größe (Y-Wert) unserer LCD-Anzeige 160 Pixel beträgt (152 + 1 (Zeile 0 mitrechnen !) + 7 sichtbare Pixel des Zeichens) !

Das Problem der Spaltenpositionierung :
Genauso wollen wir jetzt die horizontale Größe (X-Wert) der DV3 LCD- Anzeige ermitteln.
Um brauchbare Ergebnisse zu erhalten, verkürzen wir zunächst den vierten Text-String, indem wir den Wert an Adresse 8200CAh von 6Ch zu 00h ändern.
Da 00h das Ende eines Text-Strings markiert, wird jetzt nur noch das “F” auf der Anzeige ausgegeben.
Jetzt erhöhen wir den Spaltenwert im MOV-Befehl an Adresse 82011A6h.
Er ist wie folgt aufgebaut :

    C9 23  ->  MOV R2, 03h -> C9 = MOV; 2 = R2; 3 = 03h

Hier ergibt sich nun aber ein Problem :  Dieser Befehl (ein 2-Byte-Befehl) stellt lediglich Platz für eine 1-stellige Zahl zur Verfügung. Das bedeutet, daß wir den Zeilenwert lediglich von 0 bis Fh (0 bis 15 dez.) einstellen können ! Wir können also nur die ersten 16 Pixel einer Zeile erreichen.
Wir können diese Problem einfach lösen, indem wir alternativ den MOV-Befehl verwenden, der bereits für die Zeilenwerte benutzt wurde :

D8 F2 46 00 -> MOV R2, 0046h -> D8 = MOV; F2 = R2; 4600 = 0046h

Dieser Befehl (ein 4-Byte-Befehl) bietet Platz für 4-stellige Zahlen ! Allerdings braucht er dafür aber auch 2 Speicherplätze mehr als der 2-Byte-Befehl.
Wir verändern jetzt nicht mehr nur Parameter des vorgegebenen Codes - jetzt schreiben wir unsere erste eigene Zeile Assembler !
Überschreibt mit dem Hexeditor den alten MOV-Befehl (C9 23) mit dem neuen (D8 F2 46 00) gefolgt von den Befehlen E2 82 E0 1E und 18 F8. Im Anschluß schließen wir unser erstes selbstgeschriebenes Programm mit dem Code F1 FF, bei dem es sich um den HALT-Befehl handelt, ab.
Speichert die Datei und disassembliert sie wieder. Weil wir vier Speicherplätze (Bytes) mehr für unsere Modifikationen gebraucht haben (zwei Bytes für den MOV- und zwei Bytes für den HALT-Befehl), ist der alte SCALL-Befehl an Adresse 8201AEh verschwunden.
Wir benützen die Datei NPLv111.bin nun nicht mehr für ihren ursprünglichen Zweck, sondern nutzen sie als “Container” für unseren selbstgeschriebenen Maschinen-Code, der Text an eine bestimmte Stelle schreibt und dann stoppt !

Anmerkung: Es ist grundsätzlich sinnvoll den HALT-Befehl zu verwenden,   um beim Ausprobieren von modifizierten Code im NPLv111.bin zu vermei-  den, daß jedesmal der Lösch- und Update-Prozess des DV3 ausgeführt wird. So können wir unsere Batterien schonen und eine Menge Zeit sparen !

Erhöhen wir jetzt in unserem neuen MOV-Befehl den Spaltenwert, bewegt sich unser Text-String, das “F”, von links zum rechten Rand der LCD-Anzeige.
Bei einem max. Wert von 99h (153 dez.) wird das “F” ganz am rechten Rand ausgegeben, mit der uns bekannten Lücke von einem Pixel.
Wir können zwar den Wert auf 9Ah (154 dez.) erhöhen, so daß diese Lücke verschwindet. Jedoch wird dadurch in diesem Fall ein Fehler verursacht - der Text-String wird an einer tieferen Position ausgegeben als mit dem Zeilenwert angegeben wurde !

Genauso wie wir die vertikale Größe (Y-Wert) der DV3 LCD-Anzeige ausge- rechnet hatten, können wir jetzt feststellen, daß die horizontale Größe (X-Wert) ebenfalls 160 Pixel beträgt !

    Ergebnisse :
    1. Die Größe der DV3 LCD-Anzeige beträgt 160 x 160 Pixel.
    2. Wir benutzen die Datei NPLv111.bin nicht mehr für ihren ursprüng- lichen Zweck, sondern als “Container”, um unsere selbstgeschriebenen Programme in den DV3 zu transferieren !
     

[DV3-Info] [Start-Deutsch] [Ergebnisse] [Start-Englisch] [Results]