1541-SD: Unterschied zwischen den Versionen

Aus
Wechseln zu: Navigation, Suche
(die Lese Elektronik)
(WEB Links)
 
(10 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 11: Zeile 11:
  
 
<br />
 
<br />
=== Diskette und Diskettenlaufwerk ===
+
=== Diskette und Laufwerk ===
  
 
Die Diskette ist ein magnetischer Datenträger. Im inneren ist eine magnetische Scheibe, die mit ca. 5 Umdrehungen pro Sekunde rotiert. Ein Magnetkopf (eine Spule) ist über der Scheibe montiert. Mit jeder Umdrehung werden die magnetischen Änderungen in Strom Impulse umgewandelt.  
 
Die Diskette ist ein magnetischer Datenträger. Im inneren ist eine magnetische Scheibe, die mit ca. 5 Umdrehungen pro Sekunde rotiert. Ein Magnetkopf (eine Spule) ist über der Scheibe montiert. Mit jeder Umdrehung werden die magnetischen Änderungen in Strom Impulse umgewandelt.  
  
Eine Diskette für eine 1541 Diskettenstation hat 35 Spuren. Jede Spur ist unterteilt in bis zu 21 Sektoren, das ist aber für uns irrelevant. Wir betrachten zunächst nur eine Spur einer Diskette. Jede Spur enthält bis zu 8 KB Daten. Es ist ein Kreis, daher werden die Daten in einer endlosen Folge gelesen. Und zwar als Folge von einzelnen Bits.
+
Eine Diskette ist in Spuren und Sektoren unterteilt. Eine Diskette für eine 1541 Diskettenstation hat 35 Spuren. Jede Spur ist unterteilt in 17 bis 21 Sektoren, jeder Sektor hat 256 Bytes. Der Schreib- Lesekopf der Floppy wird auf eine Spur positioniert, danach werden die Sektoren dieser Spur der Reihe nach gelesen. Dadurch ensteht ein stetiger Datenstrom im Lesemodus.
 +
 
 +
Jeder Sektor hat zudem einen Kopfteil, damit der Sektor gefunden werden kann. Zudem werden jeweils 8 Bit in 10 Bit kodiert (GCR Kodierung). Zwischen den Sektoren und zwischen Sektor und Kopfteil sind Sync Bytes. So kommt man auf maximal '''8KB Daten pro Spur'''.
 +
 
 +
Aber Sektoren sind für uns irrelevant. Wir betrachten zunächst nur eine Spur einer Diskette. Jede Spur enthält bis zu 8 KB Daten. Es ist ein Kreis, daher werden die Daten in einer endlosen Folge gelesen. Und zwar als Folge von einzelnen Bits. Die Diskette rotiert mit 5 Umdrehungen pro Sekunde. Daher werden die maximal 8 KB Daten fünf mal pro Sekunde übertragen (40 KB pro Sekunde).  
  
 
<br />
 
<br />
=== die Lese Elektronik ===
+
 
 +
==== Die Lese Elektronik ====
  
 
Die '''Lese Elektronik''' eines 1541 Disketten Laufwerk besteht aus einem Elektromagneten (eine Art Tonkopf) und etwas Analog-Technik. Solange sich eine Diskette im Laufwerk befindet und der Motor läuft, produziert die '''Lese Elektronik''' eine scheinbar endlos wiederholende Folge an Datenbits.  
 
Die '''Lese Elektronik''' eines 1541 Disketten Laufwerk besteht aus einem Elektromagneten (eine Art Tonkopf) und etwas Analog-Technik. Solange sich eine Diskette im Laufwerk befindet und der Motor läuft, produziert die '''Lese Elektronik''' eine scheinbar endlos wiederholende Folge an Datenbits.  
Zeile 26: Zeile 31:
 
<br />
 
<br />
  
=== die Schreib Elektronik ===
+
==== Die Schreib Elektronik ====
  
 
Die '''Schreib Elektronik''' eines 1541 Diskettenlaufwerk besteht aus einem Elektromagneten (eine Art Tonkopf), einem Taktgeber und etwas Analog-Technik. Wenn die Elektronik auf '''schreiben''' gestellt wird, dann wird ein Daten Bit-Strom verwandelt in magnetische Felder, die Teile der Diskette magnetisieren.
 
Die '''Schreib Elektronik''' eines 1541 Diskettenlaufwerk besteht aus einem Elektromagneten (eine Art Tonkopf), einem Taktgeber und etwas Analog-Technik. Wenn die Elektronik auf '''schreiben''' gestellt wird, dann wird ein Daten Bit-Strom verwandelt in magnetische Felder, die Teile der Diskette magnetisieren.
Zeile 33: Zeile 38:
  
 
<br />
 
<br />
=== Spur Wechsel ===
+
 
 +
==== Spur Wechsel ====
  
 
Soweit so gut, ein CPLD und ein statisches RAM mit einer Größe von 8KB, schon können wir eine Spur lesen und schreiben. Die 1541 merkt gar nicht, ob es eine echte magnetische Diskette ist, oder ob der Datenstrom aus einem CPLD bzw. einem RAM kommt. Aber eine Diskette hat 35 Spuren ...
 
Soweit so gut, ein CPLD und ein statisches RAM mit einer Größe von 8KB, schon können wir eine Spur lesen und schreiben. Die 1541 merkt gar nicht, ob es eine echte magnetische Diskette ist, oder ob der Datenstrom aus einem CPLD bzw. einem RAM kommt. Aber eine Diskette hat 35 Spuren ...
  
Es fehlt nur noch etwas, das die Bewegung des Magnetkopf von einer Spur zur nächsten Spur simuliert.  
+
Wenn die zu lesenden Daten nicht auf der '''aktuellen Spur''' zu finden sind, dann führt die 1541 einen Spurwechsel durch. Dazu werden Schrittmotoren verwendet, die den Kopf auf eine andere Spur bewegen. Wenn die 1541 einen Spurwechsel macht, dann müssen wir die Daten im RAM Speicher tauschen.
 +
 
 +
'''Eine Spur''' der Diskette ist im 8 KB großen RAM Speicher abgebildet. Wir müssen nun dafür sorgen, dass die Daten im RAM immer der '''aktuellen Spur''' entsprechen. Dazu müssen wir den RAM mit den Daten der aktuellen Spur beschreiben. Zuvor müssen wir aber die Daten im RAM sichern, falls ein Schreibvorgang durch die 1541 stattgefunden hat.
 +
 
 +
<br />
 +
==== SD Karte ====
 +
 
 +
Das Ziel ist, die Diskette zu tauschen gegen eine SD Karte, wo tausende Disketten Inhalte zugleich Platz finden. Der Inhalt einer Diskette kann als eine Datei dargestellt werden ('''Disketten Image'''). Es haben sich bei der 1541 die Formate D64 und G64 durchgesetzt.
 +
 
 +
Um die SD Karte anzuschließen bietet sich ein AVR Controller von Atmel an (Atmega). Der Atmel liest ein Disketten Image Datei. In der Datei sind die Daten aller Spuren einer Diskette gespeichert. Die aktuelle Spur wird aus dem Disketten Image gelesen und in den RAM gespeichert. Um das RAM zuzugreifen wird der CPLD benutzt (an dem ist das RAM angeschlossen).
  
 +
Der AVR Controller steuert die SD Karte. Er überwacht auch die Signale an den Schrittmotor. Dadurch weiß der Controller, auf welche Spur die 1541 wechseln will. Nach jedem Spurwechsel muss die alte Spur auf die SD Karte gesichert werden (falls ein Schreibvorgang stattgefunden hat) und die neue Spur wird von der SD Karte in den RAM übertragen.
  
 +
<br />
 +
=== Hardware des Prototypen ===
  
 +
Wir benötigen also:
 +
* ein RAM Speicher (für die Spurdaten)
 +
* einen CPLD
 +
* einen AVR Controller
 +
* ein SD Karten Slot
  
Diese Aufgabe ist gut geeignet für einen CPLD, an dem ein Speicher (SRAM) angeschlossen ist.
 
  
Die Hardware besteht nun aus einem normalen SD2IEC und einem CPLD mit 128KB RAM:
+
Um den Aufbau zu vereinfachen werden fertige Platinen modifiziert und verwendet:
  
 
<gallery mode="packed-hover">
 
<gallery mode="packed-hover">
Zeile 52: Zeile 74:
  
  
 +
Das '''Pollin CPLD Board''' hat einen Xilinx CPLD (XC95144) und einen statischen RAM mit 128 KB. Das andere Board ist ein '''SD2IEC''', das hat einen AVR Controller und einen SD Kartenslot. Zusammen ergeben die beiden Boards den Prototypen des 1541-SD.
  
 +
<br />
 
===== SD2IEC Teil =====
 
===== SD2IEC Teil =====
  
Der AVR Controller im SD2IEC emuliert die 6502 Umgebung der 1541 Floppy. Der Code dafür kommt großteils aus dem großartigen [[http://instruct1.cit.cornell.edu/courses/ee476/FinalProjects/s2009/bhp7_teg25/bhp7_teg25/index.html|NES Projekt]]. Die SD Routinen kommen aus der **AVR MMC Lib**. Der Code für die Behandlung von D64 Images kommt aus dem [[http://xs1541.t-winkler.net/index_en.html|XS-1541]].
+
Am AVR Controller ist folgendes angeschlossen:
 +
* das SD Slot
 +
* der CPLD
 +
* Signale von der 1541 (Stepper, Motor, Reset)
  
Das DOS einer 1541 ist im Flash Speicher des Atmega gespeichert. Das Floppy RAM wird durch internen RAM des Controller emuliert. Zugriffe auf das VIA werden durch IO Routinen behandelt.
 
  
Die IO Routinen für IEC greifen direkt auf die IEC Hardware des SD2IEC zu.
+
Der Controller hat folgende Aufgaben:
 +
* Überwachung der Floppy Signale
 +
* lesen der Disketten Image Datei
 +
* schreiben der Disketten Image Datei
 +
* schreiben der Spur Daten in den Spur-RAM
 +
* lesen Spur Daten aus dem Spur-RAM
  
Die Steuerung des Steppers wird von der IO Routine umgesetzt in eine virtuelle Spurnummer (track). Aufgrund der aktuellen Spur werden die entsprechenden Sektoren direkt von der SD gelesen (aus einem D64 Image) und in die CPLD Karte übertragen.
 
  
Die Ansteuerung der LED wird direkt auf eine der SD2IEC LED umgesetzt.
+
Nach einem Reset öffnet der Controller die Image Datei und setzt die aktuelle Spur auf 18 (Directory Spur). Danach liest er die aktuelle Spur aus der Image Datei und überträgt die Spur Daten ins Spur-RAM.  
  
Die restlichen IO Leitungen werden zum CPLD geführt. Der sendet laufend die Daten aus der aktuellen (virtuellen)) Spur zum Controller. Die emulierte 6502 CPU bekommt diese Daten wie bei einer echten 1541 Hardware.
+
Nun überwacht der Controller die Signale der 1541. Wenn der Motor anläuft wird der CPLD in den '''Emulationsmodus''' geschaltet. Wird der Motor gestoppt, dann wird der Emulationsmodus des CPLD beendet.  
  
 +
Sobald die 1541 einen '''Spurwechsel''' durchführt, wird der Emulationsmodus des CPLD beendet. Der Controller ermittelt die neue Spur. Wenn die 1541 in die aktuelle Spur geschrieben hat, dann liest der Controller die Spur Daten aus dem Spur-RAM und schreibt sie in die Image Datei. Dann wird die neue Spur zur "aktuellen Spur". Der Controller  liest die aktuelle Spur aus der Image Datei und überträgt die Spur Daten ins Spur-RAM.
 +
 +
<br />
 
===== CPLD Hardware =====
 
===== CPLD Hardware =====
  
Rein technisch ist es einfach ein Zähler, der bis zu einem bestimmten Wert (Länge der Spur in Bytes) zählt. Der Zählwert ist die Adresse in das RAM. Dazu gibt es einen weiteren Zähler für die Bitfolge (8 Bits - 0 bis 7). Das RAM wird gelesen in ein Schieberegister am Begin von Takt 0. Dann wird Bit für Bit aus dem Schieberegister raus geschoben.
+
<u>Der CPLD ist angeschlossen an</u>:
 +
* dem Spur-RAM
 +
* an der 1541
 +
* an dem AVR Controller
  
  
Verwendet wurde das preisgünstige '''[[http://www.pollin.de/shop/dt/MTM5OTgxOTk-/Bausaetze/Diverse/Bausatz_CPLD_Evaluation_Board.html|CPLD-Evaluation-Board]]''' der Firma Pollin (Xilinx 95144, 128x8 kB SRAM).
+
<u>Die Logik im CPLD erfüllt folgende Aufgaben</u>:
 +
* Simulation der 1541 Schreib-/Lese-Elektronik
 +
** Datenstrom lesen (Spur RAM --> 1541)
 +
** Datenstrom schreiben (1541 --> Spur RAM)
 +
* Spur Daten übertragen zwischen Spur-RAM und AVR Controller
  
  
Die Logik im CPLD erfüllt folgende Aufgaben:
+
'''<u>Simulation der 1541 Schreib-/Lese-Elektronik</u>:'''
  
* Datenstrom lesen  (Diskette --> 6502)
+
Der Controller schaltet die Simulation ein und aus. Die Simulation sendet zyklisch Daten aus dem Spur-RAM zur 1541 (ca. fünf mal pro Sekunde). Wenn die 1541 signalisiert, daß sie schreiben will, dann schaltet der CPLD in den Schreibmodus. Daten von der 1541 werden ins Spur-RAM geschrieben.
* Datenstrom schreiben (6502 --> Diskette)
 
* Datenstrom übertragen zwischen RAM und AVR Controller
 
  
 +
Rein technisch ist es einfach ein Zähler, der bis zu einem bestimmten Wert (Länge der Spur in Bytes) zählt. Der Zählwert ist die Adresse in das RAM. Dazu gibt es einen weiteren Zähler für die Bitfolge (8 Bits - 0 bis 7). Das RAM wird gelesen in ein Schieberegister am Begin von Takt 0. Dann wird Bit für Bit aus dem Schieberegister raus geschoben.
  
Die Funktion '''Datenstrom lesen''' ist ein simpler Adresszähler, der mit einem bestimmten Takt inkrementiert wird. Die Adresse des Zähler liegt am Adressbus des RAM an. Das Byte aus der RAM Zelle wird in einem Register gebuffert. Der virtuelle 6502 kann das Byte aus dem register auslesen. Bei jedem Takt bekommt der virtuelle 6502 ein Signal, das sein V Bit setzt.
 
  
Das Schreiben funktioniert auf identische Art und Weise, nur dass der Takt vom AVR kommt.  
+
Es gibt zwei Möglichkeiten den CPLD an die 1541 anzuschließen. Entweder vor dem Schieberegister (direkt am VIA 6522) oder nach dem Schieberegister (an der Elektronik). Je nachdem werden die Daten zur 1541 byteweise oder Bit für Bit übertragen.
  
Bei jedem Spurwechsel muss das RAM mit Daten von der SD Karte befüllt werden. Dazu wird der synchrone Takt abgeschaltet und durch einen Takt vom AVR Controller ersetzt. Der Controller kann so sehr rasch die Daten ins RAM der CPLD Karte schreiben.
 
  
Wenn die Spurdaten von der virtuellen 6502 CPU verändert wurden, dann muss vor dem Spurwechsel die aktuelle Spur aus dem RAM auf die SD Karte übertragen werden.
 
  
\\
+
<br />
  
**__Erklärung__:**
+
== Fazit ==
  
Eine Diskette ist in Spuren und Sektoren unterteilt. Der Schreib- Lesekopf der Floppy wird auf eine Spur positioniert, danach werden die Sektoren dieser Spur der Reihe nach gelesen. Dadurch ensteht ein stetiger Datenstrom im Lesemodus.
+
Die Simulation der Lese Elektronik läuft soweit tadellos. Das DOS meldet sich über den IEC Bus. Es können beliebige D64 und G64 Images gelesen werden. Auch alle speziellen Dinge wie Floppy Programme (morsecode, filereader, blockreader ...) laufen tadellos. Das schreiben wurde nie fertig implementiert, dürfte aber technisch kein Problem darstellen.
  
Eine Spur einer Diskette in einer 1541 hat zwischen 17 und 21 Sektoren. Jeder Sektor hat 256 Bytes. Jeder Sektor hat zudem einen Kopfteil, damit der Sektor gefunden werden kann. Zudem werden jeweils 8 Bit in 10 Bit kodiert (GCR Kodierung). Zwischen den Sektoren und zwischen Sektor und Kopfteil sind Sync Bytes. So kommt man zirka auf **8KB Daten pro Spur**.
+
<br />
 
 
Die Diskette rotiert mit 5 Umdrehungen pro Sekunde. Daher werden die maximal 8KB fünf mal pro Sekunde übertragen (40KB pro Sekunde). Der Takt des Adresszähler im CPLD ist so eingestellt, dass der Strom an GCR Daten von einer Diskette perfekt simuliert wird. Zudem erzeugt der CPLD das Sync Signal für den virtuellen 6502.
 
 
 
Das Sync Byte zwischen den Sektoren wird durch 255 simuliert. Wenn die RAM Zelle 255 enthält, dann erfolgt kein Sync Signal zur virtuellen 6502 CPU. Die Zahl 255 kommt in einem GCR Datenstrom nicht vor.
 
 
 
===== Fazit =====
 
 
 
Das Lesen funktioniert tadellos mit einem ROM aus einer 1541-II. Schreiben wurde bislang nicht implementiert, es sollte aber technisch kein Problem sein.
 
 
 
Da jedes GCR Bytemuster erlaubt ist und jede Kombination an Bytes im Kopfsatz, kann auch jeder Lesefehler exakt emuliert werden. Dadurch ist jeder Kopierschutz von der Hardware emulierbar. Allerdings unterstützt die D64 Image Datei keine defekten Sektoren, dazu müsste man auf ein anderes Image Datei Format ausweichen (G64, X64 ...).
 
 
 
Die Floppy Emulation läuft soweit tadellos. Das DOS meldet sich über den IEC Bus. Es können beliebige D64 Images gelesen werden. Auch alle speziellen Dinge wie Floppy Programme (morsecode, filereader, blockreader ...) laufen tadellos.
 
 
 
Leider ist die Kompatibilität nicht so gut wie erhofft. Wenn eigene Programme in die Floppy geladen werden, die ein spezielles IEC-Bus timing erfordern, dann hakt es an der zuwenig exakten Emulation der 6502. Es funktionieren nur Speeder, die ein ordentliches Bus Protokoll implementiert haben, wie zb. die OpenCBM Routinen. Wenn sich die Datenübertragung auf zeitlich exakte Protokolle stützt (zB. Jiffy), dann läuft es leider noch nicht sauber.
 
 
 
 
 
===== Offene Aufgaben =====
 
 
 
Eine taktgenaue Emulation würde vermutlich alle Kompatibilitätsprobleme lösen.
 
  
Das zweite Ziel wäre, das CPLD Board durch Software im Controller zu ersetzen. Anstatt des Atmega-644 Controller im SD2IEC müsste man natürlich einen Atmega-1284 zum Einsatz bringen. Mit dem 1284er wäre genug RAM vorhanden um die GCR Daten einer ganzen Spur zu cachen.
+
== WEB Links ==
  
\\
+
* [[Media:810068 eval board.pdf|Manual CPLD-Evaluation-Board]] - der Firma Pollin (Xilinx 95144, 128x8 kB SRAM)
Am schönsten wäre natürlich, wenn man eine vorhandene Hardware wie das **[[c64wiki>SD2IEC|SD2IEC]]** verwenden könnte. Der verwendete Atmega-644 hat aber leider zu wenig RAM. Wenn man jedoch ein **SD2IEC** mit DIL Sockel hat, dann kann man sehr einfach auf den pinkompatiblen **Atmega1284** mit 128KB Flash und 16KB RAM wechseln ...
+
* [[Media:Pollin cpld 14.pdf|Kurzbeschreibung CPLD-Evaluation-Board]] - der Firma Pollin (Xilinx 95144, 128x8 kB SRAM)

Aktuelle Version vom 5. September 2019, 18:22 Uhr


Ersatz der Schreib-/Lese-Elektronik einer 1541 Diskettenstation

Das Ziel ist, die Schreib-/Lese-Elektronik einer 1541 Diskettenstation zu ersetzen. Die Daten sollen nicht von einer Diskette kommen, sondern von einer modernen SD-Karte.


Natürlich gibt es das schon, in Form eines SD2IEC oder einer 1541-Ultimate. Aber es ist nichts ist kompatibler zu einer 1541 als ein 1541 Laufwerk. Die 1541 ist ein Computer mit eigener 6502 CPU sowie RAM und ROM. Man kann Programme in die 1541 laden und ausführen, was auch getan wird bei vielen Demos und Disk-Speeder.

Wir lassen die 1541 wie sie ist und tauschen nur die Schreib-/Lese-Elektronik gegen moderne Hardware. Dadurch bekommt die 1541 selbst gar nicht mit, dass etwas anders ist. Damit läuft auch jedes Programm weiterhin, die Kompatibilität ist tatsächlich 100%.


Diskette und Laufwerk

Die Diskette ist ein magnetischer Datenträger. Im inneren ist eine magnetische Scheibe, die mit ca. 5 Umdrehungen pro Sekunde rotiert. Ein Magnetkopf (eine Spule) ist über der Scheibe montiert. Mit jeder Umdrehung werden die magnetischen Änderungen in Strom Impulse umgewandelt.

Eine Diskette ist in Spuren und Sektoren unterteilt. Eine Diskette für eine 1541 Diskettenstation hat 35 Spuren. Jede Spur ist unterteilt in 17 bis 21 Sektoren, jeder Sektor hat 256 Bytes. Der Schreib- Lesekopf der Floppy wird auf eine Spur positioniert, danach werden die Sektoren dieser Spur der Reihe nach gelesen. Dadurch ensteht ein stetiger Datenstrom im Lesemodus.

Jeder Sektor hat zudem einen Kopfteil, damit der Sektor gefunden werden kann. Zudem werden jeweils 8 Bit in 10 Bit kodiert (GCR Kodierung). Zwischen den Sektoren und zwischen Sektor und Kopfteil sind Sync Bytes. So kommt man auf maximal 8KB Daten pro Spur.

Aber Sektoren sind für uns irrelevant. Wir betrachten zunächst nur eine Spur einer Diskette. Jede Spur enthält bis zu 8 KB Daten. Es ist ein Kreis, daher werden die Daten in einer endlosen Folge gelesen. Und zwar als Folge von einzelnen Bits. Die Diskette rotiert mit 5 Umdrehungen pro Sekunde. Daher werden die maximal 8 KB Daten fünf mal pro Sekunde übertragen (40 KB pro Sekunde).


Die Lese Elektronik

Die Lese Elektronik eines 1541 Disketten Laufwerk besteht aus einem Elektromagneten (eine Art Tonkopf) und etwas Analog-Technik. Solange sich eine Diskette im Laufwerk befindet und der Motor läuft, produziert die Lese Elektronik eine scheinbar endlos wiederholende Folge an Datenbits.

Eine scheinbar endlos wiederholende Folge an Datenbits, - perfekt für einen Ring Buffer. Perfekt für einen CPLD, an dem ein Speicher (SRAM) angeschlossen ist. Der CPLD liest Daten aus dem statischen RAM Speicher und schiebt die Bytes sequentiell raus. Schon haben wir die Lese Elektronik einer 1541 perfekt emuliert.


Die Schreib Elektronik

Die Schreib Elektronik eines 1541 Diskettenlaufwerk besteht aus einem Elektromagneten (eine Art Tonkopf), einem Taktgeber und etwas Analog-Technik. Wenn die Elektronik auf schreiben gestellt wird, dann wird ein Daten Bit-Strom verwandelt in magnetische Felder, die Teile der Diskette magnetisieren.

Dasselbe funktioniert auch in unserem Ring Buffer. Die Ring Buffer Adresse wird laufend erhöht, analog zur Drehung der magnetischen Scheibe in der Diskette. Sobald auf schreiben gestellt wird, liest der CPLD die Daten in ein Schieberegister ein. Alle acht Bit wird das entstandene Byte in den RAM Speicher übertragen. Schon haben wir die Schreib Elektronik einer 1541 emuliert.


Spur Wechsel

Soweit so gut, ein CPLD und ein statisches RAM mit einer Größe von 8KB, schon können wir eine Spur lesen und schreiben. Die 1541 merkt gar nicht, ob es eine echte magnetische Diskette ist, oder ob der Datenstrom aus einem CPLD bzw. einem RAM kommt. Aber eine Diskette hat 35 Spuren ...

Wenn die zu lesenden Daten nicht auf der aktuellen Spur zu finden sind, dann führt die 1541 einen Spurwechsel durch. Dazu werden Schrittmotoren verwendet, die den Kopf auf eine andere Spur bewegen. Wenn die 1541 einen Spurwechsel macht, dann müssen wir die Daten im RAM Speicher tauschen.

Eine Spur der Diskette ist im 8 KB großen RAM Speicher abgebildet. Wir müssen nun dafür sorgen, dass die Daten im RAM immer der aktuellen Spur entsprechen. Dazu müssen wir den RAM mit den Daten der aktuellen Spur beschreiben. Zuvor müssen wir aber die Daten im RAM sichern, falls ein Schreibvorgang durch die 1541 stattgefunden hat.


SD Karte

Das Ziel ist, die Diskette zu tauschen gegen eine SD Karte, wo tausende Disketten Inhalte zugleich Platz finden. Der Inhalt einer Diskette kann als eine Datei dargestellt werden (Disketten Image). Es haben sich bei der 1541 die Formate D64 und G64 durchgesetzt.

Um die SD Karte anzuschließen bietet sich ein AVR Controller von Atmel an (Atmega). Der Atmel liest ein Disketten Image Datei. In der Datei sind die Daten aller Spuren einer Diskette gespeichert. Die aktuelle Spur wird aus dem Disketten Image gelesen und in den RAM gespeichert. Um das RAM zuzugreifen wird der CPLD benutzt (an dem ist das RAM angeschlossen).

Der AVR Controller steuert die SD Karte. Er überwacht auch die Signale an den Schrittmotor. Dadurch weiß der Controller, auf welche Spur die 1541 wechseln will. Nach jedem Spurwechsel muss die alte Spur auf die SD Karte gesichert werden (falls ein Schreibvorgang stattgefunden hat) und die neue Spur wird von der SD Karte in den RAM übertragen.


Hardware des Prototypen

Wir benötigen also:

  • ein RAM Speicher (für die Spurdaten)
  • einen CPLD
  • einen AVR Controller
  • ein SD Karten Slot


Um den Aufbau zu vereinfachen werden fertige Platinen modifiziert und verwendet:


Das Pollin CPLD Board hat einen Xilinx CPLD (XC95144) und einen statischen RAM mit 128 KB. Das andere Board ist ein SD2IEC, das hat einen AVR Controller und einen SD Kartenslot. Zusammen ergeben die beiden Boards den Prototypen des 1541-SD.


SD2IEC Teil

Am AVR Controller ist folgendes angeschlossen:

  • das SD Slot
  • der CPLD
  • Signale von der 1541 (Stepper, Motor, Reset)


Der Controller hat folgende Aufgaben:

  • Überwachung der Floppy Signale
  • lesen der Disketten Image Datei
  • schreiben der Disketten Image Datei
  • schreiben der Spur Daten in den Spur-RAM
  • lesen Spur Daten aus dem Spur-RAM


Nach einem Reset öffnet der Controller die Image Datei und setzt die aktuelle Spur auf 18 (Directory Spur). Danach liest er die aktuelle Spur aus der Image Datei und überträgt die Spur Daten ins Spur-RAM.

Nun überwacht der Controller die Signale der 1541. Wenn der Motor anläuft wird der CPLD in den Emulationsmodus geschaltet. Wird der Motor gestoppt, dann wird der Emulationsmodus des CPLD beendet.

Sobald die 1541 einen Spurwechsel durchführt, wird der Emulationsmodus des CPLD beendet. Der Controller ermittelt die neue Spur. Wenn die 1541 in die aktuelle Spur geschrieben hat, dann liest der Controller die Spur Daten aus dem Spur-RAM und schreibt sie in die Image Datei. Dann wird die neue Spur zur "aktuellen Spur". Der Controller liest die aktuelle Spur aus der Image Datei und überträgt die Spur Daten ins Spur-RAM.


CPLD Hardware

Der CPLD ist angeschlossen an:

  • dem Spur-RAM
  • an der 1541
  • an dem AVR Controller


Die Logik im CPLD erfüllt folgende Aufgaben:

  • Simulation der 1541 Schreib-/Lese-Elektronik
    • Datenstrom lesen (Spur RAM --> 1541)
    • Datenstrom schreiben (1541 --> Spur RAM)
  • Spur Daten übertragen zwischen Spur-RAM und AVR Controller


Simulation der 1541 Schreib-/Lese-Elektronik:

Der Controller schaltet die Simulation ein und aus. Die Simulation sendet zyklisch Daten aus dem Spur-RAM zur 1541 (ca. fünf mal pro Sekunde). Wenn die 1541 signalisiert, daß sie schreiben will, dann schaltet der CPLD in den Schreibmodus. Daten von der 1541 werden ins Spur-RAM geschrieben.

Rein technisch ist es einfach ein Zähler, der bis zu einem bestimmten Wert (Länge der Spur in Bytes) zählt. Der Zählwert ist die Adresse in das RAM. Dazu gibt es einen weiteren Zähler für die Bitfolge (8 Bits - 0 bis 7). Das RAM wird gelesen in ein Schieberegister am Begin von Takt 0. Dann wird Bit für Bit aus dem Schieberegister raus geschoben.


Es gibt zwei Möglichkeiten den CPLD an die 1541 anzuschließen. Entweder vor dem Schieberegister (direkt am VIA 6522) oder nach dem Schieberegister (an der Elektronik). Je nachdem werden die Daten zur 1541 byteweise oder Bit für Bit übertragen.



Fazit

Die Simulation der Lese Elektronik läuft soweit tadellos. Das DOS meldet sich über den IEC Bus. Es können beliebige D64 und G64 Images gelesen werden. Auch alle speziellen Dinge wie Floppy Programme (morsecode, filereader, blockreader ...) laufen tadellos. Das schreiben wurde nie fertig implementiert, dürfte aber technisch kein Problem darstellen.


WEB Links