Mehr Speicher für den C64
Die GeoRAM-Erweiterung wurde Anfang der 1990er-Jahre als Ersatz für die teuere und nicht mehr verfügbare C=-REU entwickelt. Diese neuere Erweiterung nutzt keinen DMA-Transfer, ist demnach langsamer als die originale Commodore-Erweiterung. Hinzu kommt in diesem Zusammenhang die Notwendigkeit von intensiver Programmunterstützung, da die GeoRAM nur über 2 Register zur Adressierung verfügt.
Eigentlich wurde diese Erweiterung für die Geos-Gemeinde entwickelt, dass sollte aber nicht von der Unterstützung in anderen Programmen abhalten.
|
 |
Internas
$de00 : 256 Byte-Fenster zum Lesen und Schreiben
$dffe : Auswahl des 256 Byte-Fenster im 16 Kb-Block
$dfff : Auswahl des 16 Kb-Block
512 Kb = 0- 31, $00-$1f
1024k Kb = 0- 63, $00-$3f
2048k Kb = 0-127, $00-$7f
Die Register $dffe und $dfff können nur geschrieben werden.
|
Programmierung
Die Programmierung ist relativ einfach, sollte aber aus Geschwindigkeitsgründen in Assembler erfolgen.
|
; Kopieren des Bereichs $4000-$7fff in GeoRAM $0000-$3fff (16 Kb)
!to"geowrite.prg",cbm
*=$1000
geobuf = $de00
geobuf_sect = $dffe
block = $dfff
membuf = $4000 ; - $7fff
lda #$00 ; Register auf Block $00 und $0000
sta geobuf_sect
sta block
ldx #$00
ldy #$00
j0 lda membuf,x ; 256 Byte in die GEORam kopieren
sta geobuf,x
inx
bne j0
iny
sty geobuf_sect
inc j0+2 ; Hi-Byte erhöhen
cpy #$40 ; 64 x 256 = 16 Kb
bne j0
sty j0+2 ; Speicheradresse restaurieren
rts
|
; Kopieren des Bereichs $0000-$3fff in den Rechner-Speicher $4000-$7fff (16 Kb)
!to"georead.prg",cbm
*=$1000
geobuf = $de00
geobuf_sect = $dffe
block = $dfff
membuf = $4000 ; - $7fff
lda #$00 ; Register auf Block $00 und $0000
sta geobuf_sect
sta block
ldx #$00
ldy #$00
j1 lda geobuf,x
j0 sta membuf,x ; 256 Byte aus GEORam kopieren
inx
bne j1
iny
sty geobuf_sect
inc j0+2 ; Hi-Byte erhöhen
cpy #$40 ; 64 x 256 = 16 Kb
bne j1
sty j0+2 ; Speicheradresse restaurieren
rts
|
So einfach kann ein 16 Kb-Block geschrieben und wieder gelesen werden. Das kann leicht mit dem VICE-Emulator getestet werden.
Man muss nur unter "Settings/Cartridge/IO Settings/GEORAM Settings" die virtuelle Speichererweiterung aktivieren.
Der Inhalt sollte in eine Datei geschrieben werden. Wenn man vor Ausführung von geowrite.prg den Speicher mit einem Byte-Muster füllt (ALT-M; z.B. F 4000 7FFF 11), sollte sich dieses nach sys 4096 in der GeoRAM ($0000-$3fff) nachweisen lassen.
Bei komplexeren Programmen sollten die Register in (Zeropage-) Adressen zwischengespeichert und immer aktualisiert werden, da man wie schon erwähnt diese nicht lesen kann. So behält man den Überblick.
|
;
; Ein Auszug einer moeglichen Erkennung des Moduls. Bestehende Daten werden nicht veraendert.
; Fuer eine wirkliche Erkennung muesste man sich aehnlich verhaltende Module einbeziehen.
;
; Workstage :
ldx #00
lda #00
sta $dfff
sta $dffe ; Georam $0000
p1 lda $de00,x
sta cass,x ; 190 Byte in Cassettenpuffer holen
inx
cpx #190
bne p1
ldx #00
txa
p2 sta $de00,x ; 190 Byte in Georam schreiben,
lda $de00,x ; lesen,
cmp $de00,x ; und vergleichen ...
bne y0 ; nicht gleich, dann keine Speichererweiterung ...
inx
cpx #190
bne p2
jmp y1 ; alles ok, Georam wahrscheinlich da
y0 jmp nogeoram
y1 ldx #00 ; gepufferte Daten wieder zurueckschreiben
p3 lda cass,x
sta $de00,x
inx
cpx #190
bne p3
.... ; weiter im Programm
nogeoram .... ; Textausgabe und Ende
|
Software
Da das GeoRAM über 15 Jahre alt ist, sollte man die Erweiterung erstmal gründlich testen. Ich habe speziell zu diesem Zweck ein kleines Testprogramm geschrieben. In der vorliegenden Version werden 512 Kb geprüft.
Wenn der Programmlauf abgebrochen wird, sollte alles gründlich überprüft werden :
1. Zustand des Expansionsports. Erreichen alle Kontakte die Platine ?
2. Zustand der Kontakte am Modul. Sind die Kontakte veschmutzt oder beschädigt ?
Das Modul wird tatsächlich mit den Bauteilen nach unten eingesteckt. Das ist normalerweise nicht üblich, daher an dieser Stelle eine Erwähnung.
Wenn das Problem mit guter Verbindung zum Expansionsport noch besteht, wird etwas am Erweiterungsmodul defekt sein. Da muss dann der Fachmann ran.
Links im Bild sieht man den normalen Programmlauf und rechts einen Abbruch nach Fehler.
Download : GEO/NEO- AND BBGRAM-TEST 512K v0.2
Mehr Software
Die Erweiterung wird natürlich von GEOS unterstützt. Weitere Programme :
Digital Talk
(Diskmag), Geoutil, ...
|
|