MOS Technology 6502

MOS Technology 6502, ofte forkortet MOS 6502, er en 8-biter mikroprosessor som ble introdusert av MOS Technology i 1975. Da den ble lansert, kostet den betydelig mindre enn alternativene fra konkurrenter som Intel 8080 og Motorola 6800. Den kunne koste så lite som en sjettedel av prisen på konkurrentene. Likevel var den på mange områder like rask, om ikke raskere. 6502 er brukt i en rekke klassiske datamaskiner og spillkonsoller som Commodore 64, Atari 2600, Famicom/NES, og Apple I og II.


== Historie og bruk ==
6502 var designet mer eller mindre av de samme som designet Motorola 6800 i 1975. Omtrent hele ingeniørteamet bak 6800 sluttet hos Motorola, og startet heller hos MOS Technology. De designet 6501 som var helt lik som 6502 internt, men var pin-kompatibel med Motorola 6800 (det vil si at 6501 passet i kretskort laget for 6800.) Dette likte ikke Motorola, og saksøkte MOS med en gang. Resultatet var den lovlige 6502, en 6501 med en omplassering av de forskjellige pinnene slik at den ikke kunne brukes i maskinvare for Motorola 6800. 
Da den ble lansert i 1975, kostet den bare en sjettedel av prisen på andre CPU-er. Mens 6502 startet på rundt $25, lå andre gjerne på en pris på opp i mot $200. Intel 8080 kostet f.eks. $179. Grunnen til denne enorme prisforskjellen var et hemmelig triks MOS hadde: CPU-kjernen tegnes på et stort "kart" eller oversiktsbilde, som senere forminskes og brukes til å lage selve kjernen. Et slikt forminsket bilde kalles en maske. På 70-tallet var dette en vanskelig prosess, og mange av maskene hadde feil fordi forminskingsprosessen ofte førte til feil, på samme måte som når man kopierer ark i en kopimaskin. Opp til 70% av maskene inneholdt som regel feil, noe som førte til at 70% av prosessorene måtte kastes. MOS derimot, utviklet en måte å fikse maskene på etter de var laget. Dette reduserte antallet ødelagte masker (og dermed prosessorer) drastisk. Hos MOS var det bare 30% som var ødelagt og måtte kastes. Dette gjorde at MOS kunne selge 6502 til den vanvittige prisen. Folk visste ikke om dette trikset til MOS, og derfor fikk den en seig start. De trodde til å begynne med at 6502 var priset feil, men da Intel og en rekke andre produsenter senket prisene sine til $69 for å konkurrere med MOS, fikk folk øynene opp for 6502, og den solgte raskt forbi mange av konkurrentene. 


=== Datamaskiner med 6502 ===
Den første maskinvaren som brukte 6502, var MOS sin egen KIM-1-maskin. Den var laget for at teknikere og ingeniører kunne teste 6502 før de eventuelt designet et system for den. Til en viss overraskelse, ble KIM-1 svært populær blant hobbybyggere, mye på grunn av at den var lett å utvide med både terminal, tastatur, mer minne, og kasettdrev.  Rockwell AIM-65 var en utvidet versjon av denne som også oppnådde en viss popularitet som basis for dataloggere, måleinstrumenter osv. 
En av de første komplette datamaskinene med tastatur og skjermutgang, som brukte 6502, var Apple I i 1976. En annen tidlig maskin med 6502, var spillkonsollen Atari 2600. Men Atari 2600 brukte en nedstrippet versjon av 6502; 6507. Den hadde en 13-bits adressebuss (mot 6502s 16-bits), som gjorde at den bare kunne aksessere 8KB RAM. Videre ble 6502 brukt i Apple II, Commodore PET, og en rekke andre datamaskiner. Den ble også brukt som hjelpeprosessor i en del maskinvaredeler som diskettstasjoner. Andre varianter av 6502, utenom 6507, ble også produsert. De mest kjente er 6510 og Ricoh 2A03. 6510 var en forbedret versjon av 6502 med en separat I/O-buss for kommunikasjon med ekstern maskinvare, og ble i hovedsak brukt i Commodore 64. 2A03 var en modifisert versjon produsert av Ricoh, med innebygd DMA-kontroller og lydprosessor som ble brukt i Famicom/NES. 
Britiske Acorn computers' BBC micro, Electron m.fl var også populære hjemmedatamaskiner med 6502 prosessor. 
MOS Technology lisensierte også 6502-arkitekturen til andre produsenter, og dermed dukket det også opp flere andre CPU-er som var basert på 6502, men som ikke var designet av MOS selv. Senere ble det også produsert 16- og 32-bits versjoner av 6502-arkitekturen. Man finner bl.a. Nintendo SA-1, en 16-bits 6502-kompatibel CPU, i SNES.


== Teknisk beskrivelse og arkitektur ==
6502 er en 8-bits prosessor. Den har registre på 8 bit internt, og en 8-bits databuss, men har en adressebuss på 16 bit, noe som gjør at den har et adresseområde på 65535 bytes, eller 64KB. Den kjører på samme klokkehastighet både internt i prosessorkjernen og eksternt på bussene, en hastighet som som regel ikke er på mer enn 1 – 2 MHz. Likevel er den ofte like rask som andre CPU-er med høyere hastighet. Dette skyldes at 6502 har en mye enklere logikk internt, noe som gjør at den kan få gjort mer per klokkesyklus enn andre prosessorer fra samme tid. Det at den kan kjøre på en såpass lav hastighet (1 – 2 MHz), førte på tiden da den ble lansert, til at billige minnebrikker og ROM-brikker, som ikke var designet for høye klokkehastigheter, kunne brukes i lag med den, noe som gjorde den enda mer attraktiv.
I likhet med forgjengeren Motorola 6800, har 6502 en enkel arkitektur. Den har bare seks registre, i motsetning til mange andre CPU-er fra den tiden, f.eks. Intel 8080 og Zilog Z80. Disse registrene er: Akkumulatoren (A), to indeks-registre (X og Y), program-pekeren (PC), stack-pekeren (S), og prosessorstatus-registeret (P). Til sammenligning har dagens x86-prosessorer gjerne opp i mot 30 til 40 registre. A er hovedregisteret som brukes i alle matte- og bit-operasjoner. X- og Y-registrene har som hovedmål å fungere som indekser inn i et gitt minneområde. Dette gjør det lett å operere med datastrukturer som tabeller (arrays). PC peker alltid til instruksjonen som utføres, S peker til neste ledige element på stacken, og P holder statusinformasjon, bl.a. en rekke statusflagg som blir satt på visse kriterier. Alle registrene er 8 bit store, utenom PC, da det skal dekke over hele det 16 bit store adresseområdet. 


=== Minnemodellen ===
I 6502-terminologi, deles minnet opp i deler på 256 bytes, kalt pages. Den første pagen, fra adresse 0000h til 00FFh, kalles zero page, og har en spesiell bruk: De fleste instruksjonene som drar nytte av verdier i minnet, kan aksessere minnet med bare én byte når det er snakk om en adresse i zero page (de 256 første bytene). Dermed sparer man en byte i koden, siden 00h til FFh (en byte) akkurat dekker zero page. Den neste pagen, fra adresse 0100h til 01FFh, er fastbundet til å være stacken. Dette kan ikke endres. S-registeret brukes som en peker i stack pagen for å holde styr på hvor neste ledige element er.  
For å kompensere få registre, har 6502 en rekke adresseringsmetoder som eliminerer en del operasjoner man i andre arkitekturer bruker registre til: 

Spesielt de indirekte og indekserte adresseringsmetodene er svært nyttige for 6502. Med indirekte adressering kombinert med indeksering, kan man f.eks. arbeide med datastrukturer som er større enn 256 bytes. Dette eliminerer også bruken av mange og store registre for å gjøre slike minneoperasjoner, noe som også holdt kostnadene nede.


== Varianter ==
MOS Technology lanserte etter hvert en rekke varianter av 6502:

6503: 12-bits adresseområde (opp til 4KB) med NMI- og IRQ-interrupts
6505, 6506, 6513: 12-bits adresseområde (opp til 4KB) uten NMI, men med IRQ
6504, 6514: 13-bits adresseområde (opp til 8KB) uten NMI, men med IRQ
6507: 13-bits adresseområde (opp til 8KB) uten NMI og IRQ.
6510, 6512: 16-bits adresseområde (opp til 64KB) med NMI og IRQ
6509MOS oppdaterte også noen av modellene og lanserte dem under navn som startet på 85xx. 8502 er for eksempel en oppdatert versjon av 6510.