MOS 6502

MOS 6502

Der MOS Technology 6502 ist ein 8-Bit-Mikroprozessor von MOS Technology, Inc., der 1975 auf den Markt kam. Aufgrund seiner Unkompliziertheit und vor allem des im Vergleich zu den etablierten Intel- und Motorola-Prozessoren sehr niedrigen Preises bei großer Leistungsfähigkeit wurde er in vielen Heimcomputern (z. B. dem Commodore VC-20 und seinem Vorgänger PET 2001, dem Atari 800 XL, Apple I, Apple II und BBC Micro), zahlreichen Schachcomputern (z. B. dem Mephisto Polgar mit 5 oder 10 MHz) und Peripherie-Geräten verbaut.

Auch andere Mitglieder dieser Prozessorfamilie waren sehr erfolgreich, so der 6510, ein Bestandteil des Commodore 64, und der 6507 in den Atari-Spielkonsolen. Hauptkonkurrent war damals der Zilog Z80, der z. B. in den Sinclair- und Schneider-Computern sowie in CP/M-Rechnern zu finden war. Der Prozessor wurde unter der Leitung von Chuck Peddle entwickelt.

MOS-6502-Prozessor

Inhaltsverzeichnis

Allgemeines

MOS-6502-Prozessor Keramik weiß

Das Design des 6502 wurde an den Motorola 6800 angelehnt (nicht zu verwechseln mit dem jüngeren Motorola 68000). Der Befehlssatz ist ähnlich, aber statt eines 16-Bit Index-Registers werden zwei 8-Bit Index-Register verwendet, deren Wert auf eine im Speicher (auch im Programmcode) vorgegebene 16-Bit-Adresse addiert wird. Deswegen haben 6502-Programme einen anderen Stil: Für Arrays, die größer als 256 Bytes sind, muss ein zusätzlicher Programmieraufwand betrieben werden. Andererseits geht die Manipulation von 8-Bit-Werten auf einem 8-Bit-Mikroprozessor erheblich schneller vonstatten. Anders als 16-Bit-Register des 6800 oder etwa Z80, welche eine absolute Adresse darstellen, stellen die 8-Bit-Register des 6502 lediglich einen Array-Index dar, und in manchen Fällen kann ein einziger 8-Bit-Increment- oder Decrement-Befehl sowohl das Zählen der Adressen als auch das Setzen der Bedingung für den Schleifenabbruch bei index=0 leisten, was zu kompakten und schnellen Schleifen führt. Der einfacher gehaltene Befehlssatz führt allerdings dazu, dass 6502-Programme im Normalfall deutlich mehr Speicher brauchen als das gleiche leistende 6800- oder Z80-Programme; zudem sind standardkonforme Compiler für höhere Programmiersprachen wie etwa Pascal oder C auf dem 6502 deutlich schwieriger implementierbar als auf anderen 8-Bit-Prozessoren. Die Ursache hierfür ist vor allem die auf 256 Bytes beschränkte Größe des Hardware-Stapelspeichers im 6502.

Technisch war der 6502 durchaus innovativ:

  • Er war der erste Mikroprozessor mit rudimentärer (zweistufiger) Pipeline-Architektur, d. h. wenn nur noch interne Schaltschritte für einen Befehl notwendig waren, konnte der nächste Befehl bereits gleichzeitig aus dem Speicher geholt werden. Eine echte Pipeline mit Überlappung der Lese- und Schreibzugriffe mehrerer Befehle gab es aber noch nicht.
  • Sein Befehlssatz kann – zumindest im Vergleich zur direkten Konkurrenz Intel 8080 – als „fast orthogonal“ angesehen werden.

Varianten des 6502-Prozessors werden heute (Stand 2008) unter anderen in folgenden Geräten eingesetzt:

Als Cross-Compiler wurde häufig der cc65 eingesetzt.

Technische Daten

Mitsubishi M50747 und M50734 Mikrocontroller, basierend auf 6502
  • Technologie: NMOS, HMOS, CMOS
  • Anzahl Transistoren: ca. 5000
  • Taktfrequenz: traditionell 20 kHz bis 4 MHz; CMOS-Version: 0 bis 14 MHz
  • Taktzyklen je Befehl: 2 bis 7
  • Adressraum: 64 KByte, dabei kein separater I/O-Adressraum (wie z. B. beim Intel 8080), d. h. alles I/O wird per Memory Mapped I/O realisiert.
  • Adressbusbreite: 16 Bit
  • Datenbusbreite: 8 Bit
  • Interrupts: ein NMI, ein IRQ, sowie Software-Interrupt über BRK-Befehl
  • Befehle: traditionell 56, CMOS-Version: 70
  • Adressierungsarten: traditionell 13, CMOS-Version: 16
  • Byte-Reihenfolge: Little Endian
  • Register:
    • Akkumulator, 8 Bit
    • 2 Index-Register (X und Y), 8 Bit, eigentlich ein Offset-Register: es wird zu einer 16-Bit-Adresse addiert, die je nach Adressierungsart im Opcode oder in der Zeropage steht.
    • Stapelzeiger, 16 Bit, allerdings ist das High-Byte konstant auf $01 festgelegt, so dass der Stapel nur 256 Bytes umfasst.
    • Prozessorstatus-Register, 7 Bit (Flags: Carry, Zero, Decimal, Interrupt Disable, Break*, unbenutzt, Overflow, Negative)
    • Befehlszähler, 16 Bit
    • Die Zeropage (Adressbereich $00xx) kann aufgrund ihrer speziellen, schnelleren Adressierungsarten und ihrer Verwendung bei indizierter Adressierung auch als Registerbank oder Register-File angesehen werden

*Hinweis: Das Break-Flag existiert nur auf dem Stack nach einem BRK-Befehl, nicht im Prozessor selbst (es hat keine eigenen Setz- und Testbefehle und wird auch durch die Befehle PLP und PHP nicht verarbeitet).

Befehlssatz

Hier ein paar Beispiele von Maschinenbefehlen, bzw. deren Mnemonics:

LDA #$FF     - lädt ("LoaD") das Register "Akkumulator" mit dem Hex-Zahleninhalt FF (also 255 dez.)

LDA $C000    - lädt den Akkumulator mit dem Inhalt der absoluten Speicheradresse
               HEX C000 (also 49152 dez.)

LDA ($24),Y  - lädt den Akkumulator mit dem Inhalt jener Speicheradresse,
               welche sich ergibt, indem zu der 16-Bit-Zahl in den Adressen HEX 24
               und HEX 25 der Inhalt des Y-Registers addiert wurde.
               Siehe Zeropage, indirekte Adressierung
STA $C000    - speichert ("STore") den Inhalt des Akkumulators (1 Byte) in der Speicheradresse HEX C000
CMP #$7F     - vergleicht ("CoMPare") den Inhalt des Akkumulators mit dem Zahlenwert HEX 7F (127 dez.)
               und setzt die Flags entsprechend

CPX $C0      - vergleicht den Inhalt des Registers X mit dem Inhalt der Speicherzelle HEX C0

CPY #$C0     - vergleicht den Inhalt des Registers Y mit dem Zahlenwert HEX C0
BEQ $FC00    - "Branch if result is EQual" = verzweigt, wenn der vorausgegangene Vergleich
               eine Gleichheit ergab (wird anhand der Flags erinnert). In diesem Fall würde das
               Maschinenprogramm an Adresse FC00 weiterlaufen, andernfalls einfach beim nächsten Befehl.

BNE $FC00    - "Branch if result is Not Equal" = verzweigt, wenn der Vergleich
               eine Ungleichheit ergab.
INX          - "INcrement X" = erhöht den Inhalt des Registers X um 1.

DEX          - "DEcrement X" = verringert den Inhalt des Registers X um 1.
JSR $FC00    - "Jump to SubRoutine": springt zur Subroutine (Unterprogramm) nach HEX FC00.
               Die Rücksprungadresse besteht aus 2 Byte und wird auf dem Stack (Stapel) abgelegt.

RTS          - "ReTurn from Subroutine": kehrt aus der Subroutine zurück und fährt bei dem Befehl direkt
               hinter dem zuletzt ausgeführten JSR fort. Dabei wird die Rücksprungadresse
               aus dem Stack ausgelesen.

In Assembler-Programmtexten des 6502 haben das Dollar- und Nummern-Zeichen sowie die Klammern folgende Bedeutung:

$ - Der auf das $-Zeichen folgende Wert ist eine in HEX angegebene Zahl. Ohne $ ist bei Ziffern eine Dezimalzahl, bei Buchstaben eine symbolische Konstante gemeint.
# - Der auf das #-Zeichen folgende Wert ist eine direkt zu verwendende („immediate“ auch: „Literal“) Zahl und nicht eine Speicheradresse, deren Inhalt zu verwenden ist.
( ) - Die in den Klammern genannte Speicheradresse ist nicht direkt zu verwenden, sondern enthält selbst wiederum die gemeinte Speicheradresse (indirekte Adressierung: „Pointer“).

Varianten des 6502

Teil einer C64-Platine mit einigen Chips von MOS Technology, u. a. einer 6510-CPU.
  • 2002
  • 38000
  • 6501
    • Gehäuse- und signalkompatibel (nicht softwarekompatibel) zum Motorola 6800. Musste nach einer Patentverletzungsklage Motorolas eingestellt werden.
  • 6502
  • 6502A
  • 6502B
    • 3 MHz Taktung
  • 6502C
  • 65C02
    • CMOS-Technologie
    • Zusätzliche Befehle und Adressierungsmodi
    • keine illegalen Opcodes
    • Einige Befehle benötigen unter bestimmten Voraussetzungen weniger oder mehr Taktzyklen als im 6502
    • Eingesetzt im erweiterten Apple IIe und im Apple IIc und in einigen frühen Beschleunigerkarten für 6502-Systeme
    • Hergestellt von Western Design Center
  • 65SC02
    • Leicht eingeschränkter Befehlssatz (keine Bitbefehle, echte Teilmenge des 65816) gegenüber dem 65C02
    • Eingesetzt im Atari Lynx und Watara Supervision mit 4 MHz-Taktung
    • Hergestellt von GTE und CMD
  • 65CE02
    • Zusätzliche 16-Bit-RMW-Befehle
    • Relative Sprünge und Unterprogrammaufrufe mit 16-Bit-Offset
    • Eingesetzt im Commodore C65 (4510) und A2232
    • 3,54 MHz Taktung
  • 65C102, 65C112
    • Für Multiprozessorbetrieb ausgelegt, wobei der 65C112 als Slave dient
    • Eingesetzt im BBC Micro
  • 6503, 6505, 6506
    • 12 Bit Adressbus (4 KB)
  • 6504, 6507
    • 13 Bit Adressbus (8 KB), eingesetzt z. B. in Commodore-Tastaturen (Amiga 1000) und in Floppy-Laufwerken (Atari 1050)
    • 6507 eingesetzt im Atari 2600 mit 1,19 MHz-Taktung
  • 6508
    • Eingesetzt im NES
  • 6509
  • 6510
    • 6502 mit zusätzlichem 6-Bit-I/O-Port
    • Eingesetzt im C64 mit 985 kHz (PAL-Version) respektive 1022 kHz (NTSC-Version) Takt
  • 6511
    • Microcontroller mit I/O-Ports, serieller Schnittstelle und RAM, von Rockwell
  • 65F11
    • Variante des 6511 mit integriertem Forth-Interpreter
  • 6512 bis 6518
    • Variante des entsprechenden 650x, aber ohne eingebauten Oszillator.
  • 65C00/21, 65C29
    • Multiplizier-Befehl
    • von Rockwell
  • 6570, 6571
    • Eingesetzt in Amiga-Tastaturen
  • 6280
    • Entwickelt von NEC auf Basis der 65SC02
    • incl. MMU (2 MB adressierbar)
    • 6-Kanal PSG
    • Eingesetzt in der PC Engine
  • 6702
    • eingesetzt nur im Plug-in Board des Commodore SuperPET
  • 740
    • Microcontrollerfamilie von Renesas Technology (vormals Mitsubishi Electric)
    • Basierend auf der 65C02
    • mehr als 100 Varianten
    • bis 60 KB ROM/PROM/Flash onchip
    • bis 2 KB RAM onchip
    • erweiterter Befehlssatz
      • Multiplikation
      • Division
      • Erweiterte Bitbefehle
      • Stop/Wait
    • Neue Adressierungsarten
      • Transfer (Speicher Speicher Befehle)
      • Special Page
      • Bit-Relativ
    • Bis 17 MHz
  • 7501
  • 8500
    • 6510 in CMOS-Technologie
  • 8502
    • 6510 umschaltbar auf 2 MHz
    • 7-Bit-I/O-Port
    • Eingesetzt im C128
  • 65802 (65C802)
    • Variante des 65816, die pinkompatibel zum 6502 ist, Adressraum daher wie dieser nur 64 KB
    • Zum direkten Austausch des 6502 in bereits bestehenden Schaltungen gedacht
    • Bis zu 16 MHz
  • 65816 (65C816)
    • Entwickelt von Western Design Center
    • Eingesetzt u. a. im Apple IIgs, Nintendo SNES (als Ricoh 5A22), den meisten Beschleunigungskarten für 6502-Rechner
    • 16-Bit-Register und ALU
    • 24-Bit-Adressbus (16 MB)
    • Bis zu 24 MHz
    • Braucht im Vergleich zum 6502 (wohl wegen des zusätzlichen Adressbytes) für viele Befehle einen Takt länger

Trivia

  • Der fiktive Roboter Bender aus der Zeichentrickserie Futurama hat einen 6502-Prozessor als CPU.
  • In dem Spielfilm Terminator (1984) wird aus Sicht des Terminators ein 6502-Assembler-Programm angezeigt (vermutlich vom Apple IIe). Weiterhin wird das Ergebnis des Prüfsummen-Programms Key Perfect (in der Version 4.0), das im Nibble magazine veröffentlicht wurde, angezeigt.

Literatur

  • Bagnall, Brian: On The Edge: The Spectacular Rise and Fall of Commodore, ISBN 0973864907
  • Rodnay Zaks: Programmierung des 6502. Jetzt auch mit 6510, 65C02, 65SC02, ISBN 3887456009
  • Lance A. Leventhal: 6502. Programmieren in ASSEMBLER, ISBN 3921803101
  • Ekkehard Flögel: Programmieren in Maschinensprache mit dem 6502, ISBN 3921682614

Weblinks


Wikimedia Foundation.

Игры ⚽ Поможем написать курсовую

Schlagen Sie auch in anderen Wörterbüchern nach:

  • MOS 6502 — El MOS 6502 o MOS Technology 6502 es un microprocesador de 8 bits diseñado por MOS Technology en 1975. Cuando fue introducido fue, con bastante diferencia, la CPU más barata con características completas de mercado, con alrededor de un sexto del… …   Wikipedia Español

  • MOS 6502 — El MOS 6502 o MOS Technology 6502 fue un microprocesador de 8 bits diseñado por MOS Technology en 1975. Cuando fue introducido fue, por un largo trecho, el mas barato CPU con características completas del mercado, en alrededor de 1/6to del precio …   Enciclopedia Universal

  • MOS 6502 — …   Википедия

  • MOS Technology 6502 — MOS 6502 Prozessor MOS 6510 Prozessor Der MOS Technology 6 …   Deutsch Wikipedia

  • MOS Technology 7501 — MOS 8501 Der MOS Technology 7501 ist offiziell die CPU in den Computern der Commodore 264 Serie. Tatsächlich war aber in den meisten Rechnern eine CPU mit dem Aufdruck 8501 verbaut, die jedoch lediglich in einem anderen Prozess hergestellt wurde …   Deutsch Wikipedia

  • MOS Technology 6502 — Процессор 6502 в пластмассовом корпусе DIP 40 MOS Technology 6502, или просто 6502,  восьмиразрядный микропроцессор, разработанный компанией MOS Technology …   Википедия

  • MOS Technologies 6502 — Der MOS Technology 6502 ist ein 8 Bit Mikroprozessor von MOS Technology, Inc., der 1975 auf den Markt kam. Aufgrund seiner Unkompliziertheit und vor allem des im Vergleich zu den etablierten Intel und Motorola Prozessoren sehr niedrigen Preises… …   Deutsch Wikipedia

  • 6502 — Der MOS Technology 6502 ist ein 8 Bit Mikroprozessor von MOS Technology, Inc., der 1975 auf den Markt kam. Aufgrund seiner Unkompliziertheit und vor allem des im Vergleich zu den etablierten Intel und Motorola Prozessoren sehr niedrigen Preises… …   Deutsch Wikipedia

  • MOS Technologies — Logo Teil einer C64 Platine mit einigen wichtigen Chips von MOS Technology, u. a. SID und einer …   Deutsch Wikipedia

  • MOS Technology — Logo Teil einer C64 Platine mit einig …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”