vorlagen-zauber.net




Web-Empfehlungen:




MOS Technology 6502



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 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
    • 2.1 Befehlssatz
  • 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:

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

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

[Bearbeiten] Technische Daten

Mitsubishi M50747 und M50734 Mikrocontroller, basierend auf 6502

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

[Bearbeiten] Trivia

[Bearbeiten] Literatur

[Bearbeiten] Weblinks






Home | Impressum