CBM RAM-Drive 2008 (CBM 8296)
Bei dem Laufwerk handelt es sich eigentlich um eine sehr flexible Speichererweiterung für den CBM 8296, die über einen eigenen Bereich für Treibersoftware verfügt. Die Schaltung entspricht in groben Zügen der vom C64 bekannten Georam oder auch der aktuelleren Version Neoram. Allerdings werden bei dieser Version für den CBM 64kB-Pages verwendet. So ist im Betrieb der Aufwand etwas verringert. Durch die vier mal so großen Pages braucht man im günstigsten Fall vier mal weniger durch die Speicherseiten zu schalten. Eine Speicherseite entspricht 256 Sektoren mit jeweils 256 Bytes. Der ROMRAM-Bereich verfügt über 4 x 2kB RAM, dessen Speicherseite über 2 bits vorgewählt werden kann. Wenn man den kompletten RAM der Erweiterung als RAM-Laufwerk verwenden möchte, ist zum Puffern der Daten eine konstante Stromquelle notwendig. Zur Pufferung kann z.B. die Schaltung des Neoram-Cartridge oder als Komfort-Lösung ein MAX691 verwendet werden. |
21.09.2008 | Das DOS wurde nochmal überarbeitet. Ein kleines Hilfsprogramm zum Faken von DIR-Einträgen wurde erstellt. Die BAM wurde erstmal gestrichen. Im Moment entstehen diverse Kern-Routinen und da wird immer mal wieder etwas optimiert. |
15.09.2008 | Ein paar Fehler auf der Seite korrigiert. Das erste Quick-Format-Programm ist fertig. |
14.09.2008 | Erste WEB-Seite online. Die fehlenden Informationen werden folgen. Im Moment soll erst mal ein Formatierungs-Programm entstehen. |
Adressen $A000: Bit 0 - 7 : Sektoren $A001: Bit 0 - 7 : A16 | A17 | A18 | B0 | B1 | R11 | R12 | LED | | | | | | | |____ | | | | | |____|___ -LED | | | |____|___ -ROMRAM Banking 4 x 2 kB |_____|_____|___ -RAM 0 - 3 (A19, A20) - 64kB Pages $A400: Datenport (256 Bytes) $A800: ROMRAM (2kB Bank) Auswahl der Bank mit $A001: Bit 5-6 (R11,R12) Die Register $A000 und $A001 können nur geschrieben werden ! Der Schaltplan Die grundlegende Logik-Schaltung. Prototyp Der erste handgemachte Prototyp. Die Aufnahme wurde vor dem Entfernen der Zinnkrümel im Rechner gemacht. So eine moderne Digi-Cam sieht erstaunlich viel. ;) Material ca. 15 Euro, die Arbeit: unbezahlbar. |
Wie man in der Übersicht erkennen kann, liegen die Adressen im Bereich $A000. Um diese Erweiterung am Memory-Port des CBM8296 nutzbar zu machen, muss man nur den Jumper JU6 auf der Rechnerplatine schliessen. Dazu bietet sich ein Schalter mit Kabel an, falls man ebenfalls den ROM-Steckplatz ohne Erweiterung nutzen möchte. Sobald der Jumper geschlossen ist, werden die Lesezugriffe auf den Bereich $A000-$AFFF nur am Memory-Port durchgeführt. Diese Adresse wurde gewählt, damit der Schaltungsaufwand so gering wie möglich gehalten werden konnte. Die Chip-Select-Leitungen der beiden Erweiterungs-ROMs ($A000, $9000) sind ebenfalls am Mem.-Port vorhanden.
Im Normalbetrieb werden die ROMs gelesen und der Memory-Port nur beschrieben. Da es bei einer Speichererweiterung notwendig ist, deren Inhalt ebenfalls zu lesen, ist das Schließen von JU6 umbedingt erforderlich. Mit der vorliegenden Schaltung ist eine Speichererweiterung von 2 MB möglich. Wie man im Schaltplan leicht erkennen kann, sind noch weitere Register möglich. Mit einem weiteren Register und einem Dekoder könnte man die Erweiterung leicht bis 10 MB ausbauen. Ich verwende für mein RAM-Laufwerk aber einen Minimal-Ausbau von 1 MB, da eine solche Material-Schlacht am Ende kaum einen Nutzen bringen wird. |
Konzeption des RAM-Laufwerks - 1MB
-------------------------------------------------------- | Track (je 16386 Bytes) | Einzelheiten (Sektoren) | -------------------------------------------------------- | 0 | 0 : ROM-Boot | | BAM & MISC | 1 : Directory Header | | Sub-Directories | 2-3 :Die Speichererweiterung wird in 64 Tracks mit jeweils 64 Blocks unterteilt. Im ersten Block liegen der ROM-Boot-Sektor. Hier wird ein Kickstart-Code für das ROMRAM untergebracht. Dann ist nach dem Einschalten der Erweiterung ein Start der Erweiterungs-Software mit SYS 41984 ($A400) möglich. |
----------------------------------------------------- | Eintrag: Directory-Header | ----------------------------------------------------- | Byte | Bedeutung | ----------------------------------------------------- | 0-15 | Name der virtuellen Disk | | 16-17 | Virtual OS-Version | | 18-19 | Blocks free | | 20-31 | Reserved | -----------------------------------------------------Im Sektor für den Directory-Header sind ebenfalls die Versions-Nummer der Software und die Anzahl der noch freien Blocks untergebracht In der BAM wird die Belegung der einzelnen Sektoren angezeigt. Sektor 4-30 sind im Moment noch nicht verplant. ----------------------------------------------------- | Eintrag: Sub-Directory | ----------------------------------------------------- | Byte | Bedeutung | ----------------------------------------------------- | 0 | ID | | 1 | Status : $00:DEL , $01:USED | | 2-17 | Unterverzeichnis-Name | | 18-31 | Reserved | -----------------------------------------------------Kenner werden es schon bemerkt haben. Die Struktur ist sehr an das File-System von C= angelehnt. Nur die Sub-Directories sind eigentlich neu und sollen etwas zur Übersicht beitragen. Allerdings ist in der ersten Software-Version nur eine Verzeichnistiefe von 1 geplant. |
----------------------------------------------------- | File-Eintrag: Directory | ----------------------------------------------------- | Byte | Bedeutung | ----------------------------------------------------- | 0-1 | ID l/h | | 2 | Filetyp ($00:DEL, $01:PRG) | | 3-4 | Track und Sektor (Daten) | | 5-20 | Filename ($20: Fuellbyte) | | 21 | DIR-Byte ($00:Root) | | 22-23 | Pointer | | 24 | Blocks | | 25-31 | Reserved | -----------------------------------------------------In Track 1 werden die 512 möglichen Dateinamen untergebracht. |
----------------------------------------------------- | Sektoren | ----------------------------------------------------- | Byte | Bedeutung | ----------------------------------------------------- | 0-255 | Daten-Bytes | -----------------------------------------------------3968 Sektoren mit jeweils 256 Daten-Bytes. Das entspricht 992kB Datenspeicher. |
Basic Für einen ersten Test reicht Basic : 10 poke 40960,0 20 poke 40961,0: REM poke 40961,128 falls die LED eingeschaltet werden soll. 30 for a = 0 to 255 40 poke 41984+a,a 50 next a So wird der erste Sektor mit den Zahlen 0-255 beschrieben. 10 poke 40960,0 20 poke 40961,0: REM poke 40961,128 falls die LED eingeschaltet werden soll. 30 for a = 0 to 255 40 print peek(41984+a,a); 50 next a Mit Print Peek kann der Inhalt des Sektors gelesen und auf den Bildschirm gebracht werden. Mit dem gleichen Prinzip läßt sich das ROMRAM testen. Hierbei muss aber zusätzlich auf das Banking geachtet werden. Mit den Bits 5 und 6 von $A001 kann die gewünschte 2kB-Bank vorge- wählt werden. Bit 5 : R11 | Bit 6 : R12 | 2kB-Bereich ---------------------------------------- 0 | 0 | $0000-$07FF 1 | 0 | $0800-$0FFF 0 | 1 | $1000-$17FF 1 | 1 | $1800-$1FFFAssembler Beispiele werden folgen. |
Memory-Test Ein erster einfacher Speicher-Test. Es wird nur die Speichererweiterung geprüft und kein umfangreicher Adressierungstest ausgeführt. First Memory-Test |
|
Periscope Beta Ein erster kleiner Speichermonitor, damit man auch mal in die "Steine" reinschauen kann. Steuerung : Taste 1 Page -1 , Taste 2 Page +1 Taste 0 Sektor -1 , Taste "." Sektor +1 Taste P : Page direkt eingeben als HEX Taste S : Sektor direkt eingeben als HEXDie Eingabe von Sektor oder Page muß immer zweistellig erfolgen ! Periscope Beta |
|
Quick-Format Beta Formatiert das Laufwerk und schreibt die BAM. Zudem wird der Name "Test" als Drive-Name und das Root-Verzeichnis eingetragen. Formatierung bei 1MB gut 10 Sekunden ! :0) Quick-Format Beta |
Die aktuelle Schaltung Schaltplan und Board ohne Akku-Beschaltung. Bitte selbst überprüfen ! Der Schaltplan und das Board wurden nochmals ausgetauscht. Es fehlten zwei Dioden ! Eagle Schaltplan und Board |
Letzte Änderung: 2019-01-04 13:05:46