advocatus_diaboli

Állandó Tag
Állandó Tag
Hi meg háj mindenkinek, csak tudatom a nagyérdeművel, hogy még jobban elment az eszem mint eddig: nagyon megbetegedtem! Azaz, a szokásos őrültségem mellé még elkapott a „nosztalgia” nevű betegség is...

Arról van szó, hogy egyik kedvenc hobbym a mindenféle programnyelvek írogatása. És mindig az van hogy akármelyiket is írom, aki tudomást szerez róla, nekem szegezi a kérdést, hogy jó-jó, biztos nagyon ügyike vagyok ebben, meg szép hobby, de ki fogja HASZNÁLNI a nyelvemet?! Ki a CÉLKÖZÖNSÉG?! Azaz mi ÉRTELME van ennek?!

Mi értelme? Miért, a bélyeggyűjtésnek mi van? Vagy annak hogy valaki egy nagy üveg belsejébe szerel össze egy vitorláshajót, hm?

Mégis, nem tagadom, jó érzés volna ha más is használna valami szoftvert amit elsősorban mégis a magam kedvére írok... Na és itt jött a Nagy Ötlet: legelső programozási élményeim még olyan kb 13 éves koromban a Ti-58 és Ti-59 kalkulátorokhoz fűződtek! Ezekhez:
ti58c.jpg

Nagyon szerettem azt a gépet, és bár mai szemmel nézve szánalmasan kicsi memóriakapacitással rendelkezett - körülbelül 6K volt benne, azaz ezer számot volt képes megjegyezni - de olyan ügyes programnyelve volt hogy eszméletlen dolgokat lehetett csinálni vele!

Gondoltam, miért is ne csinálhatnék hozzá valamiféle emulátort, olyat, ami képes futtatni az e gépre valaha írt programokat? Ráadásul akkor már úgy csinálom meg, hogy ne legyen bekorlátozva ezer vagy mittoménmennyi számra és programlépésre, hanem méltó legyen a mai programnyelvekhez és komputerekhez, alkalmas bármire... azaz, kibővítem az eredeti címtartományt és utasításkészletet...

Utánanézve az interneten, látom hogy akad is még néhány muksó aki afféle fanboy e gépekre, azaz remélhetőleg lesz célközönsége e munkámnak...

Na de ami emulátort írok, muszáj hogy leellenőrizzem, ugyanazt az eredményt adja-e mint a régi gépeken adott az a program. Kell vennem efféle masinát...

Az ebay-en a működőképes efféle gépek aranyárban vannak... Többnyire azok is csak töltőről mennek mert a battery pack rég kirohadt bennük. Gyakran töltő sincs már hozzájuk...

Persze, én mint újgazdag amerikai ficsúr akinek a bőre alatt is zöldhasú lapul (el ne hidd...!) rendeltem magamnak mégis jó gépet, majd a napokban megérkezik... de elgondolkodtam azon, ott vannak azok a szegény „parts or not working” jelzővel meghirdetett masinák. SAJNÁLOM ŐKET! Igazából, elárulom, ha működnének, ennél jobb zsebszámológép nem kéne ma se senkinek! És mennyivel könnyebb egy ilyet elvinni magunkkal mint egy laptopot!

Nosza, rendeltem pár nem működőt is olcsóért... Szerintem semmi bajuk csak új akku pack kell hozzájuk meg talán töltő. És kitisztítani alaposan...

Ezzel csak az a baj hogy soha életemben nem szereltem semmit, és ált.isk. koromban is kegyelemből kaptam a gyakorlati órákon hármast... Nem is értek az ilyesmihez! Tulajdonképpen ha látok egy áramköri lapot, azt se tudom melyik rajta a dióda és melyik a tranzisztor...

De oly sok dolgot megtanultam már amiről azt mondták nekem úgyse menne meg tehetségtelen vagyok hozzá... Tehát rendeltem megfelelő szervízkönyvet is e gépekhez (eredeti nincs is kapható de reprint igen), meg a kellő szerszámokat is megrndeltem, kb 1 hét után érkeznek majd. E két szerszámcsomagról van szó:

https://www.ifixit.com/Store/Tools/Repair-Business-Toolkit/IF145-278-7
és
https://www.ifixit.com/Store/Tools/Soldering-Workstation/IF145-238-1

Majd meglátjuk mennyire megy nekem a szerelgetés...

E topikot azrt nyitottam, hogy itt számoljak be a tapasztalataimról, sikereimről, kudarcaimról, itt kérjek tanácsot ha valami nem megy, a nálam szerelgetés terén tapasztaltabb illetőktől (ilyet nem nehéz találni hiszen a totál újoncnál aki én vagyok szinte bárki tapasztaltabb lehet könnyen...), no meg legfőképp: hogy megkérdezzelek benneteket, Olvasóim, akad-e más is aki szereti e régi kalkulátorokat, netán van-e igénye másoknak is effélék feltámasztására, stb... Szóval hogy elnosztalgiázzunk ezen a témán... elvégre „elvan a gyerek, ha játszik”... Csak azt kérem politikát e topikba semmi esetre se keverjünk bele, szívesen látom itt azokat is akikkel más topikokban akár vérre menő vitákat is folytattam, de E TOPIKBAN kerüljük a politikát! A hócipőm is tele van vele, ezt kikapcsolódásnak szánom, nem vitafórumnak...
 
Utoljára módosítva:

advocatus_diaboli

Állandó Tag
Állandó Tag
A gép nyelve amúgy igen érdekes. Természetesen assembly nyelv, de, bár stack-orientált azaz verem-alapú (más eleve nem nagyon lehet ha assembly...) mégse postfix, hanem infix szintaxist követ nagyobbrészt. (mármint a kétoperandusú operátorokat illetően). Bár ismerem kora gyermekkorom óta hiszen mint írtam ezen történtek első programozási tapasztalataim, „kissé” elszoktam tőle az utóbbi rövidke 40 év alatt. Mégis, olyan érzésem van most mintha visszatérnék valami rég elhagyott de egykor imádott kedvesemhez...

Közben megérkezett az egyik a rendelt nem működő masinákból. A legramatyabb állapotban levő. Mondom, semmiféle battery packja nincs, még nem működő se, lyukas a hátulja... Pedig milyen remek gép lehetett egykor, sírhatnékom van a szánalomtól ha ránézek... de majd életet lehelek belé! Csak mielőtt hozzányúlok várom a szerszámkészletemet az ifixit-től, meg a szervízkönyvet. Utóbbi Floridából érkezik. Már úton van.

Közben arra is rájöttem, e témáról bármi picit is hasznos cikket csak angolul lehet találni, de arra is rájöttem ez már nekem semennyire se hátráltató körülmény. Bár az angol beszédem még mindig olyan hogy Tarzan is röhögve lekörözne benne, az írott szöveg megértése alig icipicit nehezebb csak mint a magyaré. Legalábbis ami az ilyen szakirodalmakat illeti, a széppróza, na az teljesen külön kategória... Néha észre se veszem már hogy épp angolul olvasom a szakcikket.
 

advocatus_diaboli

Állandó Tag
Állandó Tag
Megállapították a cikkírók, hogy a gép nyelve Turing-teljes (még szép...!), de „embert próbáló” feladat benne programot írni, mert „csak” egy assembly. Na ezen felröhögtem... Látszik, hogy nemcsak a mai fiatalok, de a középkorúak java része is a programozók közül mennyire elszokott már az IGAZI programozástól, és ha gépközeli szintre kell leereszkedniük a gondolkodásban a maguk elvont absztrakciós kategóriáikból, visítva menekülnének és olyan érzésük van mintha nyers patkányt kéne enniük, ami még rúgdalódzik is kicsit... Totál elkényelmesedtek! Nem is csoda ezek után hogy a mai számítógépekre is erőforráspazarló bloatware programokat képesek csak összetákolni.
 

advocatus_diaboli

Állandó Tag
Állandó Tag
Na kedves mindenkik, ma végre eljutottam oda az „emulátorom” írásában, hogy megvan a tokenizálás (kivéve a címkék kezelését), és a végén még ellenőrzésképpen valami nagyon nyers formában ki is disassemblálja nekem hogy ellenőrizhessem, a lefordított kód mennyire hasonlít ahhoz amit megemésztett! Íme egy példa (a program maga teljesen értelmetlen zagyvaság, csak ellenőrzésképpen pötyögtem be mindenféle hülyeséget):

DISASSEMBLED PROGRAMLIST:

PGM length = #1424 =$0000000000000590
#1376 $0000000000000560 : code = #42 :: $000000000000002a :: STO
#1378 $0000000000000562 : usag = 0
#1380 $0000000000000564 : code = #43 :: $000000000000002b :: RCL
#1382 $0000000000000566 : usag = 18446744073709551615
#1384 $0000000000000568 : code = #42 :: $000000000000002a :: STO
#1386 $000000000000056a : usag = 64738
#1388 $000000000000056c : STRCONST = "első stringkonstans"
#1390 $000000000000056e : code = #74 :: $000000000000004a :: SUMInd
#1392 $0000000000000570 : code = #22 :: $0000000000000016 :: INV
#1394 $0000000000000572 : code = #23 :: $0000000000000017 :: lnx
#1396 $0000000000000574 : code = #1179723 :: $000000000012004b :: -
#1398 $0000000000000576 : code = #1179733 :: $0000000000120055 :: +
#1400 $0000000000000578 : code = #93 :: $000000000000005d :: .
#1402 $000000000000057a : code = #74 :: $000000000000004a :: SUMInd
#1404 $000000000000057c : code = #74 :: $000000000000004a :: SUMInd
#1406 $000000000000057e : code = #71 :: $0000000000000047 :: SBR
#1408 $0000000000000580 : code = #65631 :: $000000000001005f :: =
#1410 $0000000000000582 : code = #92 :: $000000000000005c :: INVSBR
#1412 $0000000000000584 : code = #76 :: $000000000000004c :: Lbl
#1414 $0000000000000586 : code = #11 :: $000000000000000b :: A
#1416 $0000000000000588 : code = #289 :: $0000000000000121 :: SBRInd
#1418 $000000000000058a : usag = 3
#1420 $000000000000058c : STRCONST = "Második stringkonstans"
#1422 $000000000000058e : code = #91 :: $000000000000005b :: R/S

(a disassemblált lista kinézetével, külalakjával ne törődjetek, ez egy rém nyers forma, kizárólag fejlesztési célra. Persze írok majd igazi disassemblert is később mindennel mi szem-szájnak ingere, ez csak egy gyorsan összetákolt fércmű, magam is tudom).

Aztán meg, tudom hogy stringkonstansok nem voltak az eredeti Ti-59-ben, de ide ezek eltárolását már beletettem, muszáj, mert a memóriaszervezést olyannak találtam ki, hogy a végrehajtható kód a stringkonstansok után kezdődik, tehát ezt meg kellett oldanom (ezek letárolását) mielőtt belekezdenék akármi másba.

Ennek a haladásnak amiatt örülök, mert végre elkezdhetem megalkotni a végrehajtórutint... Az nagyon izgat, az operátorprecedencia miatt. Emiatt is hanyagoltam a címkék betételét most még, egyelőre semennyire se izgatnak, egyrészt mert anélkül is kipróbálhatom az operátorprecedenciát egy sima szekvenciális utasítássorozaton, másrészt, ha nagyon akarok így is ugrándozhatok címkék nélkül, tudniillik abszolút ugrási címet adva meg, tehát számkonstanssal. Ez az eredeti Ti-59 esetében is teljesen legális megoldás volt (persze hogy az volt, minden assembly nyelv illik tudja ezt).
 

advocatus_diaboli

Állandó Tag
Állandó Tag
Na, ma már megvannak a legalapabb alapok, azaz megy az utasításvégrehajtás, és a leglényegesebb: a kifejezéskiértékelő függvény, úgy, hogy figyelembe veszi az operátor precedenciát, meg a zárójelezést is!

Még rengeteg apróság van hátra, de EZ a lényeg!

Innentől nyert ügyem van.
 

advocatus_diaboli

Állandó Tag
Állandó Tag
Csak érdekességképpen, egész jól funkcionál már a nyelvecském! Holott talán 10 százaléka is alig van még benne annak, amit beleálmodtam... Mindenesetre, íme egy kis példaprogram, ami arra való (csak teszt céllal) hogy iterációval kiszámolja a Pí értékét!

idő: "Idő: "
piértéke: "Pí közelítés: "
ticktext: " tick."
3000000 STO 4 // Loopvariable
0 STO 1 // összegváltozó
1.
STO 2 // nevező
STO 3 // számláló
#d
Lbl 32768
RCL+/- 3 / RCL++++ 2 =SUM 1
Dszg 4 32768
4. Prd 1
#g
§idő prints MYTICK printg §ticktext prints NL
§piértéke prints
RCL 1 printd NL
r/s


Outputja:
Idő: 351669 tick.
Pí közelítés: +3.14159232025637

A fenti program - lemértem - a benchmark szerint HÁROMSZOR GYORSABB, mint ugyanez a feladat Python programnyelven megírva! Továbbá, mindössze 25-ször lassabb mintha a natív C kód futna, ami KIVÁLÓ eredmény, mert hiszen interpreter az aranyoskám, márpedig interpretertől már jó eredménynek számít ha SZÁZSZOR lassabb csak mint a natív kód!

Jelenleg azzal foglalkozom hogy az eddig elkészült funkcióihoz írom a dokumentációt. Hatalmas meló...
 

dizzyhu

Állandó Tag
Állandó Tag
Udv
TI58 emulator pc-re - tudom, nem olyan, mint az igazi ill. olyan, de erdekes.

hátha tudjátok használni ezeket, nagy élmény bütykölni ezeket a masinákat

.
 

Csatolások

  • ti58cEN.pdf
    2.9 MB · Olvasás: 1
  • SSSM_ML_M_US_ti59modules_manual.pdf
    17.6 MB · Olvasás: 0
  • SSSM_ML_US_ti59_modules_reference.pdf
    2.8 MB · Olvasás: 0
  • TI-59-Workbook_programming.pdf
    2.7 MB · Olvasás: 0
Oldal tetejére