GeoRAM
Zurück   Index    Suchen    News    FAQ        4 User online       




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.

GeoRAM-Cartridge 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.


Programmlauf
Fehlermeldung

Links im Bild sieht man den normalen Programmlauf und rechts einen Abbruch nach Fehler.


Download : 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, ...

Valid XHTML 1.0 Transitional Valid CSS!

© 1999-2010 M. Sachse http://www.cbmhardware.de