MOS Technology 6502
MOS Technology 6502 je osmibitový mikroprocesor, který navrhli Chuck Peddle a Bill Mensch pro firmu MOS Technology v roce 1975. V té době se jednalo o nejlevnější plně vybavený mikroprocesor na trhu. Stál okolo 20 $, což bylo méně než šestina ceny konkurenčních návrhů z větších společností, jako např. Motorola a Intel. Byl s nimi plně srovnatelný a stejně jako Z80 Zilog uvedený na trh v roce 1976 vyvolal řadu počítačových projektů, které nakonec vedly k éře domácích počítačů v 80. letech. 6502 měl 4528 tranzistorů (3510 zesilovacích a 1018 zatěžovacích) a byl vyráběn i v provedení pro embedded systémy.
MOS Technology 6502 | |
---|---|
Mikroprocesor MOS 6502 v plastovém pouzdře DIP-40. Číslo 4585 znamená, že obvod byl vyroben ve 45. týdnu roku 1985. | |
Specifikace | |
Kódové značení | MOS 6502 |
Návrh | Chuck Peddle a Bill Mensch |
Výrobce | MOS Technology |
Uvedení | 1975 |
Výrobci | MOS Technology, Rockwell, Synertek |
Výrobní proces | NMOS |
Plocha čipu | 153 x 168 mils (3,9 x 4,3 mm) |
Frekvence | 1 MHz (později až 3 MHz) |
Šířka datové sběrnice | 8 bitů |
Šířka adresní sběrnice | 16 bitů |
Instrukční sada | 6502 |
Patice | 40-pin DIP |
Nástupce | 6509 a 6510 |
Procesor 6502 nemá implementován pipelining, tato vlastnost se objevila až u procesorů 6509 a 6510.[1] Zásobník procesoru je pevně svázán s konkrétním blokem paměti o velikosti 256 byte.[2]
Mikroprocesor MOS 6502 byl použit v počítačích Apple I, Apple II, Commodore VIC20 či Atari 800XE/XL.
Technický popis
Registry mikroprocesoru MOS 6502 | |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
6502 je osmibitový mikroprocesor s 16bitovou adresní sběrnicí. Původní verze byly vyráběny pomocí technologie NMOS 8 µm[3] s velikostí čipu 153 x 168 mils (3,9 x 4,3 mm)[4].
Interní logika pracuje na stejném kmitočtu jako externí hodiny, a i přes jejich nízký kmitočet (typicky okolo 1 až 2 MHz) byla výkonnost 6502 srovnatelná s jinými tehdejšími procesory pracujícími s mnohem rychlejšími hodinami. Zčásti je to způsobeno jednoduchým řadičem implementovaným do větší míry kombinační logikou (neřízenou hodinami) než u mnoha jiných procesorů; dvoufázové hodiny (dodávající dvě synchronizace v jednom cyklu) tak mohly řídit celý strojový cyklus přímo. Typické instrukci na 6502 tak mohl stačit jen poloviční počet cyklů v porovnání s jinými tehdejšími mikroprocesory. Stejně jako u většiny jednoduchých procesorů té doby, dynamický čip 6502 není řízen mikrokódem, ale používá PLA (zabírající asi 15 procent plochy čipu) pro dekódování a provádění instrukcí. Jako většina osmibitových mikroprocesorů obvod prováděl omezené překrývání načítání a provádění instrukcí.
Nízký kmitočet hodin zmírňoval požadavky na rychlost paměti a periferních zařízení připojených k CPU, protože přistupovat k paměti bylo možné přibližně jen v polovině hodinového cyklu (kvůli asynchronnímu návrhu se tento zlomek výrazně měnil podle verze čipu). To bylo v době, kdy dostupné paměti měly časy přístupu v rozsahu 250-450 ns, velmi důležité. Původní 6502 byl minimalisticky navržen a efektivně vyroben a proto byl levný, což je důležitý faktor úspěchu na poli herních konzolí a domácích počítačů, které je velmi citlivé na cenu. Stejně jako jeho předchůdce, Motorola 6800, má 6502 jen několik registrů. V době, kdy byl procesor navrhován, byl počet tranzistorů, které mohly být umístěny na čip, velmi omezen (na několik tisíc), takže dávalo smysl využít paměť RAM místo nákladné plochy NMOS čipu pro registry CPU.
Registry
Sada registrů 6502 zahrnuje jeden osmibitový akumulátor (A), dva osmibitové indexregistry (X a Y), osmibitový registr příznaků procesoru (P), osmibitový ukazatel zásobníku (S) a 16bitový programový čítač (PC). Zásobník je vždy umístěn na adresách $0100–$01FF (256–511), protože ukazatel zásobníku je jen osmibitový a jako horní byte adresy se vždy používá hodnota 1. Instrukce pro přístup k zásobníku využívají čtyři implicitní režimy adresování, které umožňují uložení nebo vyzvednutí obsahu akumulátoru nebo stavového registru procesoru. Zásobník se používá také pro ukládání návratových adres z podprogramů v instrukcích JSR (Jump to Subroutine) a RTS (Return from Subroutine) a pro zpracovávání přerušení.
Adresování
6502 používá efektivně indexregistry a ukazatel zásobníku ve spojení s několika režimy adresování, včetně rychlého režimu „přímé“ nebo „nulté stránky“ podobnému adresování na PDP-8, který pro přístup na libovolnou adresu v paměti používá jedinou osmibitovou adresu 0 až 255, na níž je uložena dvoubytová adresa skutečného operandu (což šetří hodinové cykly normálně nutné pro načtení vyššího bytu adresy). 6502 používá nultou stránku prakticky podobně jako jiné procesory používají registry. Některé operační systémy však používají větší část nulté stránky a ponechávají pro uživatele pouze několik málo lokací.
Režimy adresování jsou: implicitní (jednobytové instrukce); absolutní (tříbytové); indexované absolutní (tříbytové); indexované nultou stránkou (dvoubytové); relativní (dvoubytové); akumulátorové (jednobytové); nepřímé s registrem x a nepřímé s registrem y (dvoubytové); a bezprostřední (dvoubytové). Absolutní režim je víceúčelový režim. Instrukce skoku používají osmibitové posunutí se znaménkem od začátku další instrukce; rozsah -128..127 proto se převádí na rozsah 128 bytů zpět nebo 127 byty dopředu od instrukce následující za skokem (což je 126 bytů zpět až 129 bytů za začátkem instrukce skoku). Režim akumulátoru používá obsah akumulátoru jako efektivní adresu a nepotřebuje žádnou bezprostřední hodnotu pro přístup k operandu. Režim immediate používá jako operand osmibitový literál.
Nepřímé adresování
Nepřímé režimy adresování jsou užitečné pro práci s poli a pro programování cyklů. V instrukcích používajících režim adresování „(indirect),y“ trvajích 5 nebo 6 cyklů hodin se adresa operandu v paměti získá přičtením obsahu osmibitového registru Y k 16bitové bázové adrese načtené z adresy uvedené v jednobytové přímém operandu uvedeném za kódem instrukce (to znamená, že tato bázová adresa musí být uložena v prvních 256 bytech paměti na takzvané nulté stránce). Registr Y tedy obsahuje skutečný index (oproti použití registru X na procesorech Motorola 6800, kde se k bázové adrese uložené v paměti přičítá posunutí zadané přímým operandem). Inkrementace indexregistru pro procházení jednotlivých bytů v poli trvá pouze dva hodinové cykly. U méně často používaného režimu „(indirect,x)“ se efektivní adresa operandu získá načtením dvou bytů z nulté stránky z adresy tvořené přičtením druhého bytu instrukce k obsahu registru X. Díky použití indexovaných režimů funguje nultá stránka jako sada 128 přídavných (i když velmi pomalých) adresních registrů.
6502 dovoluje sčítat a odčítat binární i BCD čísla. Přepnutí CPU do BCD režimu provádí instrukce SED (nastav příznak D). $99 + $01 pak dává výsledek $00 a nastavuje příznak přenosu (C). V binárním režimu (do něhož se přepíná instrukcí CLD, smaž příznak D) stejná operace dává výsledek $9A s vynulovaným příznakem přenosu. BCD režim se kromě Atari BASICu používal v aplikacích domácích počítačů jen výjimečně.
Ukázka kódu
Následující zdrojový kód v jazyce symbolických adres 6502 je procedura MEMCPY
pro kopírování bloku dat zadané délky z jednoho místa v paměti na jiné.
; ; ; ; ; ; ; 0040 0040 00 00 0042 00 00 0044 00 00 0600 0600 A4 44 0602 D0 05 0604 A5 45 0606 D0 01 0608 60 0609 B1 40 060B 91 42 060D 88 060E D0 F9 0610 E6 41 0612 E6 43 0614 88 0615 C6 45 0617 D0 F0 0619 60 061A |
; memcpy --
; Zkopíruje blok paměti z jednoho místa na jiné.
;
; Vstupní parametry
; SRC - Adresa zdrojového bloku
; DST - Adresa cílového bloku
; CNT - Počet bytů, které se mají kopírovat
ORG $0040 ;Parametry na adrese $0040
SRC DW $0000
DST DW $0000
CNT DW $0000
ORG $0600 ;Kód od adresy $0600
MEMCPY LDY CNT+0 ;Načti Y = CNT.L
BNE LOOP ;Jestliže CNT.L > 0, pak smyčka
LDA CNT+1 ;Jestliže CNT.H > 0,
BNE LOOP ; pak smyčka
RTS ;Návrat
LOOP LDA (SRC),Y ;Načti ((SRC)+Y) do A
STA (DST),Y ;Ulož A na ((DST)+Y)
DEY ;Decr CNT.L
BNE LOOP ;Jestliže CNT.L > 0, pak smyčka
INC SRC+1 ;Incr SRC += $0100
INC DST+1 ;Incr DST += $0100
DEY ;Decr CNT.L
DEC CNT+1 ;Decr CNT.H
BNE LOOP ;Jestliže CNT.H > 0, pak smyčka
RTS ;Návrat
END
|
Odkazy
Reference
V tomto článku byl použit překlad textu z článku MOS Technology 6502 na anglické Wikipedii.
- MOS 6502 family Archivováno 12. 1. 2014 na Wayback Machine na cs.niu.edu, cit. 2014-03-17
- CPU structure na cs.niu.edu, cit. 2014-03-17
- CORDER, Mike. Big Things in Small Packages [online]. Sun Microelectronics, Spring 1999 [cit. 2012-04-23]. Dostupné v archivu pořízeném dne 2006-03-12.
- CUSHMAN, Robert H. 2-1/2 Generation μP's -$10 Parts That Perform Like Low-End Mini's. EDN. Boston: Cahners Publishing, 1975-09-20. Dostupné v archivu pořízeném dne 2016-04-24."
Literatura
- LEVENTHAL, Lance. 6502 Assembly Language Programming 2nd Edition. [s.l.]: Osborne/McGraw-Hill, 1986. ISBN 0-07-881216-X.
- LEVENTHAL, Lance. 6502 Assembly Language Subroutines. [s.l.]: Osborne/McGraw-Hill, 1982. Dostupné online. ISBN 0-931988-59-4.
- MANSFIELD, Richard. Machine Language For Beginners - Personal Computer Machine Language Programming For The Atari, VIC, Apple, Commodore 64, and PET/CBM Computers. Greensboro, North Carolina: Compute! Publications, 1983. Dostupné online. ISBN 0-942386-11-6.
- MATTHEWS, Ian. Rise of MOS Technology & 6502 [online]. Running Technologies Inc., 2007-06-04 [cit. 2015-12-02]. Dostupné v archivu pořízeném dne 2018-10-04.
- MOS Technology 6500 Series Hardware Manual. 2. vyd. Norristown, PA: MOS Technology, leden 1976. Dostupné online.
- MOS Technology 6500 Series Programming Manual. 2. vyd. Norristown, PA: MOS Technology, leden 1976. Dostupné online.
- ZAKS, Rodnay. Programming the 6502. 4. vyd. [s.l.]: Sybex, 1983. Dostupné online. ISBN 0-89588-135-7.
- ZAKS, Rodnay. Advanced 6502 Programming. [s.l.]: Sybex, 1982. Dostupné online. ISBN 0-89588-089-X.
Externí odkazy
- Obrázky, zvuky či videa k tématu MOS Technology 6502 na Wikimedia Commons
- 6502.org - the 6502 microprocessor resource – Repozitář a portál (Mike Naberezny)
- 650x informace – Podrobný popis, fotografie MOS a čipů dalších výrobců; v cpu-collection.de (Dirk Oppelt)
- mdfs.net – Instrukční sada 6502
- CLEVER, Eric. 6502 - the first RISC µP [online]. [cit. 2015-12-02]. Dostupné v archivu pořízeném dne 2012-05-24. – S odkazem na podrobnou tabulku pro programování 6502 v PDF
- HARROD, Dennette. 6502 Gets Microprogrammable Instructions. BYTE. McGraw Hill, October 1980. Dostupné v archivu pořízeném dne 2006-05-25. ISSN 0360-5280.
- US Patent 3991307 Integrated circuit microprocessor with parallel binary adder having on-the-fly correction to provide decimal results, popis BCD režimu mikroprocesoru 6502
- Visual Transistor-level Simulation of the 6502 CPU
- Seznam softwarových emulátorů 6502 – At Zophar's Domain (Sam Michaels)
- 6502 simulátor pro Windows – At Dan Boris' homepage hosted by Atari Gaming Headquarters
- Webový 6502 kompatibilní překladač a emulátor napsaný v JavaScriptu Archivováno 8. 2. 2011 na Wayback Machine – autor Stian Søreng