6502-Extension
Inhaltsverzeichnis
Das 6502 Extension Board
Die 6502 Extension ist eine Platine, mit der man ein beliebiges 6502 System erweitern kann um RAM und ROM (Flash Speicher). Zudem kann der RAM und/oder der ROM des Zielsystem ersetzt werden durch Board internes RAM. Die 6502 Extension wird anstatt der CPU 6502 eingesetzt (die CPU kommt dann auf die Platine). Dadurch hat die Platine Zugriff auf den gesamten Adressraum der CPU (64KB).
Die Idee wurde stark inspiriert durch die Universal 6502 RAM and ROM Expansion von Nicolas Welte. Dieses Board hat in der Praxis gezeigt, dass es für zahlreiche Einsatzgebiete wundervoll funktioniert. Heute ist Speicher sehr preisgünstig geworden. Und die Praxis mit dem 6502 RAM/ROM Board hat da und dort neue Wünsche aufgeworfen, deshalb habe ich die 6502 Extension entwickelt.
Auf dem Board befindet sich:
- ein Flash Speicher mit 512KB (AM29F040)
- ein SRAM Speicher mit 128KB (62LV1027)
- ein 74LS245 um den Datenbus zu trennen
- zwei GAL 22v10
- ein 74LS273 als Register
Was kann man mit dem Board tun:
- Diagnose an defekte 6502 Computer
- Reparatur von defekte 6502 Computer
- Speichererweiterung (RAM und ROM)
- Flash Laufwerk für Tools und andere Programme
Universal 6502 RAM and ROM expansion
Nicolas Welte hat mit der 6502 RAM/ROM Expansion ein großartiges Tool geschaffen. Dieses geniale Board lässt sich an jedes 6502 System anpassen und hat sich in der Praxis schon sehr bewährt. Vielen alten PET Computer wurde durch dieses Board neues Leben eingehaucht oder einfach nur der Speicher auf 32K erweitert. Man kann über DIP Switch die BASIC Version wählen oder zwischen 40 und 80 Zeichen umschalten (bei 8032 Systemen).
Der Unterschiede zum 6502 Extension Board sind:
- die 6502 Extension hat einen größeren FLASH Speicher (512K statt 128K)
- die 6502 Extension hat einen größeren SRAM Speicher (128K statt 32K)
- die Adressierung ist flexibler durch den Einsatz von zwei GAL
- Schreibzugriffe in den internen Board Speicher werden nicht ins externe System getragen
- Lesezugriffe in den internen Board Speicher werden nicht in den IO Bereich des externen System getragen
- die 6502 Extension ist über die Software konfigurierbar durch Einsatz eines Registers
Einsatz in 6502 Systeme
Das 6502 Extension Board kann prinzipiell in jedem System eingesetzt werden, das eine 6502 CPU verwendet. Allerdings ist jedes 6502 System für sich ziemlich speziell, was die IO und Speicherverwaltung anbelangt. Deshalb muss die 6502 Extension an das Zielsystem 'angepasst' werden. Diese Anpassung erfolgt über die beiden GAL Bausteine auf der Platine in Form einer JEDEC Datei. Der GAL Baustein kann mit den meisten EPROM Programmiergeräten (zB. der TL866) beschrieben werden.
Gute Einsatzmöglichkeit sehe ich für folgende Systeme:
- Commodore PET und CBM
- Commodore VC-20
- Commodore 1541 Floppy Laufwerk
- andere Commodore Floppy Laufwerke
- Single Board Computer (zb. das 6502 Microprocessor Kit von Wichit Sirichote)
Es sind JEDEC Dateien verfügbar für diese Zielsysteme:
- Commodore PET und CBM
- 6502 Microprocessor Kit von Wichit Sirichote
Anpassung an beliebige 6502 Systeme
Das 6502 Extension Board kann prinzipiell an jedes System angepasst werden, das eine 6502 CPU verwendet. Die CPU 6502 hat einen Adressraum von 64K, wobei sich auch die IO Ports den Adressraum mit dem Speicher teilen. Die CPU 'sieht' also zu jedem Zeitpunkt generell immer nur 65536 Bytes (64K). Dieser Adressraum von 64K wird nun individuell genutzt von jedem 6502 System. Der Speicher gliedert sich in ROM (readonly Memory), in RAM (random access Memory) und IO. Das können aber beliebig viele Blöcke sein, die auch nicht aufeinander folgen müssen.
Nun hat das 6502 Extension Board auch selbst ROM (512K Flash), RAM (128K SRAM) und IO (das Register). Deshalb unterscheiden wir zwischen Board internen Speicher (Adressraum der 6502 Extension Platine) und Board externen Speicher (das 6502 Zielsystem). So gesehen ist die 6502 Extension schon fast ein selbstständiges kleines 6502 System, es fehlen nur Takterzeugung und Benutzer Schnittstellen.
Auf der 6502 Extension befinden sich zwei GAL Bausteine. Der innere GAL ist der Adressen Decoder, der das externe 6502 System abbildet. Es gehen alle 16 Adressleitungen der CPU auf den Adressen Decoder, deswegen kann er jedes einzelne Byte des Adressraum unserer 6502 CPU einem 'Speichertyp' zuordnen. So kann man praktisch jedes 6502 System nachbilden, was den Aufbau des Adressraum anbelangt.
Der Adressen Decoder erkennt also, auf 'was' (IO, ROM, RAM) die CPU in dem externen System zugreifen will. Will man nun zb. den gesamten RAM im Zielsystem ersetzen durch Board eigenen RAM, dann erfolgt dies aufgrund der Information des Adressen Decoder GAL. Dasselbe kann man mit dem externen ROM machen, man kann es ersetzen durch Board eigenen Speicher. Den IO Bereich kann man nicht ersetzen, aber man kann ihn 'unsichtbar' machen für die CPU. Das macht dann Sinn, wenn ein Programm einen möglichst großen durchgängigen Adressraum benötigt (zB. flache Adressierung: 64K RAM).
Der Adressen Decoder GAL ermöglicht also eine Anpassung des Board an ein externes 6502 System. Die Information über den Speichertyp beschränkt sich aber nicht auf IO, ROM und RAM. Der Speichertyp hat 3 Bits und kann damit bis zu 8 Zustände beschreiben.
Beim der CBM-8296 Implementierung gibt es folgende Speichertypen:
- die ersten 1024 Bytes des externen RAM (Zeropage, Stack, Buffer ...)
- der restliche externe RAM
- jede Art von ROM Sockel (8K Kernal, 8K BASIC, 4K Editor, 2x 4K Zusatz ROM)
- Bildschirm RAM
- externes IO (E800-E8FF und FFF0)
Um die 6502 Extension an ein 6502 System anzupassen muss man die Logik in den GAL Bausteinen implementieren. Der Adressen Decoder GAL bildet den Adressraum des Zielsystem nach und es legt auch die Adresse des Board internen Register fest. Beim CBM 8296 hat sich die Adresse FFF1 angeboten, das kann aber bei einem anderen 6502 System ganz anders sein.
Das andere GAL bestimmt die 'Logik' der 6502 Extension. Der Logik GAL kann in vielen Fällen der selbe sein wie bei einem anderen System. Aber unter Umständen will man auch den Logik GAL verändern, um zusätzlich Adressen Modelle zu erstellen oder bestehende Modelle anzupassen.
Das IO Register der 6502 Extension besteht aus einem 8-fach D-FlipFlop (74LS273). Die Verdrahtung ist natürlich fix, daher kann man die Funktion der einzelnen Bits nicht frei definieren. Die Belegung der Register Bits:
- Bit 7 bis 4 stellt die Bank des Flash ein (Bank 0 bis 15)
- Bit 3 bis 0 stellen das gewünschte Adressen Modell ein (Modell 0 bis 15)
Beim der CBM-8296 Implementierung gibt es folgende Adressen Modelle:
- Modell 0: 32K int. RAM, 32K int. Flash, no IO, no Screen (Start Konfiguration nach dem Reset)
- Modell 1: 32K int. RAM, 32K int. Flash, no IO, no Screen (Flash beschreibbar Programmierbar)
- Modell 2: 32K int. RAM Bank 1, 4K RAM, 28K int. prot. RAM, no Screen (Tool Konfig 1)
- Modell 3: 32K int. RAM Bank 1, 32K int. prot. RAM, no Screen (Tool Konfig 2)
- Modell 4: 64K int. RAM Bank 0, no IO, no Screen (64K flach Bank 0)
- Modell 5: 32K int. RAM Bank 1, 32K int. prot. RAM (Betriebsmodus 0 offen)
- Modell 12: 32K int. RAM Bank 1, 32K int. prot. RAM, no register (Betriebsmodus 1, gesperrt)
- Modell 13: 32K int. RAM Bank 1, 32K extern, no register (Betriebsmodus 2, gesperrt)
- Modell 14: 32K ext. RAM, 32K int. prot. RAM, no register (Betriebsmodus 3, gesperrt)
- Modell 15: 32K ext. RAM, 32K extern, no register (Betriebsmodus 4, 6502 Extension deaktiviert)
Der Board interne Speicher
Das 6502 Extension Board hat 512K Flash Speicher, 128K SRAM und ein IO Register zur Konfiguration
Der Flash Speicher hat eine Größe von 512K. Es können nur immer exakt 32K eingeblendet werden, und das nur in den oberen 32K des Adressraum. Bei 32K Seiten in einem 512K großen Speicher hat man 16 Seiten (Bank 0 bis Bank 15).
Der SRAM hat eine Größe von 128K. Es können nur immer exakt 64K eingeblendet werden, allerdings müssen nicht die gesamten 64K sichtbar sein und der Speicher kann auch für bestimmte Regionen einen Schreibschutz haben. Man hat also zwei 64K Seiten (Bank 0 und Bank 1).
Im normalen Betrieb hat der Flash Speicher keine Funktion. Er ist mehr wie ein Laufwerk zu sehen, es werden 'Dateien' geladen aus dem Flash in den externen oder den internen RAM. Externe ROM können durch internen RAM 'ersetzt' werden, die physischen Speicherbausteine im externen System werden dann nicht mehr benötigt und können auch ausgebaut werden. Wenn der interne RAM ein externes ROM ersetzt, dann wird ein Schreibschutz gesetzt, damit es auch wie ein ROM aussieht und nicht versehentlich überschrieben werden kann.
Bei der CBM-8296 Implementierung startet das Board mit folgender Konfiguration:
- die ersten 32K (0000-7FFF) sind Board interner SRAM Bank 0
- die oberen 32K (8000-FFFF) sind Flash Speicher Bank 0 (Ausnahme: IO Register)
- das IO Register an der Adresse FFF1
Dokumente / Dateien
Links
- die großartige 6502 RAM/ROM Expansion von Nicolas Welte
- The universal 6502 RAM/ROM Expansion (Nicolas Welte's Hardware Projects)