# MOS 6502

De MOS 6502 is een van de bekendste 8 bit-processoren. De processor werd in 1975 ontworpen door Chuck Peddle bij halfgeleiderfabrikant MOS Technology (na overname door Commodore, Commodore Semiconductor Group geheten). Chuck Peddle had eerder bij Motorola in Silicon Valley gewerkt, waar hij bekend was met de 6800-processor. De gelijkenis met de 6800 is te vinden in de instructieset. De 6502 werd in licentie ook door onder andere Rockwell en Synertek geproduceerd. De 6502 dankte zijn populariteit aan zijn prijs en prestaties: destijds was de processor 6 keer zo goedkoop als concurrerende processoren en hij was vaak nog sneller ook. De 6502 startte een enorme reeks computerprojecten en was samen met de Zilog Z80 de aanzet tot de homecomputerrevolutie in de jaren 80. De eerste computerboards waren de KIM-1 (1976), SYM en AIM65, waarbij op de laatste reeds een ASCII-toetsenbord en papierrolprinter aanwezig waren.

## Gegevens instructieset

| Type architectuur: | Accumulator |
| Aantal registers: | 3 acht-bits-integer-registers: de accumulator en een X- en Y-register |
| Adresruimte: | 65536 bytes |
| Geheugenbeheer: | Niet aanwezig |
| Vlaggen: | Nul, overdracht, negatief, overflow, decimaal, interrupt |
| Adresseermodi | Onmiddellijk, absoluut, absoluut geïndexeerd (index: X,Y), nulpagina, nulpagina geïndexeerd (index: X), indirect geïndexeerd (index: Y), geïndexeerd indirect (index: X) |

## Toepassingen

De 6502 en varianten daarop zijn toegepast in een groot aantal verschillende computers en andere apparaten:
* De Commodore PET
* De Commodore VIC-20
* De Commodore 16
* De Commodore 64 (6510)
* De Commodore 128 (8502)
* De Commodore 1541 floppy drive
* De Acorn BBC
* De Acorn Electron
* De Acorn Atom
* De Apple I
* De Apple II
* De Apple III
* De Atari 2600
* De Atari 400, 800 en alle XL- en XE-computers
* De Nintendo Entertainment System
De 6502-processor is na zijn gouden decennium enigszins in onbruik geraakt. De ondergang van Commodore heeft de processor ook niet geholpen. Toch wordt de 65C02, een 6502-kloon, nog steeds verkocht door Western Design Center en nog steeds in elektronische apparaten verwerkt.

## Programmering

De 6502 is altijd een vervelende processor geweest om een compiler voor te schrijven. Dit komt doordat de stackpointer 8 bits breed is, zodat de stack maximaal 256 bytes lang kan zijn. Veel compilers gebruiken daarom een softstack, waarbij de functie van stackpointer op een andere, minder efficiënte wijze wordt gerealiseerd.
Veel homecomputers gebaseerd op de 6502 hadden een BASIC-interpreter aan boord. Als gevolg hiervan werd er veel in BASIC geprogrammeerd; menig programmeur heeft zijn eerste regels code geschreven in de BASIC van zijn eerste homecomputer, die met de 6502 is uitgerust.

## Bijwerkingen van ongeldige instructies

Niet bij elke opcode-byte is een instructie gedefinieerd. Om de prijs van de processor laag te houden, worden de instructie-bytes door combinatorische logische schakelingen onvolledig gedecodeerd. Als gevolg hiervan levert bijna elke ongeldige instructie-byte een zeker gedrag op, vaak een mengvorm van geldige instructies. De meeste van deze spookinstructies zijn nutteloos vanwege hun bizarre effect; enkele doen de processor crashen.

## Varianten van de 6502

In de loop der jaren zijn er verscheidene varianten van de 6502 verschenen die licht verschilden:
* 6502A
** Loopt op 2 MHz klokfrequentie in plaats van de 1 MHz van de standaard 6502
** Toegepast in de Acorn BBC modellen A (16 KB RAM) en B (32 KB RAM)
* 65C02
** 6502-kloon van Western Design Center uitgevoerd in CMOS
** Extra instructies en adresseermodes
** Gebruikt in de Apple IIc en ook een tijdje in de IIe
* 6503, 6505, 6506
** 12 bit-adresbus (4 KB)
* 6504, 6507
** 13 bit-adresbus (8 KB)
* 6509
** 20 bit-adresbus (1 MB)
* 6510
** 6502 met toegevoegde 8 bit-I/O-Port (6 bits gebruikt)
** Gebruikt in de Commodore 64
* 6511
** Microcontroller met IO-poorten, seriële interface en RAM-geheugen, van Rockwell
* 65F11
** Variant op de 6511 met geïntegreerde Forth-interpreter
* 7501
** 6502 in HMOS-technologie
** Gebruikt in de Commodore 16 en Commodore Plus/4
* 8500
** 6510 in CMOS-technologie
* 8502
** 6510 die op 2 MHz ingesteld kan worden
** Gebruikt in de Commodore 128
* 65816 (65C816)
** 16 bit-variant van de 6502 van Western Design Center
** Gebruikt in Apple IIGS
** 16 bits-registers en ALU
** 24 bits-adresbus (16 MB)
** Tot 24 MHz
* 65802 (65C802)
** Variant van de 65816 die pincompatibel met de 6502 is
** Tot 16 MHz