sd2iec (Firmware)

Aus C64-Wiki
Wechseln zu: Navigation, Suche
disambig 30px.png Dieser Artikel beschreibt die Funktionalität der sd2iec-Firmware. Die eigentliche Hardware wird in den folgenden Artikeln beschrieben: MMC2IEC, SD2IEC, arm2iec und µIEC.


Bei sd2iec handelt es sich um eine Firmware, die in verschiedenen Geräten eingesetzt wird, um ein Diskettenlaufwerk wie die Commodore 1541 gegenüber einem C64 zu emulieren. Die Software sd2iec steht als Open Source unter der GPL zur Verfügung.

Zur Abgrenzung gegenüber der Hardware SD2IEC wird die Firmware sd2iec - immer in Kleinbuchstaben - genannt. Die Abgrenzung ist deswegen wichtig, weil sd2iec auch von anderen Hardware-Plattformen wie dem MMC2IEC, dem arm2iec oder dem µIEC genutzt wird.

Geschichte[Bearbeiten]

Ursprünglich entwickelte sich sd2iec aus einer Anzahl von Änderungen an der ursprünglichen Firmware des MMC2IEC. Es führte aber aber relativ schnell dazu, dass die komplette Firmware neu geschrieben wurde. Am Anfang war die Firmware ausschließlich für die MMC2IEC-Hardware gedacht, wurde später aber auch an andere Hardware angepasst. Mit der Implementierung weiterer Fähigkeiten wurde die Firmware zu groß für die ursprüngliche Zielplattform, den ATmega32. Neuere Version benötigen den ATmega644 oder 1284/1281. Auch Unterstützung für ARM-Plattformen wurde implementiert, sodass die Firmware auch auf Plattformen wie dem arm2iec läuft.

Für eine komplette und detaillierte Übersicht über die Geschichte der Firmware bietet sich ein Blick in das git-Web-Interface an.

Funktionen[Bearbeiten]

  • Unterstützung von D64/D71/D81/M2I/... Disk-Images (lesend und schreibend für D64, auch bei direktem Sektorzugriff mit U1/U2), T64 wird nicht unterstützt
  • Unterstützung der PRG/P00/...-Dateiformate
  • eingeschränkte Unterstützung des REL-Dateiformats
  • Verwendung von "Wildcards" (*, ?)
  • Dateiablage mit Unterverzeichnissen (CMD-Befehlssyntax)
  • Schnelllader-Unterstützung (Turbo Disk/Fast Load/Speeddisk/JiffyDOS/Final Cartridge 3/DreamLoad/Exos)
  • zwei externe "Diskettenwechsel"-Tasten (NEXT/PREVIOUS)
  • Statusanzeige über zwei LEDs
  • Verarbeitung von langen FAT-Dateinamen
  • SD-Karten können FAT12/FAT16/FAT32-formatiert sein
  • Unterstütung des sektorweisen Zugriffs der SD-Karte von C64-Seite aus
  • Gute IEC-Kompatibilität
    • Unterstützung der üblichen IEC-Funktionen (LOAD, SAVE, OPEN, CLOSE, ...)
    • Das 1571-ROM wurde als Referenz für die Implementierung verwendet
    • Viele Spiele ohne eigenen Schnelllader funktionieren (vgl. M2I-Games)

Benutzung[Bearbeiten]

Im Folgenden werden exemplarisch einige relevante Kommandos aufgezählt. Eine komplette Übersicht findet sich im README der Firmware. Im Artikel Floppy-Befehle finden sich Informationen zum Senden der Kommandos im allgemeinen.

  • Verzeichnisse wechseln (CMD-Syntax):
    • OPEN1,8,15,"CD/SOMEDIR/":CLOSE1 - wechselt in das Verzeichnis SOMEDIR (relativ)
    • OPEN1,8,15,"CD//":CLOSE1 - wechselt zum Hauptverzeichnis (root directory)
    • OPEN1,8,15,"CD//SOMEDIR/":CLOSE1 - wechselt zum Verzeichnis SOMEDIR (in root)
    • OPEN1,8,15,"CD:←":CLOSE1 - wechselt in das übergeordnete Verzeichnis bzw. Verzeichnis verlassen
  • D64 benutzen (am Beispiel Inhaltsverzeichnes aufrufen):
    • OPEN1,8,15,"CD//SOMEDIR/:SOMEGAME.D64":CLOSE1 und dann LOAD"$",8 und LIST funktioniert immer für das D64 Image "Somegame.D64" im Verzeichnis "Somedir"
    • OPEN1,8,15,"CD:SOMEGAME.D64":CLOSE1 wenn das D64 im aktuellen Verzeichnis liegt
    • OPEN1,8,15,"CD:←":CLOSE1 - D64 wieder verlassen
    • @CD//SOMEDIR/:SOMEGAME.D64 und LOAD"$",8 und LIST /bzw. Jiffy-Befehl fürs DIR funktioniert mit Jiffy
    • @"CD//SOMEDIR/:SOMEGAME.D64 und LOAD"$",8 und LIST /bzw. Jiffy-Befehl fürs DIR funktioniert mit S-Jiffy
  • M2Is benutzen:
    • OPEN1,8,15,"CD//SOMEDIR/:SOMEGAME.M2I":CLOSE1 - wechselt zu \SOMEDIR\SOMEGAME.M2I
    • OPEN1,8,15,"CD:SOMEGAME.M2I":CLOSE1 - in SOMEGAME.M2I das im aktuellen Verzeichnis liegt wechseln
    • OPEN1,8,15,"CD:←":CLOSE1 - M2I wieder verlassen
  • Dateien laden:
    • LOAD"//SOMEDIR/:SOMEFILE" - lädt die Datei SOMEFILE im Verzeichnis SOMEDIR
  • Neues Image anlegen
    • OPEN1,8,15,"N:SOMENAME":CLOSE1 Image ist sofort geöffnet.
  • Gerätenummer wechseln:
    • OPEN1,aktuelle Nummer,15,"U0>"+CHR$(neue Nummer):CLOSE1 - Wechseln der Gerätenummer auf neue Nummer
    • OPEN1,Nummer,15,"XW":CLOSE1 - speichert die gewählte Gerätenummer dauerhaft im EEPROM ab

Faustregel: Pfade vor, Dateinamen hinter dem Doppelpunkt - auch wenn die Datei ein D64/M2I ist, in das gewechselt werden soll.

Diskettenwechsel[Bearbeiten]

Über die beiden Diskchange-Knöpfe NEXT und PREVious kann man komfortabel das "eingelegte" Disketten-Image wechseln, ohne dabei einen Befehl über die Tastatur eingeben zu müssen. Hierzu muss man vorher eine Textdatei (Autoswap-Datei) angelegt haben, in der die einzelnen Images aufgelistet werden. Das aktuell verwendete Disketten-Image bezeichnet man auch als "gemountet".

Die Datei kann je Zeile entweder nur den Namen der Image-Datei, oder auch komplette Pfade enthalten. Also zum Beispiel:

turrican_s1.d64
turrican_s2.d64

Oder mit komplettem Pfad

//turrican/:turrican_s1.d64
//turrican/:turrican_s2.d64

Achtung: Problematisch scheinen Dateinamen zu sein, die Sonderzeichen wie z.B. Klammern beinhalten. Die Liste wird durch das Kommando "XS:dateiname" aktiviert und automatisch das erste Image in der Liste ausgewählt. Die aktuell verwendete Autoswap-Datei lässt sich jederzeit ändern. Dafür verwendet man den Befehl

OPEN 1,8,15,"XS:mydiskimages.lst"

wobei für "mydiskimages.lst" jeder beliebige Name möglich ist. Nennt man die Datei "autoswap.lst" (genau dieser Dateiname), dann wird diese automatisch aktiviert, und der XS-Befehl erübrigt sich.

Befinden sich im Verzeichnis sowohl eine Datei "mydiskimages.lst" also auch "autoswap.lst", so wird bei Aktivierung der "mydiskimages.lst" die Datei "autoswap.lst" ignoriert.

Die Autoswap-Datei kann auch deaktiviert werden:

OPEN 1,8,15,"XS:"


Tastenfunktion: Beim Betätigen eines Disk-Change-Tasters blinken zur Bestätigung zunächst beide LEDs kurz auf.

  • NEXT: Danach blinkt die grüne LED kurz auf und es wird das nächste in der Liste vorkommende Disketten-Image aktiviert.
  • PREV: Danach blinkt die rote LED kurz auf und es wird das vorhergehende Disketten-Image aktiviert.

Ist man beim letzten Disketten-Image in der Liste angelangt und betätigt den Next-Taster erneut, so gelangt man wieder zum ersten Eintrag, wobei in diesem Fall beide LEDs zur Bestätigung blinken.

  • NEXT+PREV: Drückt man beide Taster gleichzeitig, wird das erste Image in der Liste ausgewählt.

Sollte dies nicht der Fall sein, so ist ein Fehler in der Autoswap-Datei.

Drückt man einen der beiden Taster, ohne dass eine Liste aktiviert wurde, wird im aktuellen Verzeichnis nach einer Datei mit dem Namen "autoswap.lst" gesucht und diese aktiviert. Das erste Image in der Liste wird dann gemounted.

Beispiel[Bearbeiten]

Dieses Beispiel wurde auf einem SD2IEC von nkcelectronics mit der Firmware 0.10.1 durchgeführt.

Im Ordner Turrican befinden sich zwei Images und die Datei "autoswap.lst":

Inhalt der "autoswap.lst":

turrican_s1.d64
turrican_s2.d64

Legt man diese SD-Karte in die SD2IEC ein und wechselt in das Verzeichnis Turrican mit

OPEN 1,8,15,"cd:turrican":CLOSE 1

kann man einen der beiden Change-Disk Taster betätigen. Hierbei wir das Image in der ersten Zeile gemountet. Betätigt man den Knopf erneut, wird das Image der zweiten Zeile gemountet. Da als Dateiname der Standardname "autoswap.lst" verwendet wurde, ist es nicht nötig, die Datei mit dem XS-Befehl zu aktivieren.


Häufige Fragen[Bearbeiten]

Werden Schnelllader unterstützt?[Bearbeiten]

Im allgemeinen nicht. Schnelllader bestehen aus zwei Programmteilen: Einer läuft auf der Seite des C64, der andere auf der Seite des Laufwerks. Die von sd2iec genutzte Hardware-Plattform bietet nicht genug Ressourcen, um die komplette CPU und die weitere Elektronik und Mechanik einer 1541 mikrosekundengenau zu emulieren. Stattdessen wurde der Weg gewählt, ausgewählte Schnelllader sd2iec-seitig zu erkennen und eine speziell für den jeweiligen Schnelllader neu geschriebene Emulation zu benutzen. Dadurch werden nicht alle möglichen Schnelllader unterstützt; die unterstützten jedoch laufen typischerweise sogar schneller als auf einer originalen 1541 oder z.B. einer 1541 Ultimate.

Wie kompatibel ist sd2iec zur 1541?[Bearbeiten]

Normalerweise sollte jede Software, die z.B. in VICE ohne "exakte Floppy-Emulation" läuft, auch per sd2iec laufen (wenigstens als D64). In der Gamebase64 lässt sich entsprechende Software z.B. via ihrer erweiterten Suche finden.

Viele "neue" Veröffentlichungen von Spielen und Anwendungen erlauben es beim Start optional, den Schnelllader zu deaktivieren. Außerdem gibt es mit znarFs M2I-Liste eine Übersicht über Spiele, die mit sd2iec zusammenarbeiten. Spiele, die aus nur einer Datei bestehen, sollten auch funktionieren, ebenso wie Programme, die für das IDE64 angepasst wurden.

Wozu das M2I-Format? Wie erzeuge ich M2I-Dateien?[Bearbeiten]

Am besten gar nicht. Das M2I-Format wurde früher benutzt, als die Firmware noch keine D64-Dateien schreiben und nicht mit allen PETSCII-Zeichen in Dateinamen umgehen konnte. Inzwischen ist das jedoch Geschichte, und es sollte besser das D64/D71/D81-Format genutzt werden, was im Retro-Bereich im Gegensatz zu M2I ein Standard ist.

Funktioniert GEOS mit sd2iec?[Bearbeiten]

Ja, seit Version 0.10.1 unterstützt die sd2iec-Firmware den GEOS 2.0-Schnelllader.

Was sind die Unterschiede von sd2iec-basierenden Entwicklungen verglichen mit der 1541-III und der 1541 Ultimate?[Bearbeiten]

1541 Ultimate vs. sd2iec-basierte Designs
sd2iec-basierte Hardware ist wesentlich günstiger.
Da die 1541 Ultimate die komplette 1541 emuliert, ist sie wesentlich kompatibler. Allerdings gibt es von fast allen Spielen Versionen, die auch mit sd2iec funktionieren.
sd2iec-basierte Hardware bietet normalerweise keinerlei Sonderfunktionen an (Cartridge/Netwzwerk/REU-Emulation).
sd2iec ist bei KERNAL-Funktionen schneller als die 1541 Ultimate, da es die Funktionen auf IEC-Ebene emuliert, nicht die komplette 1541 inkl. (langsamer) Mechanik.
1541-III vs. sd2iec-basierte Designs
sd2iec ist wesentlich kompatibler und hat Unterstützung für einige Schnelllader - 20-fache Geschwindigkeit und mehr!
sd2iec kann mit einem Bootloader genutzt werden, der die Firmware beim Start von der SD-Karte liest. Entsprechend einfach sind Firmware-Updates.
sd2iec benutzt einen ATmega-Controller - Open Source-Compiler sind für diese Plattform verfügbar.

Wie kann man Dateien von/auf ein sd2iec-basiertes Gerät kopieren?[Bearbeiten]

Zum dateiweisen Kopieren mit einem C64 lässt sich zum Beispiel FCOPY[1] oder DraCopy[2] benutzen. Auch Fast Back'em[3] scheint zu funktionieren, hat aber einen nervigen Reset-Schutz. JiffyDOS hat ebenso eine einfache eingebaute Dateikopierfunktion.

Um D64-Dateien auf eine "echte" 1541/1571/... zu kopieren, lässt sich gunzip.c64[4] benutzen.
Um eine D64-Datei von einer Diskette in einer 1541/... zu erzeugen, lässt sich PuZip[5] benutzen.

Diese Hilfsprogramme sind recht langsam - JiffyDOS hilft. Beide Programme kopieren dateiweise. Um sektorweise zu kopieren, lässt sich z.B. DCOPY.PRG benutzen.

Welche Datei-/Verzeichnis-Navigatoren kann ich benutzen?[Bearbeiten]

Als Kopierprogramme und Dateimanager lassen sich z.B. "DraCopy" und CBM-Command benutzen.

Einige dieser Filebrowser wie etwa SD2BRWSE oder der CBM-Browser können sehr gut mit einem angesteckten Final Cartridge 3 (FC3) und dessen Fastloader kombiniert werden. Dieser bleibt nämlich in den beiden genannten Browsern erhalten, was dazu führt, dass Software per sd2iec viel schneller geladen werden kann. Dies geht übrigens auch mit dem JiffyDOS Modul.
Weiters hat man bei der Nutzung eines FC3- oder JiffyDOS-Moduls auch noch die F-Tasten-Befehle, die das Handling mit sd2iec wesentlich bequemer und komfortabler machen. Es müssen dann beispielsweise keine ellenlangen DOS-Befehle mehr von Hand eingetippt werden, um ein Verzeichnis zu wechseln, da man hierfür am FC3 einfach nur F8  drücken kann und dann nur noch zwei oder drei Buchstaben eintippen muss.

Warum wird LOAD"IMAGE.D64",8,1 zum Öffnen von D64-Dateien nicht unterstützt?[Bearbeiten]

Die alte MMC2IEC-Firmware konnte das noch, allerdings war die Funktionalität ein ziemlicher Hack und hat einige Nebenwirkungen, z.B. konnte man keine D64-Dateien kopieren oder erzeugen.

Wie schnell ist sd2iec?[Bearbeiten]

Getestet wurde mit einer 193 Blöcke großen Datei.

Bei den angegeben Zeiten handelt es sich um von Hand gestoppte LOAD-Zeiten. Spiele und Anwendungen nutzen häufig nicht LOAD, sondern CHRIN zum Nachladen; CHRIN lässt sich nur mit KERNAL-Erweiterungen beschleunigen.

Speeder C64+1541 C64+sd2iec
Relativ Absolut Relativ Absolut
Kein Schnelllader 1,0× 400 Bytes/s 1,6× 650 Bytes/s
Turbo Disk 5,7× 2.280 Bytes/s 12,6× 5.050 Bytes/s
Jiffy (1) 6,0× 2.400 Bytes/s 21,5× 8.600 Bytes/s
FC3 10,4× 4.150 Bytes/s 20,0× 8.000 Bytes/s
AR6 14,3× 5.700 Bytes/s
SJLOAD 25,0× 10.000 Bytes/s
Experimenteller Speeder 38,0× 15.300 Bytes/s

(1) JiffyDOS beschleunigt auch $EE13/CHRIN, was von vielen Nachladern genutzt wird. Auf einer 1541 erreicht JiffyDOS etwa 10-fache Geschwindigkeit, sofern die Datei auch mit Jiffy vorher gespeichert wurde.

Unterstützt sd2iec Parallelkabel?[Bearbeiten]

Grundsätzlich ja, allerdings kommt es auf die konkrete Hardware an.

Software[Bearbeiten]

Bootloader[Bearbeiten]

Auf den meisten sd2iec-basierten Geräten kümmert sich ein Bootloader um das Einlesen bzw. Aktualisieren der auf dem Microcontroller abgelegten Firmware.

  • Beim Anschalten liest der Bootloader das Hauptverzeichnis der SD-Karte und prüft jede Datei auf passende Größe und Dateisignatur.
  • Wurde eine passende Firmware-Datei gefunden, deren Version 0 oder größer als die im Moment auf dem Microcontroller abgelegte Version ist, wird der Microcontroller mit der gefundenen Firmware neu programmiert.

Firmware[Bearbeiten]

Siehe die sd2iec-Firmware-Seite.


Anzeige[Bearbeiten]

Die sd2iec-Firmware unterstützt grundsätzlich externe Anzeigen.

Benötigte Hardware[Bearbeiten]

  • funktionsfähige Hardware für sd2iec
  • ATmega1284p
  • HD44780-Kompatibles Display mit 4×20 (oder mehr)
  • Drehpoti
  • 3 Kondensatoren

Benötigte Verbindungen[Bearbeiten]

  • I2C-Verbindung vom sd2iec-AVR zum Display-AVR: Hardware-I2C-Pins des Display-AVR (siehe Datenblatt, SDA und SCL, sollten nebeneinander liegende Pins von Port C oder D sein) mit den passenden Pins des sd2iec-AVRs verbinden (larsp-Hardware: SCL ist PC6, SDA ist PC5; sw2-Hardware: SCL ist PC4, SDA ist PC5).
  • IntRq-Leitung, damit das Display um Aufmerksamkeit betteln kann: PD6 am Display-AVR an den passenden Pin des sd2iec-AVR (larsp: PC7, sw2: PC6).
  • LCD-Steuerleitungen RS, RW, E in dieser Reihenfolge an PA0, PA1, PA2.
  • LCD-Datenleitungen D4-D7 in dieser Reihenfolge an PA4-PA7.
  • Dreh-Encoder-Leitungen A/B an Pins PC2 und PC3 - ggfs. vertauschen, wenn die Steuerung zu spinnen scheint.
  • Taster an PC4.

Source-Anpassung[Bearbeiten]

  • Anpassungen in der config.h: LCD_E2 als 0 definieren, LCD_COLUMNS und LCD_ROWS_TOP passend zum eigenen Display ändern, LCD_ROWS_BOTTOM auf 0 setzen, evtl. LCD_ROWADDR anpassen (muss bei "normalen" vierzeiligen Displays vier Werte enthalten).
  • Anpassungen in der main.c: Die Definition von status_line kürzen, damit sie ins Display passt, die Definition von STATUS_ADDR dazu passend ändern (der Wert ist das Zeichen in status_line, ab dem die beiden "_" für die Adresse stehen, gezählt wie in C üblich ab 0), bei einem nur zweizeiligen Display alle Zugriffe auf lcdline[2] und lcdline[3] sowie den einen Aufruf von set_line() mit 2 als erstem Parameter (bei "case DISPLAY_ERRORCHANNEL:") auf 0 und 1 ändern, damit die nicht in nicht existierende LCD-Zeilen schreiben (wird aber hässlich bis unbrauchbar aussehen).

Layout[Bearbeiten]

Weblinks[Bearbeiten]

Quellen[Bearbeiten]

  1. "HD Utilities Disk" mit FCOPY (Mirror von cottonwood.servebbs.com/wiskow/) Sprache:englisch
  2. Kopierprogramm DraCopy Sprache:deutsch
  3. Kopierprogramm Fast Back'em Sprache:englisch
  4. C64 gunzip Sprache:englisch
  5. PuZip Sprache:englisch