D64
Das Disk-Image-Format D64 bildet eine Seite einer 5,25-Zoll-Diskette im CBM-DOS-Format ab. Es handelt sich dabei um eine 1:1-Abbildung der Sektoren auf der Diskette, mit der Option auch die Sektoren in den Tracks 36 bis 40 zu erfassen. Hinzu kommt optional ein kurzer Anhang mit einem Fehler-Byte für jeden Sektor. Ein D64 Disk-Image ist eine Datei, welche den Inhalt einer einseitig beschriebenen 5,25"-Single-Density oder Double-Density Diskette abbildet. Die Abbildung erfolgt ausschließlich auf Datenblockebene. Die Anzahl der abgebildeten Datenblöcke und die abgebildete Blockgröße entspricht den Vorgaben, des Commodore-DOS der Diskettenlaufwerke 1540, 1541, 1551, 1570 und 1571. Das Commodore-DOS nutzt standardmäßig nur 35 Spuren. Es werden jedoch je nach D64 Disk-Image Variante 35, 40 oder 42 Spuren abgebildet. Die Anzahl der Sektoren pro Spur ist dabei variabel und entspricht bei 35 Spuren den Vorgaben des Commodore-DOS. Bei 40 Spuren entspricht die Anzahl der Sektoren den Vorgaben von Speed DOS, Dolphin DOS, Professional-DOS und ProLogic DOS. Die 42 Spuren Variante, mit zwei zusätzlichen Spuren zu je 17 Sektoren, ist äußerst ungewöhnlich, da reale Laufwerke oft Probleme mit dem Zugriff auf diese Spuren haben. Software, die mehr als 40 Spuren verwendet, ist auch recht selten.
Das D64-Disk-Image Format ist wohl das bekannteste Format im Commodore Heimcomputerumfeld.
Aufbau[Bearbeiten | Quelltext bearbeiten]
Die Datei besteht aus 683 oder 768 Segmenten zu je 256 Byte. Daran schließt noch ein optionaler Fehlerblock an, der aus 683 oder 768 Byte besteht.
Jedes Segment der Datei enthält einen vollständigen Sektor der Diskette. Innerhalb der Datei sind die Tracks einfach aneinander gereiht, beginnend mit Track 1. Für jeden Track sind wiederum die Sektoren dieses Tracks aneinandergereiht, beginnend mit Sektor 0.
Da die Tracks im CBM-DOS-Format unterschiedlich viele Sektoren enthalten, kann man die Tracknummer nicht einfach mit einer festen Zahl multiplizieren, um die Position des Tracks in der Datei zu finden. Die folgende Tabelle enthält die Startpositionen der Tracks:
Track | Position | Track | Position | Track | Position | Track | Position | Track | Position |
1 | $00000 | 9 | $0A800 | 17 | $15000 | 25 | $1EA00 | 33 | $27800 |
2 | $01500 | 10 | $0BD00 | 18 | $16500 | 26 | $1FC00 | 34 | $28900 |
3 | $02A00 | 11 | $0D200 | 19 | $17800 | 27 | $20E00 | 35 | $29A00 |
4 | $03F00 | 12 | $0E700 | 20 | $18B00 | 28 | $22000 | 36 | $2AB00 |
5 | $05400 | 13 | $0FC00 | 21 | $19E00 | 29 | $23200 | 37 | $2BC00 |
6 | $06900 | 14 | $11100 | 22 | $1B100 | 30 | $24400 | 38 | $2CD00 |
7 | $07E00 | 15 | $12600 | 23 | $1C400 | 31 | $25600 | 39 | $2DE00 |
8 | $09300 | 16 | $13B00 | 24 | $1D700 | 32 | $26700 | 40 | $2EF00 |
Nach dem letzten Track kommt optional noch ein Fehlerblock, bestehend aus 683 Bytes (oder 768, wenn die Datei 40 Tracks enthält). Jedes Byte steht dabei für einen Sektor, in der selben Reihenfolge wie zuvor. Der Wert des Bytes gibt die interne Fehlernummer der Floppy wieder. $01 bedeutet dabei, dass der Sektor keinen Fehler aufweist.
Einschränkungen[Bearbeiten | Quelltext bearbeiten]
Einige Informationen, die sich auf einer echten Diskette befinden, werden von diesem Format nicht erfasst. Darunter unter anderem die Prüfsumme für jeden Sektor oder SYNC-Markierungen zwischen Sektoren. Mit den Diskettenlaufwerken ist es auch möglich, Tracks zwischen den eigentlich vorgesehenen Tracks anzulegen. Derartige Zwischentracks werden ebenfalls nicht abgebildet. Dadurch kann es sein, dass sich ein D64-Disk-Image in einem Emulator anders verhält, als die Original-Diskette in einem Original-Laufwerk. Insbesondere im Zusammenhang mit Kopierschutzen kann dies dazu führen, das auf dem Image gespeicherte Software nicht mehr funktioniert.
Abgrenzung[Bearbeiten | Quelltext bearbeiten]
Ein D64 Disk-Image speichert nur die Daten von mehreren Datenblöcken. Die Interpretation des Inhalts dieser Datenblöcke, ist nicht Bestandteil des D64 Disk-Image Formats. Die Datenblöcke müssen also nicht zwangsläufig einem Dateisystem (z. B. Commodore-DOS) entsprechen. Ein D64 Disk-Image kann z. B. auch reine Datenblöcke eines Demos enthalten, welche von einer speziellen Laderoutine eingelesen werden. Begriffe wie BAM, Directory oder der Aufbau von Dateien gehören thematisch zum Dateisystem des Commodore-DOS und haben nichts mit dem D64 Disk-Image Format zu tun.
Varianten[Bearbeiten | Quelltext bearbeiten]
Es existieren 6 verschiedene Varianten von D64 Disk-Image Dateien.
- 35 Spuren, ohne Fehlerinformation
- 35 Spuren, mit Fehlerinformation
- 40 Spuren, ohne Fehlerinformation
- 40 Spuren, mit Fehlerinformation
- 42 Spuren, ohne Fehlerinformation
- 42 Spuren, mit Fehlerinformation
Eigenschaften der 6 Varianten[Bearbeiten | Quelltext bearbeiten]
Nr. | Variante | Dateigröße | Anzahl der Datenblöcke | Bytes pro Datenblock | Bytes für Datenblöcke | Bytes für Fehler-informationen |
---|---|---|---|---|---|---|
1 | 35 Spuren, ohne Fehlerinformation | 174848 | 683 | 256 | 174848 | 0 |
2 | 35 Spuren, mit Fehlerinformation | 175531 | 683 | 256 | 174848 | 683 |
3 | 40 Spuren, ohne Fehlerinformation | 196608 | 768 | 256 | 196608 | 0 |
4 | 40 Spuren, mit Fehlerinformation | 197376 | 768 | 256 | 196608 | 768 |
5 | 42 Spuren, ohne Fehlerinformation | 205312 | 802 | 256 | 205312 | 0 |
6 | 42 Spuren, mit Fehlerinformation | 206114 | 802 | 256 | 205312 | 802 |
Schematische Darstellung der 6 Varinaten[Bearbeiten | Quelltext bearbeiten]
Variante 1 Variante 2 Variante 3 Variante 4 Variante 5 Variante 6 ────────── ────────── ────────── ────────── ────────── ────────── 35 Spuren 35 Spuren 40 Spuren 40 Spuren 42 Spuren 42 Spuren ohne mit ohne mit ohne mit Fehler- Fehler- Fehler- Fehler- Fehler- Fehler- infor- infor- infor- infor- infor- infor- mationen mationen mationen mationen mationen mationen $00000 ...┌───────────┐...┌───────────┐...┌───────────┐...┌───────────┐...┌───────────┐...┌───────────┐ │ │ │ │ │ │ │ │ │ │ │ │ │ Daten │ │ Daten │ │ Daten │ │ Daten │ │ Daten │ │ Daten │ │ von │ │ von │ │ von │ │ von │ │ von │ │ von │ │ 683 │ │ 683 │ │ 768 │ │ 768 │ │ 802 │ │ 802 │ │ Daten- │ │ Daten- │ │ Daten- │ │ Daten- │ │ Daten- │ │ Daten- │ │ blöcken │ │ blöcken │ │ blöcken │ │ blöcken │ │ blöcken │ │ blöcken │ │ │ │ │ │ │ │ │ │ │ │ │ │ 174848 │ │ 174848 │ │ 196608 │ │ 196608 │ │ 205312 │ │ 205312 │ │ Bytes │ │ Bytes │ │ Bytes │ │ Bytes │ │ Bytes │ │ Bytes │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ │ $2AAFF ...│ │...│ │ │ │ │ │ │ │ │ │ $2AB00 ...└───────────┘...├───────────┤ │ │ │ │ │ │ │ │ │ Fehler- │ │ │ │ │ │ │ │ │ │ inform. │ │ │ │ │ │ │ │ │ $2ADAA ...................│ 683 Bytes │ │ │ │ │ │ │ │ │ └───────────┘ │ │ │ │ │ │ │ │ $2FFFF ...................................│ │...│ │ │ │ │ │ $30000 ...................................└───────────┘...├───────────┤ │ │ │ │ │ Fehler- │ │ │ │ │ │ inform. │ │ │ │ │ $302FF ...................................................│ 768 Bytes │ │ │ │ │ └───────────┘ │ │ │ │ $321FF ...................................................................│ │...│ │ $32200 ...................................................................└───────────┘...├───────────┤ │ Fehler- │ │ inform. │ $32521 ...................................................................................│ 802 Bytes │ └───────────┘
Wodurch wird die Gesamtanzahl der Sektoren auf einer Diskette (bzw. D64) bestimmt?[Bearbeiten | Quelltext bearbeiten]
Die Anzahl der gesamten Sektoren einer Diskette bestimmt sich aus der Anzahl der Spuren und der jeweiligen Anzahl der Sektoren pro Spur.
Wodurch wird die Anzahl der Spuren bestimmt?[Bearbeiten | Quelltext bearbeiten]
Was begrenzt die Spuren am äußeren Radius?[Bearbeiten | Quelltext bearbeiten]
- Äußerer Radius der Diskette
- Die Größe der Scheibe bestimmt den größten möglichen Radius für eine Spur. Die Scheibe hat einen Radius von 65,1 mm.
- Aufzeichnungsmaterial der Diskette
- Das Aufzeichnungsmaterial müsste nicht ganz bis an den äußersten Rand einer Diskette vorhanden sein. In den meisten Fällen sollte dies aber der Fall sein. Eine Diskette müsste nur gewährleisten, das im Aufzeichnungsbereich (Recording Area) Aufzeichnungsmaterial vorhanden ist.
- Schreib-/Lesekopf Fenster der Diskette
- Das Schreib-/Lesekopf Fenster schränkt den Bereich, in dem der Schreib-/Lesekopf auf das Aufzeichnungsmaterial einer Diskette zugreifen kann, ein. Die Öffnung beginnt außen bei einem Radius von 63,35 mm und hat eine volle Öffnungsbreite bei einem Radius von 57,00 mm erreicht.
- Aufzeichnungsbereich (Recording Area)
- Das Aufzeichnungsmaterial müsste nur in dem Aufzeichnungsbereich einer Diskette vorhanden sein. Der Aufzeichnungsbereich ist in Spezifikationen festgelegt worden.
- Mechanischer Anschlag bei Spur 00
- Die Commodore Laufwerke besitzen einen mechanischen Anschlag. Der Schreib-/Lesekopf kann nur bis zu diesem Anschlag nach außen bewegt werden. Der Schreib-/Lesekopf befindet sich dann auf dem Radius 57,15.
Was begrenzt die Spuren am inneren Radius?[Bearbeiten | Quelltext bearbeiten]
- Innerer Radius der Diskette
- Die Größe der Scheibe bestimmt den kleinsten möglichen Radius für eine Spur. Das große Loch in der Mitte der Diskette hat einen Radius von 14,285 mm.
- Aufzeichnungsmaterial der Diskette
- Das Aufzeichnungsmaterial müsste nicht ganz bis an den kleinsten Rand einer Diskette vorhanden sein. In den meisten Fällen sollte dies aber der Fall sein. Eine Diskette müsste nur gewährleisten, das im Aufzeichnungsbereich (Recording Area) Aufzeichnungsmaterial vorhanden ist.
- Das Index Loch
- Die Scheibe einer Diskette besitzt ein (oder mehrere) Loch für die Index-Erkennung, daher kann ein dieser Position keine Spur vorhanden sein. Das Loch befindet sich bei einem Radius von 25,40 mm und hat einen Durchmesser von 2,54 mm.
- Schreib-/Lesekopf Fenster der Diskette
- Das Schreib-/Lesekopf Fenster schränkt den Bereich, in dem der Schreib-/Lesekopf auf das Aufzeichnungsmaterial einer Diskette zugreifen kann, ein. Die Öffnung beginnt sich innen bei einem Radius von 34,70 mm zu schließen und ist bei einem Radius 28,35 mm vollständig geschlossen.
- Die Mechanik, bestehend aus Schrittmotor und Gewindestange:
- Die Mechanik kann den Schreib-/Lesekopf nicht unbeschränkt weit nach innen bewegen. Bei den meisten Commodore Laufwerken ist bei 40 Spuren schluss. Einige Laufwerke schaffen wohl auch noch 42 Spuren.
- Aufzeichnungsbereich (Recording Area)
- Das Aufzeichnungsmaterial müsste nur in dem Aufzeichnungsbereich einer Diskette vorhanden sein. Der Aufzeichnungsbereich ist in Spezifikationen festgelegt worden. Der Aufzeichnungsbereich befindet sich zwischen Radius 57,40 mm und 34,00 mm.
- 40 Spuren DOS (wie z. B. Speed DOS, Dolphin DOS, Professional DOS und ProLogic DOS)
- Die DOS Varianten (wie z. B. Speed DOS, Dolphin DOS, Professional DOS und ProLogic DOS) können 40 Spuren benutzen.
- Commodore-DOS
- Das Commodore-DOS verwendet nur 35 Spuren.
Was bestimmt den Abstand zwischen den Spuren?[Bearbeiten | Quelltext bearbeiten]
- Aufzeichnungsmaterial der Diskette
- Das Aufzeichnungsmaterial von DD Diskette ist für 40 Spuren (48 TPI[1]) ausgelegt. Das Aufzeichnungsmaterial von QD Diskette ist für 80 Spuren (96 TPI) ausgelegt. Sicherlich sind noch weit mehr Spuren möglich. Mindestens 100 TPI bei QD Disketten sollten möglichen sein, da es dafür auch spezielle 100 TPI Laufwerke gibt.
- Die Mechanik, bestehend aus Schrittmotor und Gewindestange
- Die Mechanik, bestehend aus Schrittmotor und Gewindestange der Commodore Laufwerke entsprechen einem 96 TPI Laufwerk. D.h. die Commodore Laufwerke können 96 Spuren pro Zoll anfahren. Dadurch ist der Abstand zwischen den Spuren festgelegt.
- Schreibkopf (Breite der Spur)
- Der Schreibkopf schreibt zu breite Spuren, um alle 96 TPI Spuren benutzen zu können. Um die geschrieben Daten auch wieder lesen zu können kann nur jede zweite Spur beschrieben werden. Dies entspricht dann einen Spurabstand von 48 TPI.
Was bestimmt die Position der Spuren?[Bearbeiten | Quelltext bearbeiten]
- Die Mechanik, bestehend aus Schrittmotor und Gewindestange
- Die Mechanik, bestehend aus Schrittmotor und Gewindestange legt auch Position der Spuren fest. Somit ist der Radius aller Spuren durch Mechanik fest vorgegeben.
- Commodore-DOS / 40 Spuren DOS (wie z. B. Speed DOS, Dolphin DOS, Professional DOS und ProLogic DOS)
- Das Commodore-DOS als auch die anderen DOS Varianten verwenden die nur die "ganzen" Spuren beginnend mit der Spur 0, welche aber als Spur 1 bezeichnet wird. Die halben Spuren werden überspringen.
Wodurch wird die Anzahl der Sektoren pro Spur bestimmt?[Bearbeiten | Quelltext bearbeiten]
Die Anzahl der Sektoren sind, auf einer Commodore-DOS formatierten Diskette, nicht auf allen Spuren gleich. Die Anzahl der Sektoren variiert von 17 bis 21 Sektoren. Dies ist der Aufzeichnungstechnik - Zone Bit Recording (ZBR) - geschuldet, welche vom Commodore-DOS eingesetzt wird. Diese Aufzeichnungstechnik wird benutzt, um mehr Sektoren auf den äußeren Spuren zu speichern als auf den Inneren. Das Commodore-DOS verwendet nur 35 Spuren, in denen in Summe 683 Datenblöcke gespeichert werden. Diese Summe entspricht genau der Anzahl von Datenblöcken, welche ein D64 Disk-Image (Variante A und B) beinhaltet. Das D64 Disk-Image Format ist somit speziell für die Abbildung der Commodore-DOS Zonenaufteilung ausgelegt. Bei den 40 bzw. 42 Spur Varianten wurde die Zone 4, um 5 bzw. 7 Spuren erweitert, so dass in Summe 768 bzw. 802 Datenblöcke in einem D64 Disk-Image enthalten sind.
Was begrenzt die Anzahl der Bits pro Zoll?[Bearbeiten | Quelltext bearbeiten]
- Aufzeichnungsmaterial der Diskette
Was legt die Länge eines Sektors fest?[Bearbeiten | Quelltext bearbeiten]
- Das Commodore-DOS
- GCR-Codierung
- 256 Byte Daten
- usw.
Anzahl der Sektoren pro Spur[Bearbeiten | Quelltext bearbeiten]
Die Anzahl der Sektoren sind, auf einer Commodore-DOS formatierten Diskette, nicht auf allen Spuren gleich. Die Anzahl der Sektoren variiert von 17 bis 21 Sektoren. Dies ist der Aufzeichnungstechnik - Zone Bit Recording (ZBR) - geschuldet, welche vom Commodore-DOS eingesetzt wird. Diese Aufzeichnungstechnik wird benutzt, um mehr Sektoren auf den äußeren Spuren zu speichern als auf den Inneren. Das Commodore-DOS verwendet nur 35 Spuren, in denen in Summe 683 Datenblöcke gespeichert werden. Diese Summe entspricht genau der Anzahl von Datenblöcken, welche ein D64 Disk-Image beinhaltet. Das D64 Disk-Image Format (mit 35 Spuren) ist somit speziell für die Abbildung der Commodore-DOS Zonenaufteilung ausgelegt.
Spur | Seite | Zone | Spurenanzahl | Sektoren/Spur | Sektoren | Sektorensumme | Sektorensumme (35 Spuren) | Sektorensumme (40 Spuren) | Sektorensumme (42 Spuren) |
---|---|---|---|---|---|---|---|---|---|
01 - 17 | Seite 1 | Zone 1 | 17 | 21 | 00 - 20 | 357 | 683 | 768 | 802 |
18 - 24 | Seite 1 | Zone 2 | 7 | 19 | 00 - 18 | 133 | |||
25 - 30 | Seite 1 | Zone 3 | 6 | 18 | 00 - 17 | 108 | |||
31 - 35 | Seite 1 | Zone 4 | 5 | 17 | 00 - 16 | 85 | |||
36 - 40 | Seite 1 | 5 | 17 | 00 - 16 | 85 | ||||
41 - 42 | Seite 1 | 2 | 17 | 00 - 16 | 34 |
Position der Datenblöcke[Bearbeiten | Quelltext bearbeiten]
Die folgende Tabelle zeigt die Positionen der einzelnen Datenblöcke.
Spur/Sektor | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | Zone | Seite |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | Zone 1 357 Sektoren (21 Sektoren/Spur) |
Seite 1 |
2 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | ||
3 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | ||
4 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | 75 | 76 | 77 | 78 | 79 | 80 | 81 | 82 | 83 | 84 | ||
5 | 85 | 86 | 87 | 88 | 89 | 90 | 91 | 92 | 93 | 94 | 95 | 96 | 97 | 98 | 99 | 100 | 101 | 102 | 103 | 104 | 105 | ||
6 | 106 | 107 | 108 | 109 | 110 | 111 | 112 | 113 | 114 | 115 | 116 | 117 | 118 | 119 | 120 | 121 | 122 | 123 | 124 | 125 | 126 | ||
7 | 127 | 128 | 129 | 130 | 131 | 132 | 133 | 134 | 135 | 136 | 137 | 138 | 139 | 140 | 141 | 142 | 143 | 144 | 145 | 146 | 147 | ||
8 | 148 | 149 | 150 | 151 | 152 | 153 | 154 | 155 | 156 | 157 | 158 | 159 | 160 | 161 | 162 | 163 | 164 | 165 | 166 | 167 | 168 | ||
9 | 169 | 170 | 171 | 172 | 173 | 174 | 175 | 176 | 177 | 178 | 179 | 180 | 181 | 182 | 183 | 184 | 185 | 186 | 187 | 188 | 189 | ||
10 | 190 | 191 | 192 | 193 | 194 | 195 | 196 | 197 | 198 | 199 | 200 | 201 | 202 | 203 | 204 | 205 | 206 | 207 | 208 | 209 | 210 | ||
11 | 211 | 212 | 213 | 214 | 215 | 216 | 217 | 218 | 219 | 220 | 221 | 222 | 223 | 224 | 225 | 226 | 227 | 228 | 229 | 230 | 231 | ||
12 | 232 | 233 | 234 | 235 | 236 | 237 | 238 | 239 | 240 | 241 | 242 | 243 | 244 | 245 | 246 | 247 | 248 | 249 | 250 | 251 | 252 | ||
13 | 253 | 254 | 255 | 256 | 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | ||
14 | 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | 282 | 283 | 284 | 285 | 286 | 287 | 288 | 289 | 290 | 291 | 292 | 293 | 294 | ||
15 | 295 | 296 | 297 | 298 | 299 | 300 | 301 | 302 | 303 | 304 | 305 | 306 | 307 | 308 | 309 | 310 | 311 | 312 | 313 | 314 | 315 | ||
16 | 316 | 317 | 318 | 319 | 320 | 321 | 322 | 323 | 324 | 325 | 326 | 327 | 328 | 329 | 330 | 331 | 332 | 333 | 334 | 335 | 336 | ||
17 | 337 | 338 | 339 | 340 | 341 | 342 | 343 | 344 | 345 | 346 | 347 | 348 | 349 | 350 | 351 | 352 | 353 | 354 | 355 | 356 | 357 | ||
18 | 358 | 359 | 360 | 361 | 362 | 363 | 364 | 365 | 366 | 367 | 368 | 369 | 370 | 371 | 372 | 373 | 374 | 375 | 376 | Zone 2 133 Sektoren (19 Sektoren/Spur) | |||
19 | 377 | 378 | 379 | 380 | 381 | 382 | 383 | 384 | 385 | 386 | 387 | 388 | 389 | 390 | 391 | 392 | 393 | 394 | 395 | ||||
20 | 396 | 397 | 398 | 399 | 400 | 401 | 402 | 403 | 404 | 405 | 406 | 407 | 408 | 409 | 410 | 411 | 412 | 413 | 414 | ||||
21 | 415 | 416 | 417 | 418 | 419 | 420 | 421 | 422 | 423 | 424 | 425 | 426 | 427 | 428 | 429 | 430 | 431 | 432 | 433 | ||||
22 | 434 | 435 | 436 | 437 | 438 | 439 | 440 | 441 | 442 | 443 | 444 | 445 | 446 | 447 | 448 | 449 | 450 | 451 | 452 | ||||
23 | 453 | 454 | 455 | 456 | 457 | 458 | 459 | 460 | 461 | 462 | 463 | 464 | 465 | 466 | 467 | 468 | 469 | 470 | 471 | ||||
24 | 472 | 473 | 474 | 475 | 476 | 477 | 478 | 479 | 480 | 481 | 482 | 483 | 484 | 485 | 486 | 487 | 488 | 489 | 490 | ||||
25 | 491 | 492 | 493 | 494 | 495 | 496 | 497 | 498 | 499 | 500 | 501 | 502 | 503 | 504 | 505 | 506 | 507 | 508 | Zone 3 108 Sektoren (18 Sektoren/Spur) | ||||
26 | 509 | 510 | 511 | 512 | 513 | 514 | 515 | 516 | 517 | 518 | 519 | 520 | 521 | 522 | 523 | 524 | 525 | 526 | |||||
27 | 527 | 528 | 529 | 530 | 531 | 532 | 533 | 534 | 535 | 536 | 537 | 538 | 539 | 540 | 541 | 542 | 543 | 544 | |||||
28 | 545 | 546 | 547 | 548 | 549 | 550 | 551 | 552 | 553 | 554 | 555 | 556 | 557 | 558 | 559 | 560 | 561 | 562 | |||||
29 | 563 | 564 | 565 | 566 | 567 | 568 | 569 | 570 | 571 | 572 | 573 | 574 | 575 | 576 | 577 | 578 | 579 | 580 | |||||
30 | 581 | 582 | 583 | 584 | 585 | 586 | 587 | 588 | 589 | 590 | 591 | 592 | 593 | 594 | 595 | 596 | 597 | 598 | |||||
31 | 599 | 600 | 601 | 602 | 603 | 604 | 605 | 606 | 607 | 608 | 609 | 610 | 611 | 612 | 613 | 614 | 615 | Zone 4 85 Sektoren + 85 Sektoren (Spur 36-40) + 34 Sektoren (Spur 41-42) (17 Sektoren/Spur) | |||||
32 | 616 | 617 | 618 | 619 | 620 | 621 | 622 | 623 | 624 | 625 | 626 | 627 | 628 | 629 | 630 | 631 | 632 | ||||||
33 | 633 | 634 | 635 | 636 | 637 | 638 | 639 | 640 | 641 | 642 | 643 | 644 | 645 | 646 | 647 | 648 | 649 | ||||||
34 | 650 | 651 | 652 | 653 | 654 | 655 | 656 | 657 | 658 | 659 | 660 | 661 | 662 | 663 | 664 | 665 | 666 | ||||||
35 | 667 | 668 | 669 | 670 | 671 | 672 | 673 | 674 | 675 | 676 | 677 | 678 | 679 | 680 | 681 | 682 | 683 | ||||||
36 | 684 | 685 | 686 | 687 | 688 | 689 | 690 | 691 | 692 | 693 | 694 | 695 | 696 | 697 | 698 | 699 | 700 | ||||||
37 | 701 | 702 | 703 | 704 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | ||||||
38 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | ||||||
39 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | 747 | 748 | 749 | 750 | 751 | ||||||
40 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | 768 | ||||||
41 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | ||||||
42 | 786 | 787 | 788 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 |
Überprüfen auf gültige Spur- und Sektornummer
Da die Anzahl der Sektoren pro Spur aufgrund der Aufzeichnungstechnik (Zone Bit Recording - ZBR) variiert, ist es nicht ganz einfach zu bestimmen, ob eine Spur-Sektor-Kombination gültig ist. Die folgende Tabelle enthält, deshalb die entsprechende Assembler-Routine eines 1541 Diskettenlaufwerks mit Kommentaren. Weiter unten ist dann noch die C-Routine aus dem Quellcode von Vice 3.1 kommentiert dargestellt.
Auszug aus dem 1541 ROM | Bemerkung |
---|---|
_ $D55F: A5 80 LDA $80 $D561: F0 EA BEQ $D54D $D563: CD D7 FE CMP $FED7 $D566: B0 E5 BCS $D54D $D568: 20 4B F2 JSR $F24B $D56B: C5 81 CMP $81 $D56D: F0 DE BEQ $D54D $D56F: 90 DC BCC $D54D $D571: 60 RTS $D54D: A9 66 LDA #$66 $D54F: 4C 45 E6 JMP $E645 $F24B: AE D6 FE LDX $FED6 $F24E: DD D6 FE CMP $FED6,X $F251: CA DEX $F252: B0 FA BCS $F24E $F254: BD D1 FE LDA $FED1,X $F257: 60 RTS $FED1: .BYTE $11 $FED2: .BYTE $12 $FED3: .BYTE $13 $FED4: .BYTE $15 $FED5: .BYTE $41 $FED6: .BYTE $04 $FED7: .BYTE $24 $FED8: .BYTE $1F $FED9: .BYTE $19 $FEDA: .BYTE $12 |
Überprüfen auf gültige Spur- und Sektornummer Spurnummer Fehler, wenn Null mit 36 vergleichen Fehler, wenn größer gleich maximale Sektornummer holen mit aktueller Nummer vergleichen Fehler, wenn gleich Fehler, wenn kleiner Ende Nummer der Fehlermeldung '66, ILLEGAL TRACK OR SECTOR' ausgeben Stellt die Maximalanzahl der Sektoren dieser Spur fest; Spurnummer in A.; Anzahl der Zonen holen (4) Spurummer mit Maximum vergleichen Zeiger minus 1 verzweige, wenn Spur größer Maximalzahl der Sektoren holen Ende Anzahl der Sektoren pro Spur 17 Sektoren auf Spur 35—31 18 Sektoren auf Spur 30-25 19 Sektoren auf Spur 24-18 21 Sektoren auf Spur 17-01 Formatkennzeichen der DOS—Version ('A') "Anzahl der Zonen auf Diskette mit unterschiedlichen Sektorzahlen pro Spur" Spurnummern bei denen ein Zonenwechsel stattfindet Spur 36 = Ende der Zone 31-35 (4) Spur 31 = Ende der Zone 25-30 (3) Spur 25 = Ende der Zone 18-24 (2) Spur 18 = Ende der Zone 01-17 (1) |
Auszug aus dem Quellcode von Vice 3.1 (etwas gekürzt an einigen Stellen) | Bemerkung |
---|---|
int disk_image_check_sector(const disk_image_t *image, unsigned int track, unsigned int sector) { if (image->device == DISK_IMAGE_DEVICE_FS) { return fsimage_check_sector(image, track, sector); } return 0; } int fsimage_check_sector(const disk_image_t *image, unsigned int track, unsigned int sector) { unsigned int sectors = 0, i; if (track < 1) { return FSIMAGE_BAD_TRKNUM; } switch (image->type) { case DISK_IMAGE_TYPE_D64: if (track > MAX_TRACKS_1541) { return FSIMAGE_BAD_TRKNUM; } if (sector >= disk_image_sector_per_track(DISK_IMAGE_TYPE_D64, track)) { return FSIMAGE_BAD_SECNUM; } for (i = 1; i < track; i++) { sectors += disk_image_sector_per_track(DISK_IMAGE_TYPE_D64, i); } sectors += sector; break; // ... gekürzt default: return -1; } return (int)(sectors); } unsigned int disk_image_sector_per_track(unsigned int format, unsigned int track) { switch (format) { case DISK_IMAGE_TYPE_D64: return sector_map_d64[disk_image_speed_map(format, track)]; // ... gekürzt } return 0; } unsigned int disk_image_speed_map(unsigned int format, unsigned int track) { switch (format) { // ... gekürzt case DISK_IMAGE_TYPE_D64: return (track < 31) + (track < 25) + (track < 18); // ... gekürzt } return 0; } static const unsigned int sector_map_d64[SPEED_ZONE_COUNT] = { 17, 18, 19, 21 }; #define MAX_TRACKS_1541 42
|
Die Funtion disk_image_check_sector ─┐ Aufruf der Funktion fsimage_check_sector │ │ │ │ ◄┘ prüfen, ob Spur kleier 1 ist, wenn ja, dann Fehler erzeugen wenn Spur größer 42 ist, dann Fehler erzeugen ─┐ Aufruf der Funktion disk_image_sector_per_track │ Wenn der zu prüfende Sektor größer ist als die Anzahl │ der Sektoren der zu prüfenden Spur, Fehler erzeugen │ Schleife von 1 bis zur prüfenden Spur -1 ─┤ Aufruf der Funktion disk_image_sector_per_track │ Summieren der Anzahl der Sektoren für jede Spur │ Addieren der Sektoren der zu prüfenden Spur │ │ │ │ │ │ │ │ ◄┘ Die Funktion disk_image_sector_per_track berechnet die Anzahl der Sektoren für einen Spur ─┐─┐ Aufruf der Funktionen disk_image_speed_map │ │ und sector_map_d64 │ │ │ │ │ │ │ │ ◄┘ │ │ │ │ │ │ │ │ │ │ │ ◄──┘ 17 .. für die Spuren 31-[35/40/42] 18 .. für die Spuren 25-30 19 .. für die Spuren 18-24 21 .. für die Spuren 1-17 Maximale Anzahl der erreichbaren Spuren eines 1541-Laufwerks. Nicht alle 1541-Laufwerke sind dazu in der Lage. |
Erkennung des Dateiformats[Bearbeiten | Quelltext bearbeiten]
Eine Datei kann nur an der Dateiendung als ein D64 Disk-Image erkannt werden. Eine D64 Disk-Image Datei besitzt keinerlei Formatkennzeichen wie Kopfdaten oder Magische Zahl, um eine Erkennung zu ermöglichen. So können die unterschiedlichen Varianten nur mittels der Dateilänge erkannt werden.
Fehlerinformationen[Bearbeiten | Quelltext bearbeiten]
Ein D64 kann auch zusätzlich zu den Daten der einzelnen Datenblöcke auch Fehlerinformationen enthalten. Diese Fehlerinformationen bestehen aus jeweils genau einem Byte pro Datenblock. Diese Bytes sind in einem D64 Image genau nach den einzelnen Datenblöcken zu finden. Jedes Fehlerinformationsbyte bezieht sich dabei genau auf einen Datenblock des D64 Disk-Image. Die Bytes der Fehlerinformationen repräsentieren die Fehlernummer, wie sie auch ein 1541 oder 1571 Diskettenlaufwerk zurückgeben würde, wenn ein Fehler auftritt. Die folgende Tabelle zeigt, welche Fehler für ein D64 Disk-Image sinnvoll sind.
Code | Fehler | Typ | D64 | Beschreibung |
---|---|---|---|---|
$01 | 00 | N/A | * | Kein Fehler. |
$02 | 20 | Seek | * | Header Block nicht gefunden / Header Deskriptor Byte nicht gefunden |
$03 | 21 | Seek | * | Keine SYNC-Sequenz gefunden |
$04 | 22 | Read | * | Datenbeschreibungsbyte nicht gefunden |
$05 | 23 | Read | * | Prüfsummenfehler im Datenblock |
$06 | 24 | Write | Schreibprüfung auf Format (tritt nie auf 1541 auf) | |
$07 | 25 | Write | Schreibverifizierungsfehler | |
$08 | 26 | Write | Schreibschutz ein beim Schreiben | |
$09 | 27 | Seek | * | Checksummenfehler im Kopfbereich |
$0A | 28 | Write | Schreibfehler (tritt nie bei 1541 auf) | |
$0B | 29 | Seek | * | Disk-Sektor ID Nichtübereinstimmung |
$0F | 74 | Read | Laufwerk nicht bereit (keine Diskette im Laufwerk oder kein Gerät 1) |
Weblinks[Bearbeiten | Quelltext bearbeiten]
Fußnoten[Bearbeiten | Quelltext bearbeiten]
- ↑ TPI - Abkürzung für "Tracks Per Inch", Track-Dichte, also Anzahl der Tracks auf 25,4 mm des magnetischen Mediums
Dieser Artikel wurde Artikel des Monats. |