Zum Inhalt springen

MOS Technology 6502

aus Wikipedia, der freien Enzyklopädie
(Weitergeleitet von 6502)
MOS Technology 6502

Mikroprozessor MOS 6502 im Plastikgehäuse (40-Pin-DIP)
Hersteller MOS Technology, Rockwell, Synertek, UMC u. a.
Produktionsbeginn 1975
Technologie NMOS
Transistoren 3510[1]
Gehäuse 40-Pin-DIP
Max. Taktfrequenz 1 MHz bis 4 MHz
Datenbus 8 Bit
Adressbus 16 Bit
Adressraum 64 KiB (Memory Mapped I/O)
Befehlssatz 56 Befehle (MOS 6502)
Register
A Akkumulator
X, Y Indexregister
S Stapelzeiger
P Statusregister
PC Programmzähler
Interrupts IRQ, NMI, Reset, BRK (Software)

Der MOS Technology 6502 ist ein 8-Bit-Mikroprozessor vom Unternehmen MOS Technology, der 1975[2] zunächst im Keramikgehäuse als MOS MCS 6502[3] auf den Markt kam. Wegen seines einfachen Aufbaus und vor allem seines im Vergleich zu den damals etablierten Intel- und Motorola-Prozessoren sehr niedrigen Preises bei vergleichbarer Leistungsfähigkeit wurde er in vielen Heimcomputern (zum Beispiel dem Commodore PET 2001 und dessen Nachfolger VC 20, dem Atari 800, Apple I, Apple II und BBC Micro), zahlreichen Schachcomputern (zum Beispiel dem Mephisto Polgar mit 5 oder 10 MHz), im weltweit ersten Skatcomputer Skat Champion, vielen Peripheriegeräten und zahlreichen Einplatinencomputern für Steuerungs- und Entwicklungszwecke eingesetzt. Der Prozessor wurde unter der Leitung von Chuck Peddle entwickelt.[4]

Auch andere Mitglieder dieser Prozessorfamilie waren sehr erfolgreich, so der 6510, der Prozessor des Commodore 64, und der 6507 in den Atari-Spielkonsolen. Der Hauptkonkurrent von MOS Technology war damals Zilog, dessen Z80 zum Beispiel in vielen CP/M-Rechnern sowie in den Heimcomputern von Sinclair und Amstrad/Schneider zu finden war.

Ende der 1960er-Jahre entwickelte Chuck Peddle während seiner Tätigkeit bei General Electric (GE) das Konzept der „verteilten Intelligenz“. Als das Geschäft von GE zur Vermietung von Rechenzeit auf Großrechnern eingebrochen war, begann er sich für die Modernisierung von Kassensystemen zu interessieren. Dabei entwickelte er die Idee intelligenter Terminals, die mit einem Minicomputer verbunden sein sollten und deren Funktionsumfang deutlich über dem der damals üblichen Großrechner-Terminals lag. Nachdem General Electric 1970 den Ausstieg aus dem Großrechnergeschäft beschloss, verließ Peddle gemeinsam mit zwei Kollegen das Unternehmen. Ihr Versuch, das Konzept der „verteilten Intelligenz“ eigenständig weiterzuentwickeln, scheiterte jedoch an fehlendem Kapital. Während dieser Phase gelangte Peddle zu der Erkenntnis, dass für die praktische Umsetzung der geplanten Terminals ein neuer technologischer Baustein entscheidend war: der Mikroprozessor.[5]

Als Peddle 1973 durch einen Headhunter von der Entwicklung des Motorola-6800-Mikroprozessors erfuhr, die zu diesem Zeitpunkt bereits seit eineinhalb Jahren lief, nahm der das Angebot an, das Entwicklungsprogramm zum Abschluss zu führen. Der leitende Entwickler Tom Bennett bat Peddle, die weitere Entwicklung an den Anforderungen für Kassensysteme auszurichten, wie Peddle sie zuvor definiert hatte. In der Folgezeit bei Motorola machte Peddle immer wieder die Erfahrung, dass potenzielle Kunden zwar vom 6800 beeindruckt waren, den angestrebten Preis von 300 US-Dollar jedoch als zu hoch empfanden. Während Bennett den Mikroprozessor architektonisch am PDP-8-Minicomputer von DEC orientiert hatte, forderten die Kunden für preisgünstige Produkte eher einen Mikrocontroller – einen Prozessor mit reduziertem Funktionsumfang zu niedrigen Kosten.[6]

Da Motorola Peddles Vorschlag ablehnte, einen Mikrocontroller zu entwickeln, suchte er nach Möglichkeiten, die Geschäftsidee eigenständig umzusetzen. Dabei traf er auf John Paivinen, seinen ehemaligen Vorgesetzten bei GE und Mitgründer sowie Präsident von MOS Technology. Das Unternehmen war auf integrierte Schaltkreise für Taschenrechner spezialisiert und belieferte unter anderem Commodore. Peddle und Paivinen einigten sich darauf, bei MOS Technology einen preisgünstigen Mikroprozessor zu entwickeln und zu vermarkten. Als Motorola im August 1974 die Markteinführung des 6800 ankündigte, verließen Peddle und sieben seiner Kollegen das Unternehmen, um noch im selben Monat bei MOS Technology zu beginnen. Zu dieser Gruppe gehörten neben Peddle Wil Mathys, Terry Holdt, Rod Orgill, Ray Hirt, Mike Janes, Harry Bawcom und Bill Mensch.[7][8]

Nach ihrer Ankunft bei MOS Technology teilte sich die Gruppe um Peddle informell auf. Peddle, Mathys und Orgill waren für den initialen Entwurf der beiden zunächst geplanten Mikroprozessoren 6501 und 6502 zuständig. Der 6501 war dabei als pin-kompatibler Ersatz für den Motorola 6800 konzipiert – ein Umstand, gegen den Motorola später erfolgreich gerichtlich vorging.[9]

Struktur des Mikroprozessors MOS 6502 auf dem Halbleiter mit einem eingezeichneten rekonstruierten Schaltplan

Rückblickend unterteilt Mathys den Entwurf eines Mikroprozessors in fünf Phasen. Zuerst wird die Architektur festgelegt, wozu die Register und Hilfsregister, der Befehlssatz, die Handhabung von Unterbrechungen (Interrupts) sowie Datenbusse für den Informationstransfer zählen. Danach wird die Befehlsausführung entworfen. Dies geschieht durch die Definition aller Datentransfers zwischen Registern innerhalb des Mikroprozessors sowie mit externen Bausteinen. Anschließend wird die Befehlsausführung durch logische Gleichungen ausgedrückt, um damit einen vollständigen Schaltplan (Logikdiagramm) zu erstellen. Dieser muss jedes Bauteil – jeden Transistor, jeden Bus und jede Teilschaltung – enthalten. Sobald der Schaltplan fertiggestellt ist, übernehmen spezialisierte Schaltungsentwickler und Layout-Zeichner dessen Umsetzung in eine Struktur, die später auf dem Halbleiter als Teil der Produktion des Mikroprozessors hergestellt wird.[10]

In dieser finalen Entwicklungsphase waren Bill Mensch und Ray Hirt für den Schaltkreisentwurf zuständig, während Harry Bawcom, Sydney Anne Holt und Mike Janes daraus das zweidimensionale Layout des Mikroprozessors auf dem Halbleiter erstellten, indem sie Polygone manuell auf Mylarfolien zeichneten. Die Einhaltung der Fertigungsregeln zur Vermeidung von Fehlfunktionen wurde durch eine wochenlange Präzisionsarbeit sichergestellt, indem die Abstände der Polygone zueinander überprüft wurden. Schlussendlich wurde das Layout durch eine Digitalisierung in einzelne Ebenen zerlegt, um die Fotomasken für die Halbleiterfertigung herzustellen. Im Juni 1975 war der Entwurf abgeschlossen.[11][12][13]

Markteinführung

[Bearbeiten | Quelltext bearbeiten]

Im September 1975 stellte MOS Technology den 6502 auf der Fachmesse Western Electronic Show and Convention (Wescon) in San Francisco vor. Da die Messeleitung den Direktverkauf vor Ort untersagte, mietete das Team um Chuck Peddle eine Suite im nahegelegenen St. Francis Hotel an. Um die sofortige Lieferfähigkeit zu demonstrieren, bot das Unternehmen den 6502 dort in einer großen Glasvase zum Kauf an. Flankiert wurde die Offerte von zwei Handbüchern zur Systemintegration und Programmierung, die in Fachkreisen später aufgrund ihrer Verständlichkeit gelobt wurden. Zusätzliche Bausteine mit Speicher und Ein-/Ausgabe-Schnittstellen sowie Entwicklungssysteme wie der KIM-1 rundeten das Angebot ab, um das Interesse der Entwickler zu wecken.[14]

Um den Markt zu durchdringen, verfolgte MOS Technology eine aggressive Preisstrategie: Während Konkurrenzprodukte wie der Motorola 6800 oder der Intel 8080 rund 300 US-Dollar kosteten, wurde der 6502 für 25 US-Dollar (und der 6501 für 20 US-Dollar) angeboten. Dieser Preissturz machte Mikroprozessoren erstmals für Privatanwender sowie kleine Unternehmen – darunter das von Steve Wozniak und Steve Jobs mitgegründete Apple Computer – erschwinglich und hatte einen erheblichen Einfluss auf die Computerindustrie. Damit schuf der MOS 6502 die ökonomische Basis für die aufkommende Spielkonsolen- und Heimcomputer-Ära, da er leistungsfähige Hardware für Massenmarkt-Produkte wie das Atari 2600 (in Form des preisgünstigeren 6507) und den Commodore VC 20 möglich machte.[14]

Programmiermodell

[Bearbeiten | Quelltext bearbeiten]

Der Entwurf des MOS 6502 als 8-Bit-Mikroprozessor war maßgeblich von dem Ziel geprägt, die Produktionskosten durch eine minimale Chipfläche gering zu halten und so die Ausbeute funktionierender Chips zu maximieren. Trotz dieses reduzierten Ansatzes wies Chuck Peddle bei der Markteinführung darauf hin, dass der 6502 durch seine effiziente interne Logik Geschwindigkeitsvorteile gegenüber Konkurrenzmodellen besitze.[15]

Registerstruktur

[Bearbeiten | Quelltext bearbeiten]

Die Architektur des 6502 verfügt über eine bewusst minimalistische Ausstattung mit spezialisierten Registern. Da der Chip im Vergleich zu zeitgenössischen Mikroprozessoren weniger interne Register besitzt, ist er stärker auf Speicherzugriffe angewiesen (memory-bound).[15] Um diesen Flaschenhals auszugleichen, sieht das Design einen Bereich im Hauptspeicher (Zero Page) vor, auf den besonders effizient zugegriffen werden kann.[16]

Die Registerstruktur im Einzelnen
Register Funktion
Akkumulator (A) Das zentrale 8-Bit-Register für alle arithmetischen und logischen Operationen.[17]
Indexregister (X und Y) Zwei 8-Bit-Register, die für indizierte Adressierungsmodi, als Zähler oder als Zwischenspeicher eingesetzt werden können.[18]
Programmzähler (PC) Ein 16-Bit-Register, das den Zugriff auf einen Adressraum von bis zu 64 KB ermöglicht.[19]
Stapelzeiger (S) Ein 8-Bit-Register, das den Stack innerhalb der Speicherseite eins ($0100 bis $01FF) adressiert. Da das High-Byte fest auf $01 verdrahtet ist, ist der Stapelspeicher auf 256 Byte begrenzt.[20]
Statusregister (P) Enthält 7 aktive Flags (Negative (N), Overflow (V), Break (B), Decimal (D), Interrupt Disable (I), Zero (Z), Carry (C)), die den Zustand der CPU anzeigen und so auch den Ablauf von bedingten Sprüngen steuern.[21]

Adressraum und Speicherorganisation

[Bearbeiten | Quelltext bearbeiten]

Für den Datentransfer mit externen Bausteinen verfügt der 6502 über einen Adressraum von 64 KB, in dem ein 16-Bit-Adressbus und ein 8-Bit-Datenbus einzelne Speicherstellen ansprechen. Da sich Programmbefehle und Daten diesen Adressraum teilen, besitzt die CPU eine Von-Neumann-Architektur.[22] Die Belegung des Adressraums ist mit den nachfolgenden Ressourcen nahezu beliebig gestaltbar.[23]

Externe Ressourcen
Ressource Funktion
Festwertspeicher (ROM) Zur dauerhaften Ablage von Firmware, Betriebssystemen oder fest installierten Programmen.
Arbeitsspeicher (RAM) Für die Speicherung von Variablen, temporären Programmdaten und Rechenergebnissen.
I/O-Register externer Bausteine Zur Steuerung externer Funktionen über Memory-Mapped-I/O.

Einige Bereiche des Adressraums sind durch die CPU-Architektur fest vorgegeben: Die Speicherseite null ($0000 bis $00FF) ist für die effiziente Zero-Page-Adressierung vorgesehen, während die Seite eins ($0100 bis $01FF) als Stapelspeicher (Stack) dient.[24][20] Am oberen Ende des Adressraums befinden sich die Interrupt-Vektoren ($FFFA bis $FFFF). In diesen fest reservierten Speicherplätzen sind die Startadressen der Befehlsfolgen für die Verarbeitung wichtiger Systemereignisse im Little-Endian-Format hinterlegt.[25]

Interrupt‑Vektoren
Unterbrechungstyp Speicherort Verwendung
Nicht maskierbarer Interrupt (NMI) $FFFA–$FFFB Verweist auf die Programmstelle zur sofortigen Verarbeitung kritischer externer Signale, die softwareseitig nicht ignoriert werden können.
Reset (RES) $FFFC–$FFFD Teilt der CPU beim Einschalten oder nach einem Neustart mit, an welcher Speicheradresse die Programmausführung beginnt.
Interrupt-Anforderung (IRQ) und BRK-Befehl $FFFE–$FFFF Enthält die Einsprungadresse für Standard-Interrupts sowie für den Software-Interrupt-Befehl BRK. Die Verarbeitung von IRQs kann über ein Status-Flag deaktiviert werden.

Die Steuerung des 6502 basiert auf einer fest verdrahteten Logik, die 56 offizielle Befehle bereitstellt. Diese lassen sich funktional in verschiedene Gruppen unterteilen:

Arithmetische und logische Operationen: Die CPU unterstützt grundlegende 8-Bit-Operationen wie Addition (ADC) und Subtraktion (SBC) sowie bitweise logische Verknüpfungen (AND, ORA, EOR). Ein besonderes Merkmal ist die Fähigkeit, über das Decimal-Flag Berechnungen im binär codierten Dezimalformat (BCD) durchzuführen.

Speicherzugriff und Datenmanipulation: Befehle wie LDA, LDX und LDY dienen dem Laden von Werten in die Register, während STA, STX und STY die Registerwerte im Speicher ablegen. Zudem stehen Befehle für Inkrementierung, Dekrementierung sowie für Verschiebungen um ein Bit (ASL, LSR) und Rotationen um ein Bit (ROL, ROR) zur Verfügung.

Ablaufsteuerung: Die Befehlsfolgen werden durch unbedingte Sprünge (JMP), Unterprogrammaufrufe (JSR) und deren Rücksprünge (RTS) gesteuert. In Kombination mit bedingten Verzweigungen (Branches), die auf den Status-Flags basieren (wie BEQ für „Branch if Equal“), lassen sich so einschlägige Kontrollstrukturen realisieren.

Spezialbefehle und Systemsteuerung: Hierzu zählen Befehle zur Manipulation der Status-Flags (beispielsweise SEI zum Sperren von Interrupts, CLC zum Löschen des Carry-Flags) sowie Instruktionen für den Software-Interrupt (BRK) oder das Ende einer Interrupt-Service-Routine (RTI).[26]

Adressierungsarten

[Bearbeiten | Quelltext bearbeiten]

Unabhängig von der Art des Befehls legen die Adressierungsarten fest, wie die zu verarbeitenden Operanden ermittelt werden. Dabei ist zu beachten, dass nicht jeder Befehl jede Adressierungsart unterstützt. Besonders hervorzuheben sind folgende Varianten:

Unmittelbare Adressierung (Immediate): Hierbei folgt der Operand im Speicher unmittelbar auf den Befehl.

Zero-Page-Adressierung: Diese ermöglicht einen schnellen Zugriff auf die ersten 256 Byte des Speichers ($0000 bis $00FF). Da für die Adressierung lediglich ein Byte benötigt wird, sind diese Operationen kürzer und beanspruchen weniger Taktzyklen.

Indizierte Adressierung: Sie erlaubt den Zugriff auf Speicherbereiche, indem der Wert eines Indexregisters (X oder Y) zu einer Basisadresse addiert wird. Dies ist eine Grundvoraussetzung für die effiziente Verarbeitung von Tabellen oder Arrays.

Bei der indirekten Adressierung verweist die im Befehl angegebene Adresse auf einen Zeiger in der Zero-Page. In Kombination mit den Indexregistern ergeben sich dann zwei spezialisierte Verfahren:

Nachindiziert (mit Y): Der Prozessor liest eine Adresse aus der Zero-Page und addiert danach den Wert des Y-Registers hinzu (beispielsweise LDA ($24),Y). Dies wird genutzt, um über einen festen Zeiger auf Arrays oder Datenstrukturen zuzugreifen, die an beliebiger Stelle im Speicher liegen können.

Vorindiziert (mit X): Das X-Register wird bereits innerhalb der Zero-Page zur Adresse addiert, um einen von mehreren dort hinterlegten Zeigern auszuwählen (beispielsweise LDA ($24,X)). Dieses Verfahren ist ideal für den Zugriff mittels Tabellen von Zeigern, wie es beispielsweise bei der Verarbeitung paralleler Datenströme oder bei Sprungtabellen vorkommt.[27]

Die folgende Auswahl zeigt einige der 56 Befehle des 6502 und verdeutlicht das Zusammenspiel zwischen Operationscodes, Befehlskürzeln der Assemblersprache (Mnemonics) und Adressierungsarten.[28]

Opcode Mnemonic Adressierung Funktion
$A9 LDA #$FF unmittelbar Lädt („LoaD“) den Akkumulator direkt mit dem Wert $FF (255 dezimal).
$AD LDA $C000 absolut Lädt den Akkumulator mit dem Inhalt der Adresse $C000.
$A1 LDA ($24,X) indiziert indirekt Lädt den Akkumulator über einen Zeiger in der Zero Page (indiziert mit X).
$8D STA $C000 absolut Speichert („STore“) den Inhalt des Akkumulators (ein Byte) an der Adresse $C000.
$6D ADC $C001 absolut Addiert („ADd with Carry-Flag“) den Inhalt von $C001 zum Akkumulator (plus eins, falls das Carry-Flag gesetzt ist).
$C9 CMP #$7F unmittelbar Vergleicht („CoMPare“) den Akkumulator mit dem Wert $7F und setzt die Statusflags.
$F0 BEQ $FC00 relativ („Branch if result is EQual“) Verzweigt zur Adresse $FC00, wenn das Zero-Flag gesetzt ist (Ergebnis gleich).
$E8 INX implizit („INcrement X“) Erhöht den Inhalt des X-Registers um eins.
$20 JSR $FC00 absolut („Jump to SubRoutine“) Springt zum Unterprogramm bei $FC00 und legt die Rücksprungadresse auf den Stack.
$60 RTS implizit („ReTurn from Subroutine“) Kehrt aus einem Unterprogramm zurück (nimmt die Rücksprungadresse vom Stack).
$00 BRK implizit („BReaK“) Erzwingt einen Software-Interrupt und rettet den Programmzähler und das Statusregister auf dem Stack.
$EA NOP implizit („No OPeration“) Keine Operation; dient als Platzhalter oder zur Zeitverzögerung.

Beispielprogramm

[Bearbeiten | Quelltext bearbeiten]

Die Programmierung des MOS 6502 lässt sich anhand eines Assembler-Programms verdeutlichen, das das Maximum einer Folge vorzeichenloser Zahlen ermittelt. Das folgende Beispiel zeigt typische Merkmale wie die Verwendung von Registern (A, X), den Einsatz eines Vergleichs mit anschließender bedingter Verzweigung sowie die Nutzung einer indizierten Adressierungsart.

Das Programm beginnt an der Adresse findmax ($0200). Es setzt voraus, dass die Länge der Zahlenfolge (1 bis 255) an der Adresse len ($0041) hinterlegt ist und die einzelnen Folgenglieder unmittelbar darauf folgen. Das ermittelte Maximum wird nach Abschluss der Berechnung an der Adresse max ($0040) gespeichert. Die gewählten Adressen und Datenwerte sind beispielhaft.

In der nachstehenden Tabelle zeigt die linke Spalte die Speicheradressen gefolgt vom Maschinencode in Hexadezimaldarstellung. Die rechte Spalte enthält den dazugehörigen Quelltext in der für den 6502 üblichen Assemblersprache.[29]

0040
 
0040  00
0041  03
0042  D5
0043  1C
0044  39
 
0200
 
0200  A6 41
0202  A9 00
0204  D5 41
0206  B0 02
 
0208  B5 41
020A  CA
020B  D0 F7
 
020D  85 40
        ORG $40

max     DS 1            ; Speicherplatz für Maximum
len     DC 3            ; Länge der Zahlenfolge
        DC 213          ; 1. Folgenglied
        DC 28           ; 2. Folgenglied
        DC 57           ; 3. Folgenglied

        ORG $0200       ; Startadresse des Programmcodes

findmax LDX len         ; X-Register (X) mit Folgenlänge laden
        LDA #0          ; Akkumulator (A) auf null (kleinster Wert) setzen
next    CMP len,X       ; A mit aktuellem Folgenglied vergleichen
        BCS notmax      ; verzweige an die Stelle notmax, falls Folgenglied <= A

        LDA len,X       ; A mit aktuellem Folgenglied laden, ist neues Maximum
notmax  DEX             ; X um eins vermindern
        BNE next        ; verzweige an die Stelle next, falls X > 0

        STA max         ; speichere gefundenes Maximum an der Adresse max

Die folgende Matrix bietet eine Übersicht über den dokumentierten Befehlssatz des 6502-Prozessors. Sie ordnet jedem der 151 offiziellen Opcodes seinen Befehl und Adressierungsart zu.[28]

Alle dokumentierten Opcodes des 6502
Adressierungsarten:  A  (Akkumulator / implizit),  #  (unmittelbar),  zpg  (Zero-Page),  abs  (absolut),  ind  (indirekt: mit X vorindiziert; mit Y nachindiziert),  rel  (relativ)
Höherwertiges Nibble Niederwertiges Nibble
0 1 2 4 5 6 8 9 A C D E
0 BRK ORA (ind,X) ORA zpg ASL zpg PHP ORA # ASL A ORA abs ASL abs
1 BPL rel ORA (ind),Y ORA zpg,X ASL zpg,X CLC ORA abs,Y ORA abs,X ASL abs,X
2 JSR abs AND (ind,X) BIT zpg AND zpg ROL zpg PLP AND # ROL A BIT abs AND abs ROL abs
3 BMI rel AND (ind),Y AND zpg,X ROL zpg,X SEC AND abs,Y AND abs,X ROL abs,X
4 RTI EOR (ind,X) EOR zpg LSR zpg PHA EOR # LSR A JMP abs EOR abs LSR abs
5 BVC rel EOR (ind),Y EOR zpg,X LSR zpg,X CLI EOR abs,Y EOR abs,X LSR abs,X
6 RTS ADC (ind,X) ADC zpg ROR zpg PLA ADC # ROR A JMP (ind) ADC abs ROR abs
7 BVS rel ADC (ind),Y ADC zpg,X ROR zpg,X SEI ADC abs,Y ADC abs,X ROR abs,X
8 STA (ind,X) STY zpg STA zpg STX zpg DEY TXA STY abs STA abs STX abs
9 BCC rel STA (ind),Y STY zpg,X STA zpg,X STX zpg,Y TYA STA abs,Y TXS STA abs,X
A LDY # LDA (ind,X) LDX # LDY zpg LDA zpg LDX zpg TAY LDA # TAX LDY abs LDA abs LDX abs
B BCS rel LDA (ind),Y LDY zpg,X LDA zpg,X LDX zpg,Y CLV LDA abs,Y TSX LDY abs,X LDA abs,X LDX abs,Y
C CPY # CMP (ind,X) CPY zpg CMP zpg DEC zpg INY CMP # DEX CPY abs CMP abs DEC abs
D BNE rel CMP (ind),Y CMP zpg,X DEC zpg,X CLD CMP abs,Y CMP abs,X DEC abs,X
E CPX # SBC (ind,X) CPX zpg SBC zpg INC zpg INX SBC # NOP CPX abs SBC abs INC abs
F BEQ rel SBC (ind),Y SBC zpg,X INC zpg,X SED SBC abs,Y SBC abs,X INC abs,X
Fehlende Opcodes (z. B. 02) und alle Opcodes mit den niederwertigen Nibbles 3, 7, B und F sind nicht Bestandteil des 6502-Befehlssatzes.

Systemarchitektur

[Bearbeiten | Quelltext bearbeiten]

Die hardwareseitige Realisierung des Programmiermodells im MOS 6502 basiert auf einer Architektur, die für ihre Zeit mehrere innovative Ansätze vereinte:

Integrierter Taktgenerator: Im Vergleich zu zeitgenössischen Mikroprozessoren enthält der 6502 einen internen Taktgenerator. Dieser benötigt lediglich ein einfaches externes Taktsignal und generiert daraus selbstständig zwei phasenverschobene, nicht überlappende Taktsignale für die Steuerung der internen Schaltkreise.[30]

Pipeline-Architektur: Das Design nutzt eine Pipeline-Architektur, die auf der Trennung von internen und externen (beobachtbaren) Operationen beruht. Da der 6502 während jeder Taktphase gleichzeitig einen Speicherzugriff (externe Operation) und eine interne Operation durchführt, kann er beispielsweise bereits das erste Byte des nächsten Befehls laden, während der vorangegangene Befehl noch intern abgearbeitet wird.[31]

PLA-Steuerung: Die CPU verwendet anstelle von Mikrocode ein Programmable Logic Array (PLA). Dessen 130 Ausgangssignale übernehmen in Abhängigkeit vom geladenen Opcode und dem internen Taktzähler die erste Stufe der Ablaufsteuerung. Eine nachgeschaltete Random Control Logic wertet diese Signale aus und erzeugt die spezifischen Steuersignale für die Datenpfade des Prozessors.[32]

Bussteuerung und Speicherzugriff

[Bearbeiten | Quelltext bearbeiten]

Im regulären Betrieb führt der 6502 in jedem Taktzyklus einen Speicherzugriff durch, bei dem ein Byte gelesen oder geschrieben wird. Um jedoch langsame Speicher- oder Peripheriebausteine zu unterstützen, kann der Lesezugriff der CPU verzögert werden, ohne deren Taktfrequenz zu verringern. Hierzu wird der RDY-Pin (Ready) der CPU taktsynchron durch den adressierten Baustein auf einen niedrigen Pegel gesetzt. In diesem Fall wird der interne Zustand des 6502 „eingefroren“ und die Ausführung der aktuellen Mikroinstruktion unterbrochen. Sobald der adressierte Baustein das Datenbyte am Bus bereitstellt, setzt er das RDY-Signal wieder auf einen hohen Pegel. Daraufhin schließt die CPU den Lesevorgang ab und stellt die laufende Mikroinstruktion fertig. Bei einem Schreibzugriff wird das RDY-Signal von der CPU hingegen ignoriert.[33]

Über das RDY-Signal kann der 6502 insbesondere für einen DMA-Zugriff (Direct Memory Access) angehalten werden, wobei der Wartezustand erst mit dem nächsten Lesezugriff eintritt. Da der 6502 im Gegensatz zum Datenbus den Adressbus und die Lese-/Schreibleitung permanent ansteuert, müssen externe Bausteine wie Multiplexer oder Puffer eingesetzt werden, um diese Signalleitungen für einen DMA-Controller freizugeben. Bei dem später entwickelten 6510 kann diese Trennung hingegen direkt über dessen AEC-Pin (Address Enable Control) erfolgen.[34]

Neben dem RDY-Signal kommen weitere Methoden zum Einsatz, um einen DMA unter Berücksichtigung des Speicherzugriffs des 6502 durchzuführen:

Transparenter DMA: Sofern es die Zugriffszeit des Speichers zulässt, kann ein DMA während der ersten Hälfte des Taktzyklus stattfinden, da der 6502 erst während der zweiten Hälfte eine Datenübertragung durchführt. Dieses Verfahren wird beispielsweise vom Videochip VIC II im Commodore 64 angewendet.[35]

Anhalten des Taktsignals: Das Signal am Takteingang des 6502 kann auf einem niedrigen Pegel gehalten werden, um den internen Zustand einzufrieren. Da sich jedoch der interne Speicher des 6502 mit der Zeit entlädt, kann dieser Zustand nur zeitlich begrenzt aufrechterhalten werden.[36] Diese Methode wird etwa vom ANTIC-Chip in den Atari-8-Bit-Heimcomputern verwendet.[37]

MOS-6502-Register
15 14 13 12 11 10 09 08 07 06 05 04 03 02 01 00 (Bitposition)
Hauptregister
A Accumulator
Indexregister
X X Index
Y Y Index
0 0 0 0 0 0 0 1 S Stack Pointer
Programmzähler
PC Program Counter
Statusregister
N V - B D I Z C Processor Flags

Als Cross-Compiler für die Programmiersprache C kann für den 6502 cc65 eingesetzt werden.[38] Alternativ dazu kann mit dem 6502 eine einfache virtuelle CPU emuliert werden, womit dann sein Befehlssatz als Mikrocode behandelt wird.[39]

Der Zustand des Break-Flags kann nur auf dem Stapel nach einem BRK-Befehl[40] ausgelesen werden.[41] Es hat keine eigenen Setz- und Testbefehle und wird auch von den Befehlen PLP, RTI und PHP nicht berücksichtigt, wobei PHP das Break-Flag auf dem Stapel als Teil des Prozessorstatus immer mit dem Wert eins angibt.[42] Die CPU setzt bei einem erkannten NMI oder IRQ (sofern der IRQ über das Interrupt-Flag zugelassen ist) das Break-Flag auf null. Hierdurch wird als nächster Befehl ein BRK-Befehl ausgeführt (wenn nicht gerade schon ein BRK-Befehl ausgeführt wird) und somit nicht der gemäß dem Programmzähler nächste Befehl. Ein BRK-Befehl, der aufgrund eines IRQ oder Opcodes ausgeführt wird, verwendet denselben Interruptvektor. Anhand des Break-Flags lassen sich in diesem Fall dennoch die beiden Ursachen im Interrupt-Handler unterscheiden.[43] Am Ende des BRK-Befehls hat das Break-Flag stets den Wert eins.

Undokumentierte Opcodes

[Bearbeiten | Quelltext bearbeiten]

Der 6502 ist bekannt für eine ganze Reihe von Befehlen, die nicht in der offiziellen Dokumentation stehen, aber dennoch existieren und funktionieren. Umgangssprachlich nannte man solche Befehle illegale Opcodes. Nur 151 der prinzipiell 256 möglichen Opcodes sind reguläre Befehle. Aber auch unter den verbleibenden 105 nicht dokumentierten Codes gibt es etliche, die Funktionen haben, darunter durchaus nützliche. Einige Assembler unterstützen solche Befehle, es gibt jedoch keine einheitliche Vorschrift für ihre Benennung mit Mnemonics.

Mit vielen undokumentierten Opcodes lässt sich die Datenverarbeitung beschleunigen, da sie in wenigen Taktzyklen Funktionen erledigen, die sonst nur mit mehreren aufeinanderfolgenden Befehlen möglich sind, was insgesamt erheblich mehr Taktzyklen verbraucht. Dies birgt allerdings das Risiko, dass solche Befehle nicht auf allen produzierten CPUs gleichermaßen funktionieren oder ein mögliches Nachfolgemodell diese Befehle gar nicht beherrscht oder andere Funktionen ausführt, wodurch das Programm nicht mehr lauffähig wäre.

Wie bei den meisten regulären Befehlen gibt es auch für viele der undokumentierten Funktionen unterschiedliche Adressierungsarten und demzufolge auch unterschiedliche Opcodes. In der nachstehenden Tabelle werden – sofern nichts anderes angegeben ist – beispielhaft Opcodes für die Adressierungsart „absolut“ aufgeführt, die beiden auf den Opcode folgenden Bytes werden also als eine absolute Adresse interpretiert. Die Mnemonics sind inoffiziell.[44][45]

Opcode Mnemonic Funktion
$02 HLT („HaLT“) Ein-Byte-Befehl, hält den Prozessor an. Führt faktisch zum Absturz, der nur durch einen Reset zu beheben ist.
$0B ANC #n („AND #n, N-Flag → C-Flag“) Adressierungsart „immediate“. Führt eine UND-Verknüpfung des Akkumulators mit n durch, speichert das Ergebnis im Akkumulator und übernimmt danach den Wert des Negative-Flags (der mit dem Wert des siebten Bits des Akkumulators übereinstimmt) als neuen Wert für das Carry-Flag.
$0C SKW („SKip next Word“) Befehl ohne Funktion, erhöht den Programmzähler um drei und wird zum Überspringen der unmittelbar auf den Opcode folgenden zwei Bytes benutzt.
$0F ASO $C000 („ASL, ORA“) Führt den Befehl ASL mit dem Speicherinhalt an der Adresse C00016 aus, anschließend wird eine ODER-Verknüpfung des Akkumulators mit dem neuen Speicherinhalt durchgeführt und das Ergebnis im Akkumulator gespeichert.
$2F RLA $C001 („ROL, AND“) Führt den Befehl ROL mit dem Speicherinhalt an der Adresse C00116 aus, anschließend wird eine UND-Verknüpfung des Akkumulators mit dem neuen Speicherinhalt durchgeführt und das Ergebnis im Akkumulator gespeichert.
$4F LSE $C002 („LSR, EOR“) Führt den Befehl LSR mit dem Speicherinhalt an der Adresse C00216 aus, anschließend wird eine EXKLUSIV-ODER-Verknüpfung des Akkumulators mit dem neuen Speicherinhalt durchgeführt und das Ergebnis im Akkumulator gespeichert.
$6F RRA $C003 („ROR, ADC“) Führt den Befehl ROR mit dem Speicherinhalt an der Adresse C00316 aus, anschließend wird der neue Speicherinhalt zum Akkumulator addiert (plus eins, falls das Carry-Flag gesetzt ist).
$8B XAA #n („TXA, AND #n“) Adressierungsart „immediate“. Transferiert den Inhalt des Registers X in den Akkumulator, führt danach eine UND-Verknüpfung des Akkumulators mit n aus und speichert das Ergebnis im Akkumulator.
$8F SAX $C004 („Store (A & X)“) Soll den Inhalt des Akkumulators und des Registers X gleichzeitig an die Speicheradresse C00416 schreiben. Dadurch, dass beide Registerinhalte gleichzeitig am internen Datenbus anliegen, ergibt sich eine UND-Verknüpfung der beiden Registerinhalte, deren Ergebnis an der Adresse C00416 gespeichert wird.
$AF LAX $C005 („LDA, LDX“) Lädt den Speicherinhalt an der Adresse C00516 in den Akkumulator sowie in das Register X. Einige Adressierungsarten von LAX können instabil sein, der Befehl also zu unvorhersehbaren Seiteneffekten führen.
$CF DCM $C006 („DEC, CMP“) Verringert den Wert an der Speicheradresse C00616 um eins und vergleicht anschließend den neuen Speicherinhalt mit dem Inhalt des Akkumulators.
$EF INS $C007 („INC, SBC“) Erhöht den Wert an der Speicheradresse C00716 um eins und subtrahiert anschließend den neuen Speicherinhalt vom Inhalt des Akkumulators (zusätzlich um eins, falls das Carry-Flag den Wert null besitzt).

Taktvarianten des MOS 6502

[Bearbeiten | Quelltext bearbeiten]

Der Prozessor existiert in vier Varianten mit jeweils unterschiedlicher Taktfrequenz:[46]

  • ≈1 MHz: MOS 6502
MOS 6502 im Keramikgehäuse (MCS6502)

Varianten anderer Hersteller (Second Source und unlizenziert)

[Bearbeiten | Quelltext bearbeiten]
Rockwell R6502ACE
  • Rockwell[47]
    • R6502P (1 MHz)
    • R6502AP (2 MHz)
    • R6502ACE (2 MHz, Keramikgehäuse, erweiterter Temperaturbereich für industrielle Verwendung)
  • UMC[48]
    • UM6502 (1 MHz)
    • UM6502A (2 MHz)
  • Synertek[49]
    • SYP6502 (1 MHz)
    • SYP6502A (2 MHz)
  • KMT-Prawez
    • SM630 (CM630) (bulgarischer Klon des 6502)

Abgeleitete Designs

[Bearbeiten | Quelltext bearbeiten]
Ricoh RP2A03, eingesetzt in der NES-Spielkonsole
  • Ricoh RP2A03[50]
    • Von Ricoh für Nintendo produziert
    • Eingesetzt in der NES-Spielkonsole (NTSC-Version)
    • Deaktivierte BCD-Arithmetik[51]
    • 1,79 MHz CPU-Taktfrequenz
  • Ricoh RP2A07[50]
    • PAL-Version des RP2A03
    • Geänderter Frequenzteiler und an PAL angepasster Farbträger
    • Eingesetzt in europäischen und australischen Versionen der NES-Spielkonsole
    • 1,66 MHz CPU-Taktfrequenz
  • YAMAHA YM-2002
    • Eingesetzt in der YAMAHA CENTRAL PROCESSING UNIT PU-1-10 bzw. PU-1-20 als Bestandteil des YIS (YAMAHA Integrated System)[52]
  • NCR 81489; UMC UA6588F[53]
    • Mikrocontroller mit 6502-Kern, I/O-Ports, LCD-Controller, Timer, serieller Schnittstelle und ROM[54]
    • Eingesetzt in der Handheld-Spielkonsole Gamate von Bit Corporation
    • 2,2 MHz CPU-Taktfrequenz
  • Renesas 38000
Mitsubishi M50747 und M50734 Mikrocontroller, basierend auf dem W65C02S
  • Renesas 740
    • Mikrocontrollerfamilie von Renesas Technology (vormals Mitsubishi Electric)
    • Basierend auf dem WDC W65C02S
    • Bis zu 60 KB ROM/PROM/Flash integriert
    • Bis zu 2 KB RAM integriert
    • Bis zu 8 MHz interne Taktfrequenz[55]
    • Zusätzliche Befehle im Vergleich zum 6502, u. a.[56]
      • Multiplikation
      • Division
      • Befehle zum Setzen einzelner Bits
      • Befehle zum direkten Setzen eines Bytes im Speicher
      • Unbedingter relativer Sprung
      • Berechnung des Einerkomplements
      • Befehle zum Stoppen der CPU
    • Zusätzliche Adressierungsarten im Vergleich zum 6502
      • Special Page: Sprungziel liegt in der Page FF16
      • Accumulator Bit: Auswahl eines Bits im Akkumulator
      • Zero Page Bit: Auswahl eines Bits in der Page null
      • Accumulator Bit Relative: bedingter Sprung basierend auf einem Bitwert im Akkumulator
      • Zero Page Bit Relative: bedingter Sprung basierend auf einem Bitwert in der Page null
  • SUNPLUS CPU6502[57]
    • Mikrocontrollerfamilie von Sunplus Technology mit CPU6502-Kern
    • Verwendet die 6502-Opcodes oder alternativ abweichende Sunplus-Opcodes
    • Kein BRK-Befehl und kein Break-Flag im Vergleich zum 6502
    • Bei einigen Mikrocontrollern eingeschränkter Befehlssatz und abweichende Anzahl an Taktzyklen pro Befehl im Vergleich zum 6502
    • Eingesetzt z. B. im Taschenrechner HP 35s
Mikrocontroller HuC6280, eingesetzt in der Spielkonsole PC Engine bzw. TurboGrafx-16
  • Hudson Soft HuC6280[58]
    • CMOS-Mikrocontroller
    • Entwickelt von Hudson Soft und NEC auf Basis des R65C02-Befehlssatzes
    • Zusätzliche Befehle zum Nullsetzen und Tauschen der Inhalte des A-, X- und Y-Registers
    • Zusätzliche Befehle zum Kopieren des Inhalts von Speicherbereichen[59]
    • 8 Mapping-Register, um 64 K logische Adressen in einen 2-MB-Adressraum physikalischer Adressen einzubetten[60]
    • Enthält zudem 7-Bit-Timer, 8-Bit-Eingabeport, 8-Bit-Ausgabeport sowie einen programmierbaren Klanggenerator mit sechs Kanälen
    • Bis zu 21,48 MHz Taktfrequenz
    • Eingesetzt in NECs PC Engine aka TurboGrafx-16 mit bis zu 7,16 MHz Taktfrequenz[61]
  • Atari C014377
    • Atari-eigene Bezeichnung für einen unmodifizierten MOS 6502[62]
    • Gelegentlich in der Atari-Literatur als „6502B“ bezeichnet[63]
    • Eingesetzt in den 8-Bit-Homecomputern Atari 400 und Atari 800 mit 1,77 MHz Taktfrequenz (PAL-Version) bzw. 1,79 MHz Taktfrequenz (NTSC-Version)
  • Atari C014806 („SALLY“)
    • Atari-eigene Bezeichnung für einen erweiterten MOS 6502,[64] der zusätzlich die Logik-Chips der ältesten CPU-Karte des Atari 400 und Atari 800 zum Stoppen des Taktsignals und zum Trennen der CPU vom Adressbus und der Lese-/Schreibleitung enthält
    • Gelegentlich in der Atari-Literatur als „6502C“ bezeichnet[65]
    • HALT-Signal-Eingang an Pin 35[66]
    • Bis zu 1,77 MHz Taktfrequenz (PAL-Version) bzw. 1,79 MHz Taktfrequenz (NTSC-Version)
    • Eingesetzt in Ataris 8-Bit-Homecomputerserien XL und XE sowie in den Spielkonsolen Atari 5200 und Atari 7800
WDC W65C02S, eine erweiterte CMOS-Version des MOS 6502
  • WDC W65C02S; Rockwell R65C02, R65C102, R65C112; GTE/CMD G65SC02, G65SC102, G65SC112[67][68][69][70]
    • Entwickelt von Western Design Center (WDC)
    • CMOS-Mikroprozessoren, kompatibel mit MCS6502
    • Alle Mikroprozessoren weisen im Vergleich zum MCS6502 zusätzlich die Befehle BRA, PHX, PHY, PLX, PLY, STZ, TRB, TSB auf
    • Bei den Mikroprozessoren der R65C00-Familie und dem WDC W65C02S kommen noch die Befehle BBR, BBS, RMB, SMB hinzu
    • Allein der W65C02S besitzt darüber hinaus die beiden Befehle WAI und STP
    • Zusätzliche Adressierungsmodi (indirekte Adressierung in der Page null; indirekte indizierte Adressierung beim JMP-Befehl)
    • Keine illegalen Opcodes (jeder illegale Opcode gleicht in seiner Wirkung einem oder mehreren aufeinander folgenden NOP-Befehlen)
    • Gültiges N-, V- und Z-Flag nach einer Addition oder Subtraktion in BCD-Arithmetik
    • Einige Befehle benötigen unter bestimmten Voraussetzungen weniger oder mehr Taktzyklen als beim MCS6502[71]
    • Maximale Taktfrequenz von 14 MHz beim W65C02S (ursprünglich bei allen Versionen 1 bis 4 MHz Taktfrequenz)
    • Das RDY-Signal, wenn es auf einem niedrigen Pegel gehalten wird, hält nun den Mikroprozessor im Vergleich zum MCS6502 auch bei Schreibzugriffen an
    • Die WDC-Variante im Dual in-line package ist nicht pinkompatibel zum MCS6502, lässt sich aber ggf. mit geringen Änderungen auf der Platine dennoch als Ersatz für einen MCS6502 einsetzen
    • R65C102, R65C112, G65SC102 und G65SC112 sind für Multiprozessorbetrieb ausgelegt und zeigen deswegen an ihrem ML-Pin das Abarbeiten eines Read-Modify-Write-Befehls an; damit kann sichergestellt werden, dass ein solcher Befehl unterbrechungsfrei ausgeführt wird
    • R65C102 und G65SC102 können bei Multiprozessorbetrieb das Taktsignal für den R65C112 und den G65SC112 erzeugen
    • In der Vergangenheit hergestellt von GTE, Rockwell, Synertek, NCR, Sanyo und anderen; aktuell gefertigt bei TSMC auf Basis eines 0,6-μm-CMOS-Prozesses (Stand 2023)[71]
    • W65C02S als Prozessorkern eingesetzt im Watara Supervision
    • R65C02 eingesetzt im erweiterten Apple IIe
    • G65SC02 eingesetzt im Apple IIc sowie als Prozessorkern im ersten Atari Lynx mit bis zu 4 MHz Taktfrequenz
    • R65C102 als Coprozessor eingesetzt im BBC Micro[72]
    • G65SC102 eingesetzt im Commodore LCD
  • CSG 65CE02[73]
    • CMOS-Mikroprozessor
    • 1988 entwickelt von der Commodore Semiconductor Group (CSG) basierend auf dem Rockwell R65C02
    • Zusätzliches Basepage-Register, um die Zeropage-Adressierungsarten durch Basepage-Adressierungsarten zu ersetzen
    • Zusätzliches Z-Indexregister, welches anstatt des Y-Indexregisters bei der indirekten indizierten Adressierung verwendet werden kann
    • Wahlweise frei wählbare Page für 8-Bit-Stapelzeiger oder 16-Bit-Stapelzeiger
    • Zusätzliche 16-Bit-RMW-Befehle
    • Relative Sprünge und Unterprogrammaufrufe auch mit 16-Bit-Offset
    • Indirekte indizierte Adressierung, bei der die Summe aus Stapelzeiger und Offset im Programmcode die Zeropage-Adresse der Adressierungsart (Indirect),Y ersetzt
    • 2 bis 10 MHz Taktfrequenz
    • Eingesetzt im Commodore 65 als Prozessorkern im CSG-Mikrocontroller 4510[74] (mit bis zu 3,5 MHz Taktfrequenz)[75] und in der Commodore A2232 Multiport Serial Card (mit bis zu 3,5 MHz Taktfrequenz)[76]
MOS 6501 im Keramikgehäuse (MCS6501)
  • MOS 6501
    • Gehäuse- und signalkompatibel (nicht softwarekompatibel) zum Motorola 6800 (ohne den – oben erwähnten – internen Taktgenerator des 6502). Musste nach einer Patentverletzungsklage Motorolas im März 1976 eingestellt werden.[77][78]
  • MOS 6503, 6505, 6506, 6513, 6515; Rockwell R6503, R6505, R6506, R6513, R6515; Synertek SY6503, SY6505, SY6506, SY6513, SY6515[79][47][49]
    • Mikroprozessoren mit 12-Bit-Adressbus (4 KB)
  • MOS 6504, 6507; Rockwell R6504, R6507; Synertek SY6504, SY6507; UMC UM6507[79][47][49][48]
    • Mikroprozessoren mit 13-Bit-Adressbus (8 KB)
    • 6504 eingesetzt z. B. im Commodore-Nadeldrucker MPS-802 und im Commodore-Schachcomputer Chessmate
    • 6507 eingesetzt z. B. im Atari 2600 mit 1,19 MHz-Taktfrequenz und im Atari-Diskettenlaufwerk 1050[80]
  • MOS 6509[81]
    • Mikroprozessor mit 20-Bit-Adressbus (1 MB) und mit Unterstützung für Bankswitching
    • Zwei zusätzliche 4-Bit-Register zur Auswahl der Memory Bank. Die Befehle LDA (Indirect),Y und STA (Indirect),Y verwenden während des Zugriffs auf den Speicherinhalt an der effektiven Adresse das Indirect-Register, ansonsten wird stets das Execute-Register verwendet
    • Eingesetzt in den Commodore-PET-II-Modellen (CBM 500, 600 und 700)
  • MOS 6510, 8500 (HMOS-Herstellungsprozess)[82][83]
MOS 6510
    • Mikroprozessor mit der Möglichkeit, seine Adressbustreiber über seinen AEC-Pin hochohmig zu schalten, so dass ein DMA-Controller neben der CPU auf den Speicher zugreifen kann
    • Zusätzlicher interner 8-Bit-I/O-Port, von dem je nach Variante gemäß Datenblatt sechs oder acht Anschlüsse herausgeführt werden
    • Eingesetzt im C64 mit 985 kHz (PAL-Version) bzw. 1,023 MHz (NTSC-Version) Taktfrequenz und mit sechs herausgeführten Anschlüssen des internen I/O-Ports
Teil einer C64-Platine mit Chips von MOS Technology, u. a. einer 6510-CPU.
    • Eingesetzt im Diskettenlaufwerk VC1551 mit 2 MHz Taktfrequenz als 6510T
  • MOS 7501, 8501 (HMOS-Herstellungsprozess)[84]
    • Mikroprozessor mit der Möglichkeit, seine Adressbustreiber über seinen AEC-Pin hochohmig zu schalten, so dass ein DMA-Controller neben der CPU auf den Speicher zugreifen kann
    • Zusätzlicher interner 8-Bit-I/O-Port, von dem sieben Anschlüsse herausgeführt werden
    • Zusätzlicher GATE-IN-Pin, um die Lese-/Schreibleitung hochohmig schalten zu können[85]
    • Maximale Taktfrequenz von 2 MHz
    • Eingesetzt im Commodore 16 und Commodore Plus/4 mit einer Taktfrequenz von bis zu 1,788 MHz
  • MOS 8502 (HMOS-II-Herstellungsprozess)[86]
    • Mikroprozessor mit der Möglichkeit, seine Adressbustreiber über seinen AEC-Pin hochohmig zu schalten, so dass ein DMA-Controller neben der CPU auf den Speicher zugreifen kann
    • Zusätzlicher interner 8-Bit-I/O-Port, von dem sieben Anschlüsse herausgeführt werden
    • Maximale Taktfrequenz von 2,04 MHz
    • Eingesetzt im C128
  • MOS 6500/1; Rockwell R6500/1; CSG 6570, 6571[79][47]
    • Mikrocontroller mit 2 KB ROM, 64 Bytes RAM, vier 8-Bit-I/O-Ports und einem 16-Bit-Zähler
    • 6500/1 eingesetzt z. B. im Plotter Commodore 1520 und in der Tastatur des Amiga 1000[87]
    • 6570, 6571 eingesetzt z. B. in Amiga-Tastaturen[88]
  • Rockwell R6511Q, R6500/13[89]
    • Mikrocontroller mit I/O-Ports, Timern, serieller Schnittstelle und 192-Byte-RAM; R6500/13 optional mit 256-Byte-ROM
    • Zusätzliche Befehle zum Setzen und Testen von Bits
  • Rockwell R65F11, R65F12[90]
    • Varianten des R6511Q mit integriertem Forth-Interpreter (3 KB on-chip ROM, enthält die Routinen für RSC-FORTH)
  • WDC W65C134S[91]
    • CMOS-Mikrocontroller
    • Entwickelt von Western Design Center (WDC)
    • Enthält u. a. einen W65C02S-Prozessorkern, 4 KB ROM mit Speichermonitor-Software, 192 Bytes RAM, vier 16-Bit-Timer, UART, sechs 8-Bit-I/O-Ports und einen 8-Bit-Output-Port
    • Bis zu 8 MHz Taktfrequenz
  • Sitronix ST2205U
    • Mikrocontroller in digitalen Bilderrahmen[92]
  • NOVATEK NT6868A[93]
    • Mikrocontroller für Tastaturanwendungen
  • WDC W65C802
    • 8/16–Bit-CMOS-Mikroprozessor
    • Entwickelt von Western Design Center (WDC)
    • Variante des WDC W65C816S, welche pinkompatibel zum MCS6502 ist, daher wie beim MCS6502 64 K Adressen ansprechbar[94]
    • Zum direkten Austausch des MCS6502 in bereits bestehenden Schaltungen gedacht[95]
    • Bis zu 8 MHz Taktfrequenz[96]
PLCC-44-Version des WDC W65C816S
  • WDC W65C816S[97]
    • 8/16–Bit-CMOS-Mikroprozessor
    • Entwickelt von Western Design Center (WDC)
    • Eingesetzt z. B. im Apple IIgs,[98] Nintendo SNES (als Prozessorkern im Ricoh 5A22) und der Beschleunigungskarte SuperCPU für den C64 und C128
    • 16-Bit-Register und 16-Bit-ALU
    • 16-Bit-Adressbus (24 Adressbits werden innerhalb eines Taktzyklus im Zeitmultiplexing übertragen, so dass 16 MB adressiert werden können)
    • Externer 8-Bit-Datenbus und interner 16-Bit-Datenbus (zur Übertragung eines 16-Bit-Werts über den externen Datenbus sind zwei Taktzyklen notwendig)
    • Emulationsmodus für die Prozessoren der 6500-Familie
    • Bis zu 20 MHz Taktfrequenz
    • Braucht im Vergleich zum 6502 wegen des zusätzlichen Adressbytes für viele Befehle einen Takt länger
  • Ricoh 5A22
    • Mikrocontroller von Ricoh mit W65C816S-Prozessorkern
    • Eingesetzt in der SNES-Spielkonsole
The MOnSter 6502
  • Der fiktive Roboter Bender aus der Zeichentrickserie Futurama hat einen 6502-Prozessor als CPU (Staffel 2, Episode 4 – Die Party mit Slurm McKenzie).[99]
  • Im Spielfilm Terminator (1984) wird aus Sicht des Terminators ein 6502-Assembler-Programm für den Apple II angezeigt. Zudem ist eine Ausgabe des Prüfsummen-Programms Key Perfect (in der Version 4.0), das im Nibble Magazine veröffentlicht wurde, zu sehen.[100]
  • WDC lässt den W65C02S weiterhin produzieren und er kann käuflich erworben werden (Stand 2023).[101]
  • Für den MCS6502-Mikroprozessor wurde eine Simulation seiner Transistor-Ebene in Software[102] bzw. in Hardware auf einer etwa 30,5 cm × 38 cm großen Leiterplatte (The MOnSter 6502)[103] erstellt.[104]
  • Brian Bagnall: Commodore – a company on the edge. ISBN 978-0-9738649-6-0 (englisch).
  • Brian Bagnall: Volkscomputer – Aufstieg und Fall des Computer Pioniers Commodore und die Geburt der PC-Industrie. Hrsg.: Winnie Forster, Boris Kretzinger. Gameplan, Utting am Ammersee 2011, ISBN 978-3-00-023848-2 (amerikanisches Englisch: On the Edge: The Spectacular Rise and Fall of Commodore. Übersetzt von Winnie Forster, Boris Kretzinger).
  • Ekkehard Flögel: Programmieren in Maschinensprache mit dem 6502. ISBN 3-921682-61-4.
  • Lance A. Leventhal: 6502 PROGRAMMIEREN IN ASSEMBLER. ISBN 3-921803-10-1.
  • Rodnay Zaks: Programmierung des 6502. Jetzt auch mit 6510, 65C02, 65SC02. ISBN 3-88745-600-9.
  • David Eyes, Ron Lichty: Programming the 65816 - Including the 6502, 65C02 and 65802. ISBN 0-89303-789-3 (englisch).
Commons: MOS microprocessors – Sammlung von Bildern, Videos und Audiodateien

Einzelnachweise

[Bearbeiten | Quelltext bearbeiten]
  1. Greg James, Barry Silverman, Brian Silverman: Visualizing a Classic CPU in Action: The 6502. (PDF; 5,5 MB) 1. August 2010, abgerufen am 15. März 2021 (englisch): „3510 transistors“
  2. MOS Technology 6502 microprocessor family. Abgerufen am 11. Dezember 2023.
  3. MOS Technology MCS6502. Abgerufen am 11. Dezember 2023.
  4. Brian Bagnall: Commodore. Variant Press (englisch): “With Chuck Peddle and his band of engineers, …”
  5. Brian Bagnall: Commodore: a company on the edge. 2. Auflage. Variant Press, 2011, Kap. 1, Abschnitt 5 (englisch).
  6. Brian Bagnall: Commodore: a company on the edge. 2. Auflage. Variant Press, 2011, Kap. 1, Abschnitt 6 (englisch).
  7. Brian Bagnall: Commodore: a company on the edge. 2. Auflage. Variant Press, 2011, Kap. 1, Abschnitte 6, 7 (englisch).
  8. Terry Holdt. In: Team 6502. Abgerufen am 17. Februar 2026 (englisch).
  9. Brian Bagnall: Commodore: a company on the edge. 2. Auflage. Variant Press, 2011, Kap. 2, Abschnitte 1, 2 (englisch).
  10. Wil Mathys. In: Team 6502. Abgerufen am 18. Februar 2026 (englisch).
  11. Sydney Anne Holt. In: Team 6502. Abgerufen am 19. Februar 2026 (englisch).
  12. Harry Bawcom. In: Team 6502. Abgerufen am 19. Februar 2026 (englisch).
  13. Brian Bagnall: Commodore: a company on the edge. 2. Auflage. Variant Press, 2011, Kap. 2, Abschnitt 5 (englisch).
  14. a b Brian Bagnall: Commodore: a company on the edge. 2. Auflage. Variant Press, 2011, Kap. 3, Abschnitt 1 (englisch).
  15. a b Does The Country Need A Good $20 Microprocessor? In: Electronic Engineering Times. 25. August 1975 (englisch, commodore.ca [PDF; abgerufen am 21. Februar 2026]).
  16. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 61 (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  17. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 6 ff. (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  18. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 78 (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  19. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 32 (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  20. a b MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 107 (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  21. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 23 ff. (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  22. Robert H. Cushman: 2-1/2-generation μP’s – $10 parts that perform like low-end mini’s. In: EDN. 20. September 1975, S. 37 (englisch, archive.org [PDF; abgerufen am 22. Februar 2026]).
  23. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 57 (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  24. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 61 (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  25. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 146 (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  26. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. B-1 ff. (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  27. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. E-1 ff. (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  28. a b Übersicht 6502-Assemblerbefehle. In: C64-Wiki. 16. Januar 2022, abgerufen am 10. Juni 2023.
  29. Lance A. Leventhal: 6502 Programmieren in Assembler. te‑wi Verlag GmbH, 1981, ISBN 3-921803-10-1, S. 5–14 ff.
  30. MOS Microcomputers Hardware Manual. 2. Auflage. Januar 1976, S. 14, 18 (englisch, archive.org [PDF; abgerufen am 26. Februar 2026]).
  31. MOS Microcomputers Programming Manual. 2. Auflage. Januar 1976, S. 52, 54 (englisch, archive.org [PDF; abgerufen am 21. Februar 2026]).
  32. Donald F. Hanson: Block Diagram of 6502 Microprocessor, Circa 1979. Abgerufen am 7. März 2021 (englisch).
  33. MOS Microcomputers Hardware Manual. 2. Auflage. Januar 1976, S. 37 (englisch, archive.org [PDF; abgerufen am 26. Februar 2026]).
  34. MOS Microcomputers Hardware Manual. 2. Auflage. Januar 1976, S. 112–113 (englisch, archive.org [PDF; abgerufen am 26. Februar 2026]).
  35. Tekla S. Perry, Paul Wallich: Design case history: the Commodore 64. In: IEEE Spectrum. März 1985, S. 53 (englisch, archive.org [abgerufen am 27. Februar 2026]).
  36. Joseph Decuir: Joe Decuir Engineering Notebook 1978. 1978, S. 38, abgerufen am 27. Februar 2026 (englisch): „If the dynamic storage … in the MPU can tolerate that …“
  37. Atari Home Computer System Hardware Manual. 1982, CPU Board, NOR-Gatter Z301C (englisch, atarimania.com [PDF; abgerufen am 27. Februar 2026]).
  38. Coding in C for an 8 bit 6502 CPU. XtoF's Lair, abgerufen am 9. April 2021 (englisch).
  39. Stephen Wozniak: SWEET16: The 6502 Dream Machine. Byte November 1977, abgerufen am 19. Juni 2022 (englisch): „My solution was to implement a nonexistent 16 bit "metaprocessor" …“
  40. MOS TECHNOLOGY, INC. (Hrsg.): MOS MICROCOMPUTERS HARDWARE MANUAL. Januar 1976, A. 5.4. Break Operation--(Hardware Interrupt)-BRK (7 cycles) – (englisch).
  41. MOS TECHNOLOGY, INC. (Hrsg.): MOS MICROCOMPUTERS PROGRAMMING MANUAL. Januar 1976, 3.4 BREAK COMMAND (B) – (englisch).
  42. 6502 BRK and B bit. VisualChips, archiviert vom Original (nicht mehr online verfügbar) am 5. April 2021; abgerufen am 12. März 2021 (englisch).
  43. MOS TECHNOLOGY, INC. (Hrsg.): MOS MICROCOMPUTERS PROGRAMMING MANUAL. Januar 1976, 9.11 BRK - BREAK COMMAND (englisch).
  44. Adam Vardy: Extra Instructions Of The 65XX Series CPU. 27. September 1996, abgerufen am 11. April 2021 (englisch).
  45. J. G. Harston: Full 6502 Opcode List Including Undocumented Opcodes. 25. November 1998, abgerufen am 11. April 2021 (englisch).
  46. NMOS 6500 MICROPROCESSORS. (PDF; 6,3 MB) Commodore Semiconductor Group, S. 1, abgerufen am 30. März 2021 (englisch).
  47. a b c d Electronic Devices Division Data Catalog. (PDF; 21,9 MB) Rockwell International, Juni 1981, abgerufen am 24. April 2021 (englisch): „R6500 MICROPROCESSORS (CPU´s)“
  48. a b UM6502/07/12 8-bit Microprocessor. (PDF; 812 KB) UMC, abgerufen am 26. April 2021 (englisch).
  49. a b c 8-Bit Microprocessor Family. (PDF; 18 MB) Synertek, April 1979, abgerufen am 26. April 2021 (englisch).
  50. a b CPU. Nesdev Wiki, abgerufen am 30. April 2021 (englisch).
  51. Brad Taylor: 2A03 technical reference. Abgerufen am 30. April 2021 (englisch): „stock NMOS 6502 microprocessor lacking decimal mode support“
  52. Yamaha PU1-10 Central processing unit. Yamaha Black Boxes online archive, abgerufen am 2. Mai 2021 (englisch): „The CPU is equipped with a custom chip developed by Yamaha called YM2002 which is said to be an extension of the 6502 architecture.“
  53. GAMATE Hardware. taizou, abgerufen am 3. Mai 2021 (englisch): „… it appears that some Gamates have a large UMC chip only where others have a large NCR …“
  54. Kevtris: Gamate Inside. Abgerufen am 3. Mai 2021 (englisch): „The CPU is an NCR 65CX02, which is very similar to a stock NMOS 6502. It is *NOT* A [sic] 65C02!“
  55. Renesas Electronics Corporation (Hrsg.): 38K2 Group SINGLE-CHIP 8-BIT CMOS MICROCOMPUTER. 15. Oktober 2006 (englisch).
  56. Renesas Electronics Corporation (Hrsg.): 740 Family Software Manual RENESAS MCU. November 2006 (englisch).
  57. Sunplus Technology Co., Ltd. (Hrsg.): CPU6502 Instruction Manual v2.1. 13. September 2005 (englisch).
  58. HuC6280 CMOS 8-bit Microprocessor HARDWARE MANUAL. 1. DESCRIPTION (englisch).
  59. HuC6280 CMOS 8-bit Microprocessor SOFTWARE MANUAL. 4. DESCRIPTION OF INSTRUCTIONS (englisch).
  60. HuC6280 CMOS 8-bit Microprocessor HARDWARE MANUAL. 2. FUNCTIONS (englisch).
  61. Rodrigo Copetti: PC Engine/TurboGrafx-16 Architecture. Abgerufen am 8. Mai 2021 (englisch): „Inside this console, we find the HuC6280, a chip made by Hudson Soft that houses two components. One of them is the CPU, which can operate at two speeds: ~1.79 MHz and ~7.16 MHz.“
  62. The Atari Chips. Abgerufen am 27. April 2021 (englisch): „C014377 6502 CPU“
  63. In Focus Atari 400; Atari 800. In: InfoWorld Media Group, Inc. (Hrsg.): InfoWorld. Band 5, Nr. 12, 21. März 1983, ISSN 0199-6649, S. 41 (englisch).
  64. The Atari Chips. Abgerufen am 28. April 2021 (englisch): „C014806 SALLY“
  65. COMPUTERFACTS ATARI MODEL 800XL COMPUTER. Howard W. Sams & Co., PARTS LIST AND DESCRIPTION (englisch): “U8 6502C (3)”
  66. ATARI (Hrsg.): ATARI 1200 XL HOME COMPUTER FIELD SERVICE MANUAL. Februar 1983, 6502 (modified) CPU Microprocessor (englisch).
  67. AN-002: Replacement Notes for Obsolete Versions of 6502 8-bit Microprocessors. The Western Design Center, Inc., abgerufen am 4. Mai 2021 (englisch): „Comparison of 6502, W65C02S, R65C02, R65102, R65C112 and G65SC02“
  68. R65C02, R65C102 and R65C112; R65C00 Microprocessors (CPU). (PDF; 2,6 MB) Rockwell, Juni 1987, abgerufen am 5. Mai 2021 (englisch).
  69. CMOS G65SC02-A 8-BIT MICROPROCESSOR. (PDF; 680 KB) CALIFORNIA MICRO DEVICES, 2000, abgerufen am 5. Mai 2021 (englisch).
  70. CMOS G65SCXXX 8-Bit Microprocessor Family. (PDF; 666 KB) CMD, abgerufen am 6. Mai 2021 (englisch).
  71. a b W65C02S 8–bit Microprocessor. (PDF; 2,7 MB) The Western Design Center, Inc., abgerufen am 4. Mai 2021 (englisch).
  72. 65C102 CO-PROCESSOR USER GUIDE. (PDF; 1,6 MB) ACORN Computers Limited, 1985, abgerufen am 6. Mai 2021 (englisch).
  73. 65CE02 MICROPROCESSOR. (PDF; 5,6 MB) Commodore Semiconductor Group, abgerufen am 7. Mai 2021 (englisch).
  74. C64DX SYSTEM SPECIFICATION. (PDF; 16,2 MB) Commodore Business Machines, Inc., 1991, abgerufen am 8. Mai 2021 (englisch): „2.3 The CSG 4510 Microcontroller Chip“
  75. C64DX SYSTEM SPECIFICATION. (PDF; 16,2 MB) Commodore Business Machines, Inc., 1991, abgerufen am 8. Mai 2021 (englisch): „1.2 System Overview“
  76. A2232 MULTIPORT SERIAL CARD FUNCTIONAL SPECIFICATION. (PDF; 16,2 MB) Commodore International, abgerufen am 7. Mai 2021 (englisch): „The 8 bit processor used is a 65CE02, …“
  77. Brian Bagnall: Commodore. Variant Press (englisch): “In the end, the courts settled Mensch and Orgill’s bet when Motorola squashed the 6501.”
  78. Boxed MOS 6502 CPU – pagetable.com. 12. Mai 2019, abgerufen am 12. Dezember 2023 (amerikanisches Englisch).
  79. a b c MOS Technology 1982-1983 DATA CATALOG. (PDF; 10 MB) Commodore Semiconductor Group, 1982, abgerufen am 25. April 2021 (englisch).
  80. ATARI 1050 DISK DRIVE FIELD SERVICE MANUAL. (PDF; 5,7 MB) ATARI, Oktober 1985, abgerufen am 25. April 2021 (englisch): „6507 Microprocessor Unit (MPU)“
  81. 6509 MICROPROCESSOR WITH MEMORY MANAGEMENT. (PDF; 6,5 MB) Commodore Semiconductor Group, Oktober 1986, abgerufen am 26. April 2021 (englisch).
  82. 6510 MICROPROCESSOR WITH I/O. (PDF; 4,9 MB) Commodore Semiconductor Group, abgerufen am 26. April 2021 (englisch).
  83. CPU 6510/8500. MJK's Commodore 64 & LCD Page, abgerufen am 27. April 2021 (englisch): „… Commodore replaced the 6510 by the 8500, which is fully compatible.“
  84. 7501 MICROPROCESSOR WITH I/O. (GIF; 145 KB) Commodore Semiconductor Group, abgerufen am 27. April 2021 (englisch).
  85. The original Commodore Business Machines PLUS/4 docs. (PDF; 78 KB) Abgerufen am 27. April 2021 (englisch): „If AEC is low when Gate In makes a low to high transition, the R/W line will go to a high impedance until the next transition of the Gate In line and AEC is high prior to the transition.“
  86. Commodore Capital, Inc. (Hrsg.): COMMODORE 128 PROGRAMMER'S REFERENCE GUIDE. THE 8502 MICROPROCESSOR (englisch).
  87. Commodore Amiga 1000. Deskthority wiki, abgerufen am 25. April 2021 (englisch): „MOS controller, dated 1386“
  88. 6500/1 (6570, 6571) used in Commodore and Amiga equipment. AMIGA-STUFF.com, abgerufen am 27. April 2021 (englisch): „Keyboard processor“
  89. R6511Q One-Chip Microprocessor and R6500/13 One-Chip Microcomputer. (PDF; 2 MB) Rockwell, Juni 1987, abgerufen am 24. April 2021 (englisch).
  90. R65F11 and R65F12 FORTH Based Microcomputers. (PDF; 1,6 MB) Rockwell, Juni 1987, abgerufen am 24. April 2021 (englisch).
  91. W65C134S 8-bit Microcontroller. (PDF; 2,8 MB) The Western Design Center, Inc., abgerufen am 9. Mai 2021 (englisch).
  92. LCD screen for your dockstar. Abgerufen am 23. April 2021 (englisch): „The st2205u is based on the 6502 CPU …“
  93. NOVATEK NT6868A Keyboard Controller. Abgerufen am 23. April 2021 (englisch).
  94. David Eyes, Ron Lichty: Programming the 65816 - Including the 6502, 65C02 and 65802. 4 – Sixteen-Bit Architecture: The 65816 and the 65802 (englisch): “The primary distinction between the two processors is the range of addressable memory: … the 65802 is constrained by its 6502 pinout to 64K.”
  95. David Eyes, Ron Lichty: Programming the 65816 - Including the 6502, 65C02 and 65802. 4 – Sixteen-Bit Architecture: The 65816 and the 65802 (englisch): “The 65802, on the other hand, has a pinout that is identical to that of the 6502 and 65C02 and can indeed be used as a replacement upgrade.”
  96. David Eyes, Ron Lichty: Programming the 65816 - Including the 6502, 65C02 and 65802. E W65C816 Data Sheet (englisch).
  97. W65C816S 8/16–bit Microprocessor. (PDF; 2 MB) The Western Design Center, Inc., abgerufen am 10. Mai 2021 (englisch).
  98. Gregg Williams, Richard Grehan: The Apple II GS. In: BYTE. Oktober 1986, abgerufen am 10. Mai 2021 (englisch): „The 65C816 processor brings the Apple II into the 16-bit world.“
  99. Erico Guizzo: The Truth About Bender’s Brain. IEEE Spectrum, 1. Mai 2009, abgerufen am 11. Mai 2021 (englisch): „In the episode, “Fry and the Slurm Factory,” a character … points his F-ray at the head of the show’s famously ill-tempered robot, Bender. It reveals a little rectangle, apparently a chip, labeled “6502.”“
  100. Michael Steil: The 6502 in "The Terminator". pagetable.com, 5. Mai 2009, abgerufen am 11. Mai 2021 (englisch): „It’s Apple-II code taken from Nibble Magazine. … On the right, there is output of a run of the checksum application Key Perfect …“
  101. Where to Buy. The Western Design Center, Inc., abgerufen am 11. Mai 2021 (englisch): „Part Number W65C02S6TPG-14“
  102. Visual Transistor-level Simulation of the 6502 CPU. Visual6502.org, abgerufen am 11. Mai 2021 (englisch).
  103. The MOnSter 6502. Abgerufen am 11. Mai 2021 (englisch): „A dis-integrated circuit project to make a complete, working transistor-scale replica of the classic MOS 6502 microprocessor.“
  104. Peter Eisner, Peter König: MOnSter 6502: Diskret aufgebauter 6502, dem man beim Rechnen zusehen kann. In: Heise online. 3. Juni 2016. Abgerufen am 25. November 2025.