HP48 Revance

For 30 år siden, så gamle dage at folk ikke rutinemæssigt slæbte rundt på computere, købte jeg en HP48SX lommeregner. Den har jeg naturligvis stadig.

Senere købte jeg også en HP48GX, den har jeg naturligvis også stadig.

Ikke alene skrev jeg maskinkode og RPN programmer til dem, som med stort set alle andre computere jeg har arbejdet med og på, gik jeg igang med at "reverse engineer'e", som det hedder på nudansk, og det kom der en serie ringbind ud af:

Illustration: Poul-Henning Kamp

Ovenstående putput blev produceret med et temmelig indviklet C-program på en stor UNIX server (Olivetti XP7: 25MHz i386 CPU, 8MB ram og 135MB disk)

Siden da har min "RE" hobby taget et mere arkæologisk sigte og de senere år har jeg arbejdet på et "toolkit" til at disassemblere og analysere programmer fra underlige gamle computere.

I de senere år har malware-pandemien gjort reverse-engineering til en ganske respektabel profession og der findes nogle mildest talt imponerende værktøjer, som dog alle lider af den modernitet at de har som fundamental antagelse at der er 8 bits i en byte og at ord kun kommer i 8, 16, 32 og 64 bits længder.

Der er heller ikke nogen af dem der understøtter andet end de nyeste CPU arkitekturer, hvis man skal disassemblere kode til en Z8000, GIER, eller SATURN CPU er der ingen hjælp at hente.

Det er det hul mit "PyReveng3" projekt prøver at gøre noget ved.

På en tur i sommerhuset stødte jeg ind i det ringbind jeg har scannet ovenstående fra og det inspirerede mig til at lade PyReveng3 prøve kræfter med HP48.

HP48 er en meget speciel computer, bytes kaldes "nibbles" og har kun 4 bits, registre har plads til mellem 1 og 16 nibbles og det meste af programkoden er et fortolket stack-baseret Forth-lignende RPN system med nogle lidt LISP/SmallTALK-agtige objekter.

Det tog 300 linier tabel og 130 linier python at implementere en disassembler for "Saturn/1LT8" CPU'en, det var meget tilfredsstillende, det er netop et af målene med projektet at det skal være nemt at tilføje en ny CPU-arkitektur.

Det tog 830 linier python at håndtere RPN og dets objekttyper, det virker også overkommeligt.

Mindre end 100 linier kode håndtere et par special-tilfælde som tegntabellen og nogle komprimerede bitmaps (se nedenfor) og endelig 300 linier kode til faktisk at skille et ROM image ad i dets bestandtdele.

Alt i alt krævede det ca. 1700 linier python kode at 512 kilobyte binært indhold af en ROM, til en tekstfil med 220.000 linier som kan læses, og med passende indsats, forstås.

Øvelsen inspirerede mig til et par nye detaljer i værktøjskassen og det gav mig lejlighed til at knække en af de få gåder om HP48 jeg ikke fik knækket for 30 år siden:

fa312 47a20      ┆ $LIST
fa317 f2140      ┆ ┆ <00020h>
fa31c b7040      ┆ ┆ <0000eh>
fa321 e4a20      ┆ ┆ $BININT ($RLLBITMAP)
fa326 47100      ┆ ┆ ┆ .REL      0xfa49a         ; End
fa32b 9184380008 ┆ ┆ ┆ .RLLBITMAP
fa335 0900080903 ┆ ┆ ┆ ┌────────────────────────────────────┐
fa33f 08004a8060 ┆ ┆ ┆ │           ▐                        │
fa349 8008002a80 ┆ ┆ ┆ │ ▗         ▐▗▘                      │
fa353 60c008001a ┆ ┆ ┆ │▗▜         ▐▚                       │
fa35d 8060a00800 ┆ ┆ ┆ │▘▟         ▝ ▘                      │
fa367 2a80609008 ┆ ┆ ┆ │▞▐                     ▛▀▀▀▀▀▌      │
fa371 004a8000c0 ┆ ┆ ┆ │▗▜   ▞▀▚▞▀▚▞▀▚▞▀▚▞▀▚   ▌     ▌      │
fa37b 9000a78090 ┆ ┆ ┆ │▘▟   ▌ ▌▐ ▌▐ ▌▐ ▌▐ ▐   ▌ ▛▞▌ ▌      │
fa385 c0ff070009 ┆ ┆ ┆ │▞▐▀▀▀▘ ▌▐ ▌▐ ▌▐ ▌▐ ▝▀▀▀▌ ▌▌▌ ▌      │
fa38f 780f740000 ┆ ┆ ┆ │▗▜     ▚▞ ▚▞ ▚▞ ▚▞     ▌ ▘ ▘ ▌      │
fa399 4000c789ee ┆ ┆ ┆ │▘▟                     ▌     ▌      │
fa3a3 7794000040 ┆ ┆ ┆ │▞▐▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄▄██████▙▄▄▄▄▄ │
fa3ad 00a8461188 ┆ ┆ ┆ │▗▘▞▗▘▞▗▘▞▗▘▞▗▘▞▗▘▞▗▘▞▗▘▞▗▘▞▗▘▞▗▘▞▗▘ │
fa3b7 6400004000 ┆ ┆ ┆ │▘▝ ▘▝ ▘▝ ▘▝ ▘▝ ▘▝ ▘▝ ▘▝ ▘▝ ▘▝ ▘▝ ▘  │
fa3c1 9449224894 ┆ ┆ ┆ └────────────────────────────────────┘
fa49a b2130      ┆ ┆ .REF        $END

Grafikken til det i HP48GX indbyggede "formelbibliotek" var komprimeret med en relativt simpel run-length kodning, det snød mig for 30 år siden at display-controlleren i HP48 er big-endian, mens resten af maskinen er little-endian.

En af nyskabelserne er at vise den slags bitmaps med UniCodes's nymodens block-grafik tegn og det virker meget bedre end den meget grove -/# tegn-grafik i årgang 1991 af samme projekt.

Alt i alt en tilfredsstillende weekend.

phk

Kommentarer (16)
sortSortér kommentarer
  • Ældste først
  • Nyeste først
  • Bedste først
#1 Stig Nygaard

Havde en HP28 som jeg også havde mere sjov med, end bare som lommeregner. Har dog ikke ligefrem lavet reverse engineering af den. Min HP28S (tror jeg den hed?) har ikke overlevet. Den gik i stykker. Men for folk som mig der ikke kan undvære deres "omvendt polsk notation" (var det ikke sådan det hed?), så er der i dag glimrende smartphone "simulatorer" af HP48 modellerne. Jeg har ihvert fald et par stykker på min Android, og det er de eneste lommeregnere jeg kan finde ud af at bruge i dag :-)

  • 3
  • 0
#3 Torben Mogensen Blogger

Jeg antager, at du mener "nymodens" som en joke, da den slags tegn findes/fandtes i teletext og på oldgamle 8-bit computere såsom Commodore PET.

Men et interessant projekt. Jeg var selv en TI-mand og ikke en HP-mand. Jeg købte en TI SR-56, mens jeg gik i gymnasiet, og meget senere en TI-80 med et smut forbi en Casio, der dog blev stjålet. Både SR-56 og TI-80 har jeg stadig, men det er længe siden, jeg har brugt dem. His du vil låne dem for at afkode dem, er du hjertelig velkommen.

  • 2
  • 0
#4 Frank Kjul Larsen

Interessant.

Jeg troede ellers jeg var ret alene med den trang til at undersøge gamle computeres SW, disassemblere og kommentere koden for at finde ud af hvordan det hænger sammen for ren og skær fornøjelse - men gammel kærlighed ruster jo aldrig som man siger. Min kærlighed er CP/M og Z80 computere. De fleste siger naturligvis til mig at det ingen værdi skaber, men jeg kan (heller) ikke lade være.

Jeg genkender helt sikkert den tilfredsstillende fornemmelse du fik da du endelig overkom det gamle problem. Det er en passende belønning.

Jeg var i øvrigt heller ikke RPN mand og var aldrig selv aktiv i diskussionen for eller imod RPN. Det var nærmest en krig på et tidspunkt men jeg har altid gået mine egne veje. Jeg startede med den gamle TI-30 tilbage sidst i 70'erne som hurtigt blev afløst af en TI-57 som kunne programmeres. Ikke noget godt valg da man ikke kunne gemme programmerne på et medie. Til mit ingeniørstudie - først i firserne - brugte jeg en Sharp EL-512. Den har jeg stadig. Den er dog ikke rigtig programmerbar og ret uinteressant, men til gengæld pålidelig og energivenlig. Jeg kører kun på det 3. sæt knapceller siden 1982. Jeg fik i stedet en hjemmecomputer til programmering og tekstbehandling. Den har jeg naturligvis også stadig.

  • 4
  • 0
#8 Maciej Szeliga

HP 41CX og 48SX den sidste købte jeg på kræmmermarkedet i Hillerød for en 10 år siden for stort set ingen penge.

Jeg har sjovt nok også dumpet softwaren men fra 41'eren primært fordi jeg ville lave samme coole beregninger på en PC men uden at starte nogen stor program, så jeg fik genskrevet meget af det i TurboPascal - incl. RPN - bare for at lave en anderledes regnemaskine som kørte direkte fra prompten.

  • 0
  • 0
#9 Torben Rune

Maskinkode programmering af lommeregnere startede ti år før HP-48 kom på markedet. I 1979 kom den første HP-41 ud, og den kunne (med lidt besvær) "maskinkodes". Man kaldte det "Syntehic Programming" (se: https://en.wikipedia.org/wiki/Synthetic_Programming_(HP-41) ).

Metoden er indgående beskrevet på HP museet: https://www.hpmuseum.org/prog/synth41.htm

Jeg har naturligvis stadig min HP-41 og bruger den hver eneste dag, men den er modificeret - ikke kun til at køre syntetiske programmer. Probelemt var, at de 4 ekspansionsporte var for lidt hvis man skulle have både mere memory og programmoduler i maskinen. Det lykkedes mig - via meget brevveksling med HPs lommeregnerafdeling - at få bekræftet, at man kunne koble flere moduler til portene parallelt, da modulerne var individuelt addresserede.

Min HP-41 indeholder derfor 4 memory moduler som er loddet på flex bussen inde i lommeregneren, samtidig med at den yderligere kan tage 4 indstiksmoduler.

Jeg har aldrig set det hack omtalt - men det findes nok et eller andet sted derude. NB! Hvis nogen skulle have de samme lyster: At lodde 4 memorymoduler parallelt på bussen i en i forvejen fyldt lommeregner er mildt sagt ikke nemt. Det går kun godt fordi modulerne er ganske små og kan stoppes ind i nogle af de små støbefolder som finde indvendigt i kabinettet. Fordi bus clocken er tilpas lav kan man så vha. wirewrap tråde loddet hver enkelt kontakt til bussen. Hvert modul har 12 kontakter x 4 moduler = 48 stykker wirewrap snoet rundt og loddet i begge ender. Det har virket upåklageligt siden den dag i august 1980 hvor mod'en blev lavet. Jeg fik i øvrigt lov at låne en af DTU's på den tid nyeste og mest avancerede Weller loddestationer med thermomagnetisk termostat, et kæmpe forstørrelsesglas og et rigt udvalg af pincetter. "Operationen" to det meste af en uge, og "patienten" overlevede - og jeg tænker på det hver eneste gang jeg bruger min "HP-41 special mod".

  • 10
  • 0
#11 Christian Schmidt Blogger

Det er egentlig et godt dataarkæologisk spørgsmål hvor de dukker op første gang ?

Der er en fin gennemgang af tegnsæt i diverse tidlig teknologi i dette forslag om at optage et udvalg af tegnene i Unicode: https://www.unicode.org/L2/L2019/19025-terminals-prop.pdf

Den første tekst-tv-specifikation blev udgivet i 1976. Det er tidligere end fx Commodore PET. Så det er muligvis der, det er opstået.

Senere versioner af tekst-tv-specifikationen har i øvrigt fået tilføjet flere tegn, men dette er aldrig taget i brug på dansk tv (men de kan ses fx på tyske ZDF). Tekst-tv er en teknologi, der er for oldnordisk til at investere i men for populær til at slå ihjel.

  • 1
  • 0
#12 Morten Hansen

Hvorfor (phk) bliver den slags hussysler ikke lagt på tuben - eller et andet sted (evt. blog - med lidt mere detaljeret og illustreret gennemgang af processen/forløbet med at grave med skeer og fjerne støv med pensler - til glæde for os der står nærmest måbende, og prøver at lede efter videoer man kan sluge råt - som et alternativ til Den Store Bagedyst.

Pft En stor beundre af folket der udfører den slags husflid - i stedet for at pynte toppen af kransekagen.

NB: Hvis læsere af denne kommentar skulle have links til materiale om den ovenstående projekter, er jeg meget nysgærrig.

  • 0
  • 0
Log ind eller Opret konto for at kommentere