Nützliche Unterprogramme für Nascom 1
In vielen Programmen ergibt sich die Notwendigkeit, Werte zu berechnen.
Hierbei fällt auf, dass der Monitor des Nascom als Rechner eine
absolute Niete ist; ausser Addition und Subtraktion geht nichts mehr.
So habe ich einmal eine Reihe von Unterprogrammen erstellt, die frei
verschiebbar sind und in Maschinenprogrammen als einfache Rechenhilfe
dienen.
Alle Rechenvorgänge laufen im Hexadezimalsystem ab, können aber durch
entsprechende Unterprogramme dezimal von der Tastatur eingegeben oder
dezimal auf dem Bildschirm dargestellt werden. Ausgangswert und
Ergebnis stehen jeweils in HL, unbeteiligte Register werden gerettet,
so dass Push und Pop Befehle vor und nach Aufruf der Unterprogramme
entfallen.
-
0C80
-
Eine Zahl in HL wird mit einer Zahl in B multipliziert. (die
Möglichkeit der Multiplikation mit einer mehr als zweistelligen Zahl
ist ist durch die beschränkte Kapazität des 8 Bit Systems nicht gegeben)
Bei Überschreiten der Rechenkapazität erfolgt ein relativer Sprung zur
Fehleranzeige, der im Fall einer Verschiebung des Programms in der
Adresse 0C8E geändert werden müsste.
-
0C95
-
Eine Zahl in HL wird durch eine Zahl in BC dividiert.
Enthält BC 00 so rechnet das Programm bis in alle Ewigkeit.
Man müsste hier eine Erkennung auf BC=0 einbauen ( z.B.
LD A,B OR C JRZ ENDE) oder einfach Divisionen durch 0 vermeiden,
-
0CA5
-
Es wird die Quadratwurzel einer Zahl in HL errechnet.Diese
Zahl darf nicht grösser als 1812dez sein, da sonst der Bereich der
positiven Zahlen überschritten wäre. (32676 ist max.Radikant) Da
Kommazahlen im Ergebnis nicht eingeplant sind, erübrigt es sich, die
Schleifenzahl 10 zu erhöhen, um genauere Näherungswerte zu erhalten.
Das Ergebnis des grössten Radikanten ist nach zehn Durchgängen auf 1
Zehntel genau. Ein Nachteil ist, dass die Wurzel aus 9 bis 15 jeweils 3
ergibt und erst ab 16 auf 4 steigt usw. Bei mir wurde das Programm zum
Ansteuern von Schrittmotoren verwendet. Dabei kann ich mit Bruchteilen
von Schritten nichts anfangen. Wer aber Wert auf genauere Ergebnisse
legt, kann ja anstatt z.B. 5 dez 500 dez eingeben und erhält dann ein
Ergebnis auf ein Hundertstel genau, wobei er sich nur ein Komma
hinzudenken müsste. Dieser letzte Mangel kann sogar noch leicht im
Anzeigeprogramm behoben werden, wenn man nach der Hunderter ein Komma
einprogrammiert. Allerdings wird dann der Zahlenbereich nach oben auf
99,99 beschränkt. Das Wurzelprogramm enthält einen Aufruf des
Divisionsprogramms bei 0CB6. Dieser muss bei Verschiebung im Speicher
geändert werden.
-
0CC1
-
Fehlermeldung bei Bereichsüberschreitung und Sprung zu Monitor
-
0CD5
-
Eine Dezimalzahl in HL wird in Hex umgewandelt. Das Ergebnis
steht in HL. Register DE und B werden verändert und müssen vor Aufruf
gerettet werden. Bei Verschieben beachten: Aufruf des Unterprogramms
Multiplizieren bei 0CE2, 0CEF, 0D02 .
-
0D10
-
Hilfsprogramm zu 0D25
-
0D25
-
Eine Hexzahl in HL wird fünfstellig dezimal auf Bildschirm
ausgegeben. AF, BC und DE müssen vorher gerettet werden. Das Programm
enthält Aufrufe von Multiplizieren und Dividieren 0D11, 0D1D, und
Aufrufe des Hilfsprogramms in 0D28,0D2E, 0D34 und 0D3A; bei Verschieben
beachten.