Retró rovat IX: Alapok

 ( balagesz | 2017. május 2., kedd - 22:12 )

A hétvégén maradt egy fél délutánom, de komoly feladathoz nem volt semmi lelkesedés. Néha van ez így... Ilyen esetre általában van „B”-tervem: előszedek valami régi kütyüs adósságot. Ez most egy VIC20 nevű Commodore gép, ami a CBM mikrogépes sorozatának az első darabja.

Ilyen géppel én a 8 bites időszakban egyáltalán nem foglalkoztam, valójában a képességeivel sem voltam tisztában. Hogy egyáltalán létezik azt onnan tudtam, hogy még általános iskolában egy ismerősnek volt ilyenje. A „mit tud” kérdésre csak annyi volt a válasz, hogy „biztos többet mint a C16, mert ez C20!” :-D Miután lett internet, már utána sikerült nézni a dolgoknak. Amiatt lett érdekes, mivel ez az összes CBM mikrogép őse tulajdonképpen, egy rakás dolog itt jelent meg először. Olyan nagyon azért nem akartam belőle saját példányt, de az egyik ismerősömtől kaptam egyet azzal a jelszóval, hogy neki úgyis van több. (Innen is köszönet érte!) Illetve még azt is hozzátette, hogy feladatom az lesz vele, mivel egy padláson lakott elég hosszú időn keresztül, meglehetősen retkes a darab. Na de mennyire? Hát ennyire:

Ha az eddigi tartózkodási helyét nézem, akkor nem is annyira vészes. Nálam is a szekrényben ült pár évet, a takarítása már régen tervbe volt véve. A legnagyobb meló természetesen a billentyűzet lesz, de! A „Shift Lock” billentyű nyomogatása olyan, mintha tele lenne homokkal. Ez azért elárulja, hogy mire számítsak... Ami miatt annyira azért mégsem akarództam szétszedni, az az, hogy a többi billentyű úgy ahogy van hibátlanul működik mindenféle takarítás nélkül is! Mindezt 35 évesen, ki tudja hány évet (10+) egy padláson töltés után! Bámulatos!

A fenti képen a típustábla érdekes: hiába van rá VC20 írva, ez akkor is egy VIC20:

A VC20 név („I” nélkül) a német forgalmazású gépeken szerepel, a „népautó” után (szabadon) kapta a „VolksComputer” nevet. Mindezt azért, mert a VIC név németül kiejtve valami trágár szóra hasonlít... :) Maga a széria arról (is) nevezetes, hogy ez volt az első olyan számítógép, amiből eladtak 1000000 darabot. A sikert valószínűleg az árának köszönhette, nem a hihetetlen tudásának... Na de mi is van belül?

(A kép már a belső takarítás utáni állapot, a „retkes” verzió nem lett éppen éles. Mondjuk ez se az... :| ) Ez már a CR, azaz Cost Reduced változat, csökkentett nyák-mérettel. A gép a korabeli sajtónak állítólag tetszett, viszont a RAM méretét kritizálták, nem véletlenül. A nyákon a memória az alsó sorban van, balról jobbra haladva 5 db. IC egymás után. Az első kettő nagyobb, azok 2 KBYTE-osak, a maradék 3 db. Meg 1K×4 bit. Azaz összesen 5.5 KBYTE! :) Ráadásul ebből a 0.5 KBYTE az valójában 1K×4 bit, ez a képernyő-memória attribútum-tárja, ebben van a karakterek színe. Pont mint C64-en, az a felépítés innen jött! (Szintén legenda: anno a CBM „félrerendelt” ebből az 1K×4 bites RAM-ból, volt nekik belőle egy raklappal. A mérnökök meg megkapták a feladatot: el kell használni. Így aztán betervezték mindenhova, ahova csak tudták... Az eredeti VIC20-ban az összes memória ilyen csipekből volt összerakva, de lehetett a géphez venni 3 KBYTE-os (!) memóriabővítőt is, ugyanezen tokokkal volt az is megpakolva. A régi CBM floppy-k is tele voltak velük, egy rakás helyen látszik az 1K-s mérethez igazított engedélyező logika.)

A RAM-ok fölötti 40 lábú jószágok azok VIA-k:

Ezek az USER portot (ez itt rádugott csatlakozót sose látott...) illetve a billentyűzetet kezelik. (A C64-ben – hogy, hogy nem – két CIA van többé-kevésbé ugyanebben a szerepkörben.) A VIA-k és a bekerített rész közötti alkatrészek a magnó illetve a CBM soros port (SERIAL) kezelő áramkörei. (A magnó csatlakozón viszont látszik, hogy használták rendesen.) Természetesen erről a soros portról is van némi anekdota: a Commodore a korábbi gépein az ipari szabvány IEEE-488 buszt használta, ehhez egy külső cégtől vették a perifériák csatlakozó kábeleit. Viszont ezzel a beszállítóval valami lett, a CBM kábelek nélkül maradt. A mérnökök meg megkapták a feladatot: csinálni valami sokkal egyszerűbb interfészt, az eddigi kábelek amúgy is drágák / nehezen kezelhetők voltak. Ők meg előálltak ezzel az egyszerű soros busszal, illetve azzal a tervvel, hogy az adatküldést / fogadást majd megoldja valamelyik VIA a beépített párhuzamos-soros / soros-párhuzamos átalakítójával. A prototípus el is készült, de az adatátvitel folyamatosan hibázott... Mint később kiderült, a VIA soros interfésze hibás, néha elromlanak az adatok. (Ráadásul erről már tudhattak is a PET-es előzményekből.) Emiatt a soros busz kezelését átalakították szoftveresre, amivel a sebesség jócskán visszaesett, de legalább nem kellett lelőni a projektet. :) Ez a soros busz innentől az összes többi 8 bites gépükön szériafelszereltség lett, ez is itt kezdődött.

Az elkerített rész a gép egyik legfontosabb egysége:

Ez a csip a MOS 6561 VIC, azaz a PAL verziójú Video Interface Chip. Maga a gép erről kapta a nevét. Persze ezzel kapcsolatban is vannak érdekességek... Ez a videovezérlő az első olyan integrált videojel generátor, ami kompozit videojellel dolgozik. Tehát már magán az IC-n belül sincs meg az RGB jel külön, ott is szín / fényerő jellel trükközik. Ezt a videovezérlőt a MOS olcsó videojátékokhoz tervezte, csak aztán a piacon nem talált rá vevőt. Hogy a projekt ne legyen bukta, a Commodore megtervezte vele a VIC20-as számítógépet, ennek látjuk itt a végeredményét. Maga a VIC a képen látható 4.4336 MHz-es órajelről jár, ez a PAL színsegédvivő frekvenciája, ez mindenképpen szükséges a videojel előállításához. De ha már itt van, akkor az összes többi jelnek is lehet ez az alapja... A VIC-ből még hiányzik a DRAM-vezérlő logika (valószínűleg ez is okozta az akkori piac érdektelenségét iránta; az SRAM-ok elég drágák voltak „nagy” kapacitásban), de a CPU-nak ő állítja elő az órajelét. Ez egy /4-es osztás, így a PAL gép CPU órajele 1.1084... MHz-re jön ki. Enyhe óverklokk az 1 MHz-es CPU-nak... ;) Egyébként a VIC állítja elő a kép mellett a hangot is, illetve van neki Light Pen bemenete, valamint két olyan lába is, amivel paddle-k kezelhetők. Amit nem tud: nincs neki IRQ kimenete. A rasztermegszakítás felejtős... (Legalábbis a VIC oldaláról.) A memóriák fele 14 bites a cím, 16 KBYTE az egyszerre kezelhető memóriaméret. Az adatbusz viszont 12 bites, egyszerre ekkora adatokat olvashat a memóriából. (A cím / adatbusz méretét a C64-es VIC-II innen örökölte.) Maga a megjelenített kép elég szépen paraméterezhető, a VIC20-ban alapból 22 karakter van egy sorban, és 23 karaktersornyi az aktív kép. Egy karakter 8×8 pixel, nagyságrendileg fele annyi a megjelenített pixelszám, mint az utódoknál. Annyira azért nem combos...

A folytatásban látni a bővítő csatlakozót hátulról, ami – hogy is mondjam – nem éppen diszkrét méretű. :) Nem a jól megszokott 0.1”-es változat 2.54 mm-es érintkezőtávolsággal, hanem ez egy nagyobb, bár úgyszintén szabványos méret, ~3.9 mm-es osztásközzel. (Akkoriban még ez volt a „divat”!) Alatta a két „kisebb-nagyobb” IC az ROM, 2 db. 8 KBYTE-os maszkprogramozott darab, a BASIC + KERNAL ezekben van. (Van még a gépben egy 4 KBYTE-os ROM is, a VIC fémdoboza alatt látszik a teljes alaplapi képen, az a karakterkészletet tartalmazza, de az a VIC saját buszán van, ellentétben ezekkel.) A mellette levő 40 lábú tok maga a 6502-es CPU. Ez itt – érdekes módon – nem MOS gyártmány, hanem Synertek. Gyaníthatóan nem ezzel jött ki a gép a gyárból, bár a Commodore-tól sok minden kitelik... :) Viszont itt a CPU körül is vannak érdekességek. A 6502 nem rendelkezik olyan bemenettel, amivel ki lehetne tiltani a cím / adat / vezérlőbusz hajtását. Tehát nem lehet mellette másik olyan elem a buszon, aki néha azért DMA-t akar csinálni. A VIC viszont valami hasonlót azért meg szeretne tenni, ezért „felé” a cím / adatbuszt ilyenkor le kell választani. Ez pár buszmeghajtóval megoldható, itt is van 3 db. 74LS245 erre a célra. (Ebben a gépben az egyikhez egy MOS 65245 van beépítve, a többi az „tucat” 74LS245. Ez vajon mire jó így? :-D ) Viszont ennek a CPU cím/adatleválasztásnak van egy „kellemetlen” mellékhatása. A bővítő portra a 6502 közvetlen busza van (részben) kivezetve. De ide „nem lát ki” a VIC, a bővítő csatlakozón levő memóriát nem tudja a képszerkesztéshez használni. Igaz, hogy a VIC csak 16 KBYTE-nyi memóriát tud kezelni, de ez az alaplapon nincs teljesen kiépítve. Csak a RAM 5 + 0.5 KBYTE-ja illetve a karakter ROM 4 KBYTE-ja van, a maradék 6 KBYTE üres. De az is marad, legalábbis a VIC számára... Viszonylag minimális módosítással + elenyésző többlet-alkatrészmennyiséggel meg lehetett volna csinálni, hogy az utód mintájára kezelhető legyen 64K a VIC felől is, illetve a bővítő buszra „látás” is inkább csak vezetékezés kérdése lenne. Hogy miért maradhatott ki, jó kérdés.

Amúgy a gép használja a „jó öreg” 6502-es busz-trükköt: mivel a CPU-nak a cím / adat egyszerre csak az órajel egyik állapotában érdekes, ezért az órajel másik felét el lehet tőle „lopni” anélkül, hogy a működését megzavarnák. Ez itt annyira profin van megoldva, hogy a VIC csak ezen idő alatt használja a memóriát, magát a 6502-t nem állítja meg sosem! Tehát nincsenek olyan időszakok, amikor a CPU nem fut, mint C(2)64-en bizonyos rasztersorokban. (Mivel a felbontás az utódokénak nagyjából a fele, ezért nagyságrendileg fele a videojelhez felolvasandó adatmennyiség is. Ahhoz meg elegendő az az idő, amit a CPU-tól „büntetlenül” el lehet lopni.) Ez azért egy jó nagy pozitívum... A fent emlegetett soros portot szoftveresen oldották meg, de úgy, hogy azért a lehető leggyorsabb legyen az adatátvitel. A VIC20-at követő gépekben már kellett a cikluslopás is a DMA-hoz, ott van leállítás, viszont ahhoz az itt „kioptimalizált” átviteli sebesség már túl sok, szóval ott még tovább kellett lassítani az adatátvitelt. (Ahelyett, hogy megoldották volna az eredeti problémát...)

Na de elkalandoztam, tisztítás. A leggázosabbnak a billentyűzet tűnik, de mennyire is? Ennyire:

Eléggé retkes. Amúgy ezt a kiosztást egy az egyben megörökölte a C64, a talán bekötést leszámítva még a mátrix meg a csatlakozó típusa is megegyezik. Csak itt még szép sötétbarna gombsapkák vannak, világosbarna feliratokkal. (Az inverze nekem jobban tetszene, de ez egyéni ízlés kérdése.) Természetesen még az anyagából kialakított feliratokról van szó (a gombsapkák tetején, az előlap az festés), itt még nem a spórolás volt a fő szempont. Érdemes megnézni a „Shift Lock” kapcsolót:

Áll néhány alkatrészből... De ezt ennyire szét lehet szedni! Mondjuk takarítás után se vagyok teljesen kibékülve a nyomáskomforttal, de legalább nem karcol a hangja! :) Amúgy semmi extra: Mitsumi, hagyományos vezetőgumis kontaktusok, tipikus Commodore:

Van benne kosz, de annyira nem vészes. A csavarokat kitekerve nem volt az az érzésem, hogy ezt én tenném meg először, viszont a „Shift Lock” kapcsoló forrasztása teljesen gyárinak nézett ki, így jó kérdés hogy kié az elsőbbség. Itt jönne egy rakás kép a gombsapkák leszedéséről, meg az alatta levő kosszal kapcsolatos hüledezésről, de ilyet mutattam már sokszor, inkább kihagyom. Egy megmutatni való részlet azért akad: mivel teljesen tökéletesen működtek a billentyűk, arra gondoltam, hogy ezt a gépet lehet hogy nem sokat használták. Hát:

Ilyen méretű kopás az állásba nem jön létre, az tuti! Ez gyakorlatilag agyon van használva! Innen nézve még inkább tisztelendő az, hogy még mindig működik!

Maga a tisztítás a klasszikus bevált recept szerinti történet: a ház + billentyűház szappanos vízzel + kefével átdörzsölve, majd – mivel szépen sütött a nap – kiraktam az ablakba száradni. Hátha még nem elég sárga... :) Majd jött a gombsapkák ugyanilyen vízben történő beáztatása, utána egyenként áttörölgetés, majd ezek is mentek ki a napra. Még jó, hogy az idő megfelelő volt a célra, mert elég szép rendetlenség keletkezett az asztalon a folyamat alatt, ha nem tudom összerakni, bajban lettem volna. ;) A tasztatúra végeredménye:

Olyan, mintha új lenne! :) Egy rosszat tudok mondani róla: a hosszú gombok közül egyedül a szóköz alatt van olyan ha az egyik oldalát nyomják, húzza le a másik felét is típusú mechanika. A többi ilyet sajnos nem érdemelt, még a RETURN se... Érezni csak akkor lehet, ha direkt ezt próbálgatja az ember, de na. :) Az összeállított géppel is meg vagyok elégedve:

Azért vagy 1000× szebben néz ki, mint az elején! Na de működik-e? Szerencsére igen:

Fantasztikusan szép képe van! :) Ami a fenti, belső képekről hiányozhat, az nem más, mint a TV-modulátor. Ehhez a géphez is tartozik ilyen, csak az itt egy külső egység lenne, a video-csatlakozón van kivezetve direkt táp is hozzá. (Ez a csatlakozó amúgy egy 5 pólusú DIN, 41524. A hozzá tartozó dugó bedugható a C(2)64 8 pólusú aljzatába is, a hang / kép kimenet illetve a GND ugyanoda kerül.) Én a géphez nem kaptam modulátort, de nem is hiányzik. Mint ahogyan tápegység se jött vele, de az meg teljesen ugyanolyan, mint amilyen a C64-hez kell, bőven elvagyok az eredeti nélkül. :)

Látszik az óriási mennyiségű szabad memória mérete is, lehet csodálkozni... (Mondjuk egy ZX81-hez képest óriási... Akinek volt egy 32 KBYTE-os memóriabővítője hozzá, királynak érezhette magát!) Egy ideje már érlelődik bennem a gondolat, hogy kellene rá demót írni. :-D De azt hiszem ez nem most lesz. Mindenesetre nem bánom, hogy találkoztam ezzel a kövülettel is. És igen, valóban, a belső felépítése egy bébi C64. :)

Linkek:

  1. Kapcsolási rajz gyűjtemény – ez a legfontosabb egy ilyen idős stuff esetén
  2. Robotic Liberation – demó, eredeti bővítetlen géppel
  3. VIC20-as programgyűjtemény
  4. Assembly programozás – Kezdőknek? Haladóknak? :)
  5. VIC20 leírások – mindenféle részegységekről dokumentáció
  6. VIC leírás – magáról a videovezérlőről

balagesz

---

2017.05.02.

Hozzászólás megjelenítési lehetőségek

A választott hozzászólás megjelenítési mód a „Beállítás” gombbal rögzíthető.

Tetszik a leírás. :)

off

Nagyon nem ide tartozik, de mivel tettél egy utalást a ZX81-re, gondoltam, belenézek, hogyan működött a kép generálása, tudniillik középiskolás voltam, talán másodikos, amikor megpróbáltam disassemblálni, de nem sikerült megértenem a működését. Hát, nem csodálom. Annak érdekében, hogy a video áramkör egy-két számláló, egy shift regiszter, s néhány latch lehessen, óriási ámokfutást csináltak.

Itt a leírás róla.

Azért az igen durva, hogy memóriatakarékosság címén nem fix méretű volt a frame buffer, hanem sor elejétől az utolsó kiírt karakterig tartott, mindez úgy, hogy az ULA NOP-okat kényszerített a CPU-ra, miközben a CPU címezte a karaktereket a RAM-ban. Az utolsó karakternél egy HALT-tal leállították a CPU-t, a memória frissítő regiszter járt tovább, majd az R regiszter túlcsordulása kért megszakítást, s hozta ki a CPU-t HALT-ból. Gondolom, ekkor jött a sorszinkron.

Azért dinamikus framebuffert csinálni, videojelet CPU-val valós időben generálni, a felhasználói programot pedig a teljes futásidő fennmaradó közel 20 %-ában multiplexelve futtatni nem semmi, mindezt az olcsó hardware érdekében. Ennek volt a következménye, hogy ebbe a dinamikus framebufferbe ráadásul nem lehetett akármilyen kódú karaktert írni, mert az részint opkóddá alakult, így az egész gép fejreállását okozhatta.

Hát na! :)


tr '[:lower:]' '[:upper:]' <<<locsemege
LOCSEMEGE

ZX81-gyel közelről egyszer találkoztam; annak hibás volt a billentyűzete. De igen: mondjuk úgy, hogy egy kissé "túltolták" a költségoptimalizálást a tervezése során... A másik oldalról viszont elképesztő, hogy ezt úgy meg tudták csinálni. :) A vas nem egy komoly valami, de képesek ilyen gémeket is írni rá...

itt jartam

--
Vortex Rikers NC114-85EKLS

Nahát, én is most lőttem egy VIC-20-at. Úgylátszik most ez a trend. Amúgy mai napig vannak hozzá mindenféle (újan kapható) bővítők, szóval ha valaki ma is akarja a gigászi 35K RAM-ot élvezni, megteheti. Persze vágom hogy te inkább építesz magadnak...

(Amúgy igen, a "VIC", németül kb. "FIK"-nek ejtődik, ami igen hasonlít a "fick" szóra ami baszást jelent. :D Szóval átnevezték német nyelvterületen... Az enyém is VC 20 feliratos.)

-=- Mire a programozó: "Na és szerintetek ki csinálta a káoszt?" -=-

Az építést csak ne is emlegesd... :) Tényleg elmerengtem rajta, hogy kellene demót írni rá. De első körben jó volna valami MONITOR program, hogy lehessen próbálgatni rendes vason, hogy mi mit is csinál... Valamit találtam is (ROM-os, persze), de 22 karakter szélességben azért az ilyen nem annyira fantasztikus. Ekkor jött az ötlet, hogy USER PORT, valami mikrovezérlős cucc, amivel tudok a VIC20 oldaláról párhuzamosan adatot fogadni/küldeni. Ugyanez a másik oldalon egy plus/4-gyel összekötve, ott úgyis van olyan MONITOR-om, aminél könnyen módosítható, hogy honnan olvasson / hova írjon. Kb. itt tartottam a gondolkodásban, amikor eszembe jutott, hogy MOST HAGYD ABBA. :-D

sub

Lehet előbányászom a C=64-et, kicsit megviselt szegényem. Egy régebbi gömbölyű belső lett átrakva egy lapos külsőbe, ill. a TV modulátoron keresztül nincs hangja, ha jól emlékszem.