majdnem minden ami ReTRo

LGB - Ismerkedés a Commodore LCD-vel - 4. rész

2014/03/15. - írta: Сергей

Ahogy ígértem, itt a Commodore LCD gépezet / emulátor cikksorozat befejező része is! :-)

emulátor Scrshot kicsi.jpg


Hardware ügyben abszolúte nincs vége a projektnek. Először is van az ACIA (6551) nevű IC a gépben, aminek segítségével a Commodore LCD soros (mármint RS232 szerű, nem az IEC busz) kapcsolatot tett lehetővé, tehát soros terminálnak volt használható, de beépített modemet is tartalmazott! A VIA port kiosztás dokumentáció szerint valami hangja is lehetett a gépnek (bár egyes források szerint nem volt ...). Ne egy SID minőséget képzeljünk el, egyszerű beep-beepelésről lehetett szó. Ezen funkciók jelenleg még nincsenek kezelve az én emulátoromban. Andy nagyon kedvesen küldött a későbbiekben több további dokumentációt is részemre. Ezek alapján azonban nem tudtam "forradalmi" felfedezést tenni (pl. az MMU-s esettől eltérően). Mind olyan dolgokról szóltak, amit többe-kevésbé jól kitaláltam magamtól is. Nyilván volt pár kisebb dolog, amit tudtam "szépíteni" a dokumentációnak hála, de semmi eget rengető újdonság nem került elő.

Eddig inkább a hardware-re koncentráltam, de a felderítő munkám, illetve az emulátor írás során valójában párhuzamosan zajlott a software megismerése. Erről dokumentáció végképp nem volt, mind az én kísérleteimen (az emulátoraimmal) illetve a ROM disassembly-n alapult. A Commodore LCD alapvetően elindul csak a kernal-al is, aminek mérete 32Kb. A kernal bekapcsolás után scanneli a 256Kb rendszer címtartomány felső 128Kb-ját 16Kb-os lépésekben a "Commodore LCD" azonosító stringet keresve. Ha ilyet talál adott helyen, akkor az ott található "app directory"-t nézi, ami megmondja, hogy az adott ROM-ban milyen applikációk vannak. Ezt használja fel ahhoz majd, hogy a "menüben" (ennek hivatalos neve a ROM alapján: Shell) megjelenítse őket. A közismert BASIC nem indul automatikusan, Commodore-os szokástól eltérően a Commodore LCD az említett Shell-el nyit, és maga a BASIC is csak egy applikáció, amit el lehet indítani szükség esetén. Ha egy valódi Commodore LCD-ből minden ROM-ot kivennénk (kivéve a kernal) az működőképes maradna. Mivel a kernal-t is hordozó ROM-ban a kernal-on kívül csak a monitor program van, akkor automatikusan az indul el (mivel maga a Shell is máshol van). Az említett ROM scan rutin részleteit most mellőzve (ami anno amúgy sokat segített abban, hogy az MMU-ról képet tudjak alkotni), ezt próbára is tettem, írtam egy saját ROM-ot, amit a Commodore LCD emulátoromban alkalmazva a kernal meg is találta, és sikeresen betette a Shell app menüjébe! Ráadásul némi grafikus/görgetős buta kis "demót" írtam bele, így ezt is tesztelni lehetett.

Software-es oldalról a már említett "virtual 1541" (vagy RAM disk) mindenképpen említést érdemel. Ahogy már írtam, az alapelképzelés egyszerű és elegáns. A Commodore LCD "kis", hordozható gép, nincs hely benne "fizikai" meghajtó számára, persze kapcsolható hozzá opcionálisan. Illetve egyes források szerint később terveztek hozzá egy drive típust, ami szintén akkumulátorról ment volna - ebből aztán persze semmi sem lett. Ezért a Commodore mérnökei azt találták ki, hogy inkább a RAM-ot látják el állandóan feszültséggel, kvázi kikapcsolt állapotban is az akkumulátort felhasználva. Így a gép lekapcsoláskor "sem felejt", nyilván így a RAM disk tartalma is megmarad. Ez utóbbit amúgy a Shell remekül meg is mutat az applikációk alatt közvetlenül. Ez már az elején feltűnt (még mielőtt működött volna az emulátorom), mivel a ROM disassembly-ben elég jól látszik az a rész, ahol pl. a $-al azonosítható listát összeállítja software-esen. A Commodore LCD alapértelmezett tároló perifériája amúgy pont a RAM disk, de természetesen külső lemezegység is működhet, a szokásos módon (LOAD"...",8 stb.). Érdekes tulajdonsága a Shell-nek, hogy file név "kiterjesztés" (pl. .BAS) segítségével összekapcsolja az applikációkat a fileokkal, azaz ha Shell-ben a "virtual 1541" résznél egy .BAS-ra végződő filenevet választunk ki, a "BAS"-ról automatikusan tudja, hogy Basic program, így elindítja a Basic applikációt, és betölti a kérdéses file-t is, mint Basic programot. Ez persze nem csak a „.BAS”-ra igaz, hanem más mellékelt applikációkra is.

A Commodore LCD beépített applikációi amúgy nagyon érdekesek. Nagy vonalakban a következők érhetőek el, monitor, terminál program, szövegszerkesztő, táblázatkezelő, kalkulátor, és egy "memopad" (rövid szövegek tárolására). Maga a Shell is egy applikáció (bár a Shell nem mutatja önmagát), illetve a Basic is. A fentebb vázolt file név kiterjesztés alapján való applikáció hozzárendelés mindegyikre működik, ahol ennek van értelme. További érdekesség, hogy némi multitasking érzést kölcsönöz azon jellegzetesség, hogy bizonyos (de nem mindegyik!) applikáció futása közben kvázi indíthatunk egy másikat, illetve egyes esetekben "osztott képernyővel" dolgozhatunk több applikációval is!

Ezen a ponton viszont érdemes visszatérni a RAM táplálásához, ami kvázi kikapcsolt állapotban is történik. Nagyon sokáig fejfájást okozott nekem az a tény, hogy bár látszólag az emulátorom jól működött, mégis fura dolgok történtek: Basicben a számok helyett PI karakterek jelentek még (vagy csak szóköz), és egyéb hasonló misztikus jelenségek, néha "fagyás" is. A RAM disk pedig "elfelejtett" mindent, ha valamit mentett rá az ember, azonnal visszanézve sem látszott semmi. Az elején két feltételezésem volt: az emulátorom a hibás, vagy pedig a kérdéses ROM image-ek annyira alpha verziót képviseltek még csak, hogy nem is működik minden rendesen. Mivel a Commodore LCD sosem jelent meg, és igen kevés készült belőlük, ez nem volt megalapozatlan feltételezés. Természetesen ismét a disassembly-hez menekültem, és a bekapcsolási folyamatot - kezdve a reset vektortól - elkezdtem követni. Ami feltűnő volt, hogy RAM-ból tolt be olyasmiket, ami még inicializálva sem volt előtte, mégis "kész tényként" használja, hogy helyes az értékük. Az jutott eszembe, hogy ez nem feltétlen kernal bug: mivel a Commodore LCD úgy készült, hogy a RAM mindig táplálva van, feltételezhető, hogy bekapcsolás előtt is helyesek voltak azok az értékek. Igen ám, de ez nem segít sokat, hogy mik a kezdeti értékek, ha előtte nem volt helyes a memória állapota, ami ugye egy emulátornál mindig igaz, illetve egy igazi Commodore LCD-nél is igaznak kell lennie, a legelső bekapcsolás pillanatban, illetve ha pl. teljesen lemerül az akkumulátor (vagy valaki kiveszi/visszateszi), ezért a RAM elveszti tartalmát. Úgy tűnt, hogy ezekben az esetekben a Commodore LCD hibásan fog működni, és kb. használhatatlan.

Végül a megoldás az lett, hogy patch-eltem a kernal ROM-ot, hogy mindig inicializálja a RAM-ot. Ez egy JavaScript/web alapú emulátorban nem nagy érvágás, hiszen amúgy se maradna még a memória tartalom. Így a fentebb említett hibák azonnal eltűntek, működött a RAM disk, a BASIC, stb. Viszont csaknem ezzel egy időben rájöttem még valamire a disassembly-s utat követve: valójában a Commodore LCD lehetőséget ad egy "teljes inicializálás kikényszerítésére", ehhez egy bizonyos billentyű kombinációt kell lenyomva tartani bekapcsolás alatt (mindezek ellenére emulátoromban a ROM patch-elése egyszerűbbnek tűnt, ezért az maradt). Így már minden érthető! A bennem kialakult kép a következő: a Commodore LCD alapvetően arra épít, hogy a RAM tartalom megmarad. Ezt reset után ellenőrzi is több ponton, és ha valami nem stimmel, erre figyelmeztet, mindezek ellenére _NEM_ inicializálja a memóriát újra! Ennek oka véleményem szerint az, hogy meg akarja adni a lehetőséget a felhasználónak: hátha valami software hiba miatt kismértékű sérülés áll fenn, és még van lehetősége megmenteni adatot, ami megsemmisülne a teljes inicializálással. Ugyanakkor lehetőséget biztosít, a "tiszta" állapotra az említett billentyűzetkombináció segítségével. Ez kérdéses, hogy mennyire intuitív megoldás, de vegyük figyelembe, hogy a gép soha nem jelent még a piacon, elképzelhető, hogy a végleges változatban ezt másképpen kezeltek volna.

Természetesen még rengeteg érdekes dolog, és történet lenne elmondható software (amit kissé összecsaptam itt a vége felé ...) és hardware tekintetében is. Ám írásom már így is botrányos méreteket kezd ölteni, tehát mondjuk ki, hogy eljutottunk ahhoz az állapothoz, hogy az emulátor többé-kevésbé használható, az elkészítésekor kitalált és megismert információk birtokában pedig írhattam egy specifikációt is a rendszerről. Ezt egy web site - Commodore-LCD.LGB.HU - formájában közzétettem, ahol az emulátor is használható, illetve az említett specifikáció is olvasható. Bil Herd már érdeklődött, hogy site-ján (c128.com) említheti-e a projektet, most zöld utat kapott. Illetve én is megemlítettem a már említett levelező listán.

Ha a kedves olvasó idáig jutva fellélegzik, sajnos le kell, hogy lombozzam, a történetnek még nincs vége. :) Mert természetesen voltak visszajelzések. Tulajdonképpen nem annyi, amit reméltem. Nem arról van szó, hogy azt vártam, hogy kitüntessenek és nyilvánosan aranyba foglaljanak. Számomra furcsa, hogy milyen relatíve kis visszhangot váltott ki egy kvázi totál ismeretlen Commodore gépről elérhető részletes leírás és működő emulátor egy Commodore specifikus levelezőlistán. Nem az "elismerés" hiányzott, hanem az, hogy esetleg más valaki is csatlakozik a projekthez, mert azért volt még mit tenni.

Bár leírásomban már említettem Mike nevet, és hogy több dolog is neki köszönhető, ezt csak utólag írom így: amikor a ROM image-eket felleltem a neten, őszintén nem néztem, hogy kinek köszönhető ez. Ahogy azt sem, hogy az említett Python 65xx emulátor kezdemény kinek a műve (ami csak véletlen, hogy mindkettő az ő nevéhez fűződik). Utólag tehát nem kell csodálkozni azon, hogy általam sértődött hangvételűnek ítélt mail-t kaptam tőle. Szóvá tettem, hogy az ő nevét meg sem említem a site-omon. Természetesen Bil, Andi, Hedley és Jeff nevet nem felejtettem el – őket külön meg is kérdeztem, hogy hozzájárulnak-e ahhoz, hogy nevüket feltüntessem. Gyorsan tisztáztuk a dolgot, és elnézését kertem privátban, és az említett levelezőlistán is, és persze a nevét is feltüntettem. Azonban mégis volt értelme ennek, mivel ennek kapcsán hosszabb levelezésbe bonyolódtunk Mike-al, miután az én hibámból eredő problémát sikerült tisztázni. Leszögeznem, hogy tényleg sajnálom a mulasztásomat, Mike nélkül nem lenne se Commodore LCD emulátor se specifikáció, mivel az ő lelkesedése (és pénze) tette lehetővé, hogy ROM image-unk legyen. Arról nem is beszelve, hogy később jöttem rá csak, hogy az említett Python CPU emulátor is az munkája - igaz így legálabb tudtam neki bugreport-al szolgálni. Viszont Mike-tól megtudtam azt is, hogy van már létező Commodore LCD emulátor kezdemény, habár nem működik. Az MAME/MESS project keretében készült, az általam is említett PDF felhasználásával. Nyilván ennek írója is rájött, hogy az a PDF nem használható, és itt félbeszakadt a projekt.

Ezek után jelentkezett még két srác, az egyikük pont a MAME/MESS projekt kapcsán. Próbáltam mindenben segíteni, azóta állítólag az ott tálalható emulátor is gyors fejlődésnek indult, és már működik is (habár én őszintén szólva nem próbáltam még ki). Jó azt látni, ha az ember munkája másoknak is hasznos. Tulajdonképpen ezt hiányaltom, nem a személyes "éljenzést", hanem, hogy legyen értelme mások számára is annak, amit csinálok. Ez el is gondolkodtatott. A MAME/MESS projekt ott állt le, hogy nincs információ, én is így kezdtem (bár én nem tudtam róla, hogy valaki már megpróbálta előttem). Szerintem bárki némi lelkesedéssel és hozzáértéssel véghezvihette volna azt, amit én tettem. Ennek tükrében furcsa, hogy 2008 óta senki nem könyvelhetett el említésre méltó haladást.

A másik srác, aki irt, inkább érdeklődő volt, nem az a programozó típus. Azonban fontos megjegyezni, hogy érdekes felfedezést tett. Egy neten fellelt meglehetősen gyenge minőségű fénykép alapján (ahol látszott egy valódi Commodore LCD kijelzője) rekonstruálta az LCD tartalmat, amin a Shell látszott. Érdekes módon kisebb-nagyobb eltéréseket mutatott ahhoz képest, amit az én emulátorom megjelenített! Ebből arra a következtetésre jutottam, hogy valószínűleg egy más fejlettségi szinten levő példány lehetett, kicsit más ROM tartalommal. Az hamar kiderült, hogy ez valószínűleg Jeff tulajdonában levő Commodore LCD-ről készült. Az én munkám Bil példánya (és ROM image-e) alapján állt elő. Mike-al megvitattam a dolgot, és felajánlotta, hogy említett EPROM égető/olvasó hardware-jét szívesen elpostázza Jeff-nek is, ha ő hajlandó a ROM mentésre (ahogy ez 2008-ban Bil-el is eljátszotta). Ez ügyben kapcsolatba léptem Jeff-el, aki nyitottnak mutatkozott, de azóta nem történt előrelépés a dologban. Bil véleménye szerint az ő példánya sokkal inkább egy "lab product" még Jeff-é a bemutatókra szánt eszköz, ebből nehéz megjósolni, hogy melyik lehetett a "fejlettebb".

Amit leírtam, az a leegyszerűsített és lerövidített vázlata annak, amit a Commodore LCD megismerése érdekében végigvittem. Bár így is meglehetősen hosszú, az írásom több ponton is talán hiányosnak, vagy következetlennek tűnhet. Ennek oka az, hogy nem akartam még ennél is hosszabb cikket írni, véleményem szerint már így is éppen elég hosszú. Néhány dolgot a jobb érthetőség kedvéért kénytelen voltam külön kezelni (témaként), ami valójában párhuzamosan zajlott. Mindezek ellenére remélem, hogy sikerült még az én teljesen hiányzó fogalmazási képességem nélkül is valami "egyszer talán elmegy" irományt alkotni.

Köszönöm a figyelmet!

URL gyűjtemény:

* A Commodore LCD site-om

* Az emulátorom

* Az emulátorom a saját ROM-ommal (válaszd az lgb-t az app menüből)

* Az emulátoromról

* Az általam írt specifikáció

* Több verzió kérdése

* Köszönetnyilvánítás/linkek

* A charset keresési projektem, vizualizált formában a kernal, látható a charset infó benne

* Mike és a ROM image-ek

* A "hamis" PDF

* "Secret weapons of Commodore" (képek, infók)

* Wikipedia oldal a gépről

* MJK oldala

Szólj hozzá!

A bejegyzés trackback címe:

https://szergitata.blog.hu/api/trackback/id/tr675840117

Kommentek:

A hozzászólások a vonatkozó jogszabályok  értelmében felhasználói tartalomnak minősülnek, értük a szolgáltatás technikai  üzemeltetője semmilyen felelősséget nem vállal, azokat nem ellenőrzi. Kifogás esetén forduljon a blog szerkesztőjéhez. Részletek a  Felhasználási feltételekben és az adatvédelmi tájékoztatóban.

Nincsenek hozzászólások.