###   Projekte und Informationen rund um den KC85   ### 

HPKC - Ein Online-Calculator für den KC 85/4

von Frank Dachselt

Wer kennt nicht die folgende Situation? Man arbeitet mit einem Texteditor, schreibt einen Brief und möchte auf einmal wissen, wieviel sind 17 mal 3,35. Oder ein Programmierer benötigt die Anzahl der 128-Byte-Records, die sich im Speicherbereich 8500h ... B100h unterbringen lassen. Die Lösung dieser Probleme besteht meistens darin, daß man zum Taschenrechner greift und damit die jeweiligen Rechnungen durchführt. Und das, obwohl doch eine geballte Rechenleistung in Form des KC danebensteht ...

HPKC.COM ist entstanden, um das Arbeiten mit dem KC in solchen Fällen bequemer zu machen. Das Programm ist ein Online-Tool für die PC-Betriebsart und kann zusammen mit MicroDOS ebenso wie mit dem neuen Betriebssystem ZSDOS verwendet werden. Nach seiner Aktivierung steht der Calculator an beliebigen Programmstellen auf Tastendruck zur Verfügung.

HPKC ist zum Rechnen mit ganzen Zahlen mit einer Verarbeitungsbreite von 16 Bit bzw. für einfache Festkommaoperationen mit "gedachtem" Komma geeignet. Die Oberfläche und die Bedienung ist Hewlett-Packard-Taschenrechnern mit RPN-Arithmetik nachempfunden. RPN steht für "Reverse Polish Notation" bzw. auf deutsch "Umgekehrte Polnische Notation (UPN)". Die Besonderheiten dieser Arithmetik werden im folgenden noch näher erläutert.

Der Aufruf von HPKC.COM in der PC-Betriebsart löst nur die Installation des Calculators im Grundgerät aus, wobei der von Programmcode im Grundgerät belegte Speicherbereich angezeigt wird. Das Programm selbst belegt in der jetztigen Version den Bereich 3000h ... 3A00h und benötigt beim Aufruf den Bereich 6F80h ... 7FFFh als temporären Speicher. Nach der Installation kann in der PC-Betriebsart beliebig weitergearbeitet werden. Der Aufruf des Programms im Grundgerät erfolgt mit der Tastenkombination <SHIFT>-<CLR> zu einem beliebigen Zeitpunkt. Die Bedienung des Programms im D004 wird daraufhin unterbrochen und auf dem Bildschirm erscheint in einem Fenster die Oberfläche des Calculators. Nach dem Verlassen des Calculators wird die Bedienung wieder an das Programm im D004 zurückgegeben.

Der Vollständigkeit wegen noch die folgende Information. Der Kern des Calculators, also der Teil, der die arithmetischen Funktionen realisiert, wurde aus dem Programm HP11.COM von T. Hazen, das auch als HP11.RSX existiert, entnommen. Dieser Kern ist in CAOS eingebettet worden, wodurch jetzt eine wesentlich bequemere Oberfläche zur Verfügung steht. Die Bedienung ist unter Einbeziehung der Möglichkeiten der KC-Tastatur weitestgehend mit der des Originals identisch; die Funktionalität des Calculators ist dagegen etwas erweitert worden.

RPN-Notation

Reverse Polish Notation (RPN), die mitunter auch als Postfix-Notation bezeichnet wird, ist eine einfache aber leistungsfähige, stackorientierte Schreibweise, die unter anderen in Hewlett-Packard-Taschenrechnern verwendet wird. Dabei werden zunächst die Zahlen eingegeben, mit denen eine numerische Operation durchgeführt werden soll. Jeweils durch <RET> getrennt stehen diese Zahlen dann in aufeinanderfolgenden Ebenen des Stacks. Anschließend wird die gewünschte Funktion durch eine entsprechenden Eingabe ausgeführt. Dabei gehen die Operanden dieser Funktion durch Verschiebung der Stackregister bzw. Überschreiben mit dem Ergebnis verloren. Das Ergebnis selbst steht unmittelbar nach der Operation ebenfalls im Stack zur Verfügung.

Beispiele für RPN-Operationen (dezimale Anzeige wird angenommen):

zu lösen Funktion Tasten-
betätigungen
Ergebnis-
anzeige

9+3=12 9 plus 3 9<RET>3+ 12
9-3=6 9 minus 3 9<RET>3- 6
9*3=27 9 mal 3 9<RET>3* 27
9/3=3 9 geteilt durch 3 9<RET>3/ 3
9^3=729 9 hoch 3 9<RET>3^ 729

Stack

Nach dem Aufruf des Calculators mit <SHIFT>-<CLR> werden die sieben Stackregister angezeigt, die während der Arbeit mit HPKC ständig sichtbar sind. Es ergibt sich folgendes Bild:

         0000       <- T-Register
         0000
         0000
         0000
         0000
         0000       <- Y-Register
H>       0000       <- X-Register

Die beiden unteren Stackregister sind das X- und das Y-Register. Das oberste Register ist das T-Register. Dem X-Register kommt die größte Bedeutung zu, es ist das Eingaberegister und zugleich das Ergebnisregister. Der Prompt vor dem X-Register zeigt an, welches Zahlenformat aktiv ist. Im angegeben Beispiel ist die hexadezimale Anzeige eingestellt, die zugleich die Vorgabe beim Start von HPKC ist.

Stackfunktionen

Es existieren verschiedene Funktionen, die zur Manipulation des Stacks benutzt werden, ohne daß numerische Operationen ausgeführt werden.

<CLR>
Löschen des gesamten Stacks:
Die Inhalte der sieben Stackregister werden auf Null gesetzt. Die Speicherregister sowie das LAST-X-Register bleiben unverändert.
 
<RET>
Eingabeübernahme:
Übernahme des Inhalts des Eingaberegisters (X-Register) in das Y-Register bei gleichzeitigem Verschieben aller weiteren Stackinhalte um eine Stufe nach oben. Der Wert des T-Registers geht dabei verloren. Im X-Register (Eingaberegister) wird eine Null eingetragen.
 
<CUU>
Zyklische Verschiebung der Stackinhalte nach oben,
<CUD>
Zyklische Verschiebung der Stackinhalte nach unten:
Alle Stackinhalte werden um eine Stufe nach oben bzw. nach unten verschoben. Der Inhalt des T-Registers wird in das X-Register bzw. der Inhalt des X-Registers in das T-Register übernommen.
 
=
Austauschen der Inhalte von X und Y:
Die Inhalte des X-Registers und des Y-Registers werden ausgetauscht. Diese Funktion kann verwendet werden, um die Reihenfolge von Operanden zu vertauschen, wenn numerische Operationen eine bestimmte Reihenfolge benötigen (z.B. Subtraktion, Division und Potenzierung).
 
L
Wiederherstellung des letzten Inhaltes des X-Registers:
Vor der Ausführung einer numerische Operation, wird der Inhalt des X-Registers in das LAST-X-Register kopiert. Dieser Wert wird mit dem L-Kommando wieder in das X-Register geschrieben, wobei der Stack zuvor um eine Stufe nach oben verschoben wird. Der Inhalt des LAST-X-Registers wird dabei nicht verändert.

Numerische Operationen

Mit HPKC können die folgenden acht numerischen Operationen ausgeführt werden:

+ Addition Y+X
- Subtraktion Y-X
* Multiplikation Y*X
^ Potenzierung Y^X (Y hoch X)
/ Ganzzahliger Quotient INT(Y/X)
  - Rest X*(Y/X-INT(Y/X)) -> Register R
& Bitweises AND X&Y
| Bitweises OR X|Y
~ Negation (2-er Komplement) ~X

Mit Ausnahme der Negation sind alle Funktionen binäre Operationen, d.h. es werden zwei Operanden benötigt, die sich im X- und im Y-Register befinden. Beide Operanden gehen bei der Ausführung einer Operation verloren, da der Stack um eine Stufe nach unten verschoben wird und sich das Ergebnis stets im X-Register befindet. Die Negation dagegen verändert nur das X-Register.

Bei der Division wird neben dem ganzzahligen Quotienten auch der Rest berechnet. Dieser wird im R-Register abgelegt, das als Speicherregister nicht Bestandteil des Stacks ist (siehe unten).

Eine Fehlermeldung (Beep) wird ausgegeben, wenn eine Taste gedrückt wird, die keiner numerischen, Stack- oder sonstigen Funktion zugeordnet und auch keine gültige Ziffer im gerade eingestellten Zahlenformat ist. Diese Fehlermeldung erscheint auch, wenn bei Multiplikation, Division oder Potenzierung ein 16-Bit-Zahlenüberlauf auftritt sowie bei einer versuchten Division durch Null. In diesen Fällen wird kein Ergebnis ausgegeben und die Operanden im X- und Y-Register bleiben unverändert.

Speicherregister

Neben den Stackregistern stehen weitere sieben Register zur Verfügung: die Speicherregister M0 ... M5 sowie das R-Register. Diese können verwendet werden, um Zwischenergebnisse bei längeren Rechnungen außerhalb des Stacks zu speichern. Ihre Inhalte werden beim Löschen des Stacks mit <CLR> nicht verändert. Dem R-Register kommt im Zusammenhang mit der Division eine besondere Bedeutung zu. Folgende Kommandos können für den Zugriff auf die Speichregister verwendet werden.

Sn
Speichern:
Der Inhalt des X-Registers wird in eines der Speicherregister übertragen (n = 0...5 oder R). Der vorherige Inhalt des Speicherregisters wird überschrieben, während das X-Register unverändert bleibt.
 
Rn
Speichern:
Der Inhalt eines der Speicherregister (n = 0...5 oder R) wird in das X-Register übertragen. Der vorherige Inhalt des X-Registers wird überschrieben, der Inhalt des Speicherregisters bleibt erhalten.
 
M
Anzeige der Speicherregister:
Die Anzeige wechselt von der Darstellung der Stackregister zur Darstellung der Speicherregister. In diesem Zustand können keine weiteren Kommandos ausgeführt werden. Jede Tastenbetätigung führt zurück zur Anzeige des Stacks.

Zahlenformate

Numerische Werte werden zur Anzeige als vorzeichelose 16-Bit-Zahlen interpretiert. Der Betrag von negativen Zahlen im Zweierkomplement kann im X-Register mit dem Kommando '~' zur Anzeige gebracht werden. Die Darstellung der Registerinhalte erfolgt in einem von fünf Zahlenformaten. Die Umschaltung zwischen den einzelnen Formaten wird durch Betätigung von <ESC> eingeleitet. Danach folgt der erste Buchstabe des gewünschten Formats:

<ESC>H
Hexadezimales Zahlenformat:
0000 ... FFFF
<ESC>D
Dezimales Zahlenformat:
00000 ... 65535
<ESC>O
Oktales Zahlenformat:
000000 ... 177777
<ESC>B
Binäres Zahlenformat:
00000000 ... 11111111
Es werden nur die niederwertigen 8 Bit der Reigisterinhalte angezeigt. Die Eingabe ist auf 8 Bit beschränkt.
<ESC>C
Zeichenformat:
Die niederwertigen 7 Bit der Registerinhalte werden als ASCII-Zeichen interpretiert.
Steuerzeichen wird ein '^' vorangestellt (z.B. erscheint 03h als '^C'). Alle Zeichen, die in HPKC keine Kommandofunktion besitzen, können in diesem Format direkt eingegeben werden. Zeichen mit Kommandofunktion (z. B. 'L', '/', '=', <CLR> usw.) können durch vorheriges Betätigen von <ESC> eingegeben werden. Die Zeichen 'H', 'D', 'O', 'B' und 'C' können im Zeichenformat nicht eingegeben werden.

 

Zahleneingabe

Die Betätigung von <RET> ist nur erforderlich, um zwei oder mehr Zahlen bei der Eingabe voneinander zu trennen. Die Eingabe der letzten Zahl vor einer numerischen oder Stackfunktion darf nicht mit <RET> abgeschlossen werden, da das Eingaberegister mit dem X-Register identisch ist. Anderenfalls kommt es zu einer ungewollten Verschiebung des Stacks.

In Abhängigkeit vom eingestellten Zahlenformat wird bei der Zahleneingabe eine maximale Anzahl von Ziffern akzeptiert. Wird diese Anzahl überschritten, werden die führenden Ziffern abgeschnitten. Trotzdem auftretende Zahlenbereichsüberschreitungen werden bei der Konvertierung in die interne Darstellung "modulo FFFFh" reduziert.

Bei der Zahleneingabe kann die Backspace-Taste <CUL> zum Löschen der jeweils letzten Ziffer verwendet werden. In allen anderen Fällen wird das X-Register mit <CUL> vollständig gelöscht.

Verlassen des Calculators

Durch Betätigung von <BRK> kann der Calculator verlassen werden. Der ursprüngliche Bildschirminhalt wird daraufhin wiederhergestellt und die Bedienung des Programms im D004 fortgesetzt.

Beispiele

Die folgenden Beispiele sollen einige der Möglichkeiten von HPKC illustrieren.

  1. Wieviel ist (122+31)*8 ?
    Tasten: <ESC>D 122 <RET> 31 + 8 *
    Ergebnis: D>01224

  2. Wieviele 128-Byte-Records finden zwischen den Adressen D000h und E100h Platz ?
    Tasten: <ESC>H E100 <RET> D000 - <ESC>D 128 /
    Ergebnis: D> 00034 (E100h-D000h)/128d

  3. Welches Zeichen ergibt 'w' AND 5Fh ?
    Tasten: <ESC>C w <ESC>H 5F & <ESC>C
    Ergebnis: C> W

  4. Wie sieht -115 in Binärdarstellung aus ?
    Tasten: <ESC>D 115 ~ <ESC>B
    Ergebnis: B> 10001101

  5. Wieviel ist 5 hoch 4 ?
    Tasten: <ESC>D 5 <RET> 4 ^
    Ergebnis: D> 00625

  6. Wieviel ist 6+7+8+9 ?
    Tasten: 6 <RET> 7 <RET> 8 <RET> 9 + + +
    Ergebnis: H> 001E

Programmsteuerung

Zur Verwaltung von HPKC im "CAOS-Fenster" besitzt der Calculator eine spezielle Programmsteuerung. Anwendern des Druckermanagers DRUCK.COM (KC-News 4/94) ist diese Steuerung bereits bekannt. Mittels <HOME> gelangt man in ein Menu, in dem das Programm HPKC deaktiviert werden kann oder zum vorhergehenden verzweigt wird. Nach dem Deaktivieren führt der erneute Aufruf über <SHIFT>-<CLR> nicht mehr zum Calculator (das ist erst wieder nach Aufruf der COM-Datei möglich), sondern zu dem ursprünglich über diese Tastenkombination zu erreichenden Programm. Ein solches Programm läßt sich auch direkt und ohne Deaktivierung von HPKC als 'ursprüngliches' aufrufen.

Wenn also zunächst DRUCK.COM und danach HPKC.COM gestartet wurde, gelangt man über das Programmsteuer-Menu von HPKC unter dem Punkt 'ursprüngliches' in den Druckermanager oder umgekehrt, wenn zunächst HPKC.COM und danach DRUCK.COM gestartet wurde.

Mit <CUL> oder <CUL> in der obersten Zeile der Programmsteuerung gelangt man zurück zur zugehörigen Anwendung, in diesem Fall also zum Calculator. Mit <RET> läßt sich die Anwendung vom Programmsteuer-Menu aus direkt beenden.

Wegen der anderweitigen Verwendung bestimmter Tasten in HPKC ist die Programmsteuerung des Calculators nicht vollständig mit der des Druckermanagers identisch. Bezüglich dieser Erscheinung sei aber auf den folgenden Ausblick verwiesen. Ein anderes Problem bringt die nur einfache Verkettung der Programme DRUCK und HPKC mit sich. Wird das zuerst geladene Programm mittels seiner Programmsteuerung deaktiviert, ist danach auch das zweite - und alle weiteren - nicht mehr über <SHIFT>-<CLR> erreichbar.

Ausblick

Die beiden Programme DRUCK und HPKC haben nicht nur äußerlich viele Gemeinsamkeiten, auch was den Programmcode im Grundgerät betrifft, sind einige identische Teile zu finden. Beide Programme sind aber völlig selbstständig und sollen es auch in Zukunft bleiben. Was aber unbedingt vermieden werden soll, sind identische Programmteile im eng begrenzten Speicher des Grundgerätes. Die Lösung des Problems wäre eine dynamische Speicherverwaltung, die zusätzlich sicherstellt, daß Routinen des einen Programms auch von anderen Programmen aufgerufen werden können und eine solche Code-Bibliothek nur einmal, nämlich bei Aktivierung des ersten Programms, ins Grundgerät geladen wird. Dann ist auch eine zentrale Programmsteuerung denkbar, die die oben beschriebenen Effekte beseitigt.

Für ein solches Speichermanagement im Grundgerät gibt es bei einigen Programmierern bereits konkrete Vorstellungen (siehe Artikel in dieser Ausgabe) und es ist zu erwarten, daß sich hier bald eine Einigung ergibt, aus der ein neuer Standard wird, an den sich dann hoffentlich viele KC-Anwender orientieren werden.