Architektur des Super Nintendo Entertainment Systems (snes)




старонка5/10
Дата канвертавання24.04.2016
Памер387.65 Kb.
1   2   3   4   5   6   7   8   9   10

8Externe Co-Prozessoren


Da die CPU des SNES mit den max. 3,6MHz recht schwach ist, muss diese für manche Spiele unterstützt werden. Für die ersten Spiele wie „Super Mario World“ reichte die Rechenleistung noch aus. Bei Spielen wie „Starwing“ oder „Super Mario World 2“ welche für damalige Verhältnisse aufwendige Grafiken besaßen, wurden Spezialchips als Co-Prozessoren benötigt. Jedoch waren Grafikberechnungen nicht der einzige Aufgabenbereich solcher Spezialchips. So wurde auch die Berechnung der KI, die Dekompression von Daten aus dem ROM oder auch die Systememulation (Game Boy) auf solche Spezialchips ausgelagert. Ein Teil der möglichen SNES Co-Prozessoren wurde von Nintendo selbst oder von einer von Nintendo beauftragten Firma entwickelt. Meist sind dies universell einsetzbare Co-Prozessoren. Der andere Teil sind herstellerspezifische Eigenentwicklungen. Hierbei handelt es sich meist um Prozessoren, die nur für eine bestimmte Aufgabe entwickelt wurden. (Quelle: 17)
Nachfolgend werden die bekannten von Nintendo entwickelten Spezialchips mit deren Funktion aufgeführt:

Chip

Funktion

SA-1

Der vom Funktionsumfang leistungsstärkste Spezialchip. Er besitzt als Kern die gleiche CPU wie der SNES, hat einen Memory-Controller und zusätzliche Rechenhardware für spezielle Aufgaben. Dieser Chip wird in Kapitel 8.1 näher erläutert.

Super FX 1 & 2

Ein Spezialchip, der hauptsächlich zur Berechnung von 3D-Grafiken verwendet wird. Dieser kann jedoch auch zur Berechnung von 2D-Grafiken und arithmetischen Funktionen verwendet werden.

DSP 1-4

Diese Chipserie wird zum Berechnen von vektorbasierten Funktionen verwendet. Benötigt werden diese Funktionen, um eine pseudo 3D Umgebung zu schaffen.

S-DD1

Der S-DD1 wird verwendet, um Bildmaterial, welches im ROM komprimiert gespeichert ist, zu dekomprimieren. Die SNES-CPU würde ohne diesen Chip die Daten nicht rechtzeitig der PPU zur Verfügung stellen können.

SGB CPU

Wird für den „Super Game Boy“ verwendet. Dies ist ein SNES-Modul, in dem man Game Boy Spiele einsetzten und spielen kann. Da die SNES-CPU nicht genug Rechenleistung hat, um den Game Boy Code in SNES-Code umzuwandeln und in Echtzeit auszuführen, führt dieser Chip das Umwandeln durch.

MegaChips MX15001TFC

Dies ist ein Exot unter den Spezialchips. Erschienen ist er nur in Japan in sog. Nintendo Power Cartridges. Dies waren SNES Module, auf denen man an bestimmten Automaten Spiele gegen Geld laden konnte. Benötigt wurde der Chip zum Speichermanagement und als Bootloader.

Tabelle 6: Nintendo's Co-Prozessoren (Quelle: 17)

Separat von den „offiziellen“ Chips werden nun die herstellerspezifischen Spezialeinheiten aufgeführt:



Chip

Funktion

Cx4

Eigenentwicklung von „Capcom“ zum Berechnen von Wireframe Grafiken und trigonometrischen Funktionen.

SPC7110

Ein von Hudson zur Datendekomprimierung verwendete Spezialeinheit.

ST010, ST011, ST018

Eine von „Seta“ entwickelte Chipserie, welche in einigen Spielen zur Berechnung der KI verwendet wird.

S-RTC

Dies ist eine Echtzeit-Uhr (Real Time Clock)

OBC1

Ein für ein Spiel von „Intelligent Systems“ entwickelter Chip, welcher zur Spritemanipulation verwendet wird.

Tabelle 7: Herstellerspezifische Co-Prozessore (Quelle: 17)

Diese speziellen Einheiten ersetzen trotz ihrer hohen Leistung nicht die Haupteinheit des SNES, sondern unterstützen diese. Somit wird durch das Einsetzen eines Spielmoduls mit einem solchen Chip das SNES zu einer Multiprozessoreinheit. (Siehe Kapitel 8.1)


8.1Der SA-1


Der SA-1 Chip ist der leistungsstärkste Spezialchip des SNES (Quelle: 17). Als Kern dieser Einheit dient die gleiche CPU wie im SNES (WDC65816). Dies macht es leicht, vorhandenen Programmcode auf diesen Prozessor auszulagern. Zudem besitzt der SA-1 noch einige weitere hardwaregestützte Funktionen, welche an entsprechender Stelle in diesem Kapitel behandelt werden.
Die Taktfrequenz dieser Einheit ist um den Faktor 4 höher als die der SNES-CPU im Standard Modus (SNES: 2,68MHz; SA-1: 10,74MHz). Somit ist unter Verwendung dieses Prozessors eine bis zu fünffach höhere Performance des Gesamtsystems möglich. (Quelle: 10 – Seite 9)

Speicheranbindung


Gegenüber einem Modul ohne Co-Prozessor bei dem die Adress- und Datenleitungen direkt am RAM und ROM anliegen, werden in diesem Fall die Adressen und Daten an den SA-1 übergeben. Dieser übernimmt dann die Ansteuerung des Speichers. Abbildung 9 soll diesen Aufbau veranschaulichen. (Quelle: 10 – Seite 11)

Abbildung 9: Speicheranbindung des SA-1 (Quelle: 10 – Seite 11)

In dieser Darstellung ist nicht erkennbar, dass die SNES CPU auf fast den gesamten Speicher des Moduls zugreifen kann. Lediglich die internen Register des im SA-1 enthaltenen WDC65816 sind der SNES-CPU nicht zugänglich. Der SA-1 hingegen hat selbstverständlich Zugriff auf diese Register, jedoch besitzt diese Einheit keine Möglichkeit Daten, direkt aus dem WRAM des SNES zu beziehen. (Siehe Abbildung 10) (Quelle: 10 – Seite 12)

Abbildung 10: Speicheranbindung - SA-1 (Quelle: 10 – Seite 12)

Verallgemeinert kann man sagen, dass die SA-1 Einheit auf den gesamten auf dem Modul befindlichen Speicher zugreifen kann, jedoch keinen Zugriff auf den im SNES implementierten Speicher bekommt. Dies ist auch sinnvoll, da die SNES-CPU die Steuereinheit des Gesamtsystems ist und eine Umsetzung eines gemeinsamen Speichers recht aufwändig ist. Als Beispiel hierfür kann man die Multiprozessor-Server-Systeme nennen. (Quelle: 10 – Seite 12)

Interner Aufbau


Der interne Aufbau des SA-1 entspricht dem des nachfolgenden Blockschaltbildes. Die einzelnen dort dargestellten Elemente werden nachfolgend erläutert.

Abbildung 11: Blockschaltbild des SA-1 (Quelle: 10 – Seite 13)

Auf die CPU soll hier nicht eingegangen werden, da diese bis auf wenige Unterschiede (Siehe Entwicklerhandbuch 2 Kapitel 1-5-5) die gleiche wie im SNES ist. Informationen zur Arbeitsweise der Einheit entnehmen Sie bitte Kapitel 6.2. Auch beim 2KB bzw. 16Kb großen RAM wird auf eine Erklärung verzichtet, da davon ausgegangen wird, dass die Funktionsweise von RAM bekannt ist. Die „Super NES CPU I/O“ (siehe Abbildung 11) ist an sich keine Einheit sondern lediglich das Pinout, mittels welches der SNES mit dem Modul verbunden ist.

Allen einzelnen Einheiten gemein ist die Konfigurationsart. Sowohl das Einstellen der Einheiten als auch die Kommunikation wird über SFR (Special Function Register) gesteuert. Hierzu stehen eine Vielzahl an Registern zur Verfügung, die aufgrund des Umfangs nicht alle erläutert werden sollen. Eine ausführliche Beschreibung ist dem Entwicklerhandbuch von Nintendo zu entnehmen. (Quelle: 10 – Seite 23 folgende)


8.1.1.1Super MMC:


Die Super MMC ist ein Speichercontroller welcher die Ansteuerung des GamePak-Roms übernimmt. Diese Einheit ermöglicht dem SNES ein ROM mit über 32Mb Speicher zu adressieren. Hierzu wird der sog. Map Mode 22 verwendet. Um diesen zu veranschaulichen, sollte zunächst ein Blick auf die Memory-Map des SA-1 geworfen werden (Abbildung 12) (Quelle: 10 – Seite 14)

Abbildung 12: Memory-Map des SA-1 (Quelle: 10 – Seite 19)

Im linken Bereich der Abbildung befinden sich vier separate Bereiche, welche mit „Game Pak Rom Select“ gekennzeichnet sind (0000H – FFFFH in den Bänken C0H – FFH). Jedes dieser Elemente hat einen Adressbereich, der zum Adressieren von 8Mbit nötig ist. Über spezielle Register, welche anschließend noch genauer beschrieben werden, kann nun angegeben werden, welcher Adressteil des GamePak-Roms mit diesen Bänken dargestellt werden soll. Diese Konfigurationsregister ermöglichen zudem die Zuweisung bestimmter ROM-Adressbereiche in die virtuellen Adressbereiche 00:8000H – 1F:FFFFH, 20:8000H – 3F:FFFFH, 80:8000H – 9F:FFFFH, A0:8000H – BF:FFFFH. Dabei besteht eine spezielle Verknüpfung der Bänke Cx, Dx, Ex, Fx mit den zuvor genannten Adressbereichen. Bank Cx ist dem Bereich 00:8000H – 1F:FFFFH zugewiesen, wohingegen Bank Dx mit dem Bereich 20:8000H – 3F:FFFFH verknüpft ist. Diese Art der Verbindung besteht auch für die übrigen beiden Bänke Ex und Fx.
Welche Adressbereiche des ROMs in diesen Adressraum gelegt werden können, hängt somit vom in der zugehörigen Bank ausgewählten Speicherbereich ab. Entweder es wird der Adressbereich der Bank in den Speicherbereich kopiert oder es wird der Block des ROMs abgelegt, welcher dieselbe Nummer hat wie der Adressbereich (siehe hierzu Abbildung 13). Eine genauere Erklärung folgt weiter unten in diesem Kapitel.
Sowohl der SA-1 als auch die SuperNES CPU können über die in diesen Bereichen dargestellten Speicherbereiche auf den Speicher des ROMs zugreifen.
Wie bereits erwähnt, wird über SFR ausgewählt, welche GamePak-ROM-Bereiche an welcher Stelle in der Memory Map vertreten sind. Ein solches Register ist wie folgt aufgebaut:

Abbildung 13: ROM-Bank Select (Quelle: 10 – Seite 32)



Dieses Register gibt an, welche Adressen des Roms in der Bank Cx und im Bereich 00:8000H – 1F:FFFFH dargestellt werden. Die Register für die anderen Bänke besitzen den gleichen Aufbau wie das oben dargestellte.
Die Bits CB0-CB2 geben an, welche 8Mb des ROMs mittels der Bank Cx in der Memory Map angesprochen werden soll. Sollte z.B. der Speicherbereich 40:0000H – 4F:FFFFH in Bank Cx abgelegt werden, so entspricht dies dem fünften Element des ROMs und somit der Bitfolge 100. Nun gibt es noch das Bit, welches mit „CBM“ gekennzeichnet ist. Dieses gibt an, welches Element in den ersten Game Pak ROM Image-Bereich geladen wird (für Bank Dx wäre es das zweite Game Pak ROM Image, beim Ex das Dritte und bei Fx das Vierte). Setzt man das CBM Bit, so ist im entsprechenden Game Pak ROM Image Bereich der gleiche ROM-Bereich abgebildet wie in Bank Cx. Ist das Bit nicht gesetzt, so wird der erste Bereich des ROMs in den ersten Game Pak ROM Image-Bereich gelegt (bei Bank Dx der zweite Teil in den zweiten Bereich und so fort)
Auf die Speicherbänke 40H – 6FH und die BW-RAM Image Bereiche gehen wir nicht näher ein. Lediglich der Verwendungszweck soll hier kurz erklärt werden. Die Bänke 40H-6FH dienen zum Adressieren des Backup-RAMs. Dieser Speicherbereich kann in Blöcke à 64Kb unterteilt werden. Einer dieser Blöcke kann in die BW-RAM Image-Bereiche projiziert werden. Hierbei ist zu beachten, dass der BW-RAM-Image-Bereich in den Bänken 00H – 3FH den identischen Inhalt hat wie der in den Bänken 80H - BFH.
Die weiteren noch nicht besprochenen Bereiche sind nicht im Zusammenhang mit dem Super MMC zu sehen, da dieser nur die Speicherverwaltung zum externen ROM und RAM übernimmt. (Quelle: 10 – Seite 20 folgende)

8.1.1.2Arithmetic Circuit


Diese Einheit dient zum schnellen Abarbeiten von arithmetischen Funktionen. Es wird die Multiplikation, die Division und die kumulative Summe unterstützt. Alle Operanten, mit Ausnahme des Divisors, können dabei „signed“ sein.
Gesteuert wird die Einheit durch das Register 2250H, in welchem die Bits ACM und M/D die durchzuführende Operation angeben. Wie diese gesetzt werden können und wie viele Takte (bei einer Taktfrequenz von 10,74MHz) für die Verarbeitung notwendig sind, entnehmen Sie der nachfolgenden Tabelle.

Operation

ACM

M / D

Takte

Multiplikation

0

0

5

Division

0

1

5

Kumulative Summe

1

-

6

Tabelle 8: Arithmetic Circuit (Quelle: 10 – Seite 79)

Werte, die diese Einheit verarbeiten soll, müssen dazu in speziellen Registern gesichert werden. Welcher Operand in welches Register eingetragen werden muss, entnehmen Sie bitte dem 2. Entwicklerhandbuch Kapitel 1-7-2 folgende. (Quelle: 10 – Seite 79)


8.1.1.3Character Conversion Circuit


Die CCC dient zum Umwandeln der im BW-RAM oder I-RAM abgelegten Bitmap-Daten in ein PPU-konformes Format. Aufgrund des Aufbaus von Bitmap-Daten können mit diesem Format z.B. Rotationen und Größenanpassungen schneller durchgeführt werden. Jedoch ist die PPU nicht in der Lage, Bitmap-Daten zu verarbeiten. Wie diese Umwandlung durchgeführt wird, entnehmen Sie bitte Kapitel 1-6-1 des 2. Entwicklerhandbuchs. (Quelle: 10 – Seite 67)

8.1.1.4Variable Length Bit Processing Unit


Diese Einheit ist in der Lage, unterschiedlich lange Datensätze aus dem GamePak ROM zu lesen. Aus Sicht dieser Einheit besteht der gesamte ROM-Speicher aus einem Datenstring welcher an beliebiger Stelle gelesen werden kann. So muss nicht mehr Byteweise aus dem Speicher gelesen werden, was zu einem Geschwindigkeitsschub führt. Umgesetzt wird diese Funktion mittels eines Barrel-Shifts.
Die Arbeitsweise dieser Einheit ist in Kapitel 1-8-1 im 2. Entwicklerhandbuch beschrieben. (Quelle: 10 – Seite 82 folgende)

8.1.1.5Timer & DMA Circuit


Aufgrund der Tatsache, dass die Funktionsweise dieser Einheiten bekannt sein sollte, verzichten wir an dieser Stelle auf eine Beschreibung. Sollten dennoch Informationen zu diesen Einheiten erwünscht sein, so ziehen sie bitte Kapitel 1-9-1 des zweiten Entwicklerhandbuchs für den DMA-Circuit zu Rate. Das Kapitel der Timer ist leider nicht in dieser Version des Dokuments vorhanden. (Quelle: 10)

Kommunikation mit dem SNES


Der SA-1 ist nicht in der Lage, der SNES-CPU Befehle aufzuzwingen, da das SA-1 System den Slave darstellt. Dennoch muss natürlich eine Kommunikation zwischen beiden Einheiten stattfinden. Dies geschieht über spezielle Register, welche Interrupts auslösen. Hierzu stehen zwei Arten von Interrupts zur Verfügung. Zum einen der normale IRQ sowie der NMI (Not Maskable Interrupt). Letzerer ist nur in eine Richtung möglich. Dem SA-1 ist es nicht möglich, einen NMI an die Konsole zu senden.
Nach dem Empfang eines IRQs versucht der Empfänger anhand eines Registers festzustellen, von welcher Einheit der Request gesendet wurde. Anschließend wird der Request vom Empfänger zurückgesetzt.
Neben den eigentlichen IRQ kann noch eine zusätzliche 4Bit große Nachricht übertragen werden, welche dem Empfänger ermöglicht, auf spezielle Weise auf den Interrupt zu reagieren. Da dies jedoch nicht immer ausreichend ist, können zusätzliche Informationen über dem von beiden Prozessoren erreichbaren I-Ram ausgetauscht werden. Auch der BW-RAM könnte hierfür verwendet werden, jedoch ist dieser während einer Character Conversation nicht zugänglich.

In diesem Zusammenhang soll auch der „Internal Controller“ etwas näher erläutert werden. Aufgabe dieses Elementes ist es, Kollisionen bei Datentransfers zu vermeiden. Dies gilt sowohl für die im SA-1 verbauten Einheiten als auch für die Transfers nach Extern. Sollte die SNES-CPU und ein Element des SA-1 simultan auf den RAM zugreifen wollen, so wird der SNES-CPU Vorrang gewährt. (Quelle: 10 – Seite 59)


Operating Modes


Die SA-1 Erweiterung kann in verschiedenen Modi zusammen mit der SNES-CPU arbeiten. Diese Modi werden nicht durch SFR eingestellt, sondern dynamisch von der SNES-CPU gewählt. Allen Modi gemein ist, dass die SA-1 keinen Einfluss auf die Wahl hat. Dieser ist im Master-Slave-System der Slave und führt daher nur die Operationen aus, die diesem zugewiesen wurden. (Quelle: 10 – Seite 63)

Folgende 3 Modi stehen zur Wahl:


8.1.1.6Accelerator Mode


Dieser Modus ist aus Programmierer-Sicht der am einfachsten umzusetzende. Hierbei dient der SNES-CPU nur zum Hochladen der auszuführenden Routinen zum SA-1. Dieser verarbeitet dann die ihm zugeschickten Daten. Während der Verarbeitung im SA-1 wartet der SNES-CPU im Idle-Zustand. Erst sobald die SA-1 per Interrupt an die SNES-CPU signalisiert, dass die Programmroutinen verarbeitet wurden, beginnt die CPU weitere Routinen an den SA-1 zu senden.
Die gesamte Abarbeitung des Programmcodes wird also durch die SA-1-Einheit durchgeführt. Dass die SNES-CPU dabei Untätig ist, macht diesen Modus zum langsamsten von allen.
Nachfolgend ist diese Verarbeitungsmethode dargestellt: (Quelle: 10 – Seite 63)



Abbildung 14: Accelerator Mode (34)

8.1.1.7Parallel Processing Mode


Bei diesem Modus werden zuvor sequenziell abgearbeitete Programmteile parallel auf den beiden CPUs abgearbeitet. Dieser Modus ist somit schneller als der Accelerator Mode, da auch die SNES-CPU an der Abarbeitung des Programmcodes beteiligt ist. Es können jedoch auch hier Idle-States entstehen, wenn Programmteile auf Ergebnisse von Routinen im anderen Prozessor warten müssen. (Quelle: 10 – Seite 64)



Abbildung 15: Parallel Processing Mode (Quelle: 10 – Seite 64)

8.1.1.8Mixed Processing Mode


Wie der Name schon andeutet, werden hier die beiden zuvor angesprochenen Modis miteinander verknüpft. Die SNES-CPU teilt dabei dem SA-1 Programmteile zu, die dieser abarbeiten soll. Währenddessen verarbeitet dieser andere Subroutinen. Es ist jedoch auch möglich, dass die SNES-CPU bereits angefangene Subroutinen an den wesentlich schnelleren SA-1-CPU weiterleitet und auf ein Ergebnis wartet. (Quelle: 10 – Seite 65)



Abbildung 16: Mixed Processing Mode (Quelle: 10 – Seite 65)
1   2   3   4   5   6   7   8   9   10


База данных защищена авторским правом ©shkola.of.by 2016
звярнуцца да адміністрацыі

    Галоўная старонка