vorlagen-zauber.net
Web-Empfehlungen:
MOS Technology 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 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.
|
Inhaltsverzeichnis
- 1 Allgemeines
- 2 Technische Daten
- 3 Varianten des 6502
- 4 Trivia
- 5 Literatur
- 6 Weblinks
|
[Bearbeiten] Allgemeines
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 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.
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:
- Prozessorkern der Mikrocontroller Mitsubishi/Renesas (38000/740 Series)
- VMC Scal von Micronas Intermetall (eingesetzt in Automotive- und Fernseh-Technik)
- Taschenrechnern wie HP-35s
- Controller in verschiedenen PC-Tastaturen
Als Cross-Compiler wurde häufig der cc65 eingesetzt.
[Bearbeiten] 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. Hinweis: Das Binärpräfix Ki steht für den Faktor 1024.
- 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).
[Bearbeiten] 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?).
[Bearbeiten] Varianten des 6502
Teil einer C64-Platine mit einigen Chips von MOS Technology, u. a. einer 6510-CPU.
- 2002
- 38000
- Microcontrollerfamilie von Renesas Technology mit 740er Kern. Siehe 740
- 6501
- Gehäuse- und signalkompatibel (nicht softwarekompatibel) zum Motorola 6800 (nicht Motorola 68000). Musste nach einer Patentverletzungsklage Motorolas eingestellt werden.
- 6502
- eingesetzt in den Commodore-PET- und -CBM-Modellen PET 2001 bis CBM 8296 sowie im VC20 und den Floppy-Laufwerken 1540 und 1541.
- eingesetzt im Apple II, im Apple II+, und im nicht erweiterten Apple IIe
- eingesetzt im Ohio Scientific Superboard II
- 6502A
- 2 MHz Taktung
- eingesetzt im Apple III
- eingesetzt in 8-Bit Atari Homecomputern wie Atari 400, Atari 800 mit 1,79 MHz
- 6502B
- 6502C
- extra Pin namens HALT
- eingesetzt in 8-Bit Atari Homecomputern wie Atari 800XL, Atari 130 XE usw. mit 1,79 MHz Taktung
- 65C02
- CMOS-Technologie
- Zusätzliche Befehle und Adressierungsmodi
- Einige Befehle benötigen unter bestimmten Voraussetzungen weniger Taktzyklen als im 6502
- Eingesetzt im erweiterten Apple IIe und im Apple IIc
- 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
- 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
- 6509
- 20 Bit Adressbus (1 MB) 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 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
- 6502 in HMOS-Technologie
- Eingesetzt im C16 und Plus/4
- 8500
- 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, 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
[Bearbeiten] 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.
[Bearbeiten] 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
[Bearbeiten] Weblinks
- 6502.org ? Informationen zum 6502-Prozessor
- Western Design Center ? Entwickler der 65C02/65816
- DEMA ? Distributor für WDC in Deutschland
-
- CCOM ? Commodore Computer Online Museum
- 6502-Seite von Homecomputermuseum.de
- 6502 Prozessoren und Varianten: Bilder und Beschreibungen auf cpu-collection.de
- CPU-World ? Überblick über die verschiedenen Hersteller
Home | Impressum