MOS Technology 6502

A Wikipédiából, a szabad enciklopédiából
MOS Technology 6502
MOS 6502AD 4585 top.jpg
MOS 6502 processzor DIP-40 tokozásban. (Gyártási idő: 1985, 45-ik hét)

Gyártás 1975 – napjainkig
Gyártó MOS Technology,
 Rockwell,
  Synertek,
   WDC
Max CPU órajel 1–2 MHz
Gyártás technológia méret 8 µm NMOS, később CMOS
Utasításkészlet CISC
Tokozás DIP-40
Tranzisztorok száma 3510
Alkalmazása mikroszámítógépek, perifériák
Utód MOS Technology 6510

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 a 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 vezetett és a 80-as évek számítógépes forradalmához. A 6502-es processzor technológiáját a Rockwell, a Synertek, 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énete[szerkesztés | forrásszöveg szerkesztése]

Motorola, gyökerek[szerkesztés | forrásszöveg szerkesztése]

Motorola 6800 demonstrációs kártya, Chuck Peddle és John Buchanan tervei alapján, 1974

A 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 lemondott, é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-es[szerkesztés | forrásszöveg szerkesztése]

A MOS Technology integrált áramköreit reklámozó hirdetés, 1973

A 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 videojá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).

MOS Technology MCS6501 chip

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ése[szerkesztés | forrásszöveg szerkesztése]

A MOS Technology MCS6501 és MCS6502 mikroprocesszorok bevezető hirdetései

A 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-es család tagjait előszeretettel építették be videojáték-konzolokba. Ezek előfutára volt a már említett Atari 2600 videojá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ás[szerkesztés | forrásszöveg szerkesztése]

A 6502-es processzor lábkiosztása (40-lábas DIP tokozás)

A MOS Technology 6052-es egy 8 bites mikroprocesszor: adatbusza 8 bites, címbusza 16 bites. Little-endian bájtsorrendet használ.

Technológia[szerkesztés | forrásszöveg szerkesztése]

A 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és[szerkesztés | forrásszöveg szerkesztése]

A 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[szerkesztés | forrásszöveg szerkesztése]

A MOS 6502 regiszterei
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (bitpozíció)
Fő regiszterek
  A Akkumulátor
Indexregiszterek
  X X index
  Y Y index
0 0 0 0 0 0 0 1 S S, veremmutató [r 1]
Programszámláló
PC PC [r 2]
Állapotregiszter
  N V - B D I Z C P, állapotbitek [r 3]
  1. S vagy SP: stack pointer, veremmutató
  2. program counter, programszámláló
  3. processor flags, processzor jelzőbitek v. állapotbitek

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.

A 6502 állapotregiszter bitjei
bit 7 6 5 4 3 2 1 0
jel N V B D I Z C

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.

bit jel angol leírás
0 C Carry Átvitelbit; a legnagyobb helyiértékű bitről kilépő bit számtani és logikai eltolási műveleteknél, kivonáskor negált átvitelként viselkedik. A CLC vagy SEC utasításokkal közvetlenül állítható.
1 Z Zero Zéró bit; értéke 1, ha az előző számtani vagy logikai művelet eredménye nulla, egyébként törlődik.
2 I IRQ enable/disable Ha értéke 1, akkor a megszakítások tiltva vannak. Közvetlenül a CLI vagy SEI utasításokkal állítható.
3 D Decimal mode A processzor BCD-üzemmódját vezérli. A CLD és SED utasításokkal állítható.
4 B BRK command Értéke 1, ha szoftveres megszakítás következett be (BRK utasítás), 0 hardveres megszakítás (NMI) esetén.
5 Nem használt.
6 V Overflow bit 1, ha az előző művelet eredménye nem fér el 8 biten. A processzor 'SO' lábán beállított 1 is beállítja, ez a módszer külső eszközök vezérlésénél használható.
7 N, S Negative / Sign bit Negatív- vagy előjelbit. 1 ha az előző művelet értéke negatív.

Memória[szerkesztés | forrásszöveg szerkesztése]

A processzor által címezhető 64 KiB memória szabadon használható, de van néhány speciális területe:

  • Nullás lap: a $0000 – $00FF címek közötti terület, amelynek bármely két egymást követő bájtját 16 bites címként lehet használni. Különleges szerepet játszik, mivel a processzor nulla lapos címzési módjai erre a területre hivatkoznak, és ez a címzési mód gyorsabb működést tesz lehetővé.
  • Verem: a $0100 – $01FF címek közötti terület, hardveresen került kialakításra, nem relokálható. A vermet az S veremmutató címzi, emellett elérhető egyéb címzési módokkal is. A verembe írásnál az S értéke csökken[17], a verem 'teteje' a $01FF cím. Ha a stack mélységét korlátozza egy program, akkor az 1-es lapot is használhatja egyéb adattárolásra.
  • Megszakítási vektorok: a memória legfelső 6 bájtja ($FFFF – $FFFA) a megszakítási vektoroknak van fönntartva. A $FFFA,$FFFB címen a nem maszkolható megszakítás (NMI) kezelőrutinjainak kezdőcíme, a $FFFC,$FFFD a RESET, a $FFFE,$FFFF címen pedig a szoftveres megszakítási kérelem (IRQ) ill. a BRK utasítás kezelőrutinjának címe található.

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ódok[szerkesztés | forrásszöveg szerkesztése]

A 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:

  • Akkumulátor (accumulator, A ): A művelet csak az akkumulátor-regiszterben történik, pl. az operandusok nélküli ASL utasítás az akkumulátor tartalmát egy bittel balra tolja.
  • Beleértett (implied, i ): 1 bájtos utasítások használják, az utasításkód határozza meg a megcímzett valamelyik regisztert, pl. az INX utasítás 1-gyel növeli az X indexregiszter értékét, vagy a TXA utasítás esetében a forrás az X indexregiszter, a cél pedig az A regiszter.
  • Közvetlen (immediate, # ): 2 bájtos utasítások használhatják, az operandus az utasításkód után álló byte, amely közvetlenül részt vesz a számításban. Pl. a LDA #$22 utasítás a hexadecimális $22 értéket tölti be az akkumulátorba.
  • Abszolút (absolute, a ): A teljes 16 bites memóriacím meg van adva (2 bájton), az utasításban a cím által mutatott rekesz tartalma vesz részt. Pl. LDX $D010 – a $D010 címen tárolt érték kerül az X regiszterbe.
  • Nullás lap (zero page, zp ): A címet 1 byte tartalmazza, ami a memória legelső lapjára, v. a nulla-lapra mutat ($00xx). A megcímzett memória-byte tartalma vesz részt az utasításban. Pl. LDY $02 - a $0002 címen levő értéket tölti az Y regiszterbe.
  • Relatív (relative, r ): Csak feltételes ugróutasítások használják, a címzés a vezérlésátadás helyére vonatkozik. Az operandus egy 1 bájtos eltolási értéket határoz meg, ami hozzáadódik az utasításszámláló (PC) aktuális értékéhez. Az eltolás –128-tól +127-ig terjedhet.
  • Abszolút X-szel indexelt (absolute indexed with X, (a,x) ): az utasításban szereplő 2 bájtos címhez hozzá kell adni az X regiszter tartalmát, az így kapott című memóriarekeszben található az operandus. Pl. ADC $C001,X – ha az X-ben a $02 érték van, akkor a számított cím $C003. Az ezen a címen tárolt byte az akkumulátorhoz adódik, az átvitelbittel együtt (ADC: add with carry).
  • Abszolút Y-nal indexelt (absolute indexed with Y, (a,y) ): Hasonlít az előzőhöz, csak az Y indexregisztert használja. Pl. INC $F001,Y – ha az Y regiszterben $03 érték van, ezt az $F001 értékhez hozzáadva a $F004 címet kapjuk. Ha a $F004 címen az $EF érték van, az utasítás ezt megnöveli 1-gyel, majd az $F0 értéket visszaírja a $F004 címre.
  • Nullás lap X-szel indexelt (zero page indexed with X: zp,x ): Az X-ben levő értéket hozzáadja a nullás lapra mutató címhez, eredményül kapott címen tárolt byte vesz részt az utasításban. Pl. LDA $01,X – ha az X tartalma $02, az eredmény cím $03, azaz $0003. Az ezen a címen tárolt értéket betölti az akkumulátorba.
  • Nullás lap Y-nal indexelt (zero page indexed with Y: zp,y ): Hasonlít az előzőhöz, csak az Y indexregisztert használja. Pl. LDA $01,Y
  • Indexelt indirekt (zero page indexed indirect: (zp,x) ), vagy nullás lap indexelt indirekt címzési mód: Az X tartalma hozzáadódik az utasításban álló 1 bájtos értékhez, az így kapott nullás lapon lévő cím a tényleges 16 bites címre mutat. A nulla-lapos címen az alacsony helyiértékű byte (LSB), a következő címen a magas helyiértékű byte (MSB) tárolódik; az utasítás a tényleges címen tárolt értéket használja. Pl. STA ($15,X) – az X-ben lévő $02 érték hozzáadódik a $15-höz, az eredmény $17. A $0017 címen tárolt $10, és a $0018 címen tárolt $D0 adja a tényleges $D010 címet. Az utasítás az akkumulátor tartalmát beírja a $D010 címre.
  • Indirekt indexelt (zero page indirect indexed with Y: (zp),y ) vagy nullás lap indirekt Y-nal indexelt címzés: Az utasítás operandusa egy nullás lapi cím, ami egy 2 bájtos báziscímre mutat, ehhez hozzáadva az Y regiszter tartalmát kapjuk a tényleges címet. Pl. LSR ($2A),Y – Legyen a $002A és $002B címeken rendre $35, $C2, azaz a $35C2 16 bites cím a nullás lap $2A címén tárolva. Ehhez hozzáadódik az Y indexregiszter tartalma, pl. a $03, ekkor a $C238 címet kapjuk. A LSR utasítás az ezen a címen lévő bájtot jobbra tolja és visszaírja ugyanarra a címre.
  • Indirekt vagy abszolút indirekt: Ez a címzési mód csak a JMP utasításnál fordul elő; az utasításban megadott 2 bájt egy címet határoz meg, ami az ugrási cím 2 bájtjára mutat. Pl. JMP ($1234) – ha az $1234 címen $CD, az $1235 címen $AB található, akkor az ugrási cím az $ABCD és a program futása ezen a címen folytatódik.

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észlet[szerkesztés | forrásszöveg szerkesztése]

A 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 tömb (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és[szerkesztés | forrásszöveg szerkesztése]

A 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ékok[szerkesztés | forrásszöveg szerkesztése]

Kü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[szerkesztés | forrásszöveg szerkesztése]

  • 2002
  • 38000
  • 6500/1
    • 2 KiB ROM, 64 bájt RAM és egy UART
    • a Commodore 1520 plotter használta
  • 6501
    • Ház- és jel-kompatibilis (de nem szoftver-kompatibilis) a Motorola 6800-as processzorral. A Motorola szabadalomsértési pert indított emiatt.
  • 6502
  • 6502A
  • 6502B
    • 3 MHz órajel
  • 6502C
    • Extra HALT pin
    • az Atari 8 bites család XL (kivéve 1200XL) és XE 1,79 MHz órajelű (1,77 MHz PAL mód) modelljeiben
  • Ricoh 2A03
    • Egy 6502 változat, nincs benne BCD üzemmód, a NES-ben használták.
  • WDC 65C02
    • CMOS technológiával készült, utasításkészlete bővült, a 6502 kirívó hibáit javították benne.
    • További utasítások és címzési módok
    • Nincsenek illegális utasítások
    • Néhány parancs bizonyos körülmények között több vagy kevesebb órajel ciklust igényel, mint 6502-nél
    • A kiterjesztett Apple IIe és Apple IIc gépekben, és néhány 6502 rendszerekhez készült korai gyorsító kártyában
    • Gyártó: Western Design Center
  • 65SC02
    • A 65C02-hez képest kissé csökkentett utasításkészlet (RMB, SMB, BBR, BBS bitmanipulációs utasítások hiányoznak).
    • Az Atari Lynx és az 4 MHz-es órajelű Watara Supervision gépekben
    • Gyártók: GTE és CMD
  • 65CE02
    • További 16 bites RMW utasítások
    • Relatív ugrások és szubrutinhívás, 16 bites eltolás
    • Commodore C64DX/C65 gépben mint CSG 4510 mikrokontroller, Amiga Commodore A2232 soros port bővítőkártyában
    • 3,54 MHz-es órajel
  • 65C102, 65C112
    • Többprocesszoros üzemmódban való használatra tervezték, a 65C112 az alárendelt (slace) processzor
    • BBC Micro, Commodore LCD gépekben
  • 6503, 6505, 6506
    • 12 bites címbusz (4 KiB címezhető)
  • 6504, 6507
    • MOS Technology 6507: csökkentett memóriacímzési lehetőség, nincsenek megszakítások.
    • 13 bites címbusz (8 KiB címezhető), például Commodore billentyűzetekbe (Amiga 1000) és floppy meghajtókba (Atari 1050) építették
    • Az Atari 2600 gépben 1,19 MHz-es órajelű 6507 volt
  • 6508
    • A NES gépekben használták
  • 6509
    • 20 bites címbusz (1 MiB címezhető) belső memóriabank-váltó logikával
    • Commodore PET-II gépekben (CBM 500, CBM-600, CBM-700 modellekben) használták.
  • MOS Technology 6510
    A C64 alaplapjának részlete, MOS Technology 6510 CPU-val
    • DMA-val (pin 5, AEC, Address Enable Control) és egy beépített 8 bites programozható I/O-porttal bővített 6502
    • Azonos nevű, de eltérő változatai jelentek meg (pl. a C64-ben használt variáns I/O portja csak 6 bites volt)
    • Használta a C64 985 kHz-es (PAL), 1022 kHz-es (NTSC) változata
    • A VC1551-be épített 2 MHz-es változat jele 6510T
  • 6511
    • Mikrokontroller I/O portokkal, soros interfésszel és RAM-mal, a Rockwell-től
    • Kiterjesztett bitkezelő utasítások
  • 65F11
    • A 6511 egy változata, beépített Forth interpreterrel
  • 6512-6518
    • A megfelelő 650x processzorok beépített oszcillátor nélküli változatai
    • A MOS Technology 6512 külső órajelet igényel, a 6502-vel ellentétben. Különböző kiépítésekben aszimmetrikus órajelekkel gyorsították a CPU-t.
    • A 6512-t a BBC Micro B+64 gépben használták.
  • 65C00/21, 65C29
    • Szorzás utasítással rendelkezik
    • Gyártó: Rockwell
  • 6570, 6571
    • Az Amiga billentyűzetekben használták
  • 6280
    • NEC fejlesztés, a 65SC02-en alapul
    • beépített MMU (2 MiB címezhető)
    • 6-csatornás PSG
    • A PC Engine játékgépbe került, mint HuC6280 processzor
  • 6702
    • csak a Commodore SuperPET Plug-in Board-jában létezett
  • 740
    • A Renesas Technology (korábban a Mitsubishi Electric ) mikrokontroller-családja
    • A 65C02 processzoron alapul
    • Több mint 100 fajtája létezik
    • Max. 60 KiB ROM / PROM / flash onchip
    • Max. 2 KiB RAM onchip
    • Kiterjesztett utasításkészlet
      • Szorzás
      • Osztás
      • Kiterjesztett bitkezelő utasítások
      • Stop/Wait
    • Új címzési módok
      • Transfer (memória-memória adatmozgató utasítások)
      • Speciális lap
      • Bit relatív címzés
    • Órajel: 17 MHz-ig
  • 7501
  • 8500
    • CMOS technológiával készült 6510-es
  • 8502
    • 2 MHz-es órajelre kapcsolható 6510
    • 7 bites I/O port
    • A C128 használta
  • 65802 (65C802)
    • A 65816 egy változata, pin-kompatibilis a 6502-vel, így a címtartománya csak 64 KiB
    • Úgy tervezték, hogy közvetlenül felválthassa a 6502-t a meglévő áramkörökben
    • Órajele: 16 MHz-ig
  • WDC 65816 (65C816)
    • Tervező: Western Design Center
    • Felhasználásra került többek között Apple IIgs és Nintendo SNES gépekben (itt mint Ricoh 5A22), valamint a 6502-alapú gépek gyorsítókártyáiban
    • 16 bites regiszterek és ALU
    • 24 bites címbusz (16 MiB)
    • Órajel: max. 24 MHz
    • Az utasítások a 6502-esnél több órajelet igényelnek, az extra címbyte feldolgozása 1 órajellel tovább tart

16 bites származékok[szerkesztés | forrásszöveg szerkesztése]

A 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[szerkesztés | forrásszöveg szerkesztése]

  • A processzor eredeti tervrajzának nyoma veszett, azonban lelkes szakemberek rekonstruálták azt, a gyártott példányok visszafejtésével.[23][24] A visszafejtés során kiviláglott, hogy az eredeti tervekhez nem használtak tervezőszoftvert[25] – a tervek ezáltal „művészinek” is nevezhetők.
  • A 6502 processzor kifejlesztéséről The 6502 címmel dokumentumfilm készül, a még élő tervezők közreműködésével.[26]
  • A Futurama rajzfilmsorozatban szereplő Bender robotról az egyik epizódban kiderül, hogy „agya” nem más, mint egy 6502-es processzor.[27]
  • A jelek szerint Terminátor is tartalmazott 6502-es processzort: az 1984-es filmben egy jelenetben a nézők a Terminátor szemszögéből láthatják a környezetet, ahol a robot látóterének kijelzőjén 6502 assembly kódlisták futnak egy mezőben. Az egyik lista az Apple DOS 3.3 visszafejtett részlete, egy másik mezőben pedig az Apple KEY PERFECT 4.0 ellenőrzőösszeg-számító program futása látható.[28]
  • A 6502 processzor egy változata még ma (2012-ben) is kapható, az eredeti 40-lábú DIP tokozásban: a WDC cég W65C02S6TPG-14 sz. csipje pin- és szoftverkompatibilis az 1975-ös elődjével, ám 14 MHz-es órajelen fut.[29][30]

Jegyzetek[szerkesztés | forrásszöveg szerkesztése]

  1. ^ a b c Matthews, Ian: The Rise of MOS Technology & The 6502, 2006. június 26
  2. Sugarman, Robert (1975. augusztus 25.). „Does the Country Need A Good $20 Microprocessor?” (PDF). Electronic Engineering Times, 25. o.  
  3. MOS Technology 6500 Series Hardware Manual. (Hozzáférés: 2001. július 2.)
  4. MOS Technology 6500 Series Software Manual. (Hozzáférés: 2001. július 2.)
  5. The 2600 Story. (Hozzáférés: 2011. szeptember 29.)
  6. MOS Technology, Inc. vállalati hírlevél, 1976. február
  7. MOS KIM-1 (angol nyelven). Oldcomputers.net. Obsolete Technology Website. (Hozzáférés: 2012. április 6.)
  8. (1975. September) „James Advertisement”. Popular Electronics 8 (3), 107. o.   James is now Jameco Electronics. The 8080 CPU was US$ 149.95, the 8008 CPU was US$ 29.95. A 2102 1K bit static RAM was US$ 4.95. Their price for a 8080A CPU was US$ 37.95 in the June 1976 issue.
  9. (1975. október 30.) „Motorola advertisement” (JPEG). Electronics 48 (22), 11. o, Kiadó: McGraw-Hill.   The quantity one price for the MC6800 was reduced from US$ 179 to US$ 69. The previous price for 50 to 99 units was US$ 125.
  10. (1975. December) „Digi-Key Advertisement”. Popular Electronics 8 (6), 124. o.   The 8080A CPU was US$ 69.50. A 2102 1K bit static RAM was US$ 3.50. Digi-Key's price for a 8080A was US$ 34.95 in the June 1976 issue.
  11. Bagnall, Brian. On the Edge: The Spectacular Rise and Fall of Commodore. Variant Press (2005). ISBN 9780973864960 
  12. Taylor, Brad: 2A03 technical reference, 2004. április 23. (Hozzáférés: 2008. június 6.)
  13. Corder, Mike: Big Things in Small Packages. Pioneers' Progress with picoJava Technology. Sun Microelectronics, 1999. (Hozzáférés: 2012. április 23.) „The first 6502 was fabricated with 8 micron technology, ran at one megahertz and had a maximum memory of 64k.”
  14. Cushman, Robert H. (1975. szeptember 20.). „2-1/2 Generation μP's -$10 Parts That Perform Like Low-End Mini's”. EDN, Boston 20 (17), pp. 36–42. o, Kiadó: Cahners Publishing.  "
  15. ac 03 Standar Integritas Akademik (PPT). teuinsuska2009.files.wordpress.com
  16. Kapcsolások a 6502 processzorban (magyar nyelven). impulzus.sch.bme.hu. [2012. február 4-i dátummal az eredetiből archiválva].
  17. Rockwell 6502 Programmers Reference (angol nyelven). PHA instruction
  18. 65CE02 Microprocessor (angol nyelven). Commodore Semiconductor Group
  19. MOS Microcomputers – Programming Manual (angol nyelven) (PDF) pp. 1–182. MOS Technology. Inc., 1976. január 1
  20. The 6502/65C02/65C816 Instruction Set Decoded (angol nyelven). LLX Press
  21. A 6502 processzor dokumentált utasításai (magyar nyelven). impulzus.sch.bme.hu. [2012. február 4-i dátummal az eredetiből archiválva].
  22. How MOS 6502 Illegal Opcodes really work. pagetable.com
  23. (bereg): Reverse engineering – 6502 (magyar nyelven). impulzus.sch.bme.hu, 2010. [2010. április 17-i dátummal az eredetiből archiválva].
  24. Újra működik az ősprocesszor (magyar nyelven). múlt-kor, 2011. augusztus 3
  25. Beregnyei Balázs: Mikroprocesszorok: layouttól a kapcsolási rajzig (magyar nyelven) (doc). impulzus.sch.bme.hu, 2001. [2010. április 10-i dátummal az eredetiből archiválva]. „…változatos formavilág figyelhető meg”
  26. Jason Scott (??): THE 6502 (angol nyelven). The6502.com. „az oldal forrásszövege egy meglepetést tartogat”
  27. Cohen, David XFuturama: Fry and the Slurm Factory commentary [DVD]. 20th Century Fox.
  28. The 6502 in “The Terminator” (angol nyelven). pagetable.com, 2009
  29. (crve): Relaunched: the 6502 microprocessor (angol nyelven). H-Online.com, 2012. január 26
  30. W65C02S 8–bit Microprocessor (angol nyelven) (PDF) pp. 1–32. Western Design Center, 2013. május 17

További információk[szerkesztés | forrásszöveg szerkesztése]