Das Fotonexus-Wiki befindet sich im Testbetrieb.


MOS Technology 6502

Aus Fotonexus.

(Weitergeleitet von MOS Technologies 6502)
Wechseln zu: Navigation, Suche
Bild:MOS Technologies large.jpg
Teil einer C64-Platine mit einigen wichtigen Chips von MOS Technology, u. a. einer 6510-CPU.
MOS 6502-Prozessor
MOS 6502-Prozessor

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 wurde er in vielen Heimcomputern (z. B. dem Commodore VC-20 und seinem Vorgänger PET 2001, dem Atari 800 XL, 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.

Das Design des 6502 wurde an den Motorola 6800 angelehnt, 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 von statten. 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.

Technisch war der 6502 durchaus innovativ:

  • Er war der erste Mikroprozessor mit (zweistufiger) Pipeline-Architektur, d. h. während der Abarbeitung eines Befehls wurde der folgende bereits aus dem Speicher geholt.
  • Sein Befehlssatz kann – zumindest im Vergleich zur direkten Konkurrenz Intel 8080 – als „fast orthogonal“ angesehen werden.

Die 6502 lebt heute als Prozessorkern der Mikrocontroller Mitsubishi/Renesas (38000/740 Series) und VMC Scal von Micronas Intermetall (eingesetzt in Automotive- und Fernseh-Technik) weiter und wird zudem in vielen PC-Tastaturen als Controller verwendet.

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

Inhaltsverzeichnis

Technische Daten

  • 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
  • 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 auch als Register-File angesehen werden

Befehlssatz

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

LDA #$FF     - füllt das Register „Akkumulator“ mit dem Hex-Zahleninhalt FF (also 255 dez.)
LDA $C000    - füllt den Akkumulator mit dem Inhalt der absoluten Speicheradresse
               HEX C000 (also 49152 dez.)

LDA ($FE),x  - füllt den Akkumulator mit dem Inhalt jener Speicheradresse,
               welche sich aus dem Inhalt der Adressen HEX FE und HEX FF ergibt,
               nachdem auch noch der Inhalt des X-Registers addiert wurde.
               Siehe Zeropage, indirekte Adressierung

STA $C000    - speichert den Inhalt des Akkumulators (1 Byte) in der Speicheradresse HEX C000

CMP #$7F     - vergleicht den Inhalt des Akkus mit dem Zahlenwert HEX 7F (127 dez.)

CPX $C0      - vergleicht den Inhalt des Register X mit dem Inhalt der Speicherzelle HEX C0
CPY #$C0     - vergleicht den Inhalt des Register Y mit dem absoluten Zahlenwert HEX C0

BEQ $FC00    - "Branch if result is EQual" = verzweigt, wenn das Resultat des Vergleichs
               wahr ist. In diesem Fall würde das Maschinenprogramm an Adresse FC00
               weiter laufen.

BNE $FC00    - "Branch if result is Not Equal" = verzweigt, wenn das Resultat des Vergleichs
               falsch ist.

INX          - "INncrement X" = den Inhalt des Register X um 1 erhöhen
DEX          - "DEcrement X" = den Inhalt des Register X um 1 verringern

JSR $FC00    - Jump to SubRoutine: springe zur Subroutine (Unterroutine) nach HEX FC00.
               Die Rücksprungadresse besteht aus 2 Byte und wird auf dem Stack (Stapel) abgelegt.

RTS          - ReTurn from Subroutine: kehre aus der Subroutine zurück.
               Dabei wird die Rücksprungadresse aus dem Stack ausgelesen.

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

 $ - Der auf das $-Zeichen folgende Wert ist in HEX angegeben.

 # - Der auf das #-Zeichen folgende Wert ist eine direkt zu verwendende („immediate“) Zahl und nicht eine Speicheradresse, deren Inhalt zu verwenden ist.

Varianten des 6502

  • 2002
  • 38000
  • 6501
  • 6502
  • 6502A
  • 6502B
    • 3 MHz Taktung
  • 6502C
  • 65C02
  • 65C02S
  • 65SC02
    • Nochmals erweiterter Befehlssatz (Bitbefehle) gegenüber der 65C02
    • von GTE
  • 65CE02
    • Zusätzliche 16 Bit RMW Befehle
    • Relative Sprünge und Unterprogrammaufrufe mit 16 Bit Offset
    • Eingesetzt im Commodore C65 (4510)
  • 6503, 6505, 6506
    • 12 Bit Adressbus (4 KB)
  • 6504, 6507
    • 13 Bit Adressbus (8 KB), eingesetzt z. B. in Commodore-Tastaturen (Amiga 1000!) und -Floppy-Laufwerken (Atari 1050)
    • 6507 eingesetzt im Atari 2600 mit 1,19 MHz Taktung
  • 6508
    • Eingesetzt im NES
  • 6509
    • 20 Bit Adressbus (1 MiB) durch internes Bankswitching
    • Eingesetzt in den Commodore PET-II Modellen (CBM 500, 600 und 700).
  • 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 6517
    • Variante des entsprechenden 650x, aber ohne eingebauten Oszillator.
  • 6570, 6571
    • Eingesetzt in Amiga-Tastaturen
  • 6280
    • Entwickelt von NEC auf Basis der 65SC02
    • incl. MMU (2 MiB adressierbar)
    • 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 KiB ROM/PROM/Flash onchip
    • bis 2 KiB 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 KiB
    • 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, den meisten Beschleunigungskarten für 6502-Rechner
    • 16 Bit Register und ALU
    • 24 Bit Adressbus (16 MiB)
    • Bis zu 24 MHz

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 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

Weblinks

[[Hilfe:Cache|Fehler beim Thumbnail-Erstellen]]: convert: unable to open image `/var/www/fotonexus/w/images/c/ca/Wikipedia_lexikon3e.jpg': No such file or directory.
Dieses Dokument entstammt in seiner ersten oder einer späteren Version der deutschsprachigen Wikipedia. Es ist dort zu finden unter dem Stichwort MOS_Technology_6502, die Liste der bisherigen Autoren befindet sich in der Versionsliste; die Originalfassung kann dort auch bearbeitet werden. Alle Texte der Wikipedia und ihre Derivate stehen unter der GNU-Lizenz für freie Dokumentation.
Persönliche Werkzeuge