( pink | 2021. 02. 24., sze – 22:36 )

a kóder urak szerettek direkt címekre ugrálni a ROM-ban

Ezzel a HP 48GX...49g...50g vonalon szoptam. Ezeket a számológépeket bár lehet assembly-ben is programozni, érdemesebb RPL-ben, azaz Reverse Polish Lisp-ben, mert így rendelkezésedre áll minden matematikai és ui funkció.
RPL-t lehet használni scriptként (UserRPL) illetve compiled módon (SystemRPL). A számológépen van egyébként beépített assembler/disassembler és RPL compiler/decompiler is (jobban mondva a régiekre külön fel kellett tenni; az én 50g-men már beépített).

Voltak supported és unsupported utasítások. A supported azt jelentette, hogy nem változik a címe az egyes ROM verziók között. Unsupported-ek általában nem is voltak dokumentálva, hanem valami másnak a segédeljárását használta ilyenkor a kóder, vagy egyszerűen beleugrott egy eljárásba in medias res (nem az elejénél). Az utasítások ugyanis memóriacímek voltak, amikhez tartozott egy leírótábla, ez adott nekik nevet (így fel tudtál bele venni tetszőleges új ROM címeket, ami tetszett - a megfelelő tábla hiányában ezeket "PNTR 57962"-szerű utasításokká fordította a decompiler). Érdekesség, hogy adatot bevinni több ciklus volt, mint utasítást hívni - ezért a gyakran használt számoknak volt külön utasítása, ami egyszerűen stack-re tette az adott számot és ez sokkal gyorsabb volt, mintha adatként adtad volna meg.
De voltak az egyes modellek között (pl. 49g és 50g) nüansznyi különbségek pl. a menet közben használt segédváltozókat illetően, amik szintén simán futtathatatlanná tudtak tenni egy programot a másik gépen.

Szimbolikus solver-eket portolgattam egy időben az 50g-re, ekkor futottam gyakran bele abba, hogy egész apróságon múlt az eredeti program hordozhatatlansága, és apró belegondolással generálisabban is meg lehetett volna írni, hogy alapból menjen a majdani újabb modelleken is.

Egyébként ha elkezd az ember használni egy RPN számológépet és megszokja, többé nem akar mást.