# HP-85

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

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.
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, 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.
Insbesondere ab Mitte der 80er Jahre wurden zunehmend Festplatten, die an den HP-IB-Bus angeschlossen wurden, zur Programm- und Datenspeicherung genutzt. Da die größten zu dieser Zeit erhältlichen Festplatten-Laufwerke 500 MB hatten, war es rein theoretisch möglich, 37,5 GB mit einem HP-86/87 anzusprechen (einmal HP-IB, vier HP-IB-Steckkarten, 15 Festplatten pro Bus). Bei einem Stückpreis von 50.000 DM für ein 500 MB Laufwerk von HP im Jahre 1986 hätte eine solche Kapazität jedoch über 3,7 Millionen DM gekostet. Die gebräuchlichen Festplattengrößen zu dieser Zeit waren 20 oder maximal 80 MB, die für Preise zwischen 2.500 und 8.000 DM erhältlich waren. Anbetracht des sehr geringen Speicherbedarfs der BASIC-Programme (Programme wurden in Token-Form und nicht im Klartext gespeichert), konnten sehr große und sehr viele Programme gespeichert werden. Auch bei den zu speichernden Daten wurden andere Maßstäbe als heutzutage angelegt. In erster Linie wurden Zahlen (im weitesten Sinne) und weniger Texte gespeichert. Da die auf diesem Wege häufig verarbeiteten Messreihen in der Regel nur hunderte oder tausende (sehr selten zehntausende) von Werten enthielten, wurde solche Festplattenkapazitäten als nahezu unerschöpflich betrachtet.
Über den optionalen oder fest eingebauten HP-IB konnte eine Vielzahl von Peripheriegeräten direkt angesprochen werden. Da der HPIB-Bus in den 80er Jahren ein Quasi-Standard im technischen Bereich war, gab es unzählige direkt an den Rechner anschließbare Mess- und Steuergeräte sowie Drucker und Plotter von verschiedenen Herstellern. Selbst Großsysteme wie z. B. Klimaschränke wurden von HP-86-Systemen via HPIB gesteuert.

## Historischer Zusammenhang

In den späten 1970er Jahren wurden vergleichsweise preiswerte Heimcomputer wie zum Beispiel der Apple II oder der TRS-80 entwickelt. Steve Wozniak entwickelte den Apple Computer mit der Idee eines Computers, der sofort nach dem Einschalten ein BASIC zur Verfügung stellt. Für dieses Konzept bot er HP die Rechte an, bekam jedoch eine Absage. In einem Interview merkte er an, dass die Taschenrechner-Division kurz danach anfing ein 8-Bit-Computer-Projekt aufzulegen, dem der Codename Capricorn gegeben wurde. Es wurde ihm nicht gestattet, an diesem Projekt mitzuarbeiten. Schlussendlich entwickelte sich kurz danach der Markt für Desktop-Computer basierend auf der IBM-PC-Architektur mit einem eingebauten Diskettenlaufwerk, von dem ein Betriebssystem geladen wurde. Auf diesen Computern kam ein Intel 8088 Prozessor zum Einsatz. Dass der IBM-PC und dazu kompatible Rechner sich durchgesetzt haben, liegt an der von IBM von Anfang an verfolgten offenen Architektur, die zu zahlreichen Nachbauten führte.

## Emulationen

Die gut dokumentierte Hardware und die verfügbaren Listings des Betriebssystems inkl. umfangreicher weiterer Dokumentationen ermöglichten es, verschiedene Emulationen für die Serie-80-Computer zu erstellen. Es existieren – größtenteils freie – Emulationen für Windows, Linux und Android. Insbesondere der leicht verständliche BASIC-Interpreter ermöglicht es, eigene Programme auf einer solchen Emulation schnell zu entwickeln und so erste Erfahrungen mit Computerprogrammierungen zu sammeln, ohne sich mit umfangreichen großen Bibliotheken beschäftigen zu müssen.

## Hardware
### Modelle

| Modell | Jahr | Einführungs- preis | Preis 2025 (inflationsbereinigt) | Bemerkungen |
| HP-85A | 1980 | 3.250 $ | 10.691 $ | 16 K RAM, 32 K ROM; 5" CRT, 32×16 Text or 256×192 Graphics; Kassettenlaufwerk, Thermodrucker |
| HP-83 | 1981 | 2.250 $ | 6.706 $ | Wie der HP-85, jedoch ohne Drucker und ohne Kassetten-Laufwerk |
| HP-86A | 1982 | 1.795 $ | 5.041 $ | eigenständiger externer SW-Monitor, kein Kassetten-Laufwerk, kein Drucker; zwei Schnittstellen für 9130 Floppy-Laufwerke und ein eingebauter Centronics-Drucker-Anschluss, 64 K RAM |
| HP-87 | 1982 | unbekannt | unbekannt | 9" 80×16 (256×128) SW-Bildschirm, kein Drucker, kein Kassetten-Laufwerk, eingebautes HP-IB, 32 K RAM |
| HP-85B | 1983 | 2.995 $ | 8.149 $ | Abweichend zum HP-85A voller Speicherausbau mit 64 K RAM (32 K Programm/Variables, 32 K RAM-Disk); I/O, EDISK, und Mass Storage ROM eingebaut |
| HP-86B | 1983 | 1.595 $ | 4.340 $ | Abweichend zum HP-86A eingebautes HP-IB Disketten-Anschlüssen und Centronics-Port, 128 K RAM, EDISK ROM eingebaut |
| HP-87XM | 1983 | 2.995 $ | 8.149 $ | Abweichend zum HP-87 eingebautes HP-IB, 128 K RAM |
| HP-9915A/B | 1980 | 1.675 $ | 5.510 $ | Industrie-Rack-Version eines HP-85A/B ohne Bildschirm und Tastatur, I/O ROM und Program Development ROM eingebaut |

### ROM-Erweiterungen

Bemerke: Die HP-86/87 Serie verwendete andere ROMs (gelb beschriftet) als die 85/83-Modelle (weiß beschriftet).
| 83/85 | 86/87 | Funktion | Beschreibung | ID |
| 00085-15003 | 00087-15003 | I/O | Zugriff auf HP-IB, Seriell und Parallel (GPIO) Interface | 192 |
| 00085-15001 | built-in | Mass Storage | Zugriff auf HP-300-Amigo-kompatible Diskettenlaufwerke via HP-IB. Im 85B und allen 86/87 Modellen bereits standardmäßig vorhanden. | 208 |
| 00085-15002 | 00087-15002 | Printer / Plotter | Unterstützung externer Drucker/Plotter (86/87 benötigen das ROM nur für den Plotter-Zugriff) | 240 |
| 00085-15005 | 00087-15005 | Advanced Programming | Extended Rocky-Mountain-BASIC Anweisungen | 232,231 |
| n/a | 00087-15012 | Electronic Disk | Nutzte Teile des Speichers für eine RAM-Disk, im 85B, 86B bereits standardmäßig vorhanden. | 209 |
| 00085-15004 | 00087-15004 | Matrix | Mathematische Matrix-Operationen inkl. Invertierung (lösen linearer Gleichungssysteme) | 176 |
| n/a | 00087-15004 | Matrix 2 | Zusätzliche Matrix-Funktionen | 177 |
| 00085-15007 | 00087-15007 | Assembler | Bearbeiten und übersetzen von Assembler-Quellen für die Capricorn-Architektur | 40 |
| n/a | 00087-15011 | MIKSAM | Indexed-Datei-Record-Management (ein Sonder-ROM im Kundenauftrag) | 14 |
| 00085-15013 | 00087-15013 | EMS | Extended Mass Storage, Zugriff auf SS-80-kompatible Massenspeicher | 207 |
| 00085-60952 | 00087-60912 | Service – System | Diagnostik-Routinen für Service und Wartung | 224 |
| ? | 00087-60913 | Service – HPIB | Diagnostik-Routinen für Service und Wartung | 225 |
| 98151A | n/a | Program development | Unterstützung eines HP-9915 Front-Panels oder um es auf einem 83/85 zu emulieren | 8 |
| n/a | AKSO-Sysext | Sysext | Erweiterungen des BASIC um strukturierte Programmierung, selbst modifizierenden Code, Low-Level-Programmierung, Hersteller Andre Koppel Software | 56 |

### Hardware-Erweiterungen

| 82936A | ROM Einschub für bis zu sechs der obigen ROMs (max. einer pro Einheit) |
| 82903A | 16 K Speicher-Modul, nur für HP-85A (max. eins pro Computer) |
| 82908A | 64 K Speicher-Module, für HP-85B oder HP-86/87 |
| 82909A | 128 K Speicher-Module, für HP-85B oder HP-86/87 |
| 82900A | CP/M System (nur für HP-86/87). Enthält einen Zilog Z80 Mikroprozessor und 64 kilobytes eigenständiges RAM. |
| 82928A | System monitor für Hardware-Entwicklung. Setzt Breakpoints zum Debuggen. |
| 82929A | Programmierbarer ROM-Einschub für Standard EPROMs |

### Schnittstellen

Die Interface-Module der Serie 80 wurden um einen proprietären Bus-Interface-Chip herum aufgebaut, der einen Standard Intel 8049 microcontroller mit dem Haupt-Bus verband. Interface-Funktionen wie Handshaking wurden an die 8049 Firmware ausgelagert.
| 82937A | HP-IB Interface (GPIB, IEEE-488, IEC625) |
| 82938A | HP-IL Interface |
| 82939A | RS-232 Serial interface |
| 82940A | GPIO Interface (Allzweck 4 × 8-bit Parallel) |
| 82941A | BCD Interface (Parallel, 11 Binary Coded Decimal Digits + Vorzeichen) |
| 82949A | Drucker Interface (Centronics Parallel Interface) |
| 82950A | Modem (110/300 bit/s, Bell 103/113) |
| 82966A | Data Link Interface (zur Verbindung mit HP1000/3000 Hosts) |
| 82967A | Sprach-Synthese-Modul, Vokabular mit 1500 englischen Wörtern, verwendet wurde ein Texas Instruments TMS5220 Synthesizer Chip |