|
x48 emuliert einen HP48 Taschenrecher. Was für Stolpersteine einem bei der Inbetriebnahme dieses Emulators begegnen können, und was man mit dem Taschenrechner der Taschenrechner sonst noch so machen kann, ist hier zu lesen. Wer kennt ihn nicht -- den HP48 Taschenrechner. Doch wie man eine 128K RAM Karte baut, den Rechner in Assembler, RPL oder C programmiert, oder gar den Rechner öffnet -- das alles und mehr ist im Internet zu finden (s. Tabelle Infos und Quellen rund um den HP48) und dürfte so manchen Hunger nach mehr Informationen und Daten zu diesem Klassiker unter den Taschenrechner stillen.
Oder wie wäre es mit einer kompletten Emulation auf Ihrem Linux Rechner? x48 ist ein solcher Emulator. Er emuliert einen Hewlett-Packards HP48 S/SX oder G/GX, je nach Wunsch (genauer: je nach ROM-Datei). Dieser Artikel beschreibt nebst der Beschaffung der Quellen, Kompilierung, Installation und Konfiguration auch die Tücken, die einem dabei über Weg laufen können. Unterstützt wird:
Nicht unterstützt wird:
Benötigt wird:
(Übrigens, ein HP48 Emulator gibt's nicht nur für Unix-Systeme, Emu48 ist z.B. eine Version für DOS/Windows....aber wir interessieren uns hier natürlich für die Version unter Linux... :)
InstallationZuerst muss man sich den Quellcode beschaffen. Die Quellen findet man unter ftp://www.sunsite.unc.edu im Verzeichnis /pub/Linux/system/Emulators/, oder entsprechend auf den Sunsite-Mirrors.Nach dem Download kann die Datei x48-0.4.0.tar.gz mit tar xzfv x48-0.4.0.tar.gz entpackt werden. Weiter sollte man noch ein chown und chgrp ausführen, # chown -R root x48-0.4.0, chgrp -R root x48-0.4.0 erledigt das. Im Verzeichnis 'x48-0.4.0' muss die Datei config.h editiert werden. Hier werden Compiler-Flags, aber vor allem das Betriebssystem eingestellt. Datei config.h /*Die Eingabe von 1. xmkmfim Verzeichnis 'x48-0.4.0' unter X-Window erzeugt den Emulator x48, den ASCII-ROM-file-to-bin-file Converter dump2rom und das ROM-Checkprogramm checkrom; weiter das Hilfprogramm für die Erweiterungskarten mkcard. Schon nach kurzer Zeit läuft make mit der Fehlermeldung cd src ; make allin den Hammer. Offensichlich liegt ein Bug im automatisch erzeugten "/src/Makefile" vor. Wir schauen nach und finden die Zeilen: 577 $(BIN)/mkcard: $(OBJS4) $(DEPLIBS4)In Zeile 581 fehlt ein Doppelpunkt nach "SaberProgramTarget". Wir korrigieren den Fehler aber nicht im Makefile; denn schon die "/src/Imakefile" Datei könnte falsch sein. Also suchen wir nach 'SaberProgramTarget'. Wir werden fündig: 98 #ifndef ComplexProgramTarget_4Nach "SaberProgramTarget" muss ein Doppelpunkt (:) gefolgt von mindestens einem Leerzeichen eingefügt werden. Die neue Zeile heisst jetzt: 104 SaberProgramTarget: (program,$(SRCS4), \Nach diesen Korrekturen und nochmaligem 'xmkmf' und 'make' wird alles übersetzt.
Nun muss alles noch an den richtigen Ort. make -n install
liefert schon mal, wo das Programm überall Dateien hinkopiert,
ohne dabei eine Aktion auszuführen. Die Binärdateien
kämen ins Verzeichnis '/usr/X11R6/bin', und die globale
Application-Default-Datei würde mit den Permission Bits 0444
ins '/usr/X11R6/lib/X11/app-defaults/X48' Verzeichnis kopiert.
Ist man damit einverstanden, kann der x48 mit make install
installiert werden.
Wir wählen aber mal die Installation von Hand. Die bietet nähmlich den Vorteil, alle Dateien von einem Programm in einem Verzeichnis zu haben-- - wenn das Programm einen Update erhalten soll, so genügt ein Anpassen der Links.
Wer nicht selber kompilieren will, findet unter [2] die Linux-ELF Version. Für den Betrieb der seriellen Schnittstelle müssen noch Einträge in der Datei '.Xdefaults' (oder jenachdem, in welcher Datei die eigenen Resourceneinstellungen vorgenommen werden) konfiguriert werden. Mit xrdb -merge .Xdefaults werden die Einträge aktiv. x48*useSerial: True Für weitere Infos schaue man in der Datei x48-0.4.0/src/X48.ad nach. ROM Dump...Nun benötigen wir noch das ROM-Dump. Das wird mit dem mitgeliefertem Program ROMDump im Verzeichnis 'romdump' erledigt. Dieses Programm wird auf den HP geladen. Dann wird auf dem PC ein Kermit-Programm mit der Übertragunsrate von 9600 Baud gestartet, weiter müssen die empfangenen Daten mit log session in eine ASCII-Datei gespeichert werden. Um ein Verbindungsaufbau von Seiten PC zu starten, muss noch connect eingegeben werden.
Auf dem HP kann nun mit der Eingabe von #0h #7FFFFh ROMDump
(HP48 S/SX) oder #0h #FFFFFh ROMDump (HP48 G/GX) der Vorgang
gestartet werden. Eine Wartezeit von ca. 30 Minuten ist nun angesagt...
#00000:2369B108DADF1008Diese ASCII-Datei kann dann mit dem Programm-Aufruf dump2rom session.log in (endlich) eine für den Emulator lesbare binäre ROM-Dump Datei namens rom.dump konvertiert werden.
Gesagt getan. Das Programm #0h #7FFFFh ROMDump kommt aber nur
von #0h bis #03F0h... (ein Programmfehler?!)
705D9:1B8DB178E5A111B6Links neben dem Doppelpunkt steht die Adresse, rechts die Bytes. Mit der Taste [del] kann die Adresse auf C0000 eingestellt werden. Nun muss mit der Taste [(pfeil-nach-unten)] die Adresse auf 00000 eingestellt werden. Die Taste [.] (Punkt) wird die aktuelle Zeile gesendet; mit der Taste [spc] (Space) wird ab der aktuellen Zeile gesendet...bis mit [on] + [c] unterbrochen wird. Allerdings stopt der Prozess alle paar Minuten -- ein Druck auf die Taste [spc] macht aber brav weiter... Hat man alle gewünschten Bytes, so kann die Verbindung abgebrochen werden. Endlich haben wir die ASCII-ROM-Datei! Aber auch das Programm 'dump2rom' macht Probleme. Die Eingabe dump2rom session.log endet mit einem einer Fehlermeldung. Wieso? Weil die Datei nicht unter Linux, sondern mit einem Kermit Programm unter DOS empfangen wurde, enthält die ASCII-Datei noch nach jeder Zeile ein CR (Carriage Return, Hex 0Dh). Dieses Byte muss weg. Das geht so: # cat session.log | tr "\r" "x" > session2.log(Natürlich währe das alles nicht nötig gewesen, wenn wir direkt unter Linux mit kermit die ASCII-Datei empfangen hätten --aber eben-- wenn es sein muss, geht's auch so...). Die cat-tr Zeile ersetzt jedes DOS CR (=0x0d) in ein 'x'. Die sed Zeile löscht dieses 'x'. Das Ergebnis ist eine 'reine' Unix ASCII-Datei mit Zeilenabschlusszeichen LF (=0x0a). (PS: Ein WinNT Anwender müsste hier wohl passen...) Nun kann mit dump2rom session3.log die fertige Datei 'rom.dump' erstellt werden. Den ROM-Dump kann man nun auch noch gleich mit checkrom rom.dump auf Korrektheit überprüfen. Das sieht so aus (abhängig von der ROM-Version): # ./checkrom rom.dump Wenn alles ok ist, muss die ROM-Dump Datei ins 'bin' Verzeichnis des Emulators kopiert werden.
RAM-Karten standen dem Autor nicht zur Verfügung, aber soviel sei
doch gesagt: Um eine RAM Karte zu benutzen (128K oder 32K auf dem SX,
bis 4M auf dem GX), wird mit dem Programm mkcard eine Datei
port1 bzw. port2 erstellt und ins Verzeichnis ~/.hp48/
kopiert. x48 erkennt dann diese 'Erweiterunskarten' automatisch.
Der erste Start...Gestartet wird x48 mit der Eingabe von x48, oder mit der expliziten Angabe einer ROM-Datei (x48 -rom <romdatei>). Die Kommandozeilenoptionen können mit x48 -help angezeigt werden. Endlich! Abbildung 2 zeigt das Prachtsstück. Abbildung 3 zeigt x48 in Aktion.
...SegfaultWas aber, wenn der Emulator mit einem "Segmentation fault" aussteigt? Hier meine Ergebnisse nach ein paar Debbuging-Sessions:Auf einem coff (a.out) System musste der Schritt 4 (4. Values from XResourceManagerString() or ~/.Xdefaults) in der Datei "/src/x48_x11.c" mit #if 0 ... #endif vollständig auskommentiert werden. Danach funktionierte alles. Bei einem anderen Fall (auf einem ELF System) wollte der Emulator von einer nicht vorhanden Erweiterungskarte lesen. Dort musste in der Datei "/src/memory.c" in der Funktion "read_nibble_sx" die Zeile 1018 (return saturn.port2[(addr - 0xc0000) & port2_mask];) ganz auskommentiert werden. Danach war alles ok. Gut VerbundenIm Emulator sieht man eine Zeile, die angibt, über welchen Device die serielle Schnittstelle und die lokale Harddisk erreicht wird.wire:/dev/ttyp2 IR:/dev/ttyS0Mit der Einstellung [I/O] Menü, [SETUP]: wire, binary, 9600, none 0, 1, 3 und [I/O] Menü, [SERVER], Awaiting Server Cmd. seitens x48 und kermit starten, set line /dev/ttyp2, send backup-datei seitens Kermit-Programm kann eine HP-Backup-Datei geladen werden. Software findet man zu hauf im Internet. Siehe auch Tabelle 'Infos und Quellen'. Mir bleibt da nur noch viel Spass zu wünschen!
Copyright © 1997 Linux-Magazin Verlag |
Copyright © 2003, 2002, 2001, 2000, 1999 by M i c h a e l Mustun michael@mustun.ch (Last modified:
05. September 2002)
All Rights Reserved / Dislaimer |