Nascom Journal |
Mai 1982 · Ausgabe 5 |
Heute darf gesprungen werden, von einem Byte zum nächsten oder wohin auch immer. Bewegung soll anregen, also lassen wir die Speicherzellen rauchen. Die „Intelligenz“ eines Rechners wird bekanntlich durch zwei Dinge ermöglicht: 1. Er kann sehr schnell fehlerfrei etwas immer wieder tun und 2. kann er einfache Entscheidungen treffen. Allerdings muß er dabei immer wissen, wo’s lang geht.
Die Sprünge, die der Z80 Prozessor kennt, lassen sich nach mehreren Gesichtspunkten einteilen, nämlich nach der Art der Bedingung und der Form, wie die Bedingung beschrieben wird.
Der einfachste Sprung ist derjenige ohne Bedingung. Wenn z.B. der Zielort die Hausnummer 4C3F hat, sieht bei einer direkten Adressierung der entsprechende Befehlscode so aus: C3 3F 4C . C3 kennzeichnet die Sprungart, die beiden Bytes der Adresse folgen in umgekehrter Reihenfolge. Soll der Zielort erst innerhalb eines Programmablaufs errechnet werden, legt man das Ergebnis im HL- oder eines der Indexregisterpaare ab. Geben Sie hier unter NAS-SYS einmal folgendes komplexe Programm ein:
0D00 | DF 63 | lese eine Zeile ein |
0D02 | DF 64 | wandle sie in einen Binaerwert um, speichere Ergebnis ab 0C21 |
0D04 | 2A 21 0C | Lade diese Adresse in das HL Register |
0D07 | E9 | arbeite ab der Stelle weiter, auf die der Inhalt von 0C21 und 0C22 zeigt. |
Nach dem Start ED00 wird jetzt eine Adresseingabe erwartet. Das Programm springt dann dorthin und arbeitet dann von dieser Stelle weiter. Probieren Sie folgende Werte: 0051, 02EB, 0450.
Die relative Adressierung hat zwei Vorteile: 1. Programme lassen sich ohne Probleme im Arbeitsspeicher verschieben und 2. besteht der OP-Code nur noch aus 2 Bytes. Leider aber muß man, wenn keinen Assembler zur Verfügung hat, doch etwas umständlich die Sprungweite berechnen. Das 2. Byte gibt die Sprungweite bezogen auf den aktuellen Stand des Programmzählers (PC) an. Soll der Sprung rückwärts erfolgen, wird das 8. Bit gesetzt und die restlichen sieben werden in ihrem Wert rückwärts gesetzt (2-Komplement).
0D00 | 18 04 | JR LABEL | |
0D02 | 26 02 | LD H,2 | |
0D06 | 00 | LABEL | NOP |
Die erste Programmzeile wird in den Prozessor eingelesen und der PC um die entsprechende Zahl an Bytes erhöht. Um jetzt zum Label zu gelangen, müssen 4 Bytes übersprungen werden. Deshalb muß das 2. Byte in der 1. Zeile 04 sein. Das 1. Byte steht für einen relativen Sprung.
0D00 | 06 04 | LABEL | LD B,4 |
0D02 | 0E 07 | LD C,7 | |
0D06 | 18 FA | JR LABEL |
Um zum LABEL zu gelangen, müssen ab der 3. Zeile insgesamt 6 Bytes üebersprungen werden. Will man bei einem Programm mit relativen Sprüngen später noch etwas einfügen, müssen die Sprungweiten natürlich neu berechnet werden. Relative Sprünge können vorwärts maximal 129 Bytes, rückwärts 126 Bytes weit reichen. Mit dem folgenden Programm darf man mit ED00 ein Gefühl für die Weite erhalten!
Wolfgang Mayer-Gürr
Hinweis zum Programm Seeschlacht von K. Mombaur (Heft 1-82):
H.Auge hat entdeckt, daß das Programm nicht wegen Nassys3 auf manchen Systemen nicht läuft, sondern wegen der obskuren zweiten BASIC-Version. Entgegen der Hinweise der Redaktion ist das Programm so einfacher anzupassen:
Durch DOKE 4175,-6670 wird der Zeilenvorschub unterdrückt und die
Eingabe an der erwarteten Stelle gemacht ( Manual Seite 25). Durch DOKE
4175,-25 kann wieder auf die normale Betriebsart umgeschaltet werden
(im Spiel nicht nötig).
Mehrere Leser hatten Schwierigkeiten mit der Grafikerweiterung aus Heft 1-82. Peter Deege aus Aachen schreibt dazu:
Ich habe mir diese einfache Grafikerweiterung nachgebaut, aber leider funktionierte sie nicht. Nach Durchdenken des Schaltbilds stellte ich fest, daß die Freigabe der Schieberegister genau umgekehrt erfolgte. Nach den Änderungen IC 15 Pin 7 nach Pin 13 (LS 00) und IC 265 Pin 7 nach Pin 4 (LS 00) tat sich schon ’was, aber noch unsaubere Character und Doppeldarstellungen. Ich tauschte das LS 74 mit einem Standard 74, und die Karte lief einwandfrei.
Seite 18 von 32 |
---|