WDC 65C02 - WDC 65C02

W65c02s8p-14 lg.jpg
Mikroprocesor W65C02S v balení PDIP-40.
Obecná informace
Spuštěno 1981 ; Před 40 lety ? ( 1981 )
Běžní výrobci
Výkon
Max. Taktovací frekvence CPU 1 MHz až 14 MHz
Dějiny
Předchůdce Technologie MOS 6502

Western Design Center (WDC) 65C02 mikroprocesor je vylepšená CMOS verze populární NMOS založené 8bitové MOS Technology 6502 . 65C02 opravil několik problémů v původním 6502 a přidal několik nových pokynů, ale jeho hlavní vlastností bylo výrazně snížené využití energie, řádově 10 až 20krát menší než původní 6502 běžící stejnou rychlostí. Díky snížené spotřebě energie byl 65C02 užitečný v přenosných počítačových rolích a systémech mikrokontrolérů v průmyslovém prostředí. Byl použit v některých domácích počítačích i v integrovaných aplikacích, včetně implantovaných zařízení lékařské kvality.

Vývoj začal v roce 1981 a vzorky byly vydány počátkem roku 1983. Společnost WDC licencovala design společnostem Synertek , NCR , GTE a Rockwell Semiconductor . Hlavním zájmem společnosti Rockwell byl vložený trh a požádal o přidání několika nových příkazů na pomoc v této roli. Ty byly později zkopírovány zpět do základní verze, kdy WDC přidalo dva vlastní nové příkazy k vytvoření W65C02 . Sanyo později licencoval také design a Seiko Epson vyrobil další upravenou verzi jako HuC6280 .

Dřívější verze používaly 40pinový DIP obal a byly k dispozici ve verzích 1, 2 a 4 MHz. Pozdější verze byly vyráběny v balíčcích PLCC a QFP , stejně jako PDIP, a s mnohem vyššími hodnotami rychlosti hodin. Aktuální verze od WDC, W65C02S-14, má plně statické jádro a při napájení 5 volty oficiálně běží rychlostí až 14 MHz.

Úvod a funkce

65C02 je levný, univerzální 8bitový mikroprocesor (8bitové registry a datová sběrnice ) se 16bitovým programovým čítačem a adresovou sběrnicí . Sada registrů je malá, s jediným 8bitovým akumulátorem (A), dvěma 8bitovými indexovými registry (X a Y), 8bitovým stavovým registrem (P) a 16bitovým čítačem programů (PC). Kromě jediného akumulátoru umožňuje prvních 256 bajtů paměti RAM, „nulová stránka“ ( $0000do $00FF), rychlejší přístup prostřednictvím režimů adresování, které používají místo 16bitové adresy 8bitovou paměť. K zásobníku spočívá v příštích 256 bajtů na straně jedné ($ 0100 na $ 01FF) a nemůže být přesunuta nebo prodloužen. Zásobník roste zpět s ukazatelem zásobníku (S) začínajícím na $ 01FF a snižujícím se, jak se zásobník zvětšuje. Má sadu instrukcí s proměnnou délkou , která se pohybuje od jednoho do tří bytů na instrukci.

Základní architektura 65C02 je identická s původní 6502 a lze ji považovat za nízkoenergetickou implementaci tohoto návrhu. Při 1 MHz, nejoblíbenější rychlosti u původních 6502, 65C02 vyžaduje pouze 20 mW, zatímco původní využívá 450 mW, což je snížení o více než dvacetkrát. Ručně optimalizované využití jádra a nízké spotřeby je určeno k tomu, aby byl 65C02 vhodný pro konstrukce s nízkým výkonem systému na čipu (SoC).

K dispozici je model popisu hardwaru Verilog pro návrh jádra W65C02S do integrovaného obvodu specifického pro aplikaci (ASIC) nebo pole programovatelného hradla (FPGA). Jak je běžné v polovodičovém průmyslu, WDC nabízí vývojový systém, který zahrnuje vývojovou desku , emulátor v obvodu (ICE) a systém pro vývoj softwaru.

W65C02S-14 je produkční verzí od roku 2020 a je k dispozici v PDIP , PLCC a QFP balíčků. Maximální oficiálně podporovaná rychlost hodin Ø2 (primární) je 14  MHz při provozu na 5 voltů, označená příponou –14 dílu (fandové vyvinuli systémy homebrew 65C02, které běží rychleji než oficiální hodnocení). Označení „S“ naznačuje, že součást má plně statické jádro , což je funkce, která umožňuje zpomalení nebo úplné zastavení Ø2 ve vysokém nebo nízkém stavu bez ztráty dat. Typické mikroprocesory, které nejsou implementovány v CMOS, mají dynamická jádra a ztratí obsah vnitřního registru (a tím pádem), pokud nejsou nepřetržitě taktovány rychlostí mezi některými minimálními a maximálními zadanými hodnotami.

Registry 65C02
1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (bitová pozice)
Hlavní registry
  A ccumulator
Rejstříkové registry
  X X Rejstřík Registrovat
  Y Y Rejstřík Register
0 0 0 0 0 0 0 1 SP S tack P ointer
Počitadlo programů
PC P rogram C ounter
Stavový registr
  N. PROTI - B D Z C S tatus R egister

Obecné logické funkce

Fotografie mikrokontroléru Sitronix ST2064B ukazující vložené jádro W65C02S vpravo nahoře

Logické funkce

Elektrické vlastnosti

  • Napájecí napětí je specifikováno od 1,71 V do 5,25 V
  • Spotřeba proudu (jádro) 0,15 a 1,5 mA na MHz při 1,89 V, respektive 5,25 V
  • Sada instrukcí s proměnnou délkou, umožňující optimalizaci velikosti kódu oproti procesorům sady instrukcí s pevnou délkou, vede k úsporám energie
  • Plně statické obvody umožňují zastavení hodin za účelem úspory energie

Funkce hodin

W65C02S lze provozovat při jakémkoli vhodném napájecím napětí (V DD ) mezi 1,8 a 5 volty (± 5%). Na list uvádí AC charakteristiky tabulka provozní charakteristiky: 5 V na 14 MHz, 3,3 V nebo 3, V v 8 MHz, 2,5 V při 4 MHz a 1,8 V na 2 MHz. Tato informace může být artefaktem dřívějšího datového listu, protože graf ukazuje, že typická zařízení jsou schopná provozu vyššími rychlostmi, než navrhuje tabulka charakteristik střídavého proudu, a že spolehlivý provoz na 20 MHz by měl být snadno dosažitelný s V DD na 5 voltů, za předpokladu, že to podpůrný hardware umožní.

Podpora W65C02S pro libovolné frekvence hodin mu umožňuje používat hodiny, které běží rychlostí ideální pro některou jinou část systému, jako je 13,5 MHz (vzorkovací frekvence digitálního SDTV luma), 14,31818 MHz (frekvence nosné barvy NTSC × 4), 14,75 MHz (čtvercové pixely PAL), 14,7456 (krystalová přenosová rychlost) atd., Pokud je V DD dostačující pro podporu frekvence. Designér Bill Mensch poukázal na to, že F MAX je ovlivněn faktory mimo čip, jako je kapacitní zátěž na pinech mikroprocesoru. Minimalizace zátěže pomocí krátkých signálních stop a nejmenšího počtu zařízení pomáhá zvýšit F MAX . Balíčky PLCC a QFP mají menší kapacitu pin-to-pin než balíček PDIP a jsou úspornější při využití prostoru na desce s plošnými spoji .

WDC oznámila, že realizace FPGA W65C02S byla úspěšně provozována na 200 MHz.

Srovnání s NMOS 6502

Základní architektura

Přestože 65C02 lze většinou považovat za 6502 s nízkým výkonem, opravuje také několik chyb nalezených v originále a přidává nové pokyny, režimy adres a funkce, které mohou programátorovi pomoci při psaní menších a rychleji se provádějících programů. Odhaduje se, že průměrný program 6502 assembleru lze na 65C02 zmenšit o 10 až 15 procent a dosáhnout podobného zlepšení výkonu, a to především díky zamezení přístupu do paměti díky použití méně instrukcí k provedení daného úkolu.

Nedokumentované pokyny odstraněny

Původní 6502 měl 56 instrukcí, které v kombinaci s různými režimy adresování vytvořily celkem 151 operačních kódů z možných 256 8bitových vzorů operačních kódů . Zbývajících 105 nepoužitých operačních kódů bylo nedefinováno, přičemž sada kódů se 4-bity nízkého řádu se 3, 7, B nebo F zůstala zcela nevyužita, přičemž kód s nízkým řádem 2 měl pouze jeden operační kód.

6502 byl známý tím, že některé z těchto zbývajících kódů skutečně prováděly akce. Vzhledem k tomu, jak dekodér instrukcí 6502 fungoval, jednoduché nastavení určitých bitů v operačním kódu by způsobilo, že proběhnou části zpracování instrukcí. Některé z těchto operačních kódů by okamžitě poškodily procesor, zatímco jiné prováděly užitečné funkce a uživatelé jim dokonce dávali neoficiální mnemotechniku ​​assembleru.

65C02 přidal řadu nových operačních kódů, které spotřebovaly řadu těchto dříve slotů „nezdokumentovaných instrukcí“, například pro novou BBSinstrukci byl nyní použit $ FF (viz níže). Ti, kteří zůstali skutečně nepoužití, byli připraveni provést NOPs. Programy, které využívaly těchto kódů, nebudou na 65C02 fungovat, ale tyto kódy byly vždy zdokumentovány jako nefunkční a neměly být použity.

Oprava chyb

Původní 6502 měl při prvním spuštění několik chyb. Starší verze procesoru měly vadnou ROR(otočit vpravo) instrukci, která způsobovala, že technologie MOS byla vyřešena tím, že instrukce nebyla zdokumentována. RORbyl opraven velmi brzy ve výrobním cyklu a nebyl problémem pro drtivou většinu strojů využívajících procesor.

Naproti tomu nechvalně známá chyba, která je přítomna ve všech variantách 6502 NMOS, zahrnuje skokovou instrukci ( JMP) při použití nepřímého adresování . V tomto režimu adresování je cílová adresa JMPinstrukce načtena z paměti (skokový vektor), nikoli jako operand JMPinstrukce. Například JMP ($1234)načte hodnotu v paměťových místech $ 1234 (nejméně významný bajt) a $ 1235 (nejvýznamnější bajt) a načte tyto hodnoty do čítače programu , což by pak způsobilo, že procesor bude pokračovat v provádění na adrese uložené ve skokovém vektoru.

Chyba se objeví, když vektorová adresa končí v $ FF, což je hranice stránky paměti . V tomto případě JMPnačte nejvýznamnější bajt cílové adresy z $ 00 původní stránky, nikoli $ 00 nové stránky. Proto JMP ($12FF)by získal nejméně významný bajt cílové adresy na 12 $ FF a nejvýznamnější bajt cílové adresy od 1200 $ místo 1300 $. 65C02 tento problém opravil.

Více nedopatření než chyba, stav (D) ecimálního příznaku ve stavovém registru NMOS 6502 není po resetu nebo přerušení definován . To znamená, že programátoři musí nastavit příznak na známou hodnotu, aby se vyhnuli jakýmkoli chybám souvisejícím s aritmetickými operacemi. Výsledkem je, že člověk najde CLDinstrukci (CLear Decimal) téměř ve všech obslužných programech přerušení 6502 , stejně jako na začátku resetovacího kódu. 65C02 automaticky vymaže tento příznak po zasunutí stavového registru do zásobníku v reakci na jakékoli přerušení nebo v reakci na reset hardwaru, čímž se procesor vrátí zpět do binárního aritmetického režimu.

Během aritmetiky desítkového režimu bude NMOS 6502 aktualizovat příznaky (N) egativní, o (V) erflow a (Z) ero tak, aby odrážely výsledek základní binární aritmetiky, to znamená, že příznaky odrážejí výsledek vypočítaný před procesorem provádění desítkové korekce. Naproti tomu 65C02 nastavuje tyto příznaky podle výsledku desítkové aritmetiky za cenu dalšího hodinového cyklu na aritmetickou instrukci.

Při provádění instrukce RMW (read-modify-write), například všechny varianty NMOS provedou dvojitý zápis na addr , nejprve přepsají aktuální hodnotu nalezenou na addr a poté zapíší upravenou hodnotu. Toto chování může mít za následek obtížně vyřešitelné chyby, pokud je addr hardwarový registr. 65C02 místo toho provede dvojité čtení addr , následované jediným zápisem. INC addr

Při provádění indexovaného adresování, pokud indexování překračuje hranici stránky, budou všechny varianty NMOS číst z neplatné adresy před přístupem na správnou adresu. Stejně jako u instrukce RMW může toto chování způsobovat problémy při přístupu k registrům hardwaru pomocí indexování. 65C02 tento problém vyřešil tím, že při indexování překračuje hranici stránky, provedl atrapu čtení operačního kódu instrukce. Tato oprava však zavedla novou chybu, ke které dochází, když je základní adresa na hranici sudých stránek (což znamená, že indexování nikdy nepřejde na další stránku). S novou chybou se na základní adrese před indexováním LDA $1200,Xprovede fiktivní čtení , takže bude provedeno fiktivní čtení na 1200 $ před přidáním hodnoty X k 1200 $. Opět platí, že pokud indexujete adresy hardwarového registru, tato chyba může mít za následek nedefinované chování.

Pokud NMOS 6502 načítá opkód BRK (softwarové přerušení) současně, dojde k přerušení hardwaru, bude BRK ignorováno, protože procesor reaguje na přerušení. 65C02 správně zvládá tuto situaci obsluhou přerušení a následným spuštěním BRK.

Nové režimy adresování

6502 má dva režimy nepřímého adresování, které dereference přes 16bitové adresy uložené na stránce nula:

  • Indexované nepřímé, např LDA ($10,X). Přidá registr X k dané nulové adrese stránky před čtením 16bitového vektoru. Pokud je například X 5, přečte 16bitovou adresu z umístění $ 15/$ 16. To je užitečné v případě, že na stránce nula je řada ukazatelů.
  • Nepřímý indexovaný LDA ($10),Ypřidá registr Y do 16bitového vektoru načteného z dané nulové adresy dané stránky. Pokud je například Y 5 a $ 10/$ 11 obsahuje vektor 1000 $, přečte se hodnota od 1005 $. Tím se provádí adresování s posunem ukazatele.

Temnější stránkou tohoto modelu je, že pokud není indexování potřeba, jeden z indexových registrů musí být stále nastaven na nulu a použit v jedné z těchto instrukcí. 65C02 přidal LDA ($10)do všech instrukcí, které používaly indexované nepřímé a nepřímé indexované režimy, neindexovaný režim nepřímého adresování , čímž se uvolnily rejstříkové rejstříky.

JMPInstrukce 6502 měla jedinečný (mezi 6502 instrukcemi) adresovací režim známý jako „absolutně nepřímý“, který přečetl 16bitovou hodnotu z dané adresy paměti a poté přeskočil na adresu v této 16bitové hodnotě. Pokud například umístění paměti $ A000 obsahuje $ 34 a $ A001 pojme $ 12, JMP ($A000)přečte tyto dva bajty, vytvoří hodnotu 1234 $ a poté přeskočí na toto místo.

Jedním z běžných použití pro nepřímé adresování je vytváření větvících tabulek , seznamu vstupních bodů pro podprogramy, ke kterým lze přistupovat pomocí indexu. Například ovladač zařízení mohlo vypsat vstupní body pro OPEN, CLOSE, READatd v tabulce na $ A000. READje třetí položka s nulovým indexováním a každá adresa vyžaduje 16 bitů, takže pro volání READbyste použili něco podobného JMP ($A004). Pokud je ovladač aktualizován a podprogramový kód se přesune do paměti, jakýkoli existující kód bude fungovat, dokud tabulka ukazatelů zůstane na $ A000.

65C02 přidal nový režim „indexovaný absolutní nepřímý“, který usnadnil použití větvících tabulek. Tento režim přidal hodnotu registru X k absolutní adrese a vzal 16bitovou adresu z výsledného umístění. Například pro přístup k READfunkci z výše uvedené tabulky by člověk uložil 4 v X, pak JMP ($A000,X). Tento styl přístupu usnadňuje přístup k tabulkám poboček, protože se používá jedna základní adresa ve spojení s 8bitovým ofsetem.

Nové a upravené pokyny

Kromě nových režimů adresování přidal „základní model“ 65C02 také sadu nových instrukcí.

  • INCa DECbez parametrů nyní zvýší nebo sníží akumulátor. To byl zvláštní dohled v původní sadě instrukcí, která obsahovala pouze INX/ DEX, INY/ DEYa / . Někteří montéři používají alternativní formuláře / nebo / .INC addrDEC addrINADEAINC ADEC A
  • STZ addr, STore Zero v addr . Nahrazuje potřebu a nevyžaduje změnu hodnoty akumulátoru. Protože je tento úkol běžný ve většině programů, použití STZ může snížit velikost kódu, a to jak odstraněním LDA, tak i jakéhokoli kódu potřebného k uložení hodnoty akumulátoru, obvykle dvojice.LDA #0;STA addrPHA PLA
  • PHX, PLX, PHY, PLY, Tlačit a táhnout X a Y registry do / ze stohu. Dříve měl instrukce push a pull pouze akumulátor a stavový registr. X a Y bylo možné stohovat pouze tak, že je nejprve přesunete do akumulátoru pomocí TXAnebo TYA, čímž změníte obsah akumulátoru, poté pomocí PHA.
  • BRA, větev vždy. Funguje jako a, JMPale používá 1bajtovou relativní adresu jako ostatní větve, uložení bajtu. Rychlost je často stejná jako 3 cykly absolutně, JMPpokud není překročena stránka, která by BRAprodloužila verzi 1 cyklus (4 cykly). Jelikož je adresa relativní, je také užitečná při psaní přemístitelného kódu, což je běžný úkol v éře před jednotkami správy paměti .

Pokyny pro manipulaci s bitem

WDC i Rockwell přispěly vylepšením funkcí bitového testování a manipulace v 65C02. WDC přidalo nové režimy adresování k instrukci BIT, která byla přítomna v 6502, a také dvě nové instrukce pro pohodlnou manipulaci s bitovými poli, což je běžná činnost v ovladačích zařízení.

BIT v 65C02 přidává okamžitý režim, nulová stránka indexovaná X a absolutní indexovaná X adresováním. Adresování okamžitého režimu je obzvláště výhodné v tom, že je zcela nedestruktivní. Například:

LDA <registr>
BIT #%00010000

lze použít místo:

LDA <registr>
A #%00010000

První z nich zachovává hodnotu načtenou z <register>, takže na něm lze provést více než jeden test. Druhá posloupnost je pro hodnotu registru destruktivní.

Kromě vylepšení instrukce BIT přidala WDC dvě instrukce určené k pohodlné manipulaci s bitovými poli:

  • TSB addra , T est a S a B jeho a T est a R ESET B jeho.TRB addr
Maska v akumulátoru ( .A) je logicky ANDED s pamětí na addr , přičemž toto umístění může být nulová stránka nebo absolutní. Příznak Z ve stavovém registru je podmíněn podle výsledku logického AND - nejsou ovlivněny žádné další příznaky stavového registru. Kromě toho jsou bity v addr nastaveny (TSB) nebo vymazány (TRB) podle masky v .A. Stručně řečeno, TSB provádí logické OR po logickém AND a ukládá výsledek logického OR na addr , zatímco TRB ukládá výsledky logického AND na addr . V obou případech příznak Z ve stavovém registru označuje výsledek před změnou obsahu addr . TRB a TSB tak nahrazují posloupnost instrukcí, v podstatě kombinující instrukci BIT s dalšími kroky pro uložení výpočtových změn, ale způsobem, který hlásí stav ovlivněné hodnoty před tím, než se změní..A AND addr

Změny Rockwellu přidaly další pokyny pro manipulaci s bitem pro přímé nastavení a testování jakéhokoli bitu a kombinaci testu, vymazání a větvení do jednoho operačního kódu. Nové pokyny byly od začátku k dispozici v rodině Rockwell R65C00, ale nebyly součástí původní specifikace 65C02 a nebyly nalezeny ve verzích vytvořených společností WDC nebo jejími dalšími držiteli licence. Ty byly později zkopírovány zpět do základního návrhu a byly k dispozici v pozdějších verzích WDC.

Pokyny specifické pro Rockwell jsou:

  • SMBbit# zp/ . Nastavit nebo resetovat (vymazat) bitové číslo bit# v bajtu nulové stránky zp .RMBbit# zp
RMB a SMB se používají k vymazání (RMB) nebo nastavení (SMB) jednotlivých bitů v bitovém poli, přičemž každý nahrazuje sekvenci tří instrukcí. Jelikož RMB a SMB představují pouze adresování nulové stránky, mají tyto pokyny omezenou užitečnost a jsou primárně cenné v systémech, ve kterých jsou registry zařízení na nulové stránce. Složka bit# instrukce je často zapsána jako součást mnemotechnické pomůcky, například SMB1 $12která nastavuje bit 1 v adrese $ 12 na nulové stránce. Někteří assembleri považují bit# za součást operandu instrukce, např. Který má tu výhodu, že umožňuje jeho nahrazení názvem proměnné nebo vypočítaným číslem.SMB 1,$12
  • BBR bit#,offset,addra , Branch on Bit Set/Reset.BBS bit#,offset,addr
Stejné adresování a omezení na nulové stránce jako RMB a SMB, ale větve na adresu addr, pokud je vybraný bit čistý (BBR) nebo nastavený (BBS). Jak je tomu u RMB a SMB, BBR a BBS nahrazují sekvenci tří instrukcí.

Režimy nízké spotřeby

Kromě výše uvedených nových příkazů přidal WDC také pokyny STPa WAIpokyny pro podporu režimů nízké spotřeby.

STP„Zastavte procesor, zastavte veškeré zpracování, dokud nebude vydán reset hardwaru. Toho lze použít k uvedení systému do režimu „spánku“ a následnému rychlému probuzení resetem. Obvykle by to vyžadovalo nějaký externí systém pro udržování hlavní paměti, a to nebylo široce používáno.

WAIMěl podobný účinek, vstoupil do režimu nízké spotřeby, ale tato instrukce probudila procesor znovu při přijetí přerušení. Dříve zpracování přerušení obvykle zahrnovalo spuštění smyčky ke kontrole, zda bylo přijato přerušení, někdy známé jako „ točení “, kontrola typu, když je přijato, a poté přeskočení na kód zpracování. To znamenalo, že procesor běžel během celého procesu.

Naproti tomu v 65C02 mohl být kód přerušení zapsán tak, že za WAIním bezprostředně následuje a JSRnebo JMP. Když na WAIto došlo, zpracování se zastavilo a procesor přešel do režimu nízké spotřeby. Když bylo přerušení přijato, JSRpožadavek okamžitě zpracovalo a vyřídilo.

To mělo další výhodu v mírném zlepšení výkonu. V případě spřádání může přerušení dorazit uprostřed jedné z instrukcí smyčky a aby se procesor mohl vrátit po návratu z obsluhy, stráví jeden cyklus, aby uložil své umístění. Když WAIprocesor přejde do stavu nízké spotřeby na známém místě, kde je zaručeno, že jsou všechny instrukce dokončeny, takže když přijde přerušení, nemůže to případně přerušit instrukci a procesor může bezpečně pokračovat bez utrácení stavu ukládání cyklu.

65SC02

65 SC 02 je variantou WDC 65C02 bez bitových pokynů.

Pozoruhodné použití 65C02

Domácí počítače

Konzole pro videohry

Ostatní produkty

Viz také

Poznámky

Reference

Citace

Bibliografie

Další čtení

externí odkazy