WDC 65C816 - WDC 65C816

WDC 65C816
W65C816S8PG-14 lg.jpg
W65C816S im PDIP40-Gehäuse
Allgemeine Information
Gestartet 1983 ; Vor 38 Jahren ( 1983 )
Gängige Hersteller
Leistung
max. CPU- Taktrate 1 MHz bis 14 MHz
Datenbreite
Adressbreite 24
Architektur und Klassifizierung
Befehlssatz 6502
Anweisungen 92
Physikalische Spezifikationen
Pakete)
Geschichte
Vorgänger

Der W65C816S (auch 65C816 oder 65816 ) ist ein 8/16-Bit- Mikroprozessor (MPU), der vom Western Design Center (WDC) entwickelt und vertrieben wird . Der 1983 eingeführte W65C816S ist eine verbesserte Version der WDC 65C02 8-Bit-MPU, selbst eine CMOS- Erweiterung der ehrwürdigen MOS-Technologie 6502 NMOS- MPU. Der 65C816 war die CPU für den Apple IIGS und in modifizierter Form das Super Nintendo Entertainment System .

Die 65 in der Bezeichnung des Teils kommt von seinem 65C02-Kompatibilitätsmodus, und die 816 bedeutet, dass die MPU wählbare 8- und 16-Bit- Registergrößen hat . Zusätzlich zu der Verfügbarkeit von 16 - Bit - Register, verfügt das W65C816S erweiterten Speicheradressierung zu 24 Bit auf 16 unterstützt bis Megabytes von Schreib-Lese-Speicher , einem erweiterten Befehlssatz, und ein 16 - Bit - Stapelzeiger , sowie mehrere neue elektrische Signale für eine verbesserte Systemhardwareverwaltung.

Beim Reset startet der W65C816S im "Emulationsmodus", d.h. er verhält sich im Wesentlichen wie ein 65C02. Danach kann der W65C816S mit einer Folge von zwei Befehlen in den "nativen Modus" geschaltet werden, wodurch alle erweiterten Funktionen aktiviert werden und dennoch ein beträchtliches Maß an Abwärtskompatibilität mit der meisten 65C02-Software beibehalten wird . Im Gegensatz zur PDIP40- Version des 65C02, die ein pinkompatibler Ersatz für seinen NMOS-Vorfahren ist, ist der PDIP40 W65C816S jedoch nicht pinkompatibel mit anderen MPUs der 6502-Familie.

Mit dem W65C816S verwandt ist der W65C802 , der die gleiche interne Struktur und 16-Bit-Unterstützung aufwies , aber ein 40-Pin-Layout verwendete, das mit dem ursprünglichen 6502 kompatibel war. Dadurch konnte es in bestimmten Rollen als Drop-In-Ersatz verwendet werden. Der 65C802 konnte jedoch keine vollständige 24-Bit-Adresse ausgeben, was ihn auf 64 KB Speicher beschränkte. Der 65C802 und seine Verwandten werden nicht mehr produziert.

Geschichte

PLCC-44- Version des Mikroprozessors W65C816S , montiert auf einem Einplatinencomputer .

1981 begann Bill Mensch , Gründer und CEO von WDC, mit seinen Produktionspartnern, vor allem Rockwell Semiconductor und Synertek , mit der Entwicklung des 65C02 . Das primäre Ziel des 65C02 Aufwand wurde von dem ursprünglichen 6502 des NMOS - Prozess auf den 65C02 CMOS zu bewegen, was es bei vielen niedrigeren Leistungsstufen laufen lassen würde, irgendwo zwischen 1 / 10 und 1 / 20 , wenn sie bei den gleichen Taktraten laufen. Eine Reihe neuer Opcodes und Fehlerbehebungen wurden ebenfalls in das Design eingearbeitet.

Die Entwicklung des W65C816S begann 1982, nachdem Mensch mit Apple Computer über eine neue Version der Apple II- Serie von Personalcomputern beraten hatte , die unter anderem Grafik und Sound verbessert hätte. Apple wollte eine MPU, die Software-kompatibel mit dem 6502 war, der damals im Apple II verwendet wurde, aber mit der Fähigkeit, mehr Speicher zu adressieren und 16-Bit-Wörter zu laden und zu speichern. Das Ergebnis war der 65C816, fertiggestellt im März 1984, mit Mustern, die Apple und Atari in der zweiten Jahreshälfte zur Verfügung gestellt und 1985 vollständig veröffentlicht wurden. Mensch wurde während des Designprozesses von seiner Schwester Kathryn unterstützt, die für einen Teil von das Layout des Geräts.

Der gleiche Prozess führte auch zum 65C802, der innen identisch mit dem 65C816 war. Beide wurden auf den gleichen Fertigungsstraßen hergestellt und trennten sich erst während der letzten Metallisierungsschritte beim Verbinden des Chips mit den externen Pins. Beim 65C802 hatten diese Pins das gleiche Layout wie beim ursprünglichen 6502, was die Verwendung als Drop-In-Ersatz ermöglichte, während die 16-Bit-Verarbeitung der CPU weiterhin genutzt werden konnte. Da es jedoch die ursprüngliche Pinbelegung verwendet hatte, hatte es nur 16 Adressierungspins und konnte daher nur auf 64 KB externen Speicher zugreifen. Wenn Hardwarehersteller ein Projekt von Grund auf konzipierten, verwendeten sie in der Regel den 65C816 anstelle des 65C802, was dazu führte, dass letzterer aus der Produktion genommen wurde.

Später integrierte Apple den 65C816 in den Apple IIGS- Computer. Das grundlegende 65C816-Design wurde von Mitte bis Ende der 1980er bis Anfang der 1990er Jahre von GTE , Sanyo und anderen als Second-Source-Modelle verwendet .

In den 1990er Jahren wurden sowohl der 65C816 als auch der 65C02 auf einen vollständig statischen Kern umgestellt , wodurch es möglich wurde, den Ø2-Takt des Prozessors ohne Verlust von Registerinhalten vollständig zu stoppen . Dieses Merkmal, zusammen mit der Verwendung von asynchronem statischem RAM , ermöglichte es, Designs zu produzieren, die im Standby-Zustand minimalen Strom verbrauchten.

Ab 2021 ist die W65C816S von WDC in 40 pin verfügbar PDIP , PLCC44 oder 44-pin TQFP Verpackung, sowie einen Kern für die ASIC - Integration (zum Beispiel Winbond ‚s W55V9x Reihe von TV Edutainment ICs ). WDC, selbst ein Fabless-Halbleiterunternehmen , arbeitet mit verschiedenen Gießereien zusammen , um den W65C816S sowie andere kompatible Produkte herzustellen. Diskrete Prozessoren sind über eine Reihe von Elektronikhändlern erhältlich. Für Designer, die W65C816S-Funktionalität in einen benutzerdefinierten ASIC integrieren möchten , bietet WDC RTL - Code ( Register-Transfer-Level ) in Verilog an .

W65C802P

Merkmale

WDC 65816-Register
2 3 2 2 2 1 2 0 1 9 1 8 1 7 1 6 1 5 1 4 1 3 1 2 1 1 1 0 0 9 0 8 0 7 0 6 0 5 0 4 0 3 0 2 0 1 0 0 (Bitposition)
Hauptregister
B EIN Akkus
Indexregister
x X- Index
Ja Y- Index
0 0 0 0 0 0 0 0 DP D irect P Alter Register
0 0 0 0 0 0 0 0 SP S tack P ointer
DB 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 D ata B ank Register
Programm zähler
PB PC P rogram C ounter
Statusregister
n V m x D ich Z C S tatus R egister

WDC 65816-Eigenschaften:

  • Fully statischen bietet Design CMOS niedrigen Stromverbrauch (300  μ A bei 1  MHz ) und erhöhte Störsicherheit.
  • Breite Betriebsspannungsbereich: 1,8 V bis 5,0 V ± 5%.
  • Großer Betriebsfrequenzbereich , offiziell maximal 14 MHz bei 5 Volt, unter Verwendung einer einphasigen Taktquelle (Hobbyisten haben den 65C816 erfolgreich über 20 MHz betrieben).
  • Der Emulationsmodus ermöglicht eine weitgehende Softwarekompatibilität mit NMOS 6502 und CMOS 65C02, mit Ausnahme von undokumentierten Opcodes . Alle 256 Opcodes im 65C816 sind in beiden Betriebsarten funktionsfähig.
  • Die 24-Bit-Speicheradressierung bietet Zugriff auf 16 MB Speicherplatz .
  • 16-Bit- ALU , Akkumulator (A), Stapelzeiger (SP) und Indexregister (X und Y).
  • 16-Bit-Direct-Page-(auch Zero-Page-)Register (DP).
  • 8-Bit-Datenbank- (DB) und Programmbank-(PB)-Register, die die Bits 16–23 von 24-Bit-Code- und Datenadressen erzeugen. Separate Programm- und Datenbankregister erlauben Programm Segmentierung und 16 MB lineare Adressierung von Daten geht.
  • Gültige Datenadressen (VDA) und gültige Programmadressen (VPA) steuern Ausgänge für Speicherqualifizierung, Dual- Cache und Cycle-Steal- DMA- Implementierung.
  • Vektor-Pull-(VPB)-Steuerausgang, um anzuzeigen, wenn ein Interrupt-Vektor abgerufen wird.
  • Die Abbrucheingabe (ABORTB) und der zugehörige Vektor unterstützen Prozessorreparaturen von Busfehlerzuständen, wie beispielsweise Seitenfehler und Speicherzugriffsverletzungen.
  • Die direkte Register- und Stapel -Relativadressierung bietet die Möglichkeit für reentrante , rekursive und verschiebbare Programmierung.
  • 24 Adressierungsmodi -13 ursprünglichen 6502 - Modi mit 92 Anweisungen unter Verwendung von 256 op - Codes , einschließlich der meisten neuen Opcodes in dem 65C02 umgesetzt.
  • Blockkopierbefehle, die ein schnelles Kopieren von Datenstrukturen von einem RAM-Bereich in einen anderen mit minimalem Code ermöglichen.
  • Wait-for-Interrupt (WAI)- und Stop-the-Clock (STP)-Befehle reduzieren den Stromverbrauch weiter , verringern die Interrupt-Latenz und ermöglichen die Synchronisation mit externen Ereignissen.
  • Co-Prozessor (COP)-Befehl mit zugehörigem Vektor unterstützt Co-Prozessor-Konfigurationen, z. B. Gleitkommaprozessoren
  • Reservierter "Escape"-(WDM)-Befehl für zukünftige Zwei-Byte-Opcodes und ein Link zu zukünftigen Designs. (WDM sind die Initialen des W65C816S-Designers William D. Mensch .)

Vergleich mit früheren Modellen

Zwei Modi

Der 65C816 hat zwei Betriebsmodi: "Emulationsmodus", in dem die 16-Bit-Operationen unsichtbar sind – die Indexregister werden auf acht Bits gezwungen – und der Chip scheint dem 65C02 sehr ähnlich zu sein, mit den gleichen Zykluszeiten für die Opcodes; und "nativer Modus", der alle neuen Funktionen bereitstellt. Die CPU wechselt automatisch in den Emulationsmodus, wenn sie eingeschaltet oder zurückgesetzt wird, wodurch sie einen 65C02 ersetzen kann, vorausgesetzt, man nimmt die erforderlichen Schaltungsänderungen vor, um das unterschiedliche Pin-Layout zu berücksichtigen.

16-Bit-Register

Die offensichtlichste Änderung des 65C816 im nativen Modus ist die Erweiterung der verschiedenen Register von 8-Bit- auf 16-Bit-Größen. Diese Verbesserung betrifft den Akkumulator (A), die X- und Y- Indexregister und den Stapelzeiger (SP). Es hat keinen Einfluss auf den Programmzähler (PC), der immer 16-Bit war.

Im nativen Modus ändern zwei Bits im Statusregister ihre Bedeutung. Im ursprünglichen 6502 wurden die Bits 4 und 5 nicht verwendet, obwohl Bit 4 als B(reak)-Flag bezeichnet wird. Im nativen Modus wird Bit 4 zum x-Flag und Bit 5 wird zum m-Flag. Diese Bits steuern, ob die Indexregister (x) und/oder der Akkumulator/Speicher (m) eine Größe von 8 Bit oder 16 Bit haben oder nicht. Nullen in diesen Bits legen 16-Bit-Größen fest, Einsen legen 8-Bit-Größen fest. Diese Bits sind beim Einschalten oder Zurücksetzen des Prozessors auf Einsen festgelegt, können jedoch geändert werden, wenn der Prozessor in den nativen Modus geschaltet wird.

Es ist vielleicht nicht sofort klar, warum man die jetzt 16-Bit-Register im 8-Bit-Modus verwenden möchte. Das Umschalten in den 8-Bit-Modus mit den neuen SEP(SEt-Bit im Prozessorstatus) und REP(REset)-Befehlen bedeutet, dass alle nachfolgenden Befehle, die auf diese Register zugreifen, nur ein einzelnes Byte statt zwei lesen oder schreiben. Wenn beispielsweise das m-Bit bei der LDA $1234Ausführung eines Befehls auf 1 gesetzt wird, wird nur ein einzelnes Byte an der Adresse 1234 gelesen, wodurch die Anzahl der zum Ausführen des Befehls erforderlichen Zyklen reduziert wird. Dies ist besonders nützlich, wenn Sie beispielsweise mit 8-Bit-Zeichendaten arbeiten.

Wenn die Registergrößen auf 16 Bit eingestellt sind, greift der Speicherzugriff auf zwei zusammenhängende Bytes des Speichers auf Kosten eines zusätzlichen Taktzyklus zu. Darüber hinaus beeinflusst ein Lese-Modifizier-Schreib-Befehl, wie z. B. ROR <addr>, wenn er verwendet wird, während der Akkumulator auf 16 Bits gesetzt ist, zwei zusammenhängende Bytes des Speichers, nicht eines. Ebenso werden alle arithmetischen und logischen Operationen 16-Bit-Operationen sein.

24-Bit-Adressierung

Die andere wichtige Änderung des Systems im nativen Modus besteht darin, dass das Speichermodell vom ursprünglichen 16-Bit-Format des 6502 auf ein 24-Bit-Format erweitert wird. Der 65C816 generiert 24-Bit-Adressen und verwendet zwei Register, das Datenbankregister ( DB) und das Programmbankregister ( PB), um die Bits 16–23 der effektiven Adresse zu setzen. In beiden Fällen bezieht sich 'Bank' auf ein zusammenhängendes 64-KB-Speichersegment, das durch den Adressbereich begrenzt ist $bb0000-$bbFFFF, wobei bbsich die Bankadresse befindet, d. h. die Bits 16–23 der effektiven Adresse. Beide DBund PBwerden $00beim Einschalten oder Zurücksetzen auf initialisiert .

Während eines Operationscode- oder Operanden- Abrufzyklus PBwird dem Programmzähler ( PC) vorangestellt, um die effektive 24-Bit-Adresse zu bilden. Sollte PC"wrap" (zu Null zurückkehren), PBwird nicht inkrementiert. Daher ist ein Programm an die Grenzen der Bank gebunden, in der es ausgeführt wird. Dieses Speichermodell impliziert, dass Verzweigungs- und Unterprogrammziele in derselben Bank liegen müssen wie der Befehl, der die Verzweigung oder den Aufruf ausführt, es sei denn, "lange" Sprünge oder Unterprogrammaufrufe werden verwendet, um Code in einer anderen Bank auszuführen. Es gibt keine programmatischen Mittel, mit denen PBdirekt geändert werden kann.

Während eines Datenabruf- oder DB-speicherzyklus wird einer 16-Bit-Datenadresse vorangestellt, um die effektive 24-Bit-Adresse zu bilden, an der auf Daten zugegriffen wird. Diese Prozessoreigenschaft macht es möglich, 6502- oder 65C02-Code vernünftig auszuführen, der 16-Bit-Adressen verwendet, um auf Datenelemente zu verweisen. Im Gegensatz zu PB, DBkann unter Programmsteuerung geändert werden, was getan werden könnte, um auf Daten über die Grenzen der 16-Bit-Adressierung hinaus zuzugreifen. Wird DBauch vorübergehend inkrementiert, wenn eine Adresse über die Grenzen der Bank hinaus indiziert ist, die derzeit in DB. DBwird ignoriert, wenn eine 24-Bit-Adresse als Operand für einen Datenabruf-/Speicherbefehl angegeben ist oder wenn sich die effektive Adresse auf der direkten (Null-)Seite oder dem Hardware-Stack befindet . Im letzteren Fall wird eine implizierte Bank $00 verwendet, um die effektive Adresse zu generieren.

Eine weitere Ergänzung des Registersatzes ist das 16-Bit-Direct-Page-Register ( DP), das die Basisadresse für die früher als Zero-Page bezeichnete , jetzt als Direct-Page bezeichnete Seite festlegt . Die direkte Seitenadressierung verwendet eine 8-Bit-Adresse, was zu einem schnelleren Zugriff führt, als wenn eine 16- oder 24-Bit-Adresse verwendet wird. Außerdem sind einige Adressierungsmodi, die eine Umleitung anbieten, nur auf der direkten Seite möglich. Beim 65(C)02 ist die direkte Seite immer die ersten 256 Bytes des Speichers, daher "Nullseite". Im nativen Modus kann der 65C816 eine direkte (Null-)Seite an eine beliebige Stelle in der Bank $00(die ersten 64 KB des Speichers) verschieben, indem er die 16-Bit-Startadresse in DP. Es gibt eine Zugriffsstrafe von einem Zyklus, wenn DPnicht auf eine gerade Seitengrenze gesetzt wird.

Umschalten zwischen Modi

Der aktuelle Betriebsmodus wird im Emulationsbit (E) gespeichert. Nachdem dem vorherigen Satz von sechs Flags im Statusregister (SR) bereits die neuen x- und m-Bits hinzugefügt wurden, waren nicht mehr genügend Bits übrig, um das neue Modusbit zu halten. Stattdessen wurde eine einzigartige Lösung verwendet, bei der das Modusbit "unsichtbar" blieb und nicht direkt darauf zugegriffen werden konnte. Die neue XCEAnweisung (eXchange Carry with Emulation) tauscht den Wert des Emulationsbits mit dem C(arry)-Bit, Bit 0 im Statusregister. Wenn man zum Beispiel nach dem CLCHochfahren des Prozessors in den nativen Modus wechseln möchte, würde man das Übertragsbit CLear verwenden und es dann XCEin das Emulationsbit schreiben. Die Rückkehr zum 65C02-Emulationsmodus verwendet SECgefolgt von XCE.

Intern ist der 65C816 ein vollständiges 16-Bit-Design. Die m- und x-Bits in SR bestimmen, wie die Benutzerregister (Akkumulator und Index) für den Rest des Systems erscheinen. Beim Zurücksetzen startet der 65C816 im 65C02-Emulationsmodus, in dem m und x auf 1 gesetzt sind und nicht geändert werden können. Daher erscheinen die Register dem Rest des Systems als 8 Bits. Das höchstwertige Byte (MSB) des Akkumulators (des B-Akkumulators) ist nicht direkt zugänglich, kann aber mit dem niederwertigsten Byte (LSB) des Akkumulators (des A-Akkumulators) mit Hilfe des XBABefehls getauscht werden . Für die Indexregister (.X und .Y) gibt es keine entsprechende Operation.

Beim Umschalten in den nativen Modus ist das MSB von .X und .Y Null und der B-Akku bleibt unverändert. Wenn das m-Bit in SR gelöscht wird, wird der B-Akkumulator mit dem A-Akkumulator "gekoppelt", um ein 16-Bit-Register zu bilden. Eine Lade-/Speicher- oder arithmetische/logische Operation, die den Akkumulator und/oder den Speicher einbezieht, ist eine 16-Bit-Operation – zwei Buszyklen sind erforderlich, um einen 16-Bit-Wert abzurufen/zu speichern.

Wenn das x-Bit in SR gelöscht wird, werden beide Indexregister auf 16 Bits gesetzt. Bei Verwendung zum Indexieren einer Adresse, zB , LDA SOMEWHERE,Xwird der 16-Bit-Wert im Indexregister zur Basisadresse addiert, um die effektive Adresse zu bilden.

Wenn das m-Bit in SR gesetzt ist, wird der Akkumulator wieder ein 8-Bit-Register, und nachfolgende Operationen am Akkumulator sind mit wenigen Ausnahmen 8-Bit-Operationen. Der B-Akku behält den Wert, den er hatte, als der Akkumulator im 16-Bit-Modus betrieben wurde. Ausnahmen sind die Anweisungen, die das Direktseitenregister (DP) und den Stapelzeiger (SP) zum/vom Akkumulator übertragen. Diese Operationen sind im nativen Modus immer 16 Bit breit, unabhängig vom Zustand des m Bits im Statusregister.

Wenn das x-Bit in SR gesetzt ist, werden nicht nur die Indexregister auf 8 Bit zurückgesetzt, sondern alles, was sich im MSB im 16-Bit-Modus befand, geht verloren, was ein Assemblerprogrammierer nicht vergessen kann.

Anwendungen

Systeme basierend auf 65816 Varianten:

Es wird auch in den C- One- und SuperCPU- Erweiterungen für den Commodore 64 verwendet .

Siehe auch

Verweise

Zitate

Literaturverzeichnis

  • Augen, David; Lichty, Ron (1986). Programmierung des 65816 - einschließlich 6502, 65C02, 65802 . Lehrlingssaal. ISBN 978-0893037895.

Weiterlesen

Externe Links

Dieser Artikel basiert auf Material, das vor dem 1. November 2008 aus dem Free Online Dictionary of Computing entnommen wurde und unter den "Relicensing"-Bedingungen der GFDL , Version 1.3 oder höher, enthalten ist.