PLA (C64-Chip)
Aus C64-Wiki
Die PLA ist der Chip des C64, der die Speicheransteuerung übernimmt.
Inhaltsverzeichnis |
[Bearbeiten] Allgemeines
Die PLA (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. Hierzu kann die CPU mittels der PLA die zugrundeliegenden 64 KByte RAM von den ROMs und Chipregistern "überlagern" lassen: An Stelle des RAMs "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.
[Bearbeiten] Anschlüsse der PLA
[Bearbeiten] Ein- und Ausgänge
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
Die PLA hat 8 Ausgangsleitungen:
- Zum RAM: CASRAM
- Zu den ROMs: BASIC, KERNAL, CHAROM (zu den jeweiligen Enable-Pins)
- Zum Farbram: GR/W
- Zum SID, VIC und Farbram: I/O (steuert über Demultiplexer U15 die Enable-Pins der jeweiligen Chips an)
- Zum Expansionsport: ROML, ROMH
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.
[Bearbeiten] Steckmodule
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.
[Bearbeiten] Funktion
Der Adressraum des C64 lässt sich in folgende Zonen unterteilen:
| Speicheradressen | Größe | Diese Zonen können folgendermaßen konfiguriert werden: |
|---|---|---|
| 0–4095 / $0000–$0FFF | 4 KByte | Internes RAM: ein Teil der 64 KByte des C64-RAMs. |
| 4096–32767 / $1000–$7FFF | 28 KByte | Internes RAM oder "Offener" Adressraum: normalerweise unbelegt, aber von Steckmodulen nutzbar. |
| 32768–40959 / $8000–$9FFF | 8 KByte | Steckmodul-ROM: ROML oder Internes RAM. |
| 40960–49151 / $A000–$BFFF | 8 KByte | BASIC ROM oder Steckmodul-ROM: ROMH oder "Offener" Adressraum. |
| 49152–53247 / $C000–$CFFF | 4 KByte | Internes RAM oder "Offener" Adressraum. |
| 53248–57343 / $D000–$DFFF | 4 KByte | I/O: VIC, SID, CIA-Register und Farbram oder CHAR ROM: zwei Standardzeichensätze umfassend. |
| 57344–65535 / $E000–$FFFF | 8 KByte | KERNAL ROM oder Steckmodul-ROM: ROMH. |
Offener Adressraum 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. Da dieser Zustand nur von einem Steckmodul hervorgerufen werden kann, wäre dieses mit entsprechender Adressdekodierungslogik in der Lage, eigene, am Steckmodul befindliche Bausteine in diesen Bereichen einzublenden.
In den ersten vier KByte des C64-Adressraums ist immer RAM sichtbar. 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.
| # | Leitungen | Adressraum | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Prozessorport | Steckmodul | 4096–32767 $1000–$7FFF | 32768–40960 $8000–$9FFF | 40960–49151 $A000–$BFFF | 49152–53247 $C000–$CFFF | 53248–57343 $D000–$DFFF | 57344–65535 $E000–$FFFF | ||||
| CHAREN | HIRAM | LORAM | GAME | EXROM | |||||||
| 1 | 1 | 1 | 1 | 1 | 1 | Int. RAM | Int. RAM | BASIC ROM | Int. RAM | I/O | Kernal ROM |
| 2 | 0 | 1 | 1 | 1 | 1 | Int. RAM | Int. RAM | BASIC ROM | Int. RAM | Charset ROM | Kernal ROM |
| 3 | 1 | 0 | 1 | 1 | X | Int. RAM | Int. RAM | Int. RAM | Int. RAM | I/O | Int. RAM |
| 1 | 0 | 1 | 0 | 0 | |||||||
| 4 | 0 | 0 | 1 | 1 | X | Int. RAM | Int. RAM | Int. RAM | Int. RAM | Charset ROM | Int. RAM |
| 5 | 0 | 0 | 1 | 0 | 0 | Int. RAM | Int. RAM | Int. RAM | Int. RAM | Int. RAM | Int. RAM |
| X | 0 | 0 | 1 | X | |||||||
| 6 | 1 | 1 | 0 | 1 | X | Int. RAM | Int. RAM | Int. RAM | Int. RAM | I/O | Kernal ROM |
| 1 | 0 | 0 | X | 0 | |||||||
| 7 | 0 | 1 | 0 | 1 | X | Int. RAM | Int. RAM | Int. RAM | Int. RAM | Charset ROM | Kernal ROM |
| 0 | 0 | 0 | X | 0 | |||||||
| 8 | 1 | 1 | 1 | 1 | 0 | Int. RAM | Cart. ROM (L) | BASIC ROM | Int. RAM | I/O | Kernal ROM |
| 9 | 0 | 1 | 1 | 1 | 0 | Int. RAM | Cart. ROM (L) | BASIC ROM | Int. RAM | Charset ROM | Kernal ROM |
| 10 | 1 | 1 | 0 | 0 | 0 | Int. RAM | Int. RAM | Cart. ROM (H) | Int. RAM | I/O | Kernal ROM |
| 11 | 0 | 1 | 0 | 0 | 0 | Int. RAM | Int. RAM | Cart. ROM (H) | Int. RAM | Charset ROM | Kernal ROM |
| 12 | 1 | 1 | 1 | 0 | 0 | Int. RAM | Cart. ROM (L) | Cart. ROM (H) | Int. RAM | I/O | Kernal ROM |
| 13 | 1 | 1 | 1 | 0 | 0 | Int. RAM | Cart. ROM (L) | Cart. ROM (H) | Int. RAM | Charset ROM | Kernal ROM |
| 14 | X | X | X | 0 | 1 | Offen | Cart. ROM (L) | Offen | Offen | I/O | Cart. ROM (H) |
| 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.
Alternative Darstellungen:
- PLA Signalmatrix und Erklärung (engl.) aus The Transactor Volume 6, Issue 05, pp. 51,
[Bearbeiten] Ersatz der PLA
Die PLA ist einer der anfälligeren Bausteine im C64. Einfacher Ersatz ist mit einem EPROM und Adapter möglich, jedoch muss das nicht immer gut funktionieren und kann insbesondere im Zusammenspiel mit Steckmodulen Probleme machen (siehe "Neues aus EPROMhausen" und PLA > EPROM geht nicht mit EasyFlash auf Forum64.de). Logikbausteine und Eproms haben einen grundsätzlich anderen internen Aufbau. Damit ist das gelingen eines Funktionsfähigen Adapters abhängig von der Implementierung des Eproms. Diese Implementierung kann auch noch zwischen den Geschwindigkeitsvarianten wechseln. Besonders empfindlich reagiert das Signal für das DRAM. Beim addressieren des Eproms wechseln die Ausgänge um irgendwann stabil anzuliegen. Diese Schwinger können dann im DRAM einen Speicherzugriffszyklus starten. Man kann bei einem defekten PLA auch nur die defekten Pins durch ein Huckepack angebrachtes Eprom ersetzen. Sind nur die "langsamen" Signale betroffen hat dieses Verfahren eine sehr hohe Erfolgsquote. Korrekt ist der Ersatz einer ausgefallenen PLA mit einem programmierten CPLD (siehe "Ersatz-PLA macht Cevi instabil?" auf Forum64.de).
[Bearbeiten] Weblinks
- pla.txt
- PLA-Schaltungslogik für die alten 82S100-PLAs
- PLA-Ersatz
lieferbar von FPGAArcade.com
- PLA
bei Herwig Siebenhofer
Hardware-Aufbau des C64 · Hardware-Portalseite
Komponenten des C64: CPU · VIC · SID · CIA · PLA · RAM · ROM · Farbram