C64 inside
Ahogy az egységsugarú hallgató szép lassan halad a tanulmányaival, és egymás után gyűri le a digitális technika, villamosságtan, elektronika, programozás buktatóit, egyre több irányból kísérli meg a számítógép, mint "fekete doboz" működésének megértését. Némi mikroelektronika alapozás is része a képzésnek: tranzisztoros kapcsolások, logikai kapuk és memóriák működése, ami elegendő ahhoz, hogy az emberben kialakuljon egy kép arról, hogy hogyan is működhet egy IC, például egy processzor.
A téma engem annyira megfogott, hogy elhatároztam, megfejtem a működését egy régi, viszonylag egyszerű processzornak. A 6502-re esett a választás: a C64 korszak gyöngyszeme, 8 bites, 6 regiszter, nem dokumentált utasítások, anno még programoztam is. Kb. 6000 tranzisztor, néhány ezer kapu, nem lesz nehéz – gondoltam akkor. A proci felnyitásában Mizsei János tanár úr volt segítségemre: a tokozást addig kellett reszelni, míg csak egy vékony réteg maradt belőle, azt pedig forró, tömény kénsav távolította el alig 10 perc alatt. Gyors öblítés, és máris ment a mikroszkóp alá a bébi. Két nap munkájának gyümölcse a teljes felvétel a layoutról, minden látszik rajta (http://www.impulzus.com/6502/), 112 darabból raktam össze. Vizsgálódásaim eddigi eredményeit igyekszem úgy leírni, hogy azok számára is követhető legyen, akik még nem tanultak mikroelektronikát, valamint plusz információt kapjanak, akik igen (főleg ha megnézik a fenti címen található képeket és kapcsolásokat).
Három nagy területet lehet megkülönböztetni a teljes layouton:
– A felső rész a 8 vízszintes (bit)csíkra tagolt regiszterblokk. Benne katonásan sorakoznak oszlop szerint az indexregiszterek (X és Y), az A regiszter és jobb oldalon a veremmutató és az utasításszámláló. Érdekesség, hogy az összeadó áramköröket is itt lehet megtalálni, minden 1 bites tároló mellett, ahol kell, van 1 bites összeadó is (SP, PC közös összeadót használ, X és Y-hoz külön-külön van: az indexelés lényegében összeadás).
– Középen a processzor magja, rengeteg vezeték fut be ide, igazi őskáosz, úgy néz ki.
– Lent egy kb. 2000 bit információt tároló ROM. Ez az utasításdekódoló: a 8 adatlábon beolvasott utasításkód ide fut be, a ROM mátrix sorai rendre a bitek ponáltjai és negáltjai, az oszlopok pedig egy sok bemenetű NOR kaput alkotva kikapuzzák, hogy épp mely utasítás, címzésmód avagy prociállapot az aktuális.
Első ránézésre a layout nagyon rémisztő: kuszább, mint a lehető legbonyolultabb szabásminta. Ráadásul kevéssé érvényesül az, hogy az ugyanolyan funkciójú kapuk hasonlítanak egymásra. Mintha a tervezők versenyeztek volna, hogy ki tud szebb invertert rajzolni, vagy ki tud kisebb helyre a lehető legtrükkösebben 8 invertert bezsúfolni, ráadásul mindegyik máshogy néz ki. A tervezés szemmel láthatóan számítógéppel támogatott volt: több helyen fellelhető olyan logikátlanság, ami csak szoftver műve lehet. Példa erre egy vezeték, amely nagyrészt poliszilícium, ám középtájt egy kis szakaszon alumínium. Ember ilyet nem rajzol...
Az alkatrészkészlet egyszerű, kizárólag MOS tranzisztorokat használtak, kondenzátor, ellenállás sehol. A vezetékelés 3 féle lehet, n+ szilícium, poliszilícium és alumínium (ez utóbbi keresztezheti a másik kettőt). A logikai alkatrészkészlet is egyszerű, leggyakoribb elem az inverter. Digitális technika emlékképei alapján nem is gondolná az ember, hogy egy processzorban egyáltalán nincsenek nagy, bonyolult logikai hálózatok, többszintű NAND, NOR kapcsolások. Ami van, az sok kicsi, jól elkülöníthető működésű alkatrészcsoport, bennük 90% inverter, néhány 1 bites tároló, vezetékelés, ennyi...
Az inverter egyébként a legsokoldalúbb alkatrész, például jelszint kiigazítására is jó: erre akkor van szükség, ha egy jelvezeték nagyon hosszú, vagy az adatfolyamot transzfer gate-ekkel szakítjuk meg, amelyeket tipikusan valamelyik órajellel szokás vezérelni. Példa: mire a
8 adatbit eljut a lábaktól az utasításdekódoló ROM-hoz,
2 transzfer gate-en és 5 invertáláson esik át. No és a legegyszerűbb 1 bites tároló is inverterből készül:
2 kell bele, kimenetek egymás bemenetére kötve.
A kapcsolási rajzokat nézegetve minden ismerős: "tankönyvízű", tanult alapkapcsolások életszagú, továbbfejlesztett variánsai.
Régi processzor, spórolós, trükkös tervezés:
– A címkimenetnek nincs nagy impedanciás állapota.
– A ROM sorai között átfedés van, két szomszédos sor ugyanazon oszlopában tárolt 0 illetve 1 bit ugyanaz a kontaktus a layouton.
– 8 bites processzor, 16 bites címezhető memóriával: külön címzésmód van a memória alsó 256 byte-jának elérésére. Ez kicsi terület, de gyors a kezelése, mert
8 bitesen címezhető, utasításonként 1 óraciklus megtakarítható.
A felvételek készítését először elektronmikroszkóppal kezdtük el, majd a készülék technikai problémái miatt áttértünk optikaira. Utóbb jöttem rá, szerencsés, hogy így alakult, mert ugyan az adott optikai mikroszkóp egyszerűbb, kisebb szerkezet volt, a képe nem volt valami stabil, de az általa szolgáltatott színinformáció mindent megadott a sikeres fejtéshez. Az elektronmikroszkóp képe hiába lenyűgözően részletes és térbeli, nincs színinformáció, nem feltétlenül lehet rajta megkülönböztetni a különböző adalékolásokat, emiatt például egy aktív zóna határának megállapítása esélytelen.
Felmerül a kérdés, hogy vajon melyik az a processzor, amelyik megelehetősen fejlett, de még éppen meg lehet optikai mikroszkóppal fejteni. Talán egy 486-os? Vagy egy legelső sorozatú, 60-66 MHz-es Pentium? Lehet-e szoftverrel támogatni, automatizálni a fejtést? Ez már egy másik történet lesz...
Bereg