Benutzer-Werkzeuge

Webseiten-Werkzeuge


Seitenleiste

Start
Ausstellungen
Vorträge
Stream
Verein | Spenden
Presse
Archiv


Impressum
Datenschutz

Übersetzungen dieser Seite:
oqtadrive

OqtaDrive

Ein Sinclair-Microdrive-Emulator, Alexander Vollschwitz

Microdrive-Laufwerk

Das ZX Microdrive von Sinclair ist ein magnetischer Massenspeicher, der kleine Endlos-Bandkassetten als Speichermedium nutzt. Es kam 1983 zunächst als externes Laufwerk für den ZX Spectrum Heimcomputer auf den Markt. Der ein Jahr später erschienene Sinclair QL hatte zwei Microdrives intern verbaut. Bereits damals waren Microdrives nicht gerade für ihre hohe Zuverlässigkeit bekannt.

Microdrive-Kassette Größenvergleich

Heute ist es umso schwieriger, mit einem Microdrive zu arbeiten. Insbesondere die Bandkassetten sind oftmals nicht mehr nutzbar. Das motivierte den Bau eines Microdrive-Emulators. Anders als bereits existierende "neuzeitliche" Massenspeicher-Lösungen für den Spectrum und QL, geht es hierbei um eine völlig transparente und "historisch korrekte" Emulation der Microdrives. D.h. bei Nutzung des Emulators soll kein Unterschied zur Nutzung echter Microdrives bestehen. Daher setzt die Emulation auf Hardware-Ebene am Microdrive-Interface an und verzichtet auf System Hooks auf dem Spectrum/QL.

Steckbrief

Das Original

Microdrive-Kassette aus QL Software Suite

Hersteller Sinclair Research
Modellbezeichnung ZX Microdrive
Jahr der Vorstellung 1983
Land Großbritannien
Preis bei Einführung £49.95
Technologie Endlos-Magnetband
Kapazität max. 128KB, typ. 70-80KB
Band 1,9mm x 5m, 76cm/s
Format 2 Spuren

Für den Anschluss an einen ZX Spectrum wird ein Interface 1 Adapter benötigt. Der Preis zur Markteinführung betrug ebenfalls £49.95. Später wurden Bundles für £79.95 angeboten.

Der Emulator

Hardware Arduino Nano
Software Firmware in C, Daemon in Golang, Web-UI basierend auf Bootstrap
Projekt-Seite GitHub
Mitwirkende Alexander Vollschwitz (Entwickler/Maintainer), Tom Dalby (Leiterplatten, Gehäuse, Tests), Stephan Preuß (Tests)
Lizenz GPL-3.0

Familientreffen

Hier einige Mitglieder der "OqtaDrive-Familie" (gebaut von Tom Dalby) - links und hinten Standalone-Lösungen in Original- und 3D-Druck-Gehäuse, vorn Minimal-Konfiguration für Verbindung mit PC

Entwicklung

Ansatz

Innenleben (QL)

Die Technik des Microdrives faszinierte mich schon immer sehr. Insbesondere hatte es mir der Ansatz angetan, mit Komponenten aus der Massenproduktion anderer Produkte (z.B. Tonkopf von Kassettenrecorder als Schreib-/Lesekopf) eine günstige Lösung zu bauen, die es dennoch mit den damals gängigen aber deutlich teureren Diskettenlaufwerken -halbwegs- aufnehmen konnte. Der Emulator sollte ganz in diesem Geiste auch mit möglichst wenigen und günstigen Komponenten entstehen.

Der Arduino Nano erschien mir da genau richtig und, falls irgend möglich, sollte er auch die einzige größere Hardware-Komponente sein, abgesehen von evtl. einigen Widerständen, Dioden oder Steckern. Dieses Ziel formte die Struktur von OqtaDrive: Der Nano fungiert als Protokoll-Konverter zwischen dem Microdrive-Interface und einem Daemon-Prozess, der auf einem beliebigen Rechner laufen kann und dort die Microdrive-Daten verwaltet. Der Vorteil hierbei ist zum einen, dass auf Speicherkomponenten (z.B. SD-Card-Leser) als auch auf UI-Komponenten zur Bedienung (LCD, Knöpfe) verzichtet werden kann, da sich der Daemon problemlos vom Daemon-Host aus steuern lässt. Zum anderen ergeben sich dadurch, dass der Daemon-Host für gewöhnlich mit einem Netzwerk verbunden ist, interessante Möglichkeiten für die Nutzung des Emulators und den weiteren Ausbau.

Aufzeichnungsformat

1 und 0 Bits

Zunächst einmal musste ich aber herausfinden, wie das Microdrive Daten aufzeichnet, um dann abzuschätzen, ob das ganze mit einem Nano auch tatsächlich umsetzbar ist. Es gibt hierzu einiges an Information. Aber es macht natürlich auch Spaß, das verfügbare mit eigenen Nachforschungen anzureichern. Angefangen habe ich mit dem Spectrum. Ich hab mir hier die Signale am Microdrive-Port des Interface 1 beim Formatieren einer Kassette angeschaut. Die Daten werden mithilfe des oben erwähnten Stereo-Kassetten-Tonkopfs auf zwei Spuren geschrieben, abwechselnd ein Byte in die eine, eines in die andere Spur. Die Bytes sind dabei um 4 Bit gegeneinander verschoben. Ein Bit dauert 12µs. Eine 0 wird durch einen gleichbleibenden Pegel signalisiert (ca. 41kHz), eine 1 durch einen Pegelwechsel nach 6µs (ca. 83kHz).

Ein erster Erfolg

Weiter ging es dann mit dem logischen Format. Hier war das Spectrum Microdrive Book von Ian Logan besonders hilfreich. Organisiert ist das Band in bis zu 254 Sektoren. Jeder Sektor besteht aus einem 27 Byte Header und einem 540 Byte Daten-Record, jeweils getrennt durch kurze Pausen (3,75ms nach Header, 7,0ms nach Record). Hier lag die größte Herausforderung: Der RAM des Nano (2KB) reicht bei weitem nicht, alle Sektoren einer Kassette aufzunehmen (144KB). Somit müssen die Daten kontinuierlich zwischen Nano und Daemon ausgetauscht werden. Bei einer Datenrate von 1Mb/s über die serielle Verbindung ist das rein rechnerisch möglich. Zum Glück zeigten meine ersten Versuche, dass die Verbindung bei dieser Geschwindigkeit auch stabil ist. Nach einigen Experimenten war es dann soweit - ich konnte alle Sektoren eines Format-Vorgangs korrekt empfangen.

Prototypen

Nach dem ersten Erfolg in der Kommunikation mit dem Microdrive-Interface kam eine lange Phase der Prototypen, sowohl bei der Hardware als auch bei der Firmware für den Nano und der Daemon-Software. Über viele Iterationen und Refactorings hinweg entstand allmählich eine erste Version des Emulators, der alle Features des Microdrive -zunächst nur für den Specturm- abbilden konnte.

Die ersten zwei PrototypenPrototyp 3 ErweiterungenPrototyp 2

Support für den QL

Auf die Prototyp-Phase folgte aufgrund geänderter Prioritäten eine längere Pause. Anfang 2021 regten mich jedoch zwei Diskussionen auf World of Spectrum dazu an, die Arbeit am Projekt wieder aufzunehmen und es auf einen Stand zu bringen, der eine Veröffentlichung erlaubte. Der größte noch offene Punkt war, auch den Sinclair QL zu unterstützen. Mein Ziel war dabei, eine separate Variante des Emulators zu vermeiden. D.h. ein und derselbe Adapter sollte sowohl mit Spectrum als auch QL arbeiten können, idealerweise mit auto detect.

Erster Erfolg mit dem QL

Dafür ging es nochmal zurück ans Forschen und Experimentieren. Denn es zeigte sich schnell, dass es doch einige Unterschiede zwischen Spectrum- und QL-Microdrive gibt - angefangen bei einer höheren Datenrate (50/100kHz), vertauschten Spuren und kürzeren Pausen nach Header und Record, über eine geänderte logische Struktur der Sektoren bis hin zu einem gänzlich anderen Format-Prozedere gab es einige Überraschungen. OqtaDrives Architektur erwies sich dabei jedoch als recht hilfreich, denn viele der notwendigen Anpassungen konnten im Daemon adressiert werden, was bzgl. der Softwareentwicklung deutlich einfacher ist. Irgendwann war es dann soweit - das erste erfolgreiche Formatieren.

Open Sourcing

Von Standalone bis Micro

Anfang Mai 2021 war dann der Support für den QL vollständig, und der Adapter konnte wie angestrebt automatisch zwischen Spectrum und QL unterscheiden. Nach vielen Refactorings war die Codebasis auch soweit "aufgeräumt", dass eine Veröffentlichung auf GitHub möglich war. Es war mir von Anfang an ein Anliegen, das Projekt unter einer freien Lizenz verfügbar zu machen, so dass ein Nachbau für alle Interessierten möglich ist.

Durch die Veröffentlichung gewann OqtaDrive auch die ersten Mitstreiter. Tom Dalby hat mehrere Leiterplatten und 3D-Druck-Gehäuse für den Aufbau in unterschiedlichen Konfigurationen entwickelt - von Standalone mit RaspberryPi Zero an Bord bis hin zu einer minimalen Micro-Version. Stephan Preuß hat unermüdlich viele Pre-Releases getestet, auf Spectrum und QL, und einiges an Fehlern gefunden. Wichtig waren aber auch die Diskussionen, die sich über die Zusammenarbeit ergaben. So hatte ich z.B. einer Standalone-Konfiguration mit Steuerung über ein Web-UI ursprünglich keine besondere Aufmerksamkeit geschenkt. Durch Toms und Stephans Vorschläge und freundliches Insistieren ist es heute meine favorisierte Konfiguration :-D

Status

Seit der initialen Veröffentlichung im Mai gab es bereits 7 Releases. OqtaDrive hat inzwischen ein recht ansehnliches Set an Features:

  • alle Microdrive Operationen unterstützt auf Spectrum und QL
  • kann zusammen mit echten Microdrive-Laufwerken genutzt werden, die sich an beliebige Stelle in der Laufwerkskette verschieben oder ganz abschalten lassen
  • Daemon läuft auf Linux, MacOS und Windows
  • Steuerung über Web UI & Kommandozeilen-Tool
  • Laden & Speichern im MDR und MDV Format
  • auf dem Spectrum können Z80 Snapshot-Dateien direkt geladen werden
  • Kassetten-Abbilder und Snapshots können auf dem Daemon-Host abgelegt und von jedem Client aus gesucht & geladen werden
  • Auflisten der virtuellen Laufwerke und der Inhalte von Kassetten
  • optional Ansteuerung eines Vibrationsmotors um auch den originalen Sound zu emulieren ;-)
  • Installations-Skript für Linux

Virtueller Ausstellungstisch

Anwesenheitszeiten

Tag Uhrzeit
Samstag 10:00 - 12:30 / 13:30 - 19:00
Sonntag 10:00 - 18:00

Vorführungszeiten

Intern in Interface 1 Standalone

Noch gibt es keinen Plan für feste Vorführungszeiten. Wir entscheiden einfach je nach Besucherzahl und Interesse. Gezeigt und vorgeführt werden die originalen Microdrives und verschiedene OqtaDrive-Konfigurationen. Ich habe auch vor, einen OqtaDrive-Adapter live zusammen zubauen :-P

Tag Uhrzeit Demo
Samstag xx:xx xxx
Sonntag xx:xx yyy
oqtadrive.txt · Zuletzt geändert: 2021/10/10 13:01 von xelalex