MOS 6502

De la Wikipedia, enciclopedia liberă.
Salt la navigare Salt la căutare
MOS 6502
Unități centrale de procesare
MOS 6502AD 4585 top.jpg
Procesorul MOS 6502 într-un pachet plastic DIL-40 .
Produs 1975
Proiectat de Tehnologie MOS
Aplicații computer de acasă , arcade
Specificatii tehnice
Frecvența procesorului 1 MHz / 2 MHz
Set de instructiuni MOS 6502
Microarhitectura 8 biți
Pachet DIP40

MOS 6502 este un microprocesor pe 8 biți prezentat de MOS Technology în septembrie 1975 .

Împreună cu Zilog Z80 din iulie 1976 a fost utilizat în multe produse comercializate la sfârșitul anilor șaptezeci și optzeci , cum ar fi jocuri arcade și console de acasă , computere personale și de acasă , precum Apple II și Commodore VIC-20 . [1] A fost produs sub licență de multe companii, inclusiv Rockwell International și Synertek . Mai multe procesoare derivă din MOS 6502, inclusiv MOS 6507 , utilizat în consola Atari 2600 , MOS 6509 , utilizat în linia de computere Commodore CBM și MOS 6510 , folosit ca procesor Commodore 64 . [2] [3]

Istorie

Originile și proiectul din Motorola

Die MOS 6502.

Cipul a fost proiectat de același grup care a dezvoltat MOS 6501 și care a inclus mai mulți ingineri care lucraseră la Motorola 6800 din 1971, inclusiv Chuck Peddle și Bill Mensch , care au fost eliberați masiv de Motorola în 1974 . [4]

Peddle promovase comercial modelul 6800 și vizitase mulți clienți potențiali pentru a introduce microprocesorul, destinat utilizării în sistemele încorporate. În ciuda impresiilor favorabile, procesorul nu a vândut așa cum era de așteptat, deoarece prețul introductiv de 360 ​​USD a fost considerat excesiv de mare - mulți clienți au considerat că prețul de 25 USD pe cip este corect. Prin urmare, Peddle i-a propus companiei Motorola să dezvolte o versiune slabă a modelului 6800 care ar putea fi vândută la acel preț, dar conducerea nu a acceptat sugestia sa. [5] [6] [7]

În ciuda lipsei de interes din partea conducerii superioare, Peddle a început să lucreze la această idee pe cont propriu. Noul procesor era asemănător cu cel al modelului 6800: la fel folosea puține registre, dar avea un singur acumulator (modelul 6800 avea 2: registre A și B). Comparativ cu modelul 6800, modelul 6502 a introdus mai multe moduri de adresare noi, permițând utilizarea registrelor sale index și a stivei foarte eficient: de exemplu, cu stiva a fost posibilă accesarea celulelor de memorie situate în intervalul de adrese 256-511 (hexazecimal: $ 100- $ 1FF), în timp ce unele instrucțiuni ar putea accesa direct celulele de memorie în intervalul 0-255 (hexazecimal: $ 00- $ FF), așa-numita „ pagină zero ”, folosind doar 1 octet ca adresă. [8] Noul cip a fost, de asemenea, capabil să efectueze aritmetica BCD ( cod binar zecimal ) [9] și avea un generator de ceas intern. [10]

În ciuda dezaprobării conducerii superioare a Motorola, grupul condus de Peddle a continuat să lucreze la proiect, în același timp crescând nemulțumirea față de lipsa de sprijin pe care au primit-o. În cele din urmă, conducerea a decis să oprească dezvoltarea noului cip, ca răspuns, Peddle și mai mulți dintre colegii săi au părăsit Motorola în căutarea unei companii interesate să producă un astfel de cip. [6]

Dezvoltatorii modelului 6800 trec la tehnologia MOS

Peddle a luat contact cu MOS Technology , un mic producător de circuite integrate la acea vreme, fondat de Allen-Bradley pentru a produce procesoare de calculatoare electronice în numele Texas Instruments , dar care s-a orientat și către producerea altor tipuri de cipuri atunci când acesta din urmă, în pentru a reduce costurile produselor sale, începuse să producă propriile produse integrate. Unul dintre cele mai populare produse ale tehnologiei MOS a fost o replică cu un singur cip a popularului joc Pong . În august 1974, Peddle și alți 7 ingineri Motorola s-au alăturat tehnologiei MOS: Bill Mensch , Harry Bawcum, Ray Hirt, Terry Holdt, Mike James, Will Mathis și Rod Orgill. [4]

Peddle și echipa sa au terminat dezvoltarea ideii lor care a prins contur în două microprocesoare noi care erau compatibile cu cipurile periferice ale Motorola: MOS 6501 , proiectat de Rod Orgill, care ar putea fi introdus în prizele 6800 deoarece este compatibil la nivelul pinout cu acesta din urmă și MOS 6502, proiectat de Bill Mensch, similar cu cel precedent, dar cu un pinout diferit și un circuit integrat generator de ceas. Aceste cipuri nu puteau executa programe scrise pentru 6800 deoarece aveau o arhitectură și un set de instrucțiuni diferite.

Noile procesoare au fost publicitate pe scară largă în diferite reviste din industrie: un anunț a apărut în numărul din iulie al Electronics [11] , un altul în numărul din august al EE Times , [12] ; Au urmat alte anunțuri pe EDN (20.09.1975), Electronic News (11.03.1975) și Byte (noiembrie 1975). Anunțurile modelului 6501 au apărut în mai multe publicații în luna august 1975: MOS Technology a anunțat prezentarea cipului la spectacolul electronic WESCON din San Francisco , care va avea loc în perioada 16-19 septembrie 1975, unde ar fi posibil să cumpere microprocesorul pentru 25 USD. [13] În septembrie, anunțurile au fost și pentru modelul 6502, care a fost anunțat și în timpul WESCON pentru 25 USD, în timp ce modelul 6501 a fost reevaluat la 20 USD. [14]

Prezentarea modelului 6502

Publicitate pentru MOS 6501 și 6502.

La WESCON, modelul 6502 avea un preț de 25 USD. MOS Technology avea un stand cu un container mare plin de așchii. Întrucât nu reușise să aducă suficiente exemplare de lucru, a decis să umple recipientul cu așchii defecte și să le pună pe cele de lucru, dând astfel impresia că fabricile ei erau deja capabile să susțină o producție de volum industrial. [15] La aceeași emisiune, 6800 și Intel 8080 erau în vânzare pentru 179 dolari. [16] MOS 6502 a ieșit în vânzare, la un preț de 25 USD, [14] a fost cel mai ieftin procesor disponibil pe piață, costând mai puțin decât o șesime din modele concurente: de exemplu, Motorola 6800 a fost vândut pentru $ 175. [17] la inceput , oamenii au crezut că prețul de 6502 a fost greșit sau a existat o înșelătorie în spatele ei , dar în timpul show - au văzut că atât Motorola iar Intel a redus prețul cipurilor lor la 69 USD. [18] [19]

Această reducere a prețului a legitimat modelul 6502, care a început să fie vândut cu sute de unități. [15]

Procesul dintre Motorola și MOS Technology

După ce WESCON MOS Technology a fost menționată în noiembrie 1975 de Motorola: [20] aceasta din urmă a susținut că cei 8 foști angajați ai săi au folosit informații tehnice dezvoltate la birourile lor pentru a proiecta microprocesoarele 6501 și 6502. citând sprijinul MOS Technology Allen-Bradley , considerând, de asemenea, că Cealaltă zonă de interes a MOS Technology, cipurile pentru calculatoare, nu se descurca bine din cauza unui război de preț purtat de Texas Instruments împotriva altor producători, a decis să limiteze posibilele pierderi și și-a vândut acțiunile fondatorilor companiei. [4]

Procesul a fost soluționat în mai 1976 cu MOS Technology, care a decis să elimine cipul 6501 care putea fi montat în prizele 6800 și să achiziționeze licențele cipurilor periferice ale Motorola. [21] [22]

MOS KIM-1

MOS KIM-1 (1975).

Odată cu problemele legale soluționate și cu un răspuns bun din partea WESCON, MOS a trebuit să se gândească la cum să-i determine pe dezvoltatori să încerce noul său procesor 6502. Peddle a dezvoltat apoi un minicomputer numit MDT-650 (de la „Microcomputer Development Terminal”), în timp ce un alt grup a proiectat KIM-1 . KIM-1 a fost introdus pe piață și, spre uimirea designerilor săi, a fost achiziționat nu numai de ingineri și profesioniști, ci și de mulți pasionați . Alte sisteme similare, precum SYM-1 Synertek și AIM 65 mai flexibil Rockwell (ambele au produs 6502 sub licență), s-au bucurat de același succes comercial.

Folosiți și utilizați

Informatică

Una dintre primele utilizări ale noului procesor a fost ca procesor pentru computerul Apple I introdus în 1976 de începutul Apple , o companie fondată de Steve Jobs și Steve Wozniak . 6502 a fost folosit ulterior în PET Commodore și Apple II din 1977 și în alte câteva computere pe 8 biți, inclusiv familia de computere Atari pe 8 biți , seria BBC Micro derivată din sistemele de 8 biți Acorn Computers , Commodore VIC- 20 și calculatoare din Ohio Scientific și Oric . [23] Commodore 64 a folosit un derivat al 6502, MOS 6510 , dar unitatea sa de model 1541 a folosit un 6502 la 2 MHz pentru a executa codul DOS încorporat în unitate în sine și a trebuit să fie rapid (dublul unității CPU C64 ) pentru a satisface nevoile temporale de transfer de date de pe dischetă.

Industrie

În plus față de utilizările civile și recreative, a existat o producție considerabilă de sisteme de control, inclusiv industriale, având în vedere absența microcontrolerelor de calitate (mediocrul 8048 datează din 1976 și a avut adesea performanțe inadecvate). Astăzi este încă fabricat ca procesor de sistem încorporat de Western Design Center , o companie fondată de Bill Mensch , unul dintre proiectanții cipului original.

Jocuri video

O altă utilizare importantă a 6502 și a derivaților săi a fost în aparatele de jocuri video. Primul astfel de dispozitiv care a folosit un cip de familie 6502 a fost consola Atari 2600 : a folosit MOS 6507 , o versiune slăbită a lui 6502 cu o magistrală de adrese redusă și un pachet rezultat cu doar 28 de pini. Datorită acestei limitări, 6507 ar putea adresa doar 8 KB de memorie, dar pachetul redus și-a redus dimensiunea și costul. În ciuda acestui fapt, Atari 2600 a fost vândut în 30 de milioane de unități, fiecare cu un 6507 în interior.

O altă consolă bazată pe un cip derivat din 6502 a fost popularul Nintendo Famicom , prezentat de Nintendo în 1983 : Versiunea pentru consolă a fost produsă de Ricoh care, în comparație cu designul original, nu gestiona aritmetica BCD, dar oferea 22 de registre suplimentare (memorie mapată) pentru gestionarea sunetului, citirea gamepad-ului și acces direct la memorie pentru sprite . Acest cip, denumit 2A03 în sistemele NTSC și 2A07 în sistemele PAL (diferența consta în diferitul divizor de ceas intern utilizat pentru a genera imaginea și sunetul datorită frecvenței diferite a semnalelor PAL și NTSC), a fost produs exclusiv pentru Nintendo.

Aceleași arcade , foarte populare la acea vreme, erau echipate cu unul sau mai multe procesoare, adesea 6502, iar Atari folosea aproape exclusiv acest CPU, deși la unele, inclusiv Tempest sau Battlezone, au adăugat un coprocesor bazat pe felii de biți AMD Am2900 la puterea de calcul insuficientă a modelului 6502 care trebuie să funcționeze în timp real

Descriere

Pinout de MOS 6502 (DIP40)

6502 este un procesor de 8 biți cu o magistrală de adrese de 16 biți , astfel capabil să adreseze direct până la 64 KB de memorie. Intern funcționează la aceeași viteză stabilită de ceasul extern, de obicei de la 1 la 2 MHz : de exemplu, Zilog Z80 împarte intern ceasul extern cu 4. În ciuda ceasului inferior performanța sa este comparabilă cu cea a altor procesoare cu frecvențe mai mari : aceasta se datorează arhitecturii interne specifice adoptate, bazată pe o conductă statică și faptului că funcționează cu un ciclu cu 2 faze și nu contează ciclurile de ceas. La fel ca multe alte procesoare ale vremii, logica NMOS a modelului 6502 nu este secvențiată de microcodul rezident în ROM, ci folosește un PLA preprogramat la nivelul măștii (care ocupă aproximativ 15% din suprafața cipului) pentru decodarea și secvențierea instrucțiunilor. La fel ca alte microprocesoare pe 8 biți, 6502 efectuează o suprapunere limitată de preluare și execuție a instrucțiunilor.

Frecvența de ceas redusă a redus constrângerile la viteza perifericelor conectate la CPU, deoarece doar 50% din ciclul de ceas era disponibil pentru acces la memorie (datorită designului asincron al procesorului, acest procent variază foarte mult între diferite versiuni de cipuri) . Acest lucru era important într-un moment în care amintirile fiabile aveau timpi de acces în intervalul 450-250 ns. 6502 a fost conceput pentru a fi simplu și ieftin, iar reducerea costurilor întregului sistem a fost un factor foarte important în concurența pe piața computerelor de acasă și a consolelor de jocuri video.

La fel ca precursorul său, Motorola 6800 , modelul 6502 avea puține registre : la momentul proiectării modelului 6502, numărul de tranzistoare conținute într-un CI i-a afectat foarte mult costul și menținerea acestora scăzută a ajutat la reducerea costurilor. În plus, memoria RAM externă era mai rapidă decât un procesor, deci avea sens să optimizăm arhitectura pentru accesul la memorie, mai degrabă decât să creștem numărul de registre pe cip. 6502 a fost proiectat cu scopul de a fi foarte economic: prin urmare, aproximativ 4.000 de tranzistoare au fost utilizate împotriva celor aproximativ 2.300 ale Intel 4004 din 1971 și a aproximativ 8.500 ale Z80 . [24]

Designul original al modelului 6800 prevedea o suprafață de siliciu de 4.572 mm latură egală cu 20,9 mm² devenind 5,4 mm egal cu 29 mm² [25] în timp ce designul modelului 6502 prevedea 3,9 x 4,3 mm egal cu 16,6 mm².

Jurnalele 6502 includ:

Stiva este mapată în memorie la pagina 1 (se adresează $0100 $01FF , 256 - 511 ). Software-ul accesează stiva prin intermediul a 4 instrucțiuni care vă permit să introduceți ( PUSH ) sau să recuperați ( PULL ) valoarea acumulatorului sau a registrului de stare. Aceeași stivă este utilizată de instrucțiunile de manipulare sub-rutină JSR ( Salt la SubRutină ) și RTS ( ReTurn from Subroutine ), precum și rutinele de manipulare a întreruperilor .

6502 folosește registrul stivei și registrele indexului cu diferite moduri de adresare , inclusiv un mod rapid numit „pagină directă” sau „pagină zero”, similar cu cel al PDP-8 , care permite accesul la locațiile de memorie ale paginii zero. ( adresează $0000 - $00FF , 0 - 255 ) cu utilizarea unei adrese constând din doar 8 biți, salvând ciclul necesar în mod normal pentru a încărca octetul mare al adresei în registrul index. O mare parte din codul scris pentru 6502 exploatează adesea această particularitate și folosește aceste locații de memorie în același mod în care registrele interne sunt utilizate pe alte procesoare. Pe unele computere bazate pe 6502, cum ar fi Commodore VIC-20, sistemul de operare a folosit aproape toate locațiile cu zero pagini, lăsând câteva gratuit utilizatorului. [26]

Modurile de adresare sunt, de asemenea, „implicite”, contribuind cu 1 octet la dimensiunea instrucțiunii. Acestea sunt (între paranteze ocuparea totală a memoriei):

  • absolut , "absolut" (3 octeți)
  • absolut indexat , "absolut indexat" (3 octeți)
  • pagină zero indexată , "indexată pe pagina zero" (2 octeți)
  • relativ , "relativ" (2 octeți)
  • acumulator , "acumulator (1 octet)
  • indirect, x , "indirect, x" și indirect, y , "indirect, y" (2 octeți)
  • imediat , „imediat” (2 octeți)

Modul absolut este un mod de uz general: instrucțiunile de salt utilizează o adresă semnată de 8 biți în intervalul -128 / +127, indicând astfel o adresă de până la 128 de octeți înainte sau 127 de octeți după instrucțiunea de adresare (care se traduce în intervalul - 126 / +129 cu privire la celula de pornire a instrucțiunii de salt). Modul acumulator folosește acumulatorul ca adresă reală și nu necesită date ca operand. Modul imediat utilizează un operand literal pe 8 biți.

Modurile indirecte sunt utile pentru iterarea și procesarea matricilor de date . Cu modul "(indirect), y" la 5/6 cicluri, registrul Y de 8 biți este adăugat la o adresă de 16 biți de pe pagina zero indicată de doar 1 octet urmat de codul opțional . Prin urmare, registrul Y este un registru „index” în sensul că este utilizat pentru a stoca „indexul” curent, spre deosebire de registrul X al 6800 unde o adresă de bază este stocată direct și la care un offset poate accesa direct). Este nevoie de doar încă 2 cicluri pentru a crește registrul index și a itera matricea octet cu octet. În modul rar (indirect), x, adresa efectivă pentru operație se găsește în pagina zero la adresa compusă prin adăugarea celui de-al doilea octet al instrucțiunii la conținutul registrului X. Folosind modurile indexate, pagina zero funcționează la fel ca un set de 128 de registri de index suplimentari.

6502 este capabil atât de operații binare, cât și de adunare și scădere a BCD . Plasând CPU în modul BCD cu instrucțiunea SED , rezultatele operațiilor sunt exprimate în format zecimal: de exemplu, suma $99 + $01 $00 returnează $00 cu steagul rămas setat la 1, în timp ce în modul binar (instrucțiune CLD ) aceeași operație returnează $9A cu restul steagului setat la 0. În afară de Atari BASIC , acest mod a fost foarte rar folosit pe computerele de acasă.

6502 a fost, de asemenea, denumit unul dintre primii procesoare RISC ", [27] [28] datorită setului său de instrucțiuni eficient, simplu și aproape ortogonal (multe instrucțiuni pot funcționa cu diferite moduri de adresare), precum și pentru 256" înregistrează "în pagina zero. Din punct de vedere tehnic, 6502 nu este un procesor RISC, deoarece operațiile matematice pot citi orice celulă de memorie (nu numai cele din pagina zero) și diferite instrucțiuni (cum ar fi INC , ROL , etc ...) modifică de asemenea memoria , spre deosebire de filosofia RISC de „încărcare / depozitare" . În plus, ortogonalitatea instrucțiunilor este, de asemenea, adesea asociată cu „ CISC ". Z80, care folosea un ceas mult mai mare (de obicei 3,5-4 MHz) și 6502 este creditat ca fiind inspiratorul procesorelor RISC, cum ar fi ARM-urile [28], deși această inspirație s-a limitat la simpla implementare mai degrabă decât arhitecturii, care este foarte diferită de cea a ARM-urilor.

Eșantion de cod

Următorul este programul clasic Hello world scris în codul de asamblare 6502 pentru calculatoare cu KERNAL Commodore :

 A_CR = $ 0D ; returnare transport
 BSOUT = $ FFD2; în rutina Kernal ROM care scrie dispozitivul de ieșire
 ;
 LDX # $ 00; inițializează indexul în registrul X
 ;
 LOOP LDA MSG , X ; citește mesajul text
 BEQ LOOPEND ; sfârșitul mesajului
 ;
 JSR BSOUT ; imprimă un caracter
 INX
 BNE LOOP ; se repetă
 ;
 LOOPEND RTS ; iese din subrutină
 ;
 MSG .BYT ' Bună ziua , lume ! ' , A_CR , 00 $

Interfețe dedicate

Cu excepția MOS 6522 și a altor câteva componente, tehnologia MOS a folosit cipuri periferice derivate din cele ale familiei 6800:

  • MOS 6520 PIA (Parallel Interface Adapter) - aproape clona Motorola 6821 Motorola: are 2 porturi de 8 biți cu direcționalitate bit-adresabilă
  • MOS 6522 VIA (Versatile Interface Adapter) - este modelul 6520 cu adăugarea de porturi seriale, temporizatoare și alte îmbunătățiri notabile. La momentul respectiv, costă aproximativ ¼ din Motorola 6821
  • MOS 6526 CIA (Complex Interface Adapter) - evoluția modelului 6522, a fost folosit pe Commodore 64 pentru interfețe externe și pentru gestionarea tastaturii
  • MOS 6545 CRTC (controler CRT) - port video cu extensii foarte ușoare în comparație cu Motorola 6845 (ca întotdeauna din motive legale)
  • MOS 6551 ACIA (Asynchronous Communications Interface Adapter) - derivat de la Motorola 6850, efectuează servicii UART și gestionează protocolul RS-232

Variante și derivate

Din 6502 au fost produse mai multe variante și cipuri derivate:

  • MOS 6507 : a prezentat un mic bus de adrese capabil să adreseze doar 8 KB. Acest cip a fost utilizat doar în consola Atari 2600 . [29]
  • MOS 6509 : magistrala de adrese a fost extinsă la 20 de biți. Odată cu integrarea pe cip a circuitelor pentru gestionarea comutării bancare , 6509 ar putea adresa până la 1 MB de memorie. A fost folosit doar pe Commodore CBM-II . [30]
  • MOS 6510 : a fost folosit ca procesor al popularului Commodore 64 . Comparativ cu 6502, acesta avea un port I / O suplimentar și un pin pentru ieșirea semnalului de ceas.
  • WDC 65C02 : fabricat de Western Design Center , a fost un 6502 în tehnologia CMOS , cu mai multe opcodes și unele bug-uri ale proiectului original corectate (cum ar fi unele steaguri care nu au fost, contrar documentației, actualizate după anumite operațiuni).
  • Ricoh 2A03 : varianta modelului 6502 fără modul BCD, utilizată exclusiv în consola Nintendo Entertainment System . [31]

MOS 6512

MOS 6512 este o variantă care funcționează cu un ceas extern: originalul 6502 folosește un generator intern pentru a crea semnalele de ceas „Faza 1” (Φ1) și „Faza 2” (Φ2). A fost folosit în BBC Micro B + 64 , unde utilizarea ceasului extern a permis procesorului să funcționeze normal la 2 MHz, pentru a-l aduce la 1 MHz atunci când a trebuit să acceseze periferice lente precum magistrala de expansiune, ADC ( Convertor analog la digital) și VIA. [32]

Derivate pe 16 biți

Western Design Center a proiectat, de asemenea, o versiune pe 16 biți a 65C02, WDC 65C816 , precum și WDC 68C082 , o versiune hibridă bazată pe un nucleu 65C816 capabil să adreseze 64 KB de memorie și cu un pinout compatibil cu cel al modelului 6502 / 65C02: ar putea să-l înlocuiască pe acesta din urmă și să funcționeze ca un 65C02 normal, dar ar putea fi, de asemenea, configurat prin software pentru a funcționa cu registrele interne de 16 biți "A" și "X". 65C802 nu a avut prea multă difuzie și nu mai este în producție. 65C816 a fost folosit în consola Super Nintendo Entertainment System și Apple IIGS și este încă în producție. [33]

Mitsubishi a construit 65816, un microcontroler cu o arhitectură similară cu cea a 65C816, deși nu este 100% compatibil cu acesta.

Synertek a publicat fișa tehnică a SY6516 , o versiune pe 16 biți a modelului 6502, care însă nu a fost niciodată pusă pe piață. [34]

Probleme în proiect

Se știe că designul original al modelului 6502 și derivatele sale au o serie de instrucțiuni nedocumentate, care variază foarte mult de la cip la cip, în funcție de producător. În 6502 decodarea instrucțiunilor este implementată într-o logică programabilă (similară unui PLA ) care definește doar 151 din cele 256 de coduri opționale posibile: restul de 105 provoacă efecte ciudate și imprevizibile (de exemplu blocarea imediată a procesorului, executarea diverse operații valabile în același timp) sau pur și simplu nu fac nimic. Eastern House Software a dezvoltat „Trap65”, un dispozitiv care ar putea fi introdus între procesor și soclul acestuia pentru a captura aceste opcoduri nedocumentate și a le converti în instrucțiuni BRK (care generează o întrerupere software). Unii programatori au folosit această caracteristică pentru a extinde setul de instrucțiuni 6502 scriind rutine opcode nedocumentate care au fost executate prin interceptarea vectorilor instrucțiunii BRK , situate la $FFFE . Western Design Center a înlocuit în 65C02 toate opcodes-urile ilegale cu instrucțiuni NOP , chiar dacă cu timpi de execuție și ocupare în octeți diferiți.

Instrucțiunea de salt indirect JMP ( byte basso dell'indirizzo ) are un caz în care nu funcționează așa cum era de așteptat: dacă octetul scăzut de adresă conține valoarea $FF (deci orice adresă în formatul $xxFF ), procesorul nu va executa ' instrucțiune la adresa stocată în $xxFF / $xxFF+1 dar la cea stocată în $xxFF / $xx00 . Această eroare afectează toate cipurile din versiunea NMOS, dar nu și 6502 și derivatele sale realizate în logica CMOS. [35]

Modul de adresare indirectă bazat pe registrul Y ( (Ind),Y ) este parțial defect. Dacă adresa din pagina zero este $FF (adică ultima locație de memorie a paginii zero) procesorul nu execută date de la adresa indicată de $00FF și $0100 + Y ci în schimb de $00FF și $0000 + Y. Toate Cipurile logice NMOS sunt afectate de această eroare, care a fost remediată în multe dintre cipurile logice CMOS, cu excepția 65C02.

Modul de adresare indirectă bazat pe registrul X ( (Ind),X ) este, de asemenea, defect dacă adresa din pagina zero este $FF : problema este identică cu cazul anterior.

Modul de adresare indexat al versiunilor NMOS ale modelului 6502 prezintă o problemă în cazul adreselor din marginile paginilor: în acest caz se efectuează o citire suplimentară a unei adrese nevalide. Această eroare poate provoca probleme dacă accesați hardware-ul care funcționează în timpul unei citiri (de exemplu, resetarea unui cronometru sau a semnalizărilor IRQ, trimiterea unui semnal de sincronizare pe o linie I / O etc.). Această eroare a fost remediată în versiunile CMOS, unde procesorul efectuează o citire suplimentară a ultimului octet de instrucțiuni.

Citiți / modificați / scrieți instrucțiuni la o anumită adresă efectuați 1 ciclu de citire și 2 cicluri de scriere. Acest lucru poate cauza probleme în timpul celui de-al doilea ciclu de scriere dacă accesați hardware care funcționează în timpul scrierii. Acest defect a fost remediat în versiunea CMOS a modelului 6502, în care procesorul efectuează 2 cicluri de citire și 1 scriere.

Semnalizatoarele de stare „N” (rezultat negativ), „V” (semnal de deversare ) și „Z” (rezultat zero) nu sunt valabile atunci când procesorul efectuează operații aritmetice în modul BCD, deoarece aceste semnalizări reflectă starea operațiunilor în binar și nu în modul BCD. Această limitare a fost eliminată în versiunile CMOS. Această eroare a fost folosită în trecut ca test pentru a verifica dacă CPU-ul se afla în logica NMOS sau CMOS. [36]

Când procesorul este în modul BCD în timp ce se efectuează o întrerupere hardware, acesta nu revine la modul binar. Acest defect poate genera erori greu de găsit în codul rutinelor de întrerupere dacă acestea nu deselectează modul BCD înainte de a efectua operații aritmetice. Un sistem de operare afectat de această problemă a fost KERNAL al Commodore 64, care nu a gestionat corect acest defect al procesorului. Și acest lucru a fost remediat în versiunile CMOS.

Pinul „SO” (Set Overflow) a fost destinat utilizării în drivere pentru dispozitive de mare viteză: atunci când s-a aplicat o tensiune (semnal „HIGH”) semnalizatorul de procesare „V” a fost setat imediat la 1. Dacă dacă această caracteristică a funcționat bine , ar fi eliminat o instrucțiune de încărcare de la driverul dispozitivului, reducând numărul de instrucțiuni dintr-un ciclu de transfer de date cu 25%, verificând evident proiectarea sistemului foarte atent pentru a evita modificarea procesului de calcul. În practică, însă, această caracteristică nu a fost practic folosită niciodată.

Setul de instrucțiuni 6502 include BRK ) (opcode $00 ), care este tehnic o întrerupere software (similar cu instrucțiunile SWI ale procesoarelor Motorola 6800 și ARM). BRK este adesea folosit pentru a întrerupe executarea programului și a porni un editor de limbaj mașină pentru testare și depanare în timpul dezvoltării software-ului. Poate fi, de asemenea, utilizat pentru a direcționa execuția programului utilizând un simplu tabel de salt (similar cu modul în care Intel 8088 și derivatele sale gestionează întreruperile software-ului printr-un număr). Sfortunatamente, se si verifica un interrupt hardware mentre il processore sta eseguendo un'istruzione BRK allora il 6502 ignora quest'ultima ed esegue direttamente il primo. Questo difetto è stato corretto nelle versioni CMOS del processore.

Anche se non sono propriamente un bug, i comportamenti delle istruzioni JSR (Jump to SubRoutine) e RTS (ReTurn from Subroutine) possono sorprendere. L'indirizzo del punto da cui si esegue il salto inserito nello stack da JSR e recuperato poi da RTS per riprendere l'esecuzione è quello dell'ultimo byte della stessa istruzione JSR e non quello dell'indirizzo dell'istruzione successiva. Ciò accade perché la copia del valore (dal registro "PC" allo stack e viceversa) viene eseguito prima che sia incrementato automaticamente il registro puntatore di programma "PC", operazione che viene eseguita al termine di ogni istruzione. Questo modo di operare non inficia però la corretta esecuzione del salto perché l'indirizzo memorizzato in anticipo nello stack viene poi aggiornato con un incremento di 1 al termine dell'istruzione RTS . [37] Questa caratteristica non viene solitamente notata a meno che non si estragga l'indirizzo di rientro per prelevare dei parametri nel flusso del codice (una pratica comune nella programmazione del 6502). Tutti i derivati del 6502 presentano questo comportamento.

Una limitazione dello stack è il fatto che il suo puntatore "S" è ad 8 bit, per cui lo stack può contenere solo 256 valori.

Cloni nel Blocco Sovietico

Nel Blocco Sovietico venne prodotto un gran numero di microprocessori clonati da quelli Occidentali e tra questi il CM630 o CM630P fu un puro clone del 6502 realizzato dalla MICRO ELEKTRONIKA BULGARIA

Acceleratori

Diversi utenti iniziarono a cercare modi di velocizzare i propri computer. Siccome il 6502 preleva il clock dall'esterno, aumentarne la velocità era più semplice che cercare un chip più veloce che fosse compatibile. Molti costruttori iniziarono a fabbricare dispositivi "acceleratori" composti da un piccolo quantitativo di RAM ad alta velocità e dalla circuiteria necessaria a sincronizzare il 6502 "accelerato" con la RAM e le periferiche originali dei computer. Ad esempio, il floppy disk drive dell' Apple II aveva tempi di accesso molto precisi, sincronizzati tramite la gestione diretta dei registri di I/O del processore: per questo motivo gli acceleratori per l'Apple II riportavano la frequenza della CPU al valore originale di 1 MHz durante le operazioni di accesso ai dischi.

I primi acceleratori furono realizzati come schede aggiuntive ma diversi acceleratori che comparvero in seguito integrarono in un package delle dimensioni del chip originale non solo il 6502 ma anche tutta la circuiteria accessoria. Un esempio di questo tipo di acceleratori è lo Zip Chip per l'Apple II, che in un unico package inseribile nello zoccolo del 6502 in formato DIP40 integrava la CPU e 350 circuiti accessori. Lo Zip Chip elevava la frequenza del 6502 a 4 od 8 MHz, a seconda dei modelli. [38] [39]

Simulatori

Un simulatore funzionante del 6502 è stato realizzato in JavaScript dal gruppo visual6502.org utilizzando la tecnica del reverse engineering. Infatti gli schemi tecnici originali della MOS sono stati disegnati a mano e andati perduti. Il gruppo diretto da Michael Steil è riuscito nell'intento ricavando delle immagini ad alta definizione dei vari strati del processore mediante acidi e fotografando gli stessi mediante micro fotografia. Il tutto è stato presentato alla ventisettesima edizione del Chaos Communication Congress a Berlino. [40] [41] [42] [43]

Nella cultura di massa

Nel film di fantascienza Terminator ( 1984 ) ad un certo punto viene proiettato sullo schermo ciò che il robot T-800 vede attraverso i suoi occhi artificiali: all'immagine appare sovrapposto del codice assembly del 6502, che proviene da alcuni programmi per l'Apple II, di cui uno comparso su una rivista per computer denominata Nibble . [44]

Nella sitcom animata Futurama il co-protagonista Bender , un robot androide del 4° millennio, afferma in una puntata di possedere un 6502 come "cervello". David X. Cohen , produttore televisivo e principale autore della serie ha affermato che lui ed i suoi amici David Borden e David Schiminovich scrissero durante il periodo scolastico un compilatore in assembly 6502 per un linguaggio di loro creazione (chiamato "FLEET") per l' Apple II Plus , e ciò lo ha portato ad inserire detta citazione nella sitcom. [45]

Galleria d'immagini

Note

  1. ^ Longley, Shain , p. 147 .
    ( EN )

    «Until recently 8 bit machines were dominated by two microprocessors — the Z80 and the 6502»

    ( IT )

    «Fino a poco tempo fa le macchine ad 8 bit furono dominate da 2 microprocessori: lo Z80 ed il 6502.»

  2. ^ MOS 6510 , su cpu-collection.de . URL consultato il 24 settembre 2015 .
    ( EN )

    «The MOS6510 is a 6502 with an additional 6 Bit bidirectional I/O Port. (…) The 6510 that was built in the C64 ran at 1 Mhz (…)»

    ( IT )

    «Il MOS 6510 è un 6502 con una porta I/O a 6 bit aggiuntiva. (…) Il 6510 che era incluso nel C64 lavorava a 1 MHz (…)»

    ( Cpu-collection.de )
  3. ^ Scheda tecnica del MOS 6510 , Commodore Semiconductor Group.
    ( EN )

    «The internal processor architecture is identical to the Commodore Semiconductor Group 6502 to provide software compatibility.»

    ( IT )

    «L'architettura interna del processore è identica a quella del Commodore Semiconductor Group 6502 per garantire la compatibilità software.»

    ( Commodore Semiconductor Group )
  4. ^ a b c Brian Bagnall, 1 e 2 , in On the Edge: The Spectacular Rise And Fall of Commodore , Winnipeg, Manitoba, Variant Press, 2006, pp. 9–12, ISBN 0-9738649-0-7 .
  5. ^ Motorola 6800 Oral History , su computerhistory.org . URL consultato il 7 febbraio 2011 (archiviato dall' url originale il 2 aprile 2012) .
  6. ^ a b Ian Matthews, The Rise of MOS Technology & The 6502 , su commodore.ca , 26 giugno 2006. URL consultato il 6 febbraio 2011 (archiviato dall' url originale il 4 ottobre 2018) .
  7. ^ Robert Sugarman, Does the Country Need A Good $20 Microprocessor? ( PDF ), in Electronic Engineering Times , 25 agosto 1975, p. 25. URL consultato il 6 febbraio 2011 (archiviato dall' url originale il 3 febbraio 2007) .
  8. ^ ( EN ) Section One: Before the Great Dark Cloud - Part V: The 650x, Another Direction (1975)… , su cpushack.com , CPU Shack. URL consultato il 25 settembre 2015 .
    ( EN )

    «Unlike the 8080 and its kind, the 6502 (and 6800) had very few registers. It was an 8 bit processor, with 16 bit address bus. Inside was one 8 bit data register, two 8 bit index registers, and an 8 bit stack pointer (stack was preset from address 256 ($100 hex) to 511 ($1FF)). It used these index and stack registers effectively, with more addressing modes, including a fast zero-page mode that accessed memory addresses from address 0 to 255 ($FF) with an 8-bit address that speeded operations (it didn't have to fetch a second byte for the address).»

    ( IT )

    «A differenza dell'[Intel]8080 e dei chip simili, il 6502 (ed il 6800) aveva molti pochi registri. Era un processore ad 8 bit, con un bus indirizzi a 16 bit. Al suo interno c'era un registro per i dati ad 8 bit, 2 registri indice ad 8 bit ed un puntatore allo stack ad 8 bit (lo stack era preimpostato dall'indirizzo 256 (esad. $100) a 511 ($1FF)). Usava questi registri indice e lo stack efficacemente, con più modalità di indirizzamento, inclusa una modalità pagina zero che accedeva gli indirizzi di memoria da 0 a 255 ($FF) con un indirizzo ad 8 bit che velocizzava le operazioni (non doveva caricare un secondo byte per l'indirizzo).»

    ( CPU Shack )
  9. ^ ( EN ) Decimal Mode , su 6502.org . URL consultato il 25 settembre 2015 .
  10. ^ ( EN ) 6500 microprocessors , Commodore Semiconductor Group.
  11. ^ Microprocessor line offers 4, 8,16 bits , in Electronics , vol. 48, n. 15, New York, McGraw-Hill, 24 luglio 1975, p. 118.
  12. ^ Robert Sugarman, Does the Country Need A Good $20 Microprocessor? ( PDF ), in EE Times , Manhasset, New York, CMP Publications, 25 agosto 1975, p. 25. URL consultato il 6 febbraio 2011 (archiviato dall' url originale il 3 febbraio 2007) .
  13. ^ MOS 6501 Microprocessor beats 'em all , in Electronics , vol. 48, n. 16, New York, McGraw-Hill, 7 agosto 1975, pp. 60–61.
  14. ^ a b MOS 6502 the second of a low cost high performance microprocessor family ( JPG ), in Computer , vol. 8, n. 9, IEEE Computer Society, settembre 1975, pp. 38–39, DOI : 10.1109/CM.1975.219074 .
  15. ^ a b Brian Bagnall, On the Edge: The Spectacular Rise and Fall of Commodore , Variant Press, 2005, p. 24.
  16. ^ James, James Advertisement , in Popular Electronics , vol. 8, n. 3, settembre 1975, p. 107.
    ( EN )

    «James is now Jameco Electronics. The 8080 CPU was $149.95, the 8008 CPU was 29.95. A 2102 1K bit static RAM was $4.95. Their price for a 8080A CPU was 37.95 in the June 1976 issue.»

    ( IT )

    «James è adesso Jameco Electronics. La CPU 8080 era a $ 149,95, la CPU 8008 era a $ 29,95. Un chip di RAM statica 2102 da 1 Kbit era a $ 4,95. Il loro prezzo per l'8080A era $ 37,95 nel numero di giugno del 1976.»

  17. ^ Motorola, All this and unbundled $69 microprocessor ( JPG ), in Electronics , vol. 48, n. 22, McGraw-Hill, 30 ottobre 1975, p. 11.
  18. ^ Motorola, All this and unbundled $69 microprocessor ( JPG ), in Electronics , vol. 48, n. 22, McGraw-Hill, 30 ottobre 1975, p. 11.
    ( EN )

    «The quantity one price for the MC6800 was reduced from $179 to $69. The previous price for 50 to 99 units was $125.»

    ( IT )

    «Il prezzo per un singolo MC6800 fu ridotto da $ 179 a $ 69. Il precedente prezzo per quantitativi da 50 a 99 chip era di $ 125 cad.»

  19. ^ Digi-Key, Pubblicità di Digi-Key , in Popular Electronics , vol. 8, n. 6, dicembre 1975, p. 124.
    ( EN )

    «The 8080A CPU was $69.50. A 2102 1K bit static RAM was $3.50. Digi-Key's price for a 8080A was $34.95 in the June 1976 issue.»

    ( IT )

    «La CPU 8080A era a $ 69,50. Un chip di RAM statica 2102 da 1 Kbit era a $ 3,50. Il prezzo di Digi-Key per un 8080A era di $ 34,95 nel numero di giugno del 1976.»

  20. ^ Motorola Sues MOS Technology ( PDF ) [ collegamento interrotto ] , in Microcomputer Digest , vol. 2, n. 6, Cupertino CA, Microcomputer Associates, dicembre 1975, p. 11.
  21. ^ MOS Technology Drops 6501 ( PDF ), in Microcomputer Digest , vol. 2, n. 11, Cupertino CA, Microcomputer Associates, maggio 1976, p. 4. URL consultato il 18 gennaio 2011 (archiviato dall' url originale l'8 gennaio 2011) .
  22. ^ Mike Teener, Politics and Intrigue , in SCCS Interface , vol. 1, n. 6, Los Angeles, Southern California Computer Society, maggio 1976, p. 58.
    ( EN )

    «So Motorola sued and just recently won an out-of-court settlement that has MOS Technology paying $200,000 and stopping production on the 6501.»

    ( IT )

    «Così Motorola ha citato ed ha recentemente vinto una causa senza passare dai tribunali che ha visto MOS Technology pagare $ 200.000 e terminare la produzione del 6501.»

  23. ^ Inside the Atari 2600 , su hardwaresecrets.com . URL consultato il 24 settembre 2015 .
    ( EN )

    «The 6502 was widely used at the time in several microcomputers, such as the Apple II, Atari 400, Atari 800, Commodore VIC-20, and Commodore 64, just to name the most famous ones»

    ( IT )

    «Il 6502 fu ampiamente utilizzato all'epoca in diversi microcomputer, come l'Apple II, l'Atari 400, l'Atari 800, il Commodore VIC-20 ed il Commodore 64, giusto per citare i più famosi.»

    ( Inside the Atari 2600 )
  24. ^ "How many transistors in the 6502 processor?" , su classiccmp.org , 5 maggio 2001. URL consultato il 7 febbraio 2011 (archiviato dall' url originale il 25 settembre 2010) .
  25. ^ Motorola 6800 Oral History (2008), p. 10
  26. ^ Mappa della memoria del Commodore VIC-20 ( TXT ), su zimmers.net . URL consultato il 6 febbraio 2011 .
  27. ^ Chip archeology , su compukituk101.blogspot.com , Compukit-101, 18 febbraio 2009. URL consultato il 7 febbraio 2011 .
  28. ^ a b Richard Murray, RISC vs CISC , su heyrick.co.uk , 2002. URL consultato il 7 febbraio 2011 .
  29. ^ ( EN ) Inside the Atari 2600 , su hardwaresecrets.com . URL consultato il 24 settembre 2015 .
    ( EN )

    «The Atari 2600 was based on a MOS Technology 6507 microprocessor. This CPU was a stripped-down version of the 6502 microprocessor, limited to accessing only 8 KB of memory versus 64 KB as on the 6502 and without interrupt lines; otherwise they were the same CPU.»

    ( IT )

    «L'Atari 2600 era basata sul microprocessore MOS Technology 6507. Questa CPU era una versione ridotta del microprocessore 6502, limitata nell'accesso a soli 8 KB di memoria contro i 64 KB del 6502 e senza le linee di interrupt; a parte questo erano la stessa CPU.»

    ( Inside the Atari 2600 (HardwareSecrets.com) )
  30. ^ Commodore CBM-II , su 6502.org . URL consultato il 24 settembre 2015 .
  31. ^ ( EN ) Informazioni sulla CPU Ricoh 2A03 del NES , su wiki.nesdev.com , NESdev.com. URL consultato il 24 settembre 2015 .
    ( EN )

    «The NES CPU core is based on the 6502 processor (...) It is made by Ricoh and lacks the MOS6502's decimal mode.»

    ( IT )

    «Il nocciolo della CPU del NES è basato sul processore 6502 (...) È fabbricato da Ricoh e non ha la modalità decimale del MOS 6502.»

    ( Specifiche del Ricoh 2A03 )
  32. ^ The BBC and Master Computer Public Domain Library - Inside The BBC B+ , su 8bs.com , 8-Bit Software. URL consultato il 7 febbraio 2011 .
  33. ^ Specifiche del WDC 65C816 , su westerndesigncenter.com , Western Design Center. URL consultato il 7 febbraio 2011 .
  34. ^ "Syntertek SY6516 - The chip that never existed" ( TXT ), su homepage.mac.com , Apple II Things. URL consultato il 7 febbraio 2011 (archiviato dall' url originale il 28 giugno 2010) .
  35. ^ MOS 6502 , su foldoc.org , Free Online Dictionary of Computing. URL consultato il 25 giugno 2014 .
  36. ^ Test di verifica CMOS/NMOS per i 6502 , su s-direktnet.de , Pagina su Web.Archive.org. URL consultato il 7 febbraio 2011 (archiviato dall' url originale il 2 gennaio 2008) .
  37. ^ Mark Andrews, 6 , in "Atari Roots - A Guide to Atari Assembly Language" , DATAMOST, Inc., 1984, ISBN 0-88190-171-7 .
    ( EN )

    «RTS ("pull the return address off the stack and put it in the PC and increment it by one." This will cause execution to continue where it left off.)»

    ( IT )

    «RTS ("estrae dallo stack l'indirizzo di rientro, lo inserisce nel PC e lo incrementa di 1." Questo comporterà che l'esecuzione riprenderà da dove era stata sospesa.»

  38. ^ Manuale utente dello Zip Chip ( PDF ), ZIP Technology. URL consultato il 7 febbraio 2011 .
  39. ^ Foto dello Zip Chip e della sua confezione , su nekochan.net . URL consultato il 7 febbraio 2011 (archiviato dall' url originale il 27 gennaio 2011) .
  40. ^ 6502 Images , su visual6502.org . URL consultato il 28 novembre 2017 .
  41. ^ ( EN ) CCC | Home , su ccc.de . URL consultato il 28 novembre 2017 .
  42. ^ Christiaan008, 27c3: Reverse Engineering the MOS 6502 CPU (en) , 10 gennaio 2011. URL consultato il 28 novembre 2017 .
  43. ^ Visual 6502 in JavaScript , su visual6502.org . URL consultato il 28 novembre 2017 .
  44. ^ "The 6502 in 'The Terminator'" , su pagetable.com . URL consultato il 7 febbraio 2011 .
  45. ^ "The Truth About Bender's Brain" , su spectrum.ieee.org , IEEE, 05/2009. URL consultato il 7 febbraio 2011 .

Bibliografia

Monografie in italiano

Monografie in inglese

Capitoli in opere generali

Articoli in rivista

  • ( EN ) Robert Sugarman, Does the Country Need a Good $20 Microprocessor? ( PDF ), in Electrical Engineering Times , 25 agosto 1975, p. 25. URL consultato l'8 febbraio 2011 ( archiviato il 3 febbraio 2007) .
  • ( EN ) 3rd Generation Microprocessor ( PDF ), in Microcomputer Digest , vol. 2, n. 2, Cupertino, California, Microcomputer Associates, 08/1975, pp. 1-3. URL consultato il 5 maggio 2021 ( archiviato il 4 luglio 2009) .
  • ( EN ) Daniel Fylstra, Son of Motorola (or the $20 CPU Chip) , in BYTE , vol. 1, n. 3, Peterborough, New York, Green Publishing, 11/1975, pp. 56-62.
  • Parliamo un po' del 6502 ( JPG ), in Bit , anno 2, n. 5, Milano, Gruppo Editoriale Jackson, novembre/dicembre 1979, pp. 35-40, ISSN 0392-8837 ( WC · ACNP ) .

Collegamenti esterni

Informazioni generali

Caratteristiche del set di istruzioni

Emulatori e simulatori

Primi computer basati sul 6502

Acceleratori hardware

Hardware

Altri progetti

Controllo di autorità LCCN ( EN ) sh85000011 · GND ( DE ) 4120731-2 · BNF ( FR ) cb11953064v (data) · BNE ( ES ) XX527727 (data)
Informatica Portale Informatica : accedi alle voci di Wikipedia che trattano di informatica