Block Availability Map

In Computer-Dateisystemen ist ein Blockbelegungsplan (BAM – Block Availability Map) eine Datenstruktur, die dazu dient, Speicherblöcke auf einem Datenträger zu erfassen, die als frei (für neue Daten verfügbar) gelten. Sie wird zusammen mit einem Verzeichnis verwendet, um Dateien auf einem Datenträger (ursprünglich nur Disketten, später auch Festplatten) zu verwalten. Bei zu Commodore DOS (CBM DOS) kompatiblen Diskettenlaufwerken war die BAM eine Datenstruktur, die in einem reservierten Bereich der Diskette gespeichert wurde (wobei Größe und Position von den physikalischen Eigenschaften der Diskette abhingen). Für jede Spur bestand die BAM aus einer Bitmap der verfügbaren Blöcke sowie (in der Regel) einer Zählung der verfügbaren Blöcke. Diese Zählung wurde in einem einzelnen Byte gespeichert, da alle Formate 256 oder weniger Blöcke pro Spur aufwiesen. Das Zählbyte entsprach schlicht der Summe aller gesetzten Bits (1-Bits) in der Bitmap für die jeweilige Spur. Die folgende Tabelle veranschaulicht den Aufbau der BAM für das Laufwerk Commodore 1541.

Die BAM enthält ein Verzeichnis des freien und belegten Speicherplatzes der Diskette. Wenn das System Information auf einer Diskette speichern will, so wird automatisch die BAM vom DOS abgefragt, ob und wie viel Speicherplatz noch frei ist. Im Falle einer Speicherung wird die BAM anhand der neuen Werte korrigiert, d. h. ,der von den neuen Daten benotigte Speicherplatz wird als belegt gekennzeichnet. Wird jedoch bei der Abfrage festgestellt, dass die zur Speicherung vorgesehene Datenmenge zu groß ist, so wird eine Fehlermeldung ausgegeben. Die BAM wird beim Formatieren einer Diskette erstellt und beim Initialisieren der Diskette in den DOS-Speicher geschrieben. Die BAM ist auf der Diskette auf Spur 18, Sektor 0 gespeichert und belegt einen Speicherplatz von 128 Bytes. Alle die BAM betreffenden Änderungen werden zuerst im DOS-Speicher (in der Floppy) registriert und beim SAVEen (Abspeichern) eines Programms bzw. beim CLOSEn (Schließen) eines seqentiellen Files auf die Disketten-BAM geschrieben.

Bei Datenträgern mit höherer Kapazität (siehe unten) würde die Tabelle entsprechend umfangreicher ausfallen.

Total ByteBitmap Byte 1Bitmap Byte 2Bitmap Byte 3
Spur 1Blöcke verfügbarBlöcke 0–7Blöcke 8–15Blöcke 16–23
Spur 2Blöcke verfügbarBlöcke 0–7Blöcke 8–15Blöcke 16–23
...............
Spur 35Blöcke verfügbarBlöcke 0–7Blöcke 8–15Blöcke 16–23

Beim Commodore-1541-Format (einseitig beschriebene Disketten) wurde die Bitmap in 3 Bytes untergebracht, da dieses Format 17 bis 20 Sektoren pro Spur aufwies (man beachte, dass 3 Bytes mindestens 20 Bits fassen können). Ebenso verwendete das Laufwerk Commodore 1571 3 Bytes für die Bitmap jeder Spur; die BAM war jedoch doppelt so groß, da bei der Formatierung als zweiseitige Diskette die doppelte Anzahl an Spuren vorhanden war. Im Gegensatz dazu nutzte das Diskettenlaufwerk Commodore 1581 5 Bytes für die Bitmap, da das Format 40 Blöcke pro Spur vorsah (man beachte, dass 5 Bytes 40 Bits fassen können). Unabhängig vom Format signalisierte ein Bit mit dem Wert 1, dass der Block verfügbar (frei) war, während ein Bit mit dem Wert 0 anzeigte, dass der Block nicht verfügbar (belegt) war; die Bitmap-Daten wurden dabei in der Reihenfolge Low-Byte zuerst gespeichert. Das erste Byte enthielt also die Belegungsinformationen für die Blöcke 0 bis 7, das zweite Byte für die Blöcke 8 bis 15 und so weiter. Innerhalb eines Bytes war die Bitmap so angeordnet, dass das niederwertigste Bit (Low-Bit) an erster Stelle stand. So repräsentierte das erste Byte beispielsweise Block 0 durch das niederwertigste Bit und Block 7 durch das höchstwertigste Bit.

Auch Speichergeräte von Creative Micro Designs, die für den Einsatz mit CBM-Computern vorgesehen waren, verwendeten eine Block Availability Map (BAM), die denselben Zweck erfüllte. Allerdings enthielten diese Geräte (FD-2000, FD-4000 und CMD-HD kein Zähler-Byte, und die Bit-Reihenfolge innerhalb der Bytes war umgekehrt (High-Bit zuerst). Trotz dieser Umkehrung der Bits (im Vergleich zu den CBM-Formaten) erfolgte die Speicherung der Bytes weiterhin in derselben Reihenfolge (Low-Byte zuerst).

Bitmap Byte 1Bitmap Byte 2...Bitmap Byte 32
Spur 1Blöcke 0–7Blöcke 8–15...Blöcke 248–255
Spur 2Blöcke 0–7Blöcke 8–15...Blöcke 248–255
...............

Aufbau

Dies ist der Aufbau der BAM einer Diskette im 1541- bzw. 1571-Format (BAM format/directory header (1571 mode) Track 18, Sector 0)

Byte
dezimal
Byte
hexdezimal
BeschreibungInhalt
0$00Spurnummer für Directory18 ($12)
1$01Startsektor für Directory1 ($01)
2$02Formatkennzeichen"A" bei 1541/1570/1571
3$03Flag für doppelseitige Disketten$00 = einseitige Disk (1541)
$80 = doppelseitige Disk (1571)
4$04Anzahl der freien Blöcke von Spur 1
5$05Belegung für Sektor 0-7Bit=0: Sektor belegt
Bit=1: Sektor frei
6$06Belegung für Sektor 8-15Bit=0: Sektor belegt
Bit=1: Sektor frei
7$07Belegung für Sektor 16-20
(Sektoren 21-23 nicht vorhanden)
Bit=0: Sektor belegt
Bit=1: Sektor frei
8-143$08-$8FBedeutung wie Byte 4-7, aber für Spuren 2-35
144-159$90-$9FDiskettenname, der bei der Formatierung angegeben wurde
aufgefüllt mit "Shift Space" 160 ($A0)
160-161$A0-$A1jeweils "Shift Space"160 ($A0)
162-163$A2-$A3Diskettenidentifikation (ID), die bei der Formatierung angegeben wurde
164$A4"Shift Space"160 ($A0)
165$A5DOS-Version mit der gearbeitet wird2 = CBM DOS V2.6
(spätere Versionen werden nicht aktualisiert!)
166$A6Kopie von Byte 2bei 1541: "A"
bei 8050: "C"
167-170$A7-$AAjeweils "Shift Space"160 ($A0)
171-179$AB-$B3Modus$00=1541
$A0=1571
180-220$B4-$DCunbenutzt0
221-237$DD-$EDbei 1541 unbenutzt; bei 1571: Anzahl der freien Blöcke für Spur 36-52
238$EEbei 1541 unbenutzt; bei 1571: Anzahl der freien Blöcke für Spur 53
239-244$EF-$F4bei 1541 unbenutzt; bei 1571: Anzahl der freien Blöcke für Spur 54-59
245-250$F5-$FAbei 1541 unbenutzt; bei 1571: Anzahl der freien Blöcke für Spur 60-65
251-255$FB-$FFbei 1541 unbenutzt; bei 1571: Anzahl der freien Blöcke für Spur 66-70

Einzelnachweise

  1. ↑ The Anatomy of the 1541 Disk Drive, Grand Rapids, Lothar (1984), MI: Abacus Software, Seite 89, ISBN 0-916439-01-1
  2. 1 2 3 Commodore Disk Drive 1541-II Benuterhandbuch, Seite 10
  3. ↑ Karsten Schramm - Die Floppy 1570/1571, Die BAM der Diskette, Seite 49
  4. 1 2 Commodore 1581 User's Guide, Commodore Business Machines, 1987, Seite 34
  5. 1 2 Commodore 1571 User's Guide, Commodore Business Machines, 1985, Seite 108–109
  6. ↑ FD-2000 Diskettenlaufwerk von Creative Micro Designs (CMD), c64-wiki.de, 12. Oktober 2026
  7. ↑ CMD-HD – Festplattenlaufwerk für den C64/128 von Creative Micro Designs (CMD), c64-wiki.de, 12. Oktober 2026
  8. ↑ FD Series User's Manual, Creative Micro Designs, 1992, Seite 112–114