MOS Technology 6502
A MOS Technology 6502 egy 8 bites mikroprocesszor, amelyet Chuck Peddle és Bill Mensch amerikai mérnökök terveztek a MOS Technology számára 1975-ben. Megjelenésekor ez volt a legolcsóbb teljes értékű mikroprocesszor a piacon: az ára csak egyhatoda volt az olyan nagy cégek termékeinek, mint a Motorola vagy az Intel. Mindamellett funkcionalitásban nem maradt el a konkurens termékek mögött, és a Zilog Z80 processzorral együtt olyan számítógépes fejlődést indított el, ami végül a személyi számítógépek elterjedéséhez és a 80-as évek számítógépes forradalmához vezetett. A 6502-es processzor technológiáját a Rockwell, a Synertek ill. később további cégek is licencelték. Nem sokkal a 6502-es megjelenése után (1976-ban) a MOS Technology céget teljes egészében felvásárolta a Commodore International, amely aztán továbbra is forgalmazta és árulta a chipet más gyártóknak. Ez a processzor volt az Apple II sorozat, a Commodore PET, VIC-20, különféle Atari hobbiszámítógép-modellek, továbbá a kevésbé ismert Acorn Atom és BBC személyi számítógépek központi egysége. TörténeteMotorola, gyökerekA 6502 processzort lényegében ugyanaz a csapat tervezte, mint amelyik a Motorola 6800-as processzort. Az egyik tervező, Chuck Peddle egy üzleti körúton volt, hogy bemutassa a 6800 processzort a leendő ipari felhasználói körnek. A processzorral akkoriban a beágyazott piacot célozták meg, és bár a bemutatók keltettek némi érdeklődést, a 300 dolláros ár egyszerűen túl magasnak bizonyult, ezért aztán nem sikerült sok megrendelést összegyűjteni. Peddle megpróbálta kideríteni, hogy milyen áron lenne hajlandó a közönség megvásárolni a terméket és végül a 25 dolláros árhoz jutott. A körút végén a Motorolánál azt a javaslatot tette, hogy egy ilyen árú olcsó termékkel kéne megcélozni a piacot, de ezzel az ötlettel nem sikerült a vezetés érdeklődését felkeltenie, mivel a 6800-as processzor önmagában is elég profitot hozott.[1][2] Ez nem ijesztette el Peddle-t, aki elkezdte kidolgozni az ötletét. Az új processzor tervei némileg hasonlítottak a 6800-asra, mivel ezekben is mindössze néhány regiszter és egy akkumulátor szerepelt, azonban az új tervezet javította az előző legnagyobb hibáit és lehetővé tette az akkumulátor és indexregiszterek együttes használatát a bemenet és (cím)eltolások kezelésére. Bevezetett még BCD aritmetikát támogató utasításokat és csipre integrált órajel-generátort: mindössze egyetlen külső órajelfrekvenciára volt szükség és a processzor az összes járulékos áramkör órajeleit elő tudta állítani, ezzel csökkentve a külső komponensek számát. Ahogy haladt Peddle projektje, a csapatot annál inkább elkedvetlenítette a támogatás hiánya a vezetés részéről. Ezzel egyidőben egyre nőtt a menedzsment felháborodása, hogy a tervezők egy nem támogatott projekten dolgoznak. Végül Peddle egy hivatalos felszólítást kapott, hogy hagyja abba a munkát az olcsó processzoron. Válaszul a teljes eredeti 6800-as tervezőcsapat egy emberként felmondott, és hozzálátott megkeresni azt a céget, amelyik érdekelt lehet egy ilyen új processzortervezet létrehozásában.[1] Költözés a MOS-hoz és a 6501-esA csapat rövidesen tárgyalni kezdett az MOS Technology-val, ami akkoriban egy más cégeknek bedolgozó kis chipgyártó cég volt, korlátozott saját tervezési lehetőségekkel. A céget eredetileg az Allen-Bradley alapította, a Texas Instruments számológépchipek másodlagos forrásának szánva, de a cég ettől függetlenül különböző más vállalatok számára is termelt. Az egyik legfrissebb termékük ebben az időben (az 1970-es években) a népszerű Pong videójáték egycsipes megvalósítása volt. Az MOS már meglévő mérnökei nem voltak elragadtatva attól, hogy egy egész új csapat csöppent a cégükbe. Még jobban felháborodtak azon, hogy az új tervezet profitjából az új csapat emberei részesednek.[1] Az MOS-nál a volt Motorolás csapat gyorsan megtervezte a 6501-es processzort, ami az MOS Technology 65xx mikroprocesszor-sorozat első tagja volt. A 6501 egy nyolcbites, 1 MHz órajelű mikroprocesszor, NMOS technológiával készült. Címbusza 16 bites, ezzel 64 kB memóriát képes megcímezni.[3][4] Úgy tervezték, hogy a lábkiosztása pontosan megegyezzen a 6800-as processzoréval, miáltal a Motorola alaplapjaiban, pl. a MEK6800D2-ben, leválthatta a Motorola processzorokat, bár a két processzor utasításkészlete különbözött. A 6501-esben több címzési mód állt rendelkezésre, mint a 6800-ban. Az új processzort 25 dolláros áron dobták piacra, ami jelentősen alacsonyabb volt, mint a 6800-é (ami 175 $ volt). A Motorola azonnal perelt, ezután a MOS beleegyezett abba, hogy beszünteti a 6501-es gyártását, és visszatért a tervezőasztal mellé. Az új terv eredménye lett az immár „per-álló” 6502-es processzor, amelyet már nem lehetett a meglévő 6800-as alaplapokba behelyezni, de ezen kívül megegyezett a 6501-essel. A Motorolának nem volt ellenvetése ezzel a verzióval szemben. A MOS az ítélet szerint kifizette a 300 000 dollárra rúgó perköltséget, és kötelezte magát arra, hogy megsemmisít minden addig gyártott 6501-es példányt[5] (emiatt a fennmaradt chipek nagyon értékesek a gyűjtők számára). A 6502-esbe egy kétfázisú órajel-generátor is került, így a processzornak csak egyetlen órajel-bemenetre volt szüksége, ami egyszerűsítette a felépítést. A cég ekkor azzal a kérdéssel került szembe, hogy hogyan találjon fejlesztőket a processzorához. Erre több megoldás is született. Chuck Peddle megtervezte az MDT-650 (microcomputer development terminal, mikroszámítógép-fejlesztő terminál) jelű egykártyás számítógépet – ez volt az első piacra került fejlesztőkártya a 6502-eshez (1976).[6] Egy másik csoport a cégnél megtervezte a KIM-1 (Keyboard Input Monitor) jelű, szintén egykártyás számítógépet (1976), amit alkatrészcsomagban árultak doboz és tápegység nélkül, és a vásárlónak kellett azt működő géppé összeszerelnie. A géphez soros porton lehetett teletype írógépet, kazettás egységet és videoterminált csatlakoztatni.[7] Nagy meglepetésükre a KIM-1 jól fogyott, éppolyan sikeres lett a hobbielektronikusok és barkácsolók körében, mint a mérnökök között, akiknek eredetileg szánták azt. A kapcsolódó Rockwell AIM 65 fejlesztőszámítógép (tkp. egy kibővített KIM-1, 1976) szintén sikeres volt. Az AIM-65-nek már szélesebb szoftverválasztéka volt: monitor, assembler/disassembler, BASIC interpreter, Pascal, PL/65, és Forth fejlesztőrendszerek léteztek hozzá. Egy másik hasonló rendszer volt a Synertek SYM-1 (1978). A 6502-es bevezetéseA 6502 processzort 1975 szeptemberében mutatták be a Wescon elektronikai bemutatón. A processzort 25 dolláros áron hirdették, amit eleinte senki sem akart elhinni; beugratásnak vagy tévedésnek vélték a dolgot, azonban a Motorola és az Intel még a bemutató ideje alatt 179 dollárról 69-re csökkentette processzorai árát, és ez már meggyőzte a közönséget.[8][9][10] Az első szériában még igen nagy volt a selejt aránya, de a selejtes példányokat dekorációként használták fel.[11] A 6502-es egyik első alkalmazása az 1976-ban megjelent Apple I számítógép volt. Egy évvel később az Atari 2600 játékkonzol, a Commodore PET és az Apple II számítógépek is 6502-est használtak. Ezt alkalmazták az Atari, a BBC Micro otthoni gépcsaládokban, a Commodore VIC 20 és sok más otthoni és üzleti célú számítógépben, mint pl. az Ohio Scientific és Oric. A Commodore 64 személyi számítógép központi egysége, a 6510-es processzor nem más, mint a 6502 digitális I/O porttal és háromállapotú címbusszal ellátott közvetlen leszármazottja. A Commodore 1541-es lemezegységet továbbra is egy külön 6502-es processzor vezérelte. A 6500-as család tagjait előszeretettel építették be videójáték-konzolokba. Ezek előfutára volt a már említett Atari 2600 videójáték-konzol. Ezt a MOS 6507 jelű processzora vezérelte, ami szintén egy 6502-származék. Ennek a processzornak kevesebb lába volt, ezért csak 8 KiB memóriát tudott megcímezni. Ebből a játékgépből milliókat adtak el, ami igen nagy üzlet volt a MOS-nak. A Nintendo első játékkonzoljai, az ázsiai piacra szánt Famicom, illetve annak nemzetközi változata, a Nintendo Entertainment System, szintén hasonló felépítésű processzorokat használtak. A NES konzolokban lévő átalakított processzorokat a Ricoh gyártotta, kizárólag a Nintendo számára; ezek gyakorlatilag a 6502-es processzoron alapuló korai egylapkás rendszerek (system on a chip, SoC) voltak, kisebb változtatásokkal: kimaradt belőlük a BCD aritmetika (üzemmód be-/kikapcsolása, utasítások), viszont került beléjük 22 memóriába leképzett I/O regiszter, programozható hanggenerátor, kezdetleges DMA lehetőség és játékvezérlő kezelőáramkör. A változatok – a 2A03 NTSC, a 2A07 PAL régiókhoz készült – csak az órajelükben különböztek.[12]
Technikai leírásA MOS Technology 6052-es egy 8 bites mikroprocesszor: adatbusza 8 bites, címbusza 16 bites. Little-endian bájtsorrendet használ. TechnológiaA csip (integrált áramkör) 8 µm-es (8 mikronos)[13] NMOS technológiával készült, 3510 tranzisztort tartalmaz, amely egy 16,6 mm²-es (3,9 × 4,3 mm) felületű lapkán foglal helyet.[14][15] A processzort eleinte NMOS technológiával gyártották, később azonban megjelentek HMOS és CMOS változatai is. Belső felépítésA processzornak egy bemeneti órajelre van szüksége (Φ0(IN) bemenet); a tipikus bemeneti órajel 1 MHz és 2 MHz között van, a maximális órajel nem haladhatja meg a 3 MHz-et. A processzorban egy áramkör ebből állítja elő a belső kétfázisú (két, eltolt fázisú) órajelet, ami több szinkronizációt tesz lehetővé egy órajelcikluson belül. A két jel ki is van vezetve a Φ1(OUT), Φ2(OUT) lábakra, így azt külső áramkörök is használhatják.[16] A belső logika az órajel által diktált sebességen működik. A 6502-es teljesítménye az alacsony órajel ellenére nem marad el a gyorsabb órajelű korabeli processzorokétól. Ez főleg a rendkívül egyszerű állapotgépnek köszönhető, amit kombinációs hálózatokkal valósítottak meg, sokkal nagyobb arányban, mint más felépítésekben. Az alacsony órajel mérsékelte a CPU-hoz csatlakozó memóriával és perifériákkal szemben támasztott sebességi követelményeket is. A memória-hozzáféréshez az órajelciklus kb. 50%-a állt rendelkezésre, de ez az arány változott a különböző chipverzióknál. Ez kritikus volt abban az időben, amikor az megfizethető memóriák 450–250 ns körüli hozzáférési idővel rendelkeztek. Az eredeti NMOS 6502-es minimalista tervezése és hatékony gyártása eredményezte a processzor olcsóságát, ami ezzel nyerte meg a versenyt az igen árérzékeny játékkonzol- és otthoni számítógép-piacon. Regiszterek
A processzor igen kevés regisztert használ (elődjéhez, a Motorola 6800-ashoz hasonlóan), ezt különféle tervezési megfontolások indokolták (pl. a korlátozott tranzisztorszám), ehelyett a közönséges RAM-ot használja hatékonyabban. A regiszterek:
A verem hardveresen a $01 jelű memórialaphoz van rögzítve, azaz a $0100–$01FF (256–511) címtartományban lehet. A vermet 4 beleértett címzési módú utasítás használja, amely beírja (push) vagy kiveszi (pull) az akkumulátor vagy az állapotregiszter tartalmát. A vermet használják még szubrutinhívás és -visszatérés (JSR, RTS), valamint megszakításkezelő (BRK, RTI) utasítások.
Az állapotregiszter egy különleges regiszter, ami a különböző műveletek eredményének jellemzőit és bizonyos gépi állapotokat tárol. Az állapotregiszter bitjeit pl. a feltételes ugróutasítások (BCC, BCS, BEQ, BMI, BNE, BPL, BPL, BVS) aritmetikai és logikai utasítások (ADC, SBC, ROL, ROR) használják, a tartalmát a verembe mentés után (PHP) lehet elérni. A 6502-es hét állapotbitet használ, egy bit kihasználatlan.
MemóriaA processzor által címezhető 64 KiB memória szabadon használható, de van néhány speciális területe:
A 6502-esben nem volt semmi speciális támogatás a külső hardveres eszközök csatlakoztatására (nem voltak külön I/O portjai), így azokat a memória valamely területére kellett leképezni, hogy adatokat cserélhessenek a processzorral. Címzési módokA processzor hatékonyan használja a stack- és indexregisztereket különböző címzési módokkal, beleértve a gyors „nulla-lapos” címzést is, amelyben a cím csak 1 bájton van tárolva, és a 0…255 című memóriahelyeket címezheti (azaz a memória nulladik lapját). Egy ilyen címzést használó utasítás gyorsabb, mint a 16 bites címzést használó utasítások, megspórol egy órajelciklust, ami a címek magasabb helyiértékű részének kiolvasására kell. A 6502 processzornál a 0. lapot használják olyan célokra, amire más processzoroknál a regiszterek szolgálnak. A 0. lapot általában az operációs rendszer foglalja le, és csak kevés rekeszt bocsát a felhasználói programok rendelkezésére. A processzornak 13 címzési módja van, de nem mindegyik utasítás használható mindegyik címzéssel. Ezek a következők:
A CMOS verzió (65C02) további három újabb címzési móddal rendelkezik.[18] Az indirekt címzési módokat jól lehet használni tömbök feldolgozásánál. Az 5/6 órajelciklust igénylő „(zp),y” (nullás lap indirekt Y-indexelt) címzésnél a 8 bites Y regiszter hozzáadódik a nullás lapon tárolt 16 bites alapcímhez, a címzéshez viszont elég az utasításkódot követő 1 byte, az Y regiszter valóban tömbindexként használható: az indexregiszter növelésével sorban megcímezhetők pl. egy tömb vagy string elemei. A nullás lap indexelt indirekt címzést, pl. mutatókat tartalmazó tömb feldolgozásánál lehet használni. Az indexelt címzési módok miatt a nullás lap felfogható 128 további, bár igen lassú címregiszterként. A 6502 az összeadást és kivonást képes bináris és binárisan kódolt decimális üzemmódban végezni. A CPU-t a SED utasítással lehet BCD üzemmódba kapcsolni; ezután a processzor képes tízes számrendszerben számolni, pl. a $99 + $01 összeadás eredménye $00 lesz, és az átvitelbit 1. CLD utáni bináris módban ugyanennek az összeadásnak az eredménye $9A és az átvitelbit 0. Az Atari BASIC-en kívül a BCD üzemmódot ritkán használták az otthoni számítógépes alkalmazásokban. UtasításkészletA processzor utasításkészletéhez 56 utasítás tartozik: ADC, AND, ASL, BCC, BCS, BEQ, BIT, BMI, BNE, BPL, BRK, BVC, BVS, CLC, CLD, CLI, CLV, CMP, CPX, CPY, DEC, DEX, DEY, EOR, INC, INX, INY, JMP, JSR, LDA, LDX, LDY, LSR, NOP, ORA, PHA, PHP, PLA, PLP, ROL, ROR, RTI, RTS, SBC, SEC, SED, SEI, STA, STX, STY, TAX, TAY, TSX, TXA, TXS, TYA.[19] Az utasításkódok egybájtosak, a különböző címzési módokkal együtt 151[20] opkódot foglalnak el a lehetséges 256-ból. Az utasítások az operandusokkal együtt a kódban 1, 2, vagy 3 bájtot foglalnak el, a végrehajtásukhoz 2–7 órajelciklus szükséges;[21] az egyszerű műveletek általában 2–3 órajelciklus alatt futnak le. A nullás lapot ($00xx) és a vermet ($01xx) használó műveletek egy órajelciklussal gyorsabbak, mint a többi művelet. Az utasításokat a processzor egy 130×21 bites dekódoló ROM, azaz egy programozható logikai mátrix (PLA) segítségével értelmezi, amely a vezérlő logikához csatlakozik, és így vezérli a végrehajtást, a regisztereket és az ütemezést. Ez az elrendezés a 151 „szabályos”, dokumentált utasítás mellett a fennmaradó 105 opkód esetén is végrehajt valamit: ezek az „illegális” avagy nem dokumentált utasítások. Az illegális opkódok változatos működést produkálnak: egyes utasítások lefagyasztják a processzort, mások üres utasítást hajtanak végre és átugorják az utánuk következő 1 vagy 2 bájtot, megint mások két hagyományos utasítást végeznek el egy lépésben.[22] A 65C02 CMOS változatban az összes illegális utasítás helyére NOP került, a 65C816 változatban pedig mind a 256 utasítás definiált. Az illegális opkódok a Commodore 64 6510-es processzorában is megvannak, így sok játék- és demóprogramban is fellelhetők. A 6502 processzorra vonatkozó utasítástáblázatok és leírások sok helyen megtalálhatók, néhány ezek közül: MűködésA processzor nem maszkolható megszakítás (NMI) bemenete élérzékeny, ami azt jelenti, hogy ha egy megszakítást kiadó forrás alacsonyan tartja az NMI vonalat, akkor az utána következő NMI kéréseket blokkolja. Egy nem maszkolható NMI és egy maszkolható IRQ kérelem egyidejű kiadása esetén a hardver megszakítási vonalak nem engedélyezik a megszakítást. Ha az IRQ kérelem egy NMI után is fennáll, akkor a processzor azonnal megkezdi az IRQ végrehajtását. Ez egyfajta beépített megszakítás-prioritás kezelésként használható. A processzor 'Break' állapotbitje nem kezelhető direkt utasításokkal és a PHP (push P to stack), PLP (pull P from stack) utasítások segítségével sem lehet állítani. A jelzőbit másolata csak a veremben létezik, ahol a BRK és PHP utasítások mindig 1-re állítják, míg az IRQ és NMI mindig 0-ra állítja azt. Az 'SO' bemeneti láb beállítása 1-re állítja a processzor túlcsordulás (overflow) jelzőbitjét. Ezt gyors pollozó eszközmeghajtókban használják, ami egy önmagára ugró BVC (Branch-on-oVerflow-Clear) utasítással 3 órajel alatt egyszer tesztelhető; pl. a Commodore 1541 és más Commodore lemezmeghajtók is így ellenőrzik, hogy rendelkezésre áll-e a következő byte a lemez olvasásakor, mivel a hagyományos teszt és ugrás típusú ellenőrzés lassabb ennél: minimum 7 órajelciklusig tart. A driverekben óvatosan kell bánni ezzel a jelzőbittel, mert romba döntheti a számtani műveleteket. Változatok és származékokKülönböző gyártók (pl. Renesas, Ricoh, Rockwell, WDC) által, változatos gyártási technológiával és bővítményekkel ellátott, a 6502-es magon alapuló 8 bites és továbbfejlesztett 16 bites processzorok készültek. A 6502 változatai
16 bites származékokA Western Design Center tervezte és gyártotta a 65C816 processzort, a 65C02 16 bites utódját. A 65C816 volt a rendkívül népszerű Super Nintendo Entertainment System és az Apple IIGS számítógép processzora. Ugyancsak a Western Design Center gyártotta a 65C802 jelű processzort is, ami egy 65C816 magot tartalmazott, címtere 64 KiB volt, és a tokozása megegyezett a 65(C)02 processzoréval. A 65C802 beilleszthető volt egy 6502-es alaplapba, és ott 65C02-ként működhetett. Ebben a processzorban szoftverből lehetett konfigurálni a 16 bites akkumulátor és indexregiszterek használatát. Keveset gyártottak belőle, gyártása meg is szűnt. Érdekességek
Jegyzetek
További információk
|
Portal di Ensiklopedia Dunia