PLA (C64-Chip)

Aus C64-Wiki
Zur Navigation springenZur Suche springen
Begriffsklärung Der Titel dieses Artikels ist mehrdeutig. PLA (Begriffsklärung).


PLA Chip von 1988, Commodore Nr. 906114-01

Die PLA ist ein Chip des C64, der die Ansteuerung des RAMs und weiterer Bausteine übernimmt. Die im C16 oder Plus/4 eingesetzten PLA-Chips sind zu C64-Boards nicht kompatibel. Dieser Artikel behandelt nur die PLA im C64.


Allgemeines[Bearbeiten | Quelltext bearbeiten]

Die PLA (Abkürzung für Programmable Logic Array, allgemein hardwareprogrammierbarer Logik-Chip, beim C64 aber bereits fertig programmiert verbaut, da damals günstiger als ein ASIC) ist beim C64 für die Ansteuerung bzw. Aktivierung fast aller weiterer Bausteine zuständig. Die PLA setzt insbesondere das sogenannte Bankswitching beim C64 um, über das die CPU auf die 64 KByte RAM, 20 KByte ROM, 512 Byte Farbram, die Register diverser Chips (CIA, SID, VIC) und ggf. weitere über den Expansionsport angeschlossene Hardware zugreifen kann, obwohl die CPU eigentlich nur 64K Adressen insgesamt ansprechen kann. Dafür kann die CPU mittels der PLA die zugrundeliegenden 64 KByte RAM von den ROMs und Chipregistern "überlagern" lassen: An Stelle des RAM "sieht" die CPU dann das jeweilige ROM bzw. die jeweiligen Chipregister.

Von BASIC aus lässt sich an der Speicherbelegung allerdings nicht viel ändern, da das Betriebssystem des C64 fest von seiner Standard-Speicherkonfiguration ausgeht und abstürzt, wenn sie geändert wird.

Auf der Hauptplatine mit der ASSY 250469 wurden die Funktionen der PLA aus Kostengründen in einen 64poligen Multifunktions-Chip integriert. Dieser ist zudem deutlich weniger anfällig für Defekte als die PLA der früheren Modelle.

Anschlüsse der PLA[Bearbeiten | Quelltext bearbeiten]

Ein- und Ausgänge[Bearbeiten | Quelltext bearbeiten]

Die PLA hat 16 Eingangsleitungen:

  • Von der CPU: LORAM, HIRAM, CHAREN aus dem Prozessorport ($01), A12-A15 vom Adressbus, R/W
  • Vom VIC: VA12, VA13 vom Adressbus, CAS, AEC, BA
  • Von der CIA2: VA14
  • Vom Expansionsport: GAME, EXROM

und 8 Ausgangsleitungen:

Zum Verständnis des C64-Speichermodells relevant sind dabei nur LORAM, HIRAM, CHAREN, die ROM-Leitungen und I/O.

Die genaue Beschaltung ist unter Hardware-Aufbau des C64 beschrieben.

Steckmodule[Bearbeiten | Quelltext bearbeiten]

Steckmodule am Expansionsport können über die Leitungen GAME und EXROM die Speicheraufteilung des C64 beeinflussen. Auf den Modulen vorhandene ROMs können direkt durch ROML und ROMH angesteuert werden.

Pinbelegung[Bearbeiten | Quelltext bearbeiten]

Beschreibung Pin Pin Beschreibung
FE/NC MOS 906114-01 PLA.jpg Vcc 5 Volt Stromversorgung
Adressbus A13 I7 I8 Adressbus A12
Adressbus A14 I6 I9 BA
Adressbus A15 I5 I10 AEC
VA14 I4 I11 R/W
CHAREN I3 I12 EXROM
HIRAM I2 I13 GAME
LORAM I1 I14 VA13 - VIC Adressleitung 13
CAS I0 I15 VA12 - VIC Adressleitung 12
ROMH F7 CE
ROML F6 F0 CASRAM
I/O F5 F1 BASIC
GR/W F4 F2 KERNAL
Masse Vss F3 CHARROM

Funktion[Bearbeiten | Quelltext bearbeiten]

Die PLA legt fest, an welchen Adressen für die CPU des C64 welche Daten sichtbar sind. Dabei sind in den ersten vier KByte des C64-Adressraums immer RAM sichtbar. Ausnahme dabei sind die Speicherstellen $0000 und $0001, in denen immer Datenrichtungsregister und Prozessorport der CPU eingeblendet sind. Was in den restlichen Zonen sichtbar ist, hängt von den Einstellungen LORAM, HIRAM, CHAREN aus dem Prozessorport ($01) der CPU ab. Ferner können Steckmodule über die Leitungen GAME und EXROM Einfluss nehmen.

Weitere Erklärungen zur Belegung der einzelnen Bereiche finden sich unter Speicherbelegungsplan.

# Leitungen Adressraum
Steckmodul Prozessorport 4096–32767
$1000–$7FFF
32768–40959
$8000–$9FFF
40960–49151
$A000–$BFFF
49152–53247
$C000–$CFFF
53248–57343
$D000–$DFFF
57344–65535
$E000–$FFFF
GAME EXROM CHAREN Bit 2 HIRAM Bit 1 LORAM Bit 0
1 1 1 1 1 1 Int. RAM Int. RAM BASIC ROM Int. RAM I/O Kernal ROM
2 1 X 1 1 0 Int. RAM Int. RAM Int. RAM Int. RAM I/O Kernal ROM
3 1 X 1 0 1 Int. RAM Int. RAM Int. RAM Int. RAM I/O Int. RAM
4 1 X X 0 0 Int. RAM Int. RAM Int. RAM Int. RAM Int. RAM Int. RAM
5 1 1 0 1 1 Int. RAM Int. RAM BASIC ROM Int. RAM Charset ROM Kernal ROM
6 1 X 0 1 0 Int. RAM Int. RAM Int. RAM Int. RAM Charset ROM Kernal ROM
7 1 X 0 0 1 Int. RAM Int. RAM Int. RAM Int. RAM Charset ROM Int. RAM
8 1 0 1 1 1 Int. RAM Cart. Low BASIC ROM Int. RAM I/O Kernal ROM
9 1 0 0 1 1 Int. RAM Cart. Low BASIC ROM Int. RAM Charset ROM Kernal ROM
10 0 1 X X X Offen Cart. Low Offen Offen I/O Cart. High
11 0 0 1 1 1 Int. RAM Cart. Low Cart. High Int. RAM I/O Kernal ROM
12 0 0 1 1 0 Int. RAM Int. RAM Cart. High Int. RAM I/O Kernal ROM
13 0 0 1 0 1 Int. RAM Int. RAM Int. RAM Int. RAM I/O Int. RAM
14 0 0 X 0 0 Int. RAM Int. RAM Int. RAM Int. RAM Int. RAM Int. RAM
15 0 0 0 1 1 Int. RAM Cart. Low Cart. High Int. RAM Charset ROM Kernal ROM
16 0 0 0 1 0 Int. RAM Int. RAM Cart. High Int. RAM Charset ROM Kernal ROM
17 0 0 0 0 1 Int. RAM Int. RAM Int. RAM Int. RAM Int. RAM Int. RAM
X: Wert spielt keine Rolle

Der Strich über den Bezeichnungen der Leitungen-Spalten bedeutet, dass die Leitungen eine invertierte Bedeutung haben, also vom Typ Active-Low sind. Die jeweilige Funktion wird dann aktiv, wenn das Signal mit logischem Signalpegel 0 anliegt.

Offen in Konfiguration 10 bedeutet, dass kein Speicherbaustein oder Register eines IO-Chips angesprochen wird bzw. im Adressraum eingeblendet ist und somit der Adressraum quasi in der Luft hängt. Lesezugriffe liefern keinen definierten Wert.

Alternative Darstellungen:

Ultimax-Modus[Bearbeiten | Quelltext bearbeiten]

Der Kompatibilitätsmodus für Ultimax-Steckmodule (Konfiguration 10) ist eine Besonderheit. Da die Max Machine/Ultimax kein eigenes ROM hat, kann in diesem Modus das ROM des Moduls (sozusagen anstelle u.a. des KERNALs) für die CPU eingeblendet werden. In C64-Modulen wird dieser Modus häufig zur Implementierung von Freezern benutzt. Außerdem sind etliche Speicherbereiche in diesem Modus "offen", es können vom Modul also eigene im Steckmodul befindliche Bausteine in diesen Bereichen eingeblendet werden.

Eine weitere Besonderheit des Ultimax-Modus ist, dass der VIC (der in allen anderen Konfigurationen in den 4k-Blöcken ab $1000 und $9000 das Zeichensatz-ROM und ansonsten das C64-RAM sieht) hier bei $3000/$7000/$B000/$F000 das Hi-ROM des Cartridges und bei $0000/$8000/$9000/$D000/$E000 das C64-interne RAM sieht, ansonsten sind die Datenleitungen ebenso "offen".[1] Dies ist also der einzige Modus, in dem dem VIC von einem Cartridge direkt Daten "zugespielt" werden können.

Versionen[Bearbeiten | Quelltext bearbeiten]

906114-01 und 251064-01 sind von den Logiktermen her baugleich, aber das Timing ist nicht ganz dasselbe. Die 251064-01 wurde von Fujitsu hergestellt, im Schaltplan zur 250407 wird sie auch als 'MB112A101' bezeichnet. MB ist das Herstellerkennzeichen von Fujitsu. Auch das Gehäuse dieses Chips ist eindeutig Fujitsu, wie man an der Längskerbe erkennen kann, die zur Markierung von Pin 1 dient.

Laut Schaltplan will die 251064-01 einen bestückten C204 mit 82pF haben. Das ist ein Kondensator zwischen GND und den CAS-Pins der RAMs (also nachdem CAS durch die PLA und R42 gelaufen ist). Die 906114-01 will hingegen einen C203 bestückt haben, 82 pF zwischen CAS am VIC und GND (also bevor CAS durch die PLA geht). Eine Ausnahme ist der 6569R3, dann darf C203 nicht bestückt sein.

Das CAS-Timing funktioniert bei einigen C64-PLA verschieden. Das kann beim Einsatz von PLA-Ersatzschaltungen durchaus von Bedeutung sein, unter Umständen funktionieren diese nicht.

Ersatz der PLA[Bearbeiten | Quelltext bearbeiten]

Die PLA ist einer der anfälligeren Bausteine im C64 und bekannt für häufige Defekte. Eine Ausnahme bildet hier nur die höher integrierte PLA bei C64 Assy No. 250469.

Einfacher Ersatz der PLA ist mit einem EPROM und Anschlussadapter möglich, jedoch funktioniert das in längst nicht jedem Anwendungsfall und kann insbesondere im Zusammenspiel mit Steckmodulen Probleme machen (siehe Thema: Neues aus EPROMhausen auf Forum64.de und Thema: PLA > EPROM geht nicht mit EasyFlash auf Forum64.de). PLDs und EPROMs unterscheiden sich nämlich stark in ihrer internen Funktionsweise: Beim Zustandswechsel der Eingangsleitungen verhält sich ein EPROM - anders als ein PLD - vereinfacht ausgedrückt für kurze Zeit nicht deterministisch, was für undefinierte Zustände im C64 sorgt und so die angesteuerten Bausteine "verwirrt". Besonders kritisch ist dabei das CASRAM-Signal für das RAM, bei dem "Signalschwinger" einen Speicherzugriffszyklus starten können. Angeschlossene Steckmodule oder Erweiterungen, wie bspw. KERNAL-Umschalt-Platinen, können diese Probleme verstärken.

Über die Jahre wurden (und werden z.T. auch immer wieder) von verschiedener Stelle nicht-typisierte Ersatz-PLA vertrieben. Dabei handelte es sich meist um die erwähnten EPROM-"PLA", gebrannte PLD oder CPLD-Nachbauten (siehe Thema: Ersatz-PLA macht Cevi instabil? auf Forum64.de).


Dagegen existieren auch weitestgehend kompatible PLA-Ersatzschaltungen, die eigens entworfen und vertrieben wurden bzw. werden. Auch hier kann es unter verschiedenen Umständen aber durchaus mal zu Inkompatibilitäten kommen.
Bekannt sind vor allem folgende Entwicklungen:

  • Die SuperPLA von Jens Schönfeld kann auch in einem C264-Rechner verwendet werden.
  • Die realPLA von skoe.
  • PLAnkton von e5frog.
  • Die PLAdvanced+ kann auf zahlreichen verschiedenen Commodore-8-Bit-Rechnern eingesetzt werden.
  • Die PLA20V8 von Daniël Mantione.


Der 64-polige Multifunktions-Chip auf 250269-Boards ist im Vergleich kaum defektanfällig. Daher wurde bisher keine Ersatzschaltung für diesen IC mit integrierter PLA entwickelt.


Weblinks[Bearbeiten | Quelltext bearbeiten]

  • "The C64 PLA Dissected" - Dokument zum PLA Reverse Engineering von Thomas Giesel (skoe) Sprache:englisch
  • pla.txt Sprache:englisch - PLA-Schaltungslogik für die alten 82S100-PLAs
  • "Video PLA Austausch" "Troubleshooting a "back screen" C64" Sprache:englisch PLA Chip-Fehler feststellen & beheben von Adrian Black
  • PLA20V8 Seite des Entwicklers zum PLA-Ersatz auf GAL20V8-Basis

Quellen[Bearbeiten | Quelltext bearbeiten]