Bei dem Dateisystem der frisch in der RD-175 formatierten PCMCIA-Karte handelt es sich um das Dateisystem "FAT16B" in der neueren "BIGDOS"-Variante ab DOS 3.31 mit 32-Bit-breiten Sektoreinträgen (also der FAT16-Variante, die auf partitionierten Medien mit dem Partitionstyp 06h korrespondieren würde, nicht der älteren FAT16-Variante mit Partitionstyp 04h).
Das Format des BIOS Parameter Blocks im Bootsektor entspricht vom Aufbau her einem standardkonformen XBPB (Extended BPB) mit Signaturbyte 29h an Offset +26h, wie er ab DOS 3.31 und OS/2 1.3 üblich ist. Verschiedene Einträge weisen auf die Verwendung als partitioniertes Medium hin, also auf eine Konfiguration als Wechselfestplatte, nicht als Superfloppy.
Das Dateisystem nutzt zwei FATs, die beide synchron gehalten werden. Zwei FATs sind gängig, Microsoft-Betriebssysteme kommen auch nicht mit anderen Werten als zwei FATs klar, außer auf RAM-Disks, wo üblicherweise nur eine FAT verwendet wird.
Die Sektorgröße beträgt 512 Bytes/Sektor (allgemein üblich), und das Volume weist in diesem Fall eine Clustergröße von 32 KiB auf. Letzteres ist für ein Volume mit - wie hier - gerade mal 256 MiB Größe extrem unüblich! Normale Formatierprogramme würden hier standardmäßig eine wesentlich kleinere Clustergröße (4 KiB oder 8 KiB) wählen.
Eine Clustergröße von 32 KiB garantiert allerdings eine maximal effiziente Ausnutzung des verfügbaren Speicherplatzes auf einem Volume, auf dem ja nur große Bilddateien gespeichert werden sollen. Der Verschnitt (Cluster Overhang) bleibt so minimal.
Möglicherweise korrespondiert auch die Größe der MDC.CTL-Datei mit der Clustergröße. Sollte die MDC.CTL hingegen immer 32 KiB groß sein, wäre es denkbar, daß die Kamera-Firmware, die möglicherweise nur eine unvollständige FAT-Implementierung besitzt, diese Datei nur dann sauber verarbeiten kann, wenn sie nicht über mehrere Cluster verteilt ist, und daß deshalb die Clustergröße auf 32 KiB hochgesetzt wurde und kleinere Clustergrößen zu einer Fehlfunktion führen würden. Clusterketten zu folgen, wie es ein FAT-Dateisystemtreiber machen muß, ist eine relativ zeitaufwendige Sache und auch nicht ganz trivale Angelegenheit, wenn man das auf einem Mikrocontroller, wie er vermutlich in der Kamera werkelt, implementieren möchte (was nicht heißt, daß es nicht geht - ich habe das selbst schon oft genug gemacht).
Es wäre z.B. denkbar, daß die MDC.CTL-Datei eine Art "Karte" enthält, die einen Paralleleinstieg in den Datenbereich der FAT-Partition "an den FAT-Dateisystemverwaltungsstrukturen vorbei" bietet, so daß die Kamera unkompliziert und schnell auf die Bilddateien zugreifen kann, die unfragmentiert an bestimmten festgelegten Orten auf dem Medium liegen und daß die FAT-Verwaltungsstrukturen dann erst asynchron nachgezogen werden, damit nach Entfernen der Karte aus der Kamera auch ein normaler FAT-Dateisystemtreiber die Dateien findet. Sowas könnte Performancegründe haben, aber auch ursächlich im begrenzten Speicherplatz in der Kamera begründet liegen. Vielleicht wird darüber aber auch sowas wie wear leveling realisiert. Ist aber erstmal noch Spekulation.
Die Zahl der Wurzelverzeichniseinträge ist mit 256 Einträgen á 32 Bytes der Größe des Mediums angemessen und insofern korrekt berechnet, als daß sie genau auf einer Sektorgrenze auskommt. Minimal wären hier 208 Einträge möglich gewesen, wenn wir 199 plus 1 Dateien speichern können müssen. Aber die drei gewonnenen Sektoren hätten auch nicht genug Speicherplatz ergeben, als daß man ein Bild mehr hätte speichern können, insofern ist das schon völlig in Ordnung so.
Das Volume besitzt im vorliegenden Fall eine logische Geometrie mit 16 Köpfen und 32 Sektoren pro Spur.
Neben der Adressierung über die Logical Block Address (LBA) kann so auch noch über das Tripel aus Zylinder/Kopf/Sektor (CHS) auf das Medium zugegriffen werden. Das ist gute gängige Praxis bei Medien mit weniger als 8 GiB Speicherplatz, aber gerade bei Flash-Disks, die ja keine "echte" Geometrie mehr haben, die man zwangsläufig nach außen reflektieren müßte, ist das nicht immer der Fall, insofern erwähnenswert.
Es wäre in jedem Fall zu prüfen, ob die Kamera über CHS oder über LBA auf das Medium zugreift, denn wenn sie dafür CHS benutzt, kommt sie wahrscheinlich nicht mit allen theoretisch möglichen logischen Geometrien zurecht, so daß bei der Formatierung eine passende logische Geometrie forciert werden müßte.
Mehr als 16 Köpfe wurden von vielen alten PCs nicht unterstützt, was letztlich auf eine Beschränkung des WD1003-Disk-Controllers zurückgeht, der in PC/ATs zum Einsatz kam, bevor IDE-Platten das Licht der Welt erblickten, und zu dem selbst IDE-Platten rückwärtskompatibel blieben. Zwar wurde diese Beschränkung später aufgehoben, aber trotzdem versuchte man aus Rückwärtskompatibilitätsgründen noch lange, die Anzahl der Köpfe auf maximal 16 zu beschränken. Viele ältere (Adaptec-)SCSI-Controller ohne Sektormapping beschränken die Geometrie auf maximal 32 Sektoren und 64 Seiten, ein IBM-kompatibles Rechner-BIOS auf maximal 1023 Zylinder.
Bei einer Gesamtgröße des Volumens von hier 500192 Sektoren á 512 Bytes (entsprechend 244,24 MiB) ergibt das 977 Zylinder.
Entgegen dem Standard ist der freie Datenbereich mit dem Füllbyte FFh belegt. Normalerweise wird der freie Bereich hingegen mit dem Wert F6h gefüllt. (Das rührt noch aus den Zeiten von uralten Disk-Controllern her, für die dieses Bitmuster besondere Eigenschaften hatte.) Heutigen Festplatten ist es völlig egal, auf Flash-Disks ist es allerdings sehr sinnvoll (und wird durchaus auch von anderen so gemacht), als Füllbyte den Wert FFh zu verwenden, um den Verschleiß des Mediums zu minimieren. Es handelt sich also um keinen Fehler in der Implementierung, sondern nur um eine erwähnenswerte Spitzfindigkeit. Jedem normalen FAT-Dateisystemtreiber muß es völlig egal sein, was in nicht beschriebenen Bereichen für Werte stehen. Viele bessere Formatierprogramme erlauben auch die Angabe alternativer Füllbytes, um auf solche Besonderheiten besser eingehen zu können.
Die MDC.CTL-Datei liegt direkt am Anfang des Datenbereichs im Cluster 2, also dort, wo bei einem bootfähigen Medium normalerweise die Bootloader/Kerneldateien liegen würden (IO.SYS/MSDOS.SYS, IBMBIO.COM/IBMDOS.COM bzw. DRBIOS.SYS/DRBDOS.SYS bei diversen DOS-Versionen). Die Datei ist im ersten Verzeichniseintrag eingetragen. Das muß nicht, aber könnte eine der kritischen Bedingungen sein, die darüber entscheiden, ob die Kamera mit der Datei umgehen kann oder nicht. Denn wenn sie selbst nur einen rudimentären FAT-Dateisystemtreiber implementiert hat, möchte sie vielleicht auch auf diese Datei direkt zugreifen, nicht erst über das gemountete Dateisystem. (Sowas ähnliches machen auch die Bootsektoren vieler Microsoft-Betriebssysteme, die die Bootdateien unfragmentiert an einer physikalisch vorbestimmten Stelle auf dem Medium erwarten - wobei das meiner Ansicht mehr daran liegt, daß deren Entwickler nicht effizient programmieren können und es einfach nicht geschafft haben, mehr "Intelligenz" in den zwangsläufig hart begrenzten Platz des Bootsektors (512 Bytes) zu packen - aus eigener Erfahrung weiß ich, daß man mit "Grips" in 512 Bytes neben dem kompletten herkömmlichen DOS-Bootsektor-"Pflichtprogramm" durchaus auch ein Mini-Disk-Operating-System mit FAT12/FAT16/FAT16B/FAT32/FAT32B-Dateisystem und CHS/ECHS/LBA28/LBA32-Unterstützung zum Auffinden und Laden der nicht notwendigerweise unfragmentiert auf dem Medium liegenden Kerneldateien (bis 64 KiB Image-Größe) nebst einem mit DR-DOS, PC-DOS, MS-DOS und REAL/32 rückwärtskompatiblen Multi-OS-Bootstrap-Loader und PnP-Unterstützung unterbringen kann, der auch auf Maschinen mit gerade mal 128 KiB Hauptspeicher noch funktioniert und mit Maschinenbefehlen auskommt, die ein Original IBM PC von 1981 genauso versteht wie jeder heute gängige PC, aber das ist ein anderes Thema... ;-) )
Die MDC.CTL-Datei besitzt die Attribute "Versteckt" und "Schreibgeschützt" (und "Archiv", was aber für unsere Fragestellung unrelevant ist). Das "System"-Attribut ist nicht gesetzt, was normalerweise bedeutet, daß die Datei von Defragmentiersoftware als relokatibel angesehen werden darf (ob das auch wirklich so ist, muß noch überprüft werden). Der Verzeichniseintrag selbst entspricht weitestgehend dem Standard, wie er von FAT12-/FAT16-Volumes her bekannt ist, d.h. ohne OS/2 Extended Attributes, ohne DR File Password, File Owner, Permission Sets und Deletion Tracking, und ohne VFAT-Erweiterung für lange Dateinamen - mit einer Ausnahme:
Der allgemein übliche Last Modified-Zeitstempel für die Datei an Offset +18h steht fest auf BF21h, was korrekt nach dem Standard interpretiert für 2075-09-01, 00:00:00 Uhr steht. Vermutlich ist hier aber eher das magische Datum 1996-12-31 im Releasezeitraum der Kamera gemeint gewesen, das sich (fast) ergibt, wenn man die beiden Bytes des Datumsstempels vertauscht. Korrekt ergibt sich damit das ungültige Datum "1996-13-31, 00:00:00 Uhr", aber es ist anzunehmen, daß der Entwickler dieses Codes sich nicht mit dem FAT-Dateisystem auskannte und es so zu einem off-by-1-Fehler und einem Byte-Order-Fehler kam.
Zusätzlich steht der erst mit Windows 95 eingeführte Last-Access-Zeitstempel an Offset +12h auf 3CE8h, was sich als 2010-07-08 dekodieren läßt und somit mit großer Wahrscheinlichkeit nicht von der Formatiersoftware, sondern vom PC-Betriebssystem stammt, das auf diese Datei zugegriffen hat. Bitte mal überprüfen, indem das Image der frisch erzeugten Datei gezogen wird, bevor auf irgendeine Datei auf dem Medium zugegriffen wurde (also auch ohne die MDC.CTL-Datei vorher zu kopieren).
Wurdest Du beim Formatieren nach dem gewünschten Namen gefragt, oder wo kommt die Angabe "TOSHIBA256M" her? Interessant ist übrigens, daß das Volume Label nur im XBPB selbst vorkommt, nicht als spezieller Verzeichniseintrag, wie es früher üblich war.
Viele Grüße,
Matthias