Retró rovat III.: 20 évvel ezelőtt még jó is lett volna... :)

Tegnap, sok éve először túrázni voltam. No nem egy hosszú útvonalon, lehetett vagy 12 kilométer... De a sok év kihagyás erősen megtette a magáét: gyakorlatilag még a hajam is fáj. Ja, az ujjaim nem fájnak, így gépelni tudok. Viszont elfelejtettem előtte a fényképezőgéphez akkumulátort tölteni, így képek (részemről) nem lettek. Emiatt (hm...) ez a mostani mese nem is erről a túráról szól.

Na de retró: az egész történet egy kicsit régebbre nyúlik vissza. Lassan másfél éve beszélgettem egy haverommal, szokásos téma a régi gépek. Valahogyan szóba került a Sinclair®, ill. a ZX81™. Amikor először láttam ilyen gépet, igencsak elcsodálkoztam, hogy összesen 4 db. IC-ből egy komplett mikroszámítógépet össze lehet rakni. (Ami nem igaz, mert 5 db. IC volt már akkor is benne: a Z80 CPU, az ULA, egy 1 KByte-os SRAM, egy 8 KByet-os ROM a BASIC értelmezővel, és ezeken felül még egy 7805-ös feszültségstabilizátor IC.) Aztán felmerült bennem, hogy erre a minimalista koncepcióra a Commodore vajon miért nem gondolt? Persze gondoltak: a C16 alapkoncepciója kb. az volt, hogy úgy 10 IC-ből össze lehessen állítani. Ahhoz képest (ha jól számolom) van benne 17 db. Az azért mégsem 4 (5)... :) De ötleteim nekem is vannak ezzel a csipkészlettel. Az én koncepcióm valahogy így néz ki:

Ebben sincs túl sok alkatrész. A végeredmény:

Valójában elindul, de erősen „bugos” a dolog, szana-széjjel fagyogat. Az oka az, hogy az SRAM vezérlés elég bambán lett megoldva: a DRAM _CAS jele rá van kötve az SRAM _CS lábára, ELVILEG így mindennek rendben kellene lennie. A valóság egy kicsit más: a DRAM íráskor a CAS lefutó élénél a kapott címet eltárolja, utána a címvonalaival már nem foglalkozik. A TED CAS vezérlése túl hosszú ideig tartja alacsonyban a vonalat, a ciklus vége után a cím / adatbusz már elkezdi a következő kört, az SRAM meg (a DRAM logikával szemben) szépen összeszemeteli a memóriát. Ha egy kicsit ügyesebben oldják meg a DRAM vezérlését a Commodore mérnökei, működőképes lenne a koncepció, mehetne ez is 4 IC-vel... (A képen 5 db. IC látszik, abból 2 a BASIC + KERNAL¹ ROM. Ha itt is olyan buta lenne a BASIC mint a C64-ben, simán elférne 1 db. 16K-s ROM-ban, így meg is van a 4 db. :) ) Mondjuk a billentyűzet kezeléséhez még szükség lenne egy buszmeghajtóra (a MOS IC-k eléggé zavarérzékenyek), de a minimál koncepció azért megvan. Hogy jó-e az, hogy nem készült ilyen mikrogép? Tulajdonképpen nem hiányzik, ha azt veszem, hogy a C116 sem lett valami átütő siker. (Ott is az olcsósítás volt a szempont...) Érzésem szerint nem az elektronika lespórolható része vitte el a költségek nagy részét, akkora széria meg nem lett, hogy 1-2 dolláron annyira sok múljon. Manapság már más lenne a marketingesek véleménye... :)

(¹: A „KERNAL” mint megnevezés nem elírás, maga a Commodore ezt használta. A korabeli gépeinél a HW kezeléssel kapcsolatos funkciók a KERNAL ROM-ban voltak, az összes dokumentáció így említi, nem „KERNEL”-nek. De nem csak a 264-es széria büszkélkedhet ezzel az elnevezéssel, pl. a C64-ben is így hívták. Gondolom a többi régebbi gépükben is. A plus/4 esetén a KERNAL valójában kisebb mint 16K, egyrészt lejön az I/O terület ($FD00..$FF3F) mérete belőle, másrészt a BASIC meg belelóg egy kicsit. $CE00-nál kezdődik a KERNAL maga, de $D000-tól $D7FF-ig ebben a memóriaszeletben található még a karakter generátor is.)

Ez a kísérlet akkor a „nem sikerült” kategóriában végezte, de egy ötlet azért született belőle. Megvan a hiba, azt pár kapuval ki lehet küszöbölni. Ha fogok egy szép nagy SRAM-ot, mondjuk egy 512K-st, ill. egy FLASH-t ami szintén lehet 512K, a logikát meg belerakom egy CPLD-be, akkor akár lehet egy olyan gépem, ami tartalmaz memóriabővítést (erről később), illetve a lehető legkevesebb Commodore alkatrész van benne (mivel azok manapság igen nehezen beszerezhetők, leginkább csak bontásból...). Sőt, az egész nem lesz egy komplett alkatrésztemető.

Ez a „koncepció” érett bennem vagy egy évet, mire lett hozzá némi energia, hogy neki is álljak. Első körben egy igencsak régóta hiányzó információt kellett megtudni: a plus/4 eredeti dobozában, belül vajon mennyi hely van? Kiszerkeszteni nem egyszerű, így bevetettem egy kis gyurmát. (Direkt ehhez vettem egy adag natúr gyurmát; de már ez se a régi. Mindezt vagy egy éve, addig itt pihent a szekrényben... :) ) A „mérési elrendezés” a következő:

A végeredmény „számokban”:

  • A PCB alsó éléhez van a legközelebb a billentyűzet, ott kb. 7 mm a nyák széle és a keyboard fém hordozója között a hézag.
  • A TED EMI doboz alsó éle és a billentyűzet nyákja között kb. 3.5 mm hely van, nem túl sok, de nem akarok úgysem fölé építkezni...
  • Az EXPANSION csatlakozó fölötti fém konzolra pár mm-rel (van az 3 is...) rálóg a billentyűzet fém hordozó másik oldala. Ott a „két fém” közötti távolság kb. 6 mm.

Az „építkezés” következő része nincs valami eszement módon agyondokumentálva. Az eredeti PCB-be bekerült a BASIC + KERNAL ROM IC-k helyére két foglalat az 512K-s SRAM ill. FLASH IC-nek (Érdekes módon az Atmel oldalán már nincs is meg a dokumentáció, de az egész AT29C sorozat hiányzik. Szinte mintha le is akarnák tagadni, hogy csináltak ilyet... :) ) A lábak nagy része „gyárilag” jó helyen van, azok amik nem, ill. amiknek nincs helye (Eredetileg 28 lábú tokok a ROM-ok, ez a két új jószág meg 32...), azok meg be vannak „kábelezve” „szépen”:

Van pár hiányzó jel még, amit a „néhai” FPLA állított elő, ez a feladat is majd a CPLD-re hárul. A CPU foglalata lesz a „bővítő slot”, abba fog a következő elektronika belecsatlakozni:

CPLD-nek egy XC9572 típusú tok lett betervezve, mivel van belőle pár maradék példányom, amit nem tervezhetek bele semmilyen sorozatgyártásba kerülő elektronikába, mivel a kedves Xilinx úgy ahogy van kivezeti a komplett XC95xx-es szériát. Az első próbák még ezzel is mentek, de hamar kiderült, hogy a tervezett funkciókhoz még az XC95108 is éppen hogy elég. A probléma csak az ezzel a típussal, hogy ebből nincs „pár maradék példány, amit nem tervezhetek be sehova”. :( De ez van, mivel sorozat ebből a kütyüből úgyse lesz, így jelentősége csekély... A „kábelezés” a másik oldalon már munkásabb:

Azt kell mondjam, tulajdonképpen ilyet még nem csináltam. Ezt az elektronikát ennyire össze kellett rakni ahhoz, hogy egyáltalán próbálni tudjak. Hiányzik róla még jó pár alkatrész ill. „drót”, ez a minimum konfig... :) Szégyen-gyalázat, de erről az állapotról, összerakva nem készült kép. De miután belekerült az első teszt FW a CPLD-be, a következő látvány fogadott:

IGEN! Elindult a csomag, eddig csak remélni tudtam hogy működni fog... :) Ezután még kiegészült a „nyák” a hiányzó dolgokkal (ill. ki tudja még mi kerülhet rá?):

Hátulról:

Lehetőség szerint az alul levő forrasztásokat ill. vezetékezést nem szeretném javítani!

A cél az egésszel az volt, hogy a lehető legkevesebb eredeti IC-t (ami ugye nem beszerezhető) tartsam meg. A jelenlegi technikával ez 2 db eredeti integrált áramkört jelentene, a 8501 CPU-t, ill. a 8360 TED-et. A végén azért kötöttem két kompromisszumot. Az egyik a billentyűzet sormeghajtó 6529B SPI csipje, eredetileg ez is a CPLD része lett volna, csak ha meghagyom külön, ezzel megspórolok egy csomó vezetékezést. Azután később kiderült, hogy el sem férek a CPLD-ben vele, úgyhogy örülök hogy nem kezdtem el megcsinálni... :) A másik a 6551 ACIA, ez is megmaradt. Ebből van más gyártótól is példányom, de csak azért nem keresem elő, hogy ne MOS feliratos legyen a gépben. Illetve enélkül a soros interfész IC nélkül a gép kiválóan üzemel, tehát ha nincs szükség a funkcióira (eddig csak a handshake jeleit használtam jó régen, mint soros port illesztőt még sosem...), akkor ki is hagyhatom. Egyelőre marad...

A végeredmény ilyen lett:

Így már látszik, hogy az „építmény” hova, miként kerül. Az elején említett gyurmás méricskélés ugyan kiváló volt, de azt, hogy befér-e ez a cucc a helyére, még a megépítés előtt próbálgatással állapítottam meg. Úgy tűnt hogy igen, méretre vágtam a proto-nyákot, majd bepróbáltam a helyére. Lötyögött, nem szorult → jó lesz. :) Egyelőre hiányzik a datasette motorvezérlése, ill. a komplett Joy-interfész. Majd még ezek is el fognak készülni, csak azért, hogy teljes értékű legyen a funkciók tekintetében is a masina. A képen látszik még egy módosítás, az pedig nem más mint a billentyűzet csatlakozója:

Ez a rész az eredeti gép egyik gyenge pontja (egyszer összerakós, nem sokszor szervizelős csatlakozó), normális megoldást nem találtam rá (Ugyanis nem fér el akármi a helyén...). Eddig. :) Ezt, ha nagyon muszáj, még javítani is lehet. A modulátor fölött így lett egy kis „tülekedés”, de elfér. (A Shift-Lock kapcsolója még nincs bekötve; a billentyűzetet – úgy érzem – még legalább egyszer úgyis szét kell szednem.)

A „memória bővítés” plus/4 esetén érdekes téma. A Commodore nem tervezett / gyártott a géphez ilyet sose (ellentétben pl. a C64-gyel), sőt: a külső bővítő port nem is ad erre lehetőséget. A C16 16KByte memóriáját se lehet „szabályosan” bővíteni. Ettől függetlenül készült C16-hoz sok fajta memóriabővítő (+16K ill. összesen 64K méretben), de ahhoz valami ronda hack kell. Nekem még nem volt a kezemben ilyen bővítőkártya, csak tippelgetni tudok hogy hogy csinálhatják, de az minimum „nem túl szép” megoldás. (Ha van ilyened, és megválnál tőle, szólj ám!) Ilyen külső kártyás bővítővel (ami a belső 64K-nál több memóriát tartalmaz) még elméleti szinten se találkoztam. Olyannal, amit a gép belsejébe kell beszerelni, már 3 fajtával is. Az egyikkel nem nagyon érdemes foglalkozni, a másik kettő viszont már érdekes lehet, ugyanis azzal pár gép fel van szerelve. No, nem túl sok, de valamennyi biztosan... Ezen fajták közül az egyik Német fejlesztés, a másikat meg Magyar. De „tudtak egymásról”, ezért olyan lett a HW, hogy a két módszer „megfér egymás mellett”, mindkettőt lehet egyszerre támogatni. De azért vannak nyűgök. Az alap elgondolás az, hogy a gépben van az USER-PORT párhuzamos részéhez egy 6529B SPI, ami az $FD10..$FD1F memória tartományban érhető el. A nyomoronc IC-nek összesen 1 db. regisztere van, az ezen a memóriatartományon belül 16-szor ismétlődik. A módosítás egyik része abból áll, hogy az SPI ebből megkapja a számára dedikált $FD10-es címet, a többit meg a bővítés szétosztja, többé-kevésbé magának. Módszernek módszer, csak amiatt, hogy egy belső, amúgy az alapgépben használt tartományt használ, gyakorlatilag nem lehet olyan hardvert készíteni az EXPANSION PORT felől, ami működés szempontjából ugyanúgy viselkedik. Ha meg az eredeti gépet bontani kell miatta, töredékére csökken a lehetséges felhasználók száma. (Nem elég a „kütyü megvesz majd bedug” mód, otthon kevesen állnak neki barkácsolni.)

Ennyit a „sírásból”, a lényeg csak annyi, hogy nem túl sok gép büszkélkedhet azzal, hogy olyan memóriabővítés van benne, amit az a maroknyi program használhat, ami készült. De ezeknek a bővítéseknek a közös jellemvonásuk, hogy 256 KByte memóriát tesznek úgy ahogy kezelhetővé. A CPU címbusza nyilván marad 16 bites, így csak valami lapozás jöhet szóba. A lapozóregiszter(ek) felosztása viszont olyan, hogy maximum 1 MByte mennyiséget lehet velük kezelni. Nekem meg van 512 KByte-om. :)

Viszont van még egy lehetőség, amire a plusz memória jól jöhet, az pedig a ROM bővítés. Ez viszont elég jól ki van találva a gépben, 16K-s szeletekben 4 db. külső (az EXPANSION PORT felőli) ill. 4 db. belső (maga a BASIC + KERNAL ill. a beépített FUNCTION ROM-ok) lapot lehet keverni 2 db. 16K-s memóriatartományban. Kevesen használták a lehetőséget, de én annak idején aktívan... :) Viszont EPROM-ot programozni (leginkább törölni...) már akkor sem szerettem. Ezért én azt a módszert használtam, hogy EPROM helyett egy elemmel megtáplált SRAM volt az adott területre „lapozva”, egy kapcsolóval engedélyezni / tiltani lehetett az írhatóságát. Igencsak megkönnyítette a fejlesztést a megoldás, de erre a mostani kütyü is megfelelő lesz. A megoldás: van két „belső” ill. Két „külső” 32K-nyi ROM terület. Ebből a „belső” kettőre lehessen odalapozni „bármit”. Tehát van 512K FLASH-em, ill. ugyanennyi SRAM-om. Azaz 16 db. 32K-s lap itt is, ott is. Csinálok két 5 bites regisztert a CPLD-ben, ami „megmondja”, hogy az adott ROM lap elérésekor melyik memóriából (FLASH/SRAM) melyik számú 32K-s lapot lássa a rendszer (TED/CPU). Aztán lehet szabadon kavarni bármit... Ill. lehessen még azt is konfigurálni, hogy a CPU mennyi memóriát érhessen el. Így bármilyen konfigurációt be lehet állítani. Cserébe kell írnom egy „SETUP” programot, amivel ezt lehet konfigurálni... Ez lett a végeredmény:

(Kicsit bután néz ki 16:10-ben, de ez most részletkérdés.) Akár a BASIC+KERNAL (ROM Bank #0) helyére is konfigurálható SRAM lap, így az olyan jellegű fejlesztések is igen könnyen tesztelhetők. Hogy mit meg nem adtam volna ezért 20 évvel ezelőtt... (Pénzt semmit, mert az nem volt... :) ) De 20 éve nem volt: alkatrész (Fél megás SRAM? CPLD? FLASH? SEMMI!), tudás, ill. nem volt olyan gépem se, amit „szét mertem volna bombázni” egy ilyen projekt kedvéért. Szerencsére szőrös fejjel még megértem... Szóval ez egy jó másfél évnyi idő alatt összerakott hobbi-projekt. És mindezt miért? Hát ezért:

Ez egy bővítő csatlakozó a beépített áramkörön, a gép buszrendszere van rajta kivezetve, ill. a CPLD egy-két speciális funkciója. Ez a belső bővítő port egy másik őrültséghez fog kelleni, amit meg akarok csinálni. De egyelőre arról erősen hallgatok, mert lehet hogy nem működőképes az ötlet, de majd ahhoz talán nem kell annyit huzaloznom mint ehhez, hogy kiderüljön. :)

balagesz

---

2012.08.26.
2012.08.27. „KERNAL” magyarázat

Hozzászólások

nyamm (könyvjelző).

--
Vége a dalnak, háború lesz...

Űberkirályság! Mééég!
Legalább valaki, valami értelmeset is csinál...
--
"Maradt még 2 kB-om. Teszek bele egy TCP-IP stacket és egy bootlogót. "

Áhh szakmai tartalom a hup blogon.
Nagy kösz!!

--------------------------------------
Unix isn't dead. It just smells funny.

Remek hangulatú cikk, élmény volt olvasni.

Leborulok előtted!
Nekem egy C16-om volt, 64K-ra bővítve, akkoriban ez szokásosnak számított.

Hat igen, a C16-nak az egyetlen (muhaha...) hianyossaga a memoria, annak a bovitese (belsoleg) viszonylag egyszeru: a 2 db. 16K*4 bites DRAM-ot kell kicserelni 2 db. 64K*4 bites tokra, meg a cimmultiplexerekbe a hozza tartozo cimeket bele kell kotni. Egyebkent gondolkodtam azon, hogy ezt a cuccot egy C16-ba epitem be, ugyanis abban legalabb van hely. De a C16-nak ez az elonye az egyik hatranya is: nagy. :)

Természetesen köszönöm én is munkásságodat. Jó az ilyen cikkeket olvasni...

Üdvözletem!

Csak most találtam erre a blogra és szeretnék gratulálni.
Nem vagy kispályás a témában!!!
További jó forrasztgatást a kívánok! :)

lelkes_amator

Hali, ez tényleg szupi, én most találtam ezt a ciket mert most retroztam
volt egy hát nem tom a tápot drotokal dugta be valaki plus 4 es,
és most hozájutottam egy kéet nem ad ki c 16 hoz , és összebuheráltam a plus 4 es ic -t belletetem a c 16 ba és elindult 60771K ki irásal na ez is érdekes mi ?