6504

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:

  • 6504 Lehmbruck — Infobox Planet minorplanet = yes width = 25em bgcolour = #FFFFC0 apsis = name = Lehmbruck symbol = caption = discovery = yes discovery ref = discoverer = C. J. van Houten discovery site = Palomar discovered = September 24, 1960 designations = yes …   Wikipedia

  • (6504) Lehmbruck — Asteroid (6504) Lehmbruck Eigenschaften des Orbits (Animation) Orbittyp Hauptgürtel Große Halbachse 2,421 AE …   Deutsch Wikipedia

  • NGC 6504 — Галактика История исследования Дата открытия 27 июля 1864 Обозначения NGC 6504, UGC 11053, MCG 6 39 27, ZWG 199.29, PGC 61129 Наблюдатель …   Википедия

  • ISO 6504-1:1983 — изд.1 P TC 35/SC 9 Краски и лаки. Определение укрывистости. Часть 1. Метод Кубелка Мунка для красок белых и светлых тонов раздел 87.040 …   Стандарты Международной организации по стандартизации (ИСО)

  • ISO 6504-3:2006 — изд.2 D TC 35/SC 9 Краски и лаки. Определение укрывистости. Часть 3. Определение контрастного соотношения красок светлых тонов при установленной кроющей способности раздел 87.040 …   Стандарты Международной организации по стандартизации (ИСО)

  • Контроферта — согласие заключить предложенный внешнеторговый контракт, но на иных условиях. Словарь бизнес терминов. Академик.ру. 2001 …   Словарь бизнес-терминов

  • Каленовы — дворянский род, принявший русское подданство в XVII в., после покорения Смоленска и внесенный во II и VI часть родословной книги Смоленской губернии …   Биографический словарь

  • больничная база — (ББ) этап медицинской эвакуации в системе Гражданской обороны, представляющий собой совокупность лечебных учреждений, объединенных единым руководством, развернутых в загородной зоне на эвакуационном направлении для оказания пораженным и больным… …   Большой медицинский словарь

  • Analyses — Analysis A*nal y*sis, n.; pl. {Analyses}. [Gr. ?, fr. ? to unloose, to dissolve, to resolve into its elements; ? up + ? to loose. See {Loose}.] 1. A resolution of anything, whether an object of the senses or of the intellect, into its constituent …   The Collaborative International Dictionary of English

  • counter C3 — counter command, control, and communications …   Military dictionary

Share the article and excerpts

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