6502-Extension

Aus
Wechseln zu: Navigation, Suche
6502 Extension
6502 Extension
6502 Extension


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:

  • Speichererweiterung (RAM und ROM)
  • ersetzen des RAM im Zielsystem
  • ersetzen des ROM im Zielsystem
  • Flash Laufwerk für Tools und andere Programme
  • laden von Dateien in den 'ROM' Ersatz im Zielsystem
  • Diagnose an defekte 6502 Computer
  • Reparatur von defekten 6502 Computer


Schematic, Layout, Prototyp:


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:


Es sind JEDEC Dateien verfügbar für diese Zielsysteme:


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


Inhalt des FLASH Speicher zusammenstellen

Für die Erstellung einer persönlichen Programm Sammlung für das Flash der 6502-Extension gibt es ein PC Programm: 6502ext-Builder


Der 6502ext-Builder nimmt die gewünschten ROM Dateien und andere Programme und verpackt sie in eine einzelne Datei (6502ext Image Datei). Diese Datei wird in den Speicher (FLASH) des UC Modul geschrieben. Nun steht die Programm Sammlung für den C64 zur Verfügung.


6502ext Image Datei

Die Programm Sammlung auf dem 6502-Extension Board kann man frei zusammen stellen. Dazu dient ein kleines Programm (6502ext-Builder) am PC. Das Programm erstellt eine sogenannte 6502ext Image Datei. diese Image Datei hat die Endung .bin und kann direkt in den FLASH Speicher programmiert werden.


Die Größe der 6502ext Image Datei darf den verfügbaren Platz im FLASH Speicher nicht überschreiten. Bei Verwendung eines AM29F040 darf die Image Datei eine maximale Größe von 512KB haben. Die Größe setzt sich zusammen aus der Summe der einzelnen ROM Dateien und Programme plus der Größe des 6502ext-Loader. Der 6502ext-Loader ist ein Programm, das beim Start der CPU in dem 6502-Extension Board notwendig ist.


Der 6502ext-Loader

In dem 6502-Extension Board können mehrere ROM Dateien und Programme gespeichert sein. Der Loader kopiert die notwendigen Dateien aus dem Flash Speicher in den RAM. Ggf. wird der RAM schreibgeschützt und dem externen System als ROM angeboten.


Der 6502ext-Builder

In dem Flash Speicher des 6502-Extension Board kann man fertige Image Dateien programmieren. Dazu braucht man nur ein EPROM Programmiergerät, wie zB. den TL866. Um so eine Image Datei zu erstellen braucht man den 6502ext-Builder.

Der 6502ext-Builder erstellt eine Image Datei aus einem oder mehreren Dateien (Programme oder ROM Dateien). Die Image Datei enthält automatisch den passenden 6502ext-Loader für das externe 6502 System.


Für die Erstellung des UC-Menü benötigt das UC-Builder folgende Informationen zu jedem C64 Programm:

  • Name des Programm
  • Art des Programm
  • Den Dateinamen des Programm
  • ggf. Zusatzinfos


Die CSV Datei Steuerdatei für Erstellung der Image Datei

Das 6502ext Builder liest die benötigten Informationen aus einer Text Datei (CSV Datei). Jede Zeile in der CSV Datei steht für ein Programm oder ROPM Image. Mit der Option -m sagt man dem 6502ext-Builder den Namen der CSV Datei (-m File.csv). Wenn der 6502ext-Builder ohne CSV Dateinamen aufgerufen wird, sucht es automatisch nach der CSV Datei image.csv.


Beispiel einer CSV Datei:

Programm;           Typ;      Dateiname
BASIC_2_C0;         ROM;      901465-01.bin;                     $C000
BASIC_2_D0;         ROM;      901465-02.bin;                     $D000
BASIC_4_B0;         ROM;      901465-23.bin;                     $B000
BASIC_4_C0;         ROM;      901465-20.bin;                     $C000
BASIC_4_D0;         ROM;      901465-21.bin;                     $D000
EDIT_2_B;           ROM;      901474-01.bin;                     $E000
EDIT_2_N;           ROM;      901447-24.bin;                     $E000
EDIT_4_40_N-50Hz;   ROM;      901498-01.bin;                     $E000
EDIT_4_40_N-60Hz;   ROM;      901499-01.bin;                     $E000
EDIT_4_80_B-50Hz;   ROM;      901474-04.bin;                     $E000
KERNAL_2;           ROM;      901465-03.bin;                     $F000
KERNAL_4;           ROM;      901465-22.bin;                     $F000
8296_ROM;           ROM;      324746-01.bin;                     s8296
8296D_EDITOR;       ROM;      324243-01.bin;                     $E000
HELP!;              ROM;      help!8032.bin;                     $A000
ExBasic-II 9;       ROM;      ExBasic_II_9.bin;                  $9000
ExBasic-II A;       ROM;      ExBasic_II_A.bin;                  $A000
ExBasic 8032;       ROMSET;   ExBasic-II 9, ExBasic-II A
4032-B;             ROMSET;   BASIC_4_B0, BASIC_4_C0, BASIC_4_D0, EDIT_4_40_B-50Hz, KERNAL_4
8032-B;             ROMSET;   BASIC_4_B0, BASIC_4_C0, BASIC_4_D0, EDIT_4_80_B-50Hz, KERNAL_4
8296;               ROMSET;   8296D_EDITOR, 8296D_ROM
8032 + Help!;       ROMSET;   HELP!, 8032-B
8296 + Help!;       ROMSET;   HELP!, 8296
8296 + ExBasic II;  ROMSET;   ExBasic 8032, 8296
Hello World;        PRG;      PRG\test2.bas  


News

  • 9.1.2022 -- erste Prototyp Platine bestellt --


Downloads


Links