Mindennapi processzorunk rovat:
A tegnap esti rovatban éberségteszt is volt, amin a topiktársak kissé leszerepeltek.

A berakott kép ugyanis nem egy i8085A, hanem egy i8080A. Vannak 8085-ösök is, szóval most kárpótlásul gyüjjenek ők, majd utánuk a ma este csillaga.
És a sztár:
MOS 6502
A MOS Technology 6502 típusú processzora szintén 8-bites. A tervezője Chuck Peddle volt 1975-ben. Bevezetésekor a legolcsóbb teljes értékű CPU volt a piacon, jelentős árelőnnyel, mert a versenytárs Motorola és Intel CPU-k árának csak mintegy hatodába került. A versenytársak legtöbbjénél gyorsabb is volt, és a Zilog Z80-assal együtt egy sor számítógéptípus megvalósulását indították el, ami aztán a '80-as évek otthoni számítógépeinek forradalmában nyilvánult meg. A 6502 terveit eredetileg a Rockwell és a Synertek licenszelték, később még számos gyártó megvásárolhatta a gyártás jogát. Még ma is használják beágyazott rendszerekben.
A történet
A 6502-est elsődlegesen az a mérnökcsapat tervezte, amelyik a Motorola 6800-est is. Miután tömegesen léptek ki a Motorolától, hamar megtervezték a 6501-est, egy új processzort, ami azonban lábkompatibilis volt a 6800-assal, bár az utasításkészlete különbözött azétól. Mivel a 6800-as számára tervezett alaplapokba minden további nélkül illeszkedett, a Motorola természetesen azonnal perelt, és a MOS beleegyezett a 6501-es gyártásának leállításába.
A mérnökök visszatértek a tervezőasztalhoz, és elkészítették a 6502-est, ami nem volt használható a 6800-asra tervezett alaplapokban, és így már megfelelt a Motorolának is. Viszont a MOS így szembetalálta magát azzal a problémával, hogy fejlesztőket kellett találniuk a processzorukhoz. Chuck Peddle ezért megcsinálta a KIM-1 egykártyás számítógépet. Legnagyobb meglepetésükre a hobbisták és barkácsolók, akárcsak a mérnökök, sokat vásároltak belőle. A Rockwell AIM 65 ellenőrző/oktató/fejlesztő rendszere is szépen fogyott. Nagyjából hasonló rendszer volt a Synertek SYM-1.
A 6502-est nevetséges, 25 dolláros áron dobták piacra 1975 szeptemberében, amikor a 6800-ast és az Intel 8080-at 179 dollárért adták. Eleinte sokan azt hitték, hogy az ár kacsa, vagy tévedés, de nem sokkal később a Motorola is és az Intel is csökkentette az árait $79-ra. Ezek az árcsökkentések legitimálták a 6502-est, amelyet százasával kezdtek el eladni.
A legelső "nyilvános" felhasználók egyike az Apple I számítógép volt, amit 1976-ban mutatott be Steve Jobs. A 6502-est aztán használták még az Apple II-ben és a Commodore PET-ben. Még később az Atari gépeiben, a BBC Micro családban, a Commodore VIC 20-asban és még sok más alkalmazásban találkozhattunk vele, akár otthoni, akár üzleti felhasználásban.
További fontos felhasználási terület volt a videojátékok piaca. Az első fecske az Atari 2600-as konzol volt. Ez a gép igazából a 6507-esre épült, ami egy lebutított változat volt, kevesebb címkivezetéssel, aminek eredményeképpen csak 8 kbyte memóriát tudott megcímezni. De milliós mennyiséget adtak el belőle, és mindben MOS processzor csücsült. Egy másik fontos felhasználási terület a Nintendo Famicom lett, majd a NES, amelynek processzorát korábban már bemutattam.
Még 2006-ban is számos egyetemen és főiskolán oktatták a 6502-es assembly nyelvű programozását, valamint használták a számítógép architektúra és a digitális integrált rendszerek bemutatására. Csak példák: Eindhoven University of Technology, Hollandia; University of Tasmania; University of Applied Sciences, Köln, Németország, University of Exeter, Devon, Egyesült Királyság; Carleton College; Hull University; Matthew Boulton College; University of Brescia, Olaszország, és Universidad APEC, Santo Domingo, Dominikai Köztársaság.
A 6510-es, a 6502-es közvetlen utódja digitális I/O porttal és háromállapotú buszrendszerrel, lett a legendássá vált Commodore 64 CPU-ja. (A Commodore 1541-es disk drive saját processzorral bírt, ami szintén a 6502-es volt. A bemutatott példány is egy működésképtelenné vált 1541-esből származik.)
Technikai leírás
A 6502-es 8-bites processzor 16-bites címbusszal. A belső logika a külső órajel sebességén fut, de a lassú, tipikusan 1 vagy 2 MHz-es sebességek ellenére a teljesítménye ténylegesen versenyképes volt a magasabb belső órajelet használó processzorokéval. Ez részben annak köszönhető, hogy nagyobb arányban tartalmazott kombinatoriális (órajel nélküli) logikát. A kétfázisú órajel (ami órajelenként két szinkronizálást tett lehetővé) ezenkívül az egész gépciklust felügyelhette - mégpedig közvetlenül. Mint korának legtöbb egyszerű CPU-ja, a MOS 6502 sem tartalmazott mikrokód ROM-ot, hanem PLA-t használt az utasítások dekódolására és sorbaállítására. A PLA a chip területének mintegy 15%-át foglalta el. Mint a legtöbb tipikus 8-bites proci, a 6502-es is képes volt korlátozott átfedésre az utasításlehívás és a végrehajtás között.
Az alacsony órajel meghatározta a CPU-hoz kapcsolható memória és perifériák sebességkövetelményeit, mivel az órajelnek csak körülbelül 50%-a volt hasznosítható memóriahozzáférésre (az aszinkron design miatt ez az arány erősen változik az egyes chipváltozatok között). Ez kritikus volt akkor, amikor a használható memórák válaszideje 450-250 ns volt. Az eredeti NMOS 6502-t minimalista módon tervezték és hatékonyan gyártották, ennélfogva olcsó volt. Ez fontos tényező volt az árérzékeny játékkonzol és házi számítógép piacon.
Akárcsak elődje, a Motorola 6800, a 6502-es is csak néhány regisztert tartalmaz, ellentétben az Intel 8080 -assal és más hasonló processzorokkal. Amikor tervezték, a kis bipoláris memóriák relatíve gyorsak voltak, így volt értelme inkább az olcsó RAM-ra hagyatkozni, mintsem a drága NMOS területet elvesztegetni a regiszterek kialakítására.
A regiszterkészlet állt egy 8-bites akkumulátorból (A), két 8-bites indexregiszterből (X és Y), egy 8-bites processzor státuszregiszterből (P), egy 8-bites stack pointer-ből (SP), és egy 16-bites programszámlálóból (PC). A szubrutinhívások veremterülete a memória $01-es lapja, vagyis a $0100–$01FF (256–511) közötti memóriaterület. Szoftveresen a veremhez négy darab, beépített címzést használó utasításon keresztül lehetett hozzáférni, amelyekkel az akkumulátort és a státuszregisztert lehetett a veremre menteni, vagy onnan feltölteni. Ugyanazt a vermet használták a szubrutin utasítások (JSR és RTS), mint a megszakítások.
A chip az indexregiszterekkel számos hatékony címzési módot volt képes megvalósítani, beleértve a gyors nulláslap módot, amellyel a memória első 256 byte-ját gyors, 8-bites címzéssel érte el, így ciklusidőt takarítva meg, mivel a cím magasabb byte-ját nem kellett lehívni/kiszámítani. A hatékony 6502-es kódok sokkal intenzívebben használták a nulláslapot, mint más processzorok a regisztereiket. Néhány 6502-es alapú gép operációs rendszere szinte teljesen kisajátította a nulláslapot, alig egy maréknyi byte-ot hagyva meg rajta a felhasználói programok számára.
A címzési módok közt megtaláljuk az implicit (1 byte hosszú); az abszolút (3 byte); az indexelt abszolút (3 byte); az indexelt nulláslap (2 byte); a relatív (2 byte); az akkumulátor (1 byte); az indirekt,X és az indirekt,Y (2 byte); és az azonnal (immediate, 2 byte) módokat. Az abszolút mód általános célú volt. Az ugróutasítások 8-bites offszetet használtak; a -128..127 számtartomány így 128 byte-ot jelent visszafelé és 127 byte-ot előre az ugróutasítást követő utasítás elejétől számítva. Az akkumulátor mód az akkut effektív címként használta és nem volt szüksége operandusra. Az azonnali mód 8-bites operandust használt.
Az indirekt módok nagyon hasznosak voltak tömbkezelésben. Az 5/6 ciklus hosszú "(indirekt),Y" módban a 8-bites Y regisztert hozzáadták egy, a nulláslapon található 16-bites címhez, amit az utasítást követő egyetlen byte címzett meg. Mivel az eredményként kapott cím bárhová mutathatott a 16-bites címtartományon belül, az Y regiszter valódi indexregiszter volt, ellentétben a 6800-assal, amelynek csak egy 16-bites címregisztere volt. Az indexregiszter növelésével a tömbön byte-onként végig lehetett "sétálni", és ehhez lépésenként mindössze két ciklusnyi idő kellett.
A kevésbé használt "(indirekt,X)" módban a művelet tényleges címe a nulláslapon volt megtalálható oly módon, hogy az utasítás második byte-ját az X regiszter tartalmához adták. Ily módon a nulláslap úgy viselkedett, mint egy 128 darabból álló, kiegészítő (noha nagyon lassú) címregiszterkészlet.
A Byte magazin egyik cikke a 6502-est az "eredeti RISC processzor" titulussal illette, köszönhetően a hatékony, egyszerű és közel ortogonális utasításkészletének (a legtöbb utasítás használható volt minden címzési módban), valamint a 256 db nulláslap "regiszternek". Természetesen technikailag a 6502 nem RISC CPU, mivel az aritmetikai műveletek bármelyik memóriarekeszt olvashatják (nemcsak a nulláslapot), és néhány utasítás (INC, ROL stb.) a RISC alapvető load/store filozófiájával ellentétes módon közvetlenül is módosíthatja a memória tartalmát. Ezen túl az ortogonalitást is gyakran társítják a "CISC" CPU-khoz. Akárhogy is, de a 6502-es figyelemre méltóan teljesített a kortársaival (pl. Z80) összevetve, amelyek sokkal magasabb órajelet használtak, és a 6502 minden bizonnyal inspirálólag hatott az olyan RISC processzorokra, mint az ARM.
Interrupt-kezelés
A processzor nem maszkolható megszakítási vonala "él-szenzitív", ami azt jelenti, hogy ha az NMI-forrás a vonalat alacsonyan tartja, az NMI gyakorlatilag letiltódik.
NMI és IRQ egyidejű fellépése esetén az IRQ-t figyelmen kívül hagyta a CPU. Ám ha az IRQ-kérelem fennmaradt mindaddig, amíg az NMI lekezelése véget ért, a processzor azonnal IRQ-módba ugrott, mivel az IRQ "szint-szenzitív" volt. Így egyfajta beépített interrupt prioritáskezelés valósult meg a CPU-ban.
Rejtett tulajdonságok
Az eredeti 6502-es és NMOS leszármazottai számos dokumentálatlan utasítással bírtak, amik gyártóról-gyártóra változtak. A 6502-es utasításdekódere bele volt "drótozva" a chipbe (hasonlóan egy programmable logic array-hez), és csak 151-et definiált a lehetséges 256 opkódból. A maradék 105 különös és nehezen megjósolható akciókat indított el (pl. a processzor azonnali lefagyását, számos érvényes utasítás egyszerre történő végrehajtását, vagy csak egyszerűen semmit sem csinált). Az Eastern House Software kifejlesztette a "Trap65"-öt, ami egy, a CPU és foglalata közé csatlakoztatható eszköz volt, és "csapdába ejtette" a nem implementált opkódokat, szoftveres megszakítássá (BRK) alakítva át azokat. Néhány programozó arra használta fel ezt, hogy kiterjessze a 6502-es utasításkészletét, új funkciókat nyújtva speciális alkalmazások számára, a BRK utasítás vektorának ($FFFE) átirányításával. Később, a CMOS alapú 65C02-ben mindegyik definiálatlan opkódot NOP utasításokkal helyettesítették, bár változó végrehajtási idővel.
A JMP (ugróutasítás) részlegesen hibás. Ha a <cím alsó-szó> $xxFF volt (vagyis bármilyen szó, ami FF-re végződik), a processzor nem a $xxFF és $xxFF+1-ben tárolt címre ugrott, hanem a $xxFF és $xx00-ben tároltra. Ez a hiba az egész NMOS vonalat végigkísérte, de a CMOS vonalban kijavították.
Az N (negatív), V (overflow) és Z (zero) flag-ek nem érvényesek, ha a processzor BCD-módban aritmetikai utasítást hajt végre, mivel ezek a flag-ek a bináris, nem pedig a BCD eredményre reflektálnak. Ezt a korlátot a CMOS utódokban megszüntették. Ez a tulajdonság lehetővé teszi az NMOS és a CMOS vonal tiszta és egyértelmű megkülönböztetését bármiféle illegális opkód használata nélkül is.
Ha a CPU-t történetesen BCD módban kapta el egy interrupt, nem váltott vissza bináris módba. Ez nehezen visszafejthető hibákhoz vezetett az interrupt-rutinban, ha az nem törölte a BCD-módot, mielőtt aritmetikai utasításokat hajtott volna végre. Például a Commodore 64 kernal nem kezeli le helyesen ezt a tulajdonságot, ami azt követeli meg a programozótól, hogy a BCD műveletek idejére tiltsa le, vagy irányítsa át a maszkolható megszakításokat (IRQ). Ez a CMOS változatokban is így volt.
A 6502-es utasításkészletében van egy szoftveres interrupt (BRK, opkódja $00). A BRK-t leggyakrabban a programfejlesztés során használták gépi kódú monitorprogram vagy debugger indítására. Egy egyszerű ugrótáblázattal úgy is használható, ahogy a 8088-asok számozott szoftveres megszakításai működnek. Sajnos, ha egy hardveres interrupt jelent meg a BRK utasítás lehívása alatt, az NMOS változat nem hajtotta végre a BRK-t, csak a hardver megszakítást. Ezt a CMOS változatokban javították.
A JSR (szubrutinhívás) utasítás a hívó utasítás (vagyis saját maga) utolsó byte-jának címét tolja a verembe a következő utasítás első byte-jának címe helyett. Az RTS (return) utasítás ezt automatikusan kompenzálja azzal, hogy a verem tetejéről kivett címet eggyel megnöveli, és úgy helyezi a programszámlálóba. Ez észrevétlen marad mindaddig, amíg nem sajátkezűleg vesszük ki a visszatérési címet, ami egyébként széleskörű gyakorlat volt a 6502-es programozói között. Ez mind a mai napig jellemzője maradt a 6502-esnek és utódainak.
16-bites utódok
A Western Design Center tervezte és gyártotta a 65C816 processzort, ami a 65C02 16-bites utódja, akárcsak a hibrid 65C802-est, ami egy 65C816 mag volt 64 kB-os címterülettel egy 65©02 lábkompatibilis tokban. Be lehet tenni a 6502 alaplapjába, és úgy működik, mint egy 65C02, vagy szoftveresen rá lehet venni arra, hogy használja ki a 16-bites akkumulátorát és az indexregisztereit. Csak kevés 65C802-t adtak el, és a chipet sajnos már nem gyártják. A 65C816-t még széleskörűen használják, mind processzorként, mind mikrokontrollerek magjaként.
A Mitsubishi (Renesas Technology) készített egy 16-bites mikrokontroller sorozatot a 65816-éhoz nagyon hasonló szerkezettel, de nem volt 100%-osan kompatibilis.
A Synertek publikálta a SY6516 adatlapját, ami egy 16-bites 6502-utód lett volna, de ezt sohasem gyártották.
32-bites utódok
A Western Design Center 2006-ban még fejlesztette Terbium kódnéven a W65T32-t, ami egy kompatibilis, 32-bites utódja lett volna a W65C816-nak. A Terbiumot a periódusos rendszer 65-ik eleme után nevezték el, mivel a 65-ös szám a prefix valamennyi WDC mikroprocesszor azonosítójában. A chipnek 32-bites címbusza, 16-bites adatbusza és változó hosszúságú utasításkészlete lett volna.
Gyorsítás
Az 1 MHz-es 6502-alapú rendszerek sok felhasználója szerette volna, ha gépe gyorsabb lehetett volna. Számos társaság adott el kiegészítő/helyettesítő hardvereket, hogy felgyorsítsák ezeket a rendszereket. Általánosságban a 6502-es rendszergyorsítók az alábbiakon alapultak:
* 6502 vagy 65C02 chipek magasabb órajellel
* 65C816 chipek 6502 emulációs módban, lényegesen magasabb órajelen (egészen 20 MHz-ig)
* 4 MHz-es és 8 MHz-es Zip Chip processzorok a Zip Chip Technologies-től, és 10 MHz-es Rocket Chip-ek, amelyeket a Bits and Pieces készített. Mindegyik onboard cache RAM-ot használt és szabadalmazott logikát, amivel a feldolgozást gyorsították meg, miközben kompatibilis maradt az 1 MHz-es alaplappal. A Zip Technology #4,794,523 számú szabadalma végül arra kényszerítette a Bits and Pieces-t, hogy szüntesse be a Rocket Chip gyártását.
Kulturális hatások
A Terminátorban (1984) egy ponton a nézők látják a T-800 Model-101 robot szem/kamera kijelzőjét, amelyen 6502 assembly/gépi kódú programtöredékek scrolloznak lefelé. A Nibble magazinban közölt Apple II-es KEY PERFECT 4.0 program egyik futásának ellenőrző összege is megjelenik.
A Futurama TV-sorozat egyik főhőse, a 2998-ban gyártott ipari android, Bender, szintén 6502 alapú "aggyal" bírt a "Fry and the Slurm Factory" c. epizódban.
... a trip back in time is all I need ...