mini|Ein laufender HP-85 mit einem BASIC-Listing auf dem Bildschirm mini|HP-85B

Der HP-85 war ein Teil der Hewlett-Packard Serie 80 kleiner wissenschaftlicher Schreibtisch-Computer, die 1980 eingeführt wurde. Das erste Modell war der HP-85, der sich an Ingenieure richtete und auch zur Anlagensteuerung verwendet wurde. Der Computer hatte die Fähigkeiten der HP 9800 Serie Schreibtisch-Computer mit einem integrierten Monitor. Bei kleineren Abmessungen war ein Thermodrucker und ein digitales Kassettenlaufwerk integriert, und das für den halben Preis der HP 9800 Serie.

Eigenschaften mini|HP-86B mit 9121 Dual-Diskettenlaufwerk Das erste Modell der Serie 80 war der HP-85, er wurde im Januar 1980 eingeführt. Im amerikanischen Byte-Magazin wurde enthusiastisch berichtet „wir waren beeindruckt von der Leistungsfähigkeit … allein schon die Grafik macht ihn attraktiv, trotzdem ist er nicht teuer, verglichen mit anderen kleinen Systemen auf dem Markt … wir gehen davon aus, dass viele Personal-Computer-Enthusiasten und Hacker diese Maschine gerne haben möchten“. Unter einem Personal-Computer verstand man damals etwas anderes als heute.

In einem Gehäuse in der Bauform einer Schreibmaschine enthielt der etwa 4500 DM teure HP-85 eine CPU, eine Tastatur, ein ROM-basierendes Betriebssystem (wie die Serie 9800), 16 kB dynamisches RAM, einen 5 Zoll monochrom-Bildschirm (16 Zeilen mit je 32 Zeichen oder 256×192 Pixel), ein Kassetten-Laufwerk für DC-100 Kassetten (210 kB Kapazität, 650 B/s Transfer) und einen Thermodrucker. Sowohl der Bildschirm als auch der Drucker waren in der Lage, Text und Grafik darzustellen; der Drucker konnte eine Kopie des Bildschirms anfertigen. Das Gehäuse hatte auf der Rückseite Platz für vier Einschuberweiterungen. Solche Erweiterungen gab es in Form von Speichermodulen, ROM-Erweiterungen, Schnittstellen wie zum Beispiel RS-232 und HP-IB (GPIB, IEEE-488, IEC625). Alle Komponenten wurden von der Hewlett-Packard Personal Computer Division in Corvallis entworfen, inklusive des Prozessors und der Basis-Chipsets.A New World of Personal/Professional Computation. In: Todd R. Lynch: Hewlett-Packard Journal. Juli 1980, Band 31, Nr. 7, S. 3.

Spätere Modelle boten verschiedene Variationen wie unterschiedliche interne und externe Bildschirme, eingebaute Schnittstellen oder Rack-Gehäuse (siehe Tabelle unten für Details).

CPU-Architektur Die Maschine basierte auf einer proprietären HP-CPU mit dem Code-Namen Capricorn (Steinbock), die Taktfrequenz betrug 625 kHz (tatsächlich nur 0,6 MHz) und hatte einen BASIC-Interpreter im ROM (32 kB). Programme konnten auf DC-100 Kassetten oder externen Disketten und Bändern gespeichert werden.

Trotz der vergleichsweise niedrigen Taktfrequenz des Prozessors war die Maschine sehr fortgeschritten im Vergleich zu anderen Computern dieser Zeit,e.g. Apple II (1977), Tandy TRS-80 (1977), CBM 2001 (1977), Zenith Z89 (1980). insbesondere in Bezug auf Software-Eigenschaften, die für technische und wissenschaftliche Anwendungen wichtig sind. Das Standard-Zahlenformat war ein Gleitkomma-Format mit einer 12 Ziffern Mantisse und einem Exponenten von ±499. Durch die konsequente Unterstützung von bis zu 64 Bit langen BCD-Zahlen (die in einem Taktzyklus verarbeitet werden), erreichte die Gleitkommabibliothek für damalige Zeiten eine große Verarbeitungsgeschwindigkeit bei hoher Genauigkeit. Die Capricorn-CPU enthielt insgesamt 64 8-Bit Register. Die ersten 32 Register waren in 2-Byte-Gruppen unterteilt, die nächsten 32 Register in 8-Byte-Gruppen. Alle CPU-Anweisungen, die eines der Register adressierten, arbeiteten vom angegebenen Register bis zur nächsten 2-Byte- oder 8-Byte-Grenze. Dafür wurde jeweils nur ein Taktzyklus benötigt, egal ob während dieses Taktzyklus ein oder acht Byte verarbeitet wurden.

Die jahrelange Erfahrung im Design von wissenschaftlichen Taschenrechnern floss hier in das CPU-Design ein. Auch das interne Verarbeitungsformat des BASIC-Interpreters war stark durch die HP-Taschenrechnerarchitektur inspiriert. Alle eingegebenen Anweisungen wurden nach dem Drücken der Return-Taste übersetzt und in eine Token-Form überführt. Die interne Speicherung erfolgte vollständig im UPN-Format. Das hatte den sehr großen Vorteil, dass während der Abarbeitung der Programme keinerlei Prüfung mehr stattfinden musste. Der BASIC-Interpreter konnte die vorab umgewandelten Tokens direkt als Indizes in Sprungtabellen verwenden. Da mathematische Ausdrücke vorab in UPN transformiert wurden, mussten während der Abarbeitung auch keine Prioritäten mehr berücksichtigt werden.

Bedingt durch die 8-Bit-Architektur konnte der Prozessor nur insgesamt 32 kB RAM ansprechen. Für die Modelle HP-86/87 erweiterte HP das Betriebssystem dahingehend, dass die Speicheradressierung für BASIC-Programme indirekt über einen 32-Bit DMA-Zeiger erfolgte. Damit war es theoretisch möglich, diese Computer auf über ein MB Arbeitsspeicher aufzurüsten. Tatsächlich konnten jedoch „nur“ maximal 640 kB eingebaut werden, da die Spannungsversorgung des Computers nicht mehr Arbeitsspeicher aufrechterhalten konnte. Bei einem damaligen Preis von rund 2.500 DM für ein 128-kB-Modul war die Aufrüstung entsprechend teuer.

BASIC Das in der HP-Serie-80 vorhandene BASIC richtete sich in erster Linie an Wissenschaftler und Ingenieure, entsprechend war der Sprachumfang. Der BASIC-Interpreter unterstützte basierend auf der technischen Ausrichtung einen umfangreichen Satz von wissenschaftlichen Funktionen (trigonometrische Funktionen, Logarithmen usw.) mit der entsprechend vollen Genauigkeit. Die Sprache unterstützte zudem zweidimensionale Felder und eine ROM-Erweiterung bot zusätzliche mathematische Funktionen wie Matrizen-Multiplikationen, -Invertierungen u. v. m.

Der HP-BASIC-Interpreter unterschied sich von anderen BASIC-Interpretern seiner Zeit in einigen wesentlichen Bestandteilen. So wurden Programme nicht als Text gespeichert und während der Laufzeit abgearbeitet, sondern in einer UPN-Bytefolge gespeichert und abgearbeitet. Die Logikprüfung einer Programmzeile musste dadurch nur einmalig (nach dem Drücken der Eingabetaste für jede Zeile) durchgeführt werden. Zudem war der Sprachumfang dynamisch erweiterbar. Durch Hinzuladen von Binärprogrammen oder Einstecken von ROMs wurden dem BASIC-Sprachschatz neue Befehle hinzugefügt, die in der gleichen Form genutzt werden konnten, wie die in der Grundausstattung vorhandenen Anweisungen. Später verfügbare Erweiterungen – wie z. B. das SYSEXT-ROM – boten zudem die Möglichkeit, dynamisch festzustellen, welche Erweiterungen ein Programm tatsächlich benötigt und diese entsprechend während der Laufzeit zu laden.

Das gesamte BASIC-System war Token-getrieben. Im Detail verarbeitete das System eine Eingabezeile nach dem Drücken der Return-Taste wie folgt: Durchsuchen der Schlüsselworttabellen und Abgleich der eingegebenen Anweisungen mit den in den Tabellen vorhandenen Anweisungen Wenn eine Anweisung gefunden wurde, dann wurden die Attribute dieser Anweisung ausgewertet. Die Attribute gaben an, um welchen Anweisungstyp es sich handelt und welche Parameter die Anweisung benötigt. Die Parameter einer Anweisung wurden in UPN-Form umgewandelt und gespeichert Eine Index-Nummer der Anweisung (die Token-Nummer) wurde gespeichert komplizierte Anweisungen oder Anweisungen mit optionalen Parametern wurden nicht direkt vom eingebauten Interpreter geparst, sondern speziellen Parserroutinen übergeben, die der Programmierer für jede solche Anweisung geschrieben hatte Für Variablen oder Sprungmarken wurden zusätzlich zu den Tokennummern und Variablen noch Platzhalter zum späteren Einfügen von Zieladressen gespeichert In Abhängigkeit davon, ob eine Zeilennummer am Anfang stand, wurde die Zeile im Programmspeicher abgelegt oder direkt abgearbeitet

Ein Programm oder eine Zeileneingabe wurde nach der oben beschriebenen Tokenisierung vom System wie folgt abgearbeitet: Zahlen und Adressen wurden auf den Stack gelegt (der annähernd beliebig groß sein konnte) Anweisungstokens wurden als Index in Sprungtabellen verwendet. Damit konnte eine BASIC-Anweisung während der Laufzeit zur Abarbeitung direkt angesprungen werden Variablen-Tokens wurden ausgewertet und das Ergebnis wurde auf den Stack gelegt Funktionen (arithmetisch, logisch u. a.) holten sich die benötigten Werte vom Stack, führten die Berechnung durch und legten das Ergebnis wieder auf den Stack Statements (also BASIC-Anweisungen, die kein Ergebnis liefern) holten sich die benötigten Parameter vom Stack und arbeiteten sie ab Bei Adress- und Variablen-Tokens wurde geprüft, ob der zusätzlich gespeicherte Index-Wert bereits vorhanden ist. Wenn dieser Wert vorhanden war, wurde direkt zu der Speicherstelle gesprungen oder der Variableninhalt direkt von der Speicherstelle geladen. War der Index-Wert nicht vorhanden, so wurde die Speicherstelle oder Variablen-Adresse gesucht und zur weiteren (nächstmaligen) Verwendung gespeichert.

Diese Gesamtstruktur führte zu einem sehr kompakten und extrem schnell abarbeitbarem Byte-Code. Bei den BASIC-Programmen handelte es sich also eigentlich um P-Code. Der Interpreter musste während der Abarbeitung keinerlei Syntax- oder Hierarchie-Prüfungen mehr durchführen.

Neben einer Vielzahl an mathematischen und anderen Anweisungen verfügte das BASIC auch über einen sehr umfangreichen Satz an Grafik-Anweisungen. So war es mit dem eingebauten BASIC möglich, den Bildschirm im Vollgrafikmodus anzusprechen und direkt Linien oder andere Strukturen zu zeichnen, da es dafür einzelne BASIC-Anweisungen gab (wie z. B. SCALE, MOVE, FRAME, DRAW, PLOT, LABEL u.v.m).

Für alle strategischen Ein-/Ausgabekomponenten enthielt das BASIC sog. Hooks. Dabei handelte es sich um Einstiegspunkte, an denen Erweiterungs-ROMs (oder Binärprogramme) eigene Routinen einhängen konnten. Bestehende BASIC-Anweisungen konnten somit um weitere Funktionalitäten erweitert werden. Ein gutes Beispiel dafür war das Plotter-ROM. Wenn dieses ROM eingesteckt war, dann wurden die eingebauten BASIC-Anweisungen intern und automatisch um eine HPGL-Unterstützung erweitert. Zusätzlich zum Bildschirm konnte dann ein angeschlossener Stiftplotter als Ausgabegerät verwendet werden, ohne dass dafür die Grafik-Anweisungen geändert werden mussten.

Die Erstellung eigener Spracherweiterungen in Form von ROMs oder Binärprogrammen wurde mit dem Assembler-ROM ermöglicht. Das ROM bot einen eigenen Assembler-Editor sowie einen Assembler-Compiler, der das Capricorn-Assembler in Maschinensprache übersetzte. Die Funktionalität des Assembler-ROMs integrierte sich in der gleichen Form in das Gesamtsystem wie alle anderen ROMs, indem einfach der BASIC-Sprachumfang um entsprechende Assembler-Anweisungen erweitert wurde.

Ausbaumöglichkeiten Für die größeren Rechner HP-86 und HP-87 bot HP zusätzlich eine CP/M-Steckkarte mit einem zusätzlichen Zilog Z-80-Prozessor an.