D71
Ein D71 Disk-Image ist eine Datei, welche den Inhalt einer beidseitig 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 des Diskettenlaufwerks 1571. Die Anzahl der Sektoren pro Spur ist variabel und entspricht den Vorgaben des Commodore DOS.
Abgrenzung[Bearbeiten | Quelltext bearbeiten]
Ein D71 Disk-Image speichert nur die Daten von mehreren Datenblöcken. Die Interpretation des Inhalts dieser Datenblöcke, ist nicht Bestandteil des D71 Disk-Image Formats. Die Datenblöcke müssen also nicht zwangsläufig einem Dateisystem (z.B. Commodore DOS) entsprechen. Ein D71 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 D71 Disk-Image Format zu tun.
Varianten[Bearbeiten | Quelltext bearbeiten]
Es existieren 2 verschiedene Varianten von D71 Disk-Image Dateien.
- 70 Spuren, ohne Fehlerinformation
- 70 Spuren, mit Fehlerinformation
Eigenschaften der 2 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 | 70 Spuren, ohne Fehlerinformation | 349696 | 1366 | 256 | 349696 | 0 |
2 | 70 Spuren, mit Fehlerinformation | 351062 | 1366 | 256 | 349696 | 1366 |
Schematische Darstellung der 2 Varinaten[Bearbeiten | Quelltext bearbeiten]
Variante 1 Variante 2 ────────── ────────── 70 Spuren 70 Spuren ohne mit Fehler- Fehler- infor- infor- mationen mationen $00000 ...┌───────────┐...┌───────────┐ ◄───┐ │ │ │ │ │ │ Daten │ │ Daten │ │ │ von │ │ von │ │ │ 683 │ │ 683 │ │ │ Daten- │ │ Daten- │ │ │ blöcken │ │ blöcken │ │ │ │ │ │ │ │ 174848 │ │ 174848 │ │ │ Bytes │ │ Bytes │ Daten │ │ │ │ von │ SEITE 1 │ │ SEITE 1 │ 1366 $2AAFF ...│ │...│ │ Daten- $2AB00 ...├ ─ ─ ─ ─ ─ ┤...├ ─ ─ ─ ─ ─ ┤ blöcken │ │ │ │ │ Daten │ │ Daten │ 349696 │ von │ │ von │ Bytes │ 683 │ │ 683 │ │ │ Daten- │ │ Daten- │ │ │ blöcken │ │ blöcken │ │ │ │ │ │ │ │ 174848 │ │ 174848 │ │ │ Bytes │ │ Bytes │ │ │ │ │ │ │ │ SEITE 2 │ │ SEITE 2 │ │ $555FF ...│ │...│ │ │ $55600 ...└───────────┘...├───────────┤ ◄───┘ │ Fehler- │ │ inform. │ $55B55 ...................│ 1366 Bytes│ └───────────┘
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 1366 (683 pro Seite) Datenblöcke gespeichert werden. Diese Summe entspricht genau der Anzahl von Datenblöcken, welche ein D71 Disk-Image beinhaltet. Das D71 Disk-Image Format ist somit speziell für die Abbildung der Commodore DOS Zonenaufteilung ausgelegt.
Spur | Seite | Zone | Spurenanzahl | Sektoren/Spur | Sektoren | Sektorensumme | Sektorensumme (2 mal 35 Spuren) | Sektorensumme (70 Spuren) |
---|---|---|---|---|---|---|---|---|
01 - 17 | Seite 1 | Zone 1 | 17 | 21 | 00 - 20 | 357 | 683 | 1366 |
18 - 24 | Zone 2 | 7 | 19 | 00 - 18 | 133 | |||
25 - 30 | Zone 3 | 6 | 18 | 00 - 17 | 108 | |||
31 - 35 | Zone 4 | 5 | 17 | 00 - 16 | 85 | |||
36 - 52 | Seite 2 | Zone 1 | 17 | 21 | 00 - 20 | 357 | 683 | |
53 - 59 | Zone 2 | 7 | 19 | 00 - 18 | 133 | |||
60 - 65 | Zone 3 | 6 | 18 | 00 - 17 | 108 | |||
66 - 70 | Zone 4 | 5 | 17 | 00 - 16 | 85 |
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 (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 | 701 | 702 | 703 | 704 | Zone 1 357 Sektoren (21 Sektoren/Spur) |
Seite 2 |
37 | 705 | 706 | 707 | 708 | 709 | 710 | 711 | 712 | 713 | 714 | 715 | 716 | 717 | 718 | 719 | 720 | 721 | 722 | 723 | 724 | 725 | ||
38 | 726 | 727 | 728 | 729 | 730 | 731 | 732 | 733 | 734 | 735 | 736 | 737 | 738 | 739 | 740 | 741 | 742 | 743 | 744 | 745 | 746 | ||
39 | 747 | 748 | 749 | 750 | 751 | 752 | 753 | 754 | 755 | 756 | 757 | 758 | 759 | 760 | 761 | 762 | 763 | 764 | 765 | 766 | 767 | ||
40 | 768 | 769 | 770 | 771 | 772 | 773 | 774 | 775 | 776 | 777 | 778 | 779 | 780 | 781 | 782 | 783 | 784 | 785 | 786 | 787 | 788 | ||
41 | 789 | 790 | 791 | 792 | 793 | 794 | 795 | 796 | 797 | 798 | 799 | 800 | 801 | 802 | 803 | 804 | 805 | 806 | 807 | 808 | 809 | ||
42 | 810 | 811 | 812 | 813 | 814 | 815 | 816 | 817 | 818 | 819 | 820 | 821 | 822 | 823 | 824 | 825 | 826 | 827 | 828 | 829 | 830 | ||
43 | 831 | 832 | 833 | 834 | 835 | 836 | 837 | 838 | 839 | 840 | 841 | 842 | 843 | 844 | 845 | 846 | 847 | 848 | 849 | 850 | 851 | ||
44 | 852 | 853 | 854 | 855 | 856 | 857 | 858 | 859 | 860 | 861 | 862 | 863 | 864 | 865 | 866 | 867 | 868 | 869 | 870 | 871 | 872 | ||
45 | 873 | 874 | 875 | 876 | 877 | 878 | 879 | 880 | 881 | 882 | 883 | 884 | 885 | 886 | 887 | 888 | 889 | 890 | 891 | 892 | 893 | ||
46 | 894 | 895 | 896 | 897 | 898 | 899 | 900 | 901 | 902 | 903 | 904 | 905 | 906 | 907 | 908 | 909 | 910 | 911 | 912 | 913 | 914 | ||
47 | 915 | 916 | 917 | 918 | 919 | 920 | 921 | 922 | 923 | 924 | 925 | 926 | 927 | 928 | 929 | 930 | 931 | 932 | 933 | 934 | 935 | ||
48 | 936 | 937 | 938 | 939 | 940 | 941 | 942 | 943 | 944 | 945 | 946 | 947 | 948 | 949 | 950 | 951 | 952 | 953 | 954 | 955 | 956 | ||
49 | 957 | 958 | 959 | 960 | 961 | 962 | 963 | 964 | 965 | 966 | 967 | 968 | 969 | 970 | 971 | 972 | 973 | 974 | 975 | 976 | 977 | ||
50 | 978 | 979 | 980 | 981 | 982 | 983 | 984 | 985 | 986 | 987 | 988 | 989 | 990 | 991 | 992 | 993 | 994 | 995 | 996 | 997 | 998 | ||
51 | 999 | 1000 | 1001 | 1002 | 1003 | 1004 | 1005 | 1006 | 1007 | 1008 | 1009 | 1010 | 1011 | 1012 | 1013 | 1014 | 1015 | 1016 | 1017 | 1018 | 1019 | ||
52 | 1020 | 1021 | 1022 | 1023 | 1024 | 1025 | 1026 | 1027 | 1028 | 1029 | 1030 | 1031 | 1032 | 1033 | 1034 | 1035 | 1036 | 1037 | 1038 | 1039 | 1040 | ||
53 | 1041 | 1042 | 1043 | 1044 | 1045 | 1046 | 1047 | 1048 | 1049 | 1050 | 1051 | 1052 | 1053 | 1054 | 1055 | 1056 | 1057 | 1058 | 1059 | Zone 2 133 Sektoren (19 Sektoren/Spur) | |||
54 | 1060 | 1061 | 1062 | 1063 | 1064 | 1065 | 1066 | 1067 | 1068 | 1069 | 1070 | 1071 | 1072 | 1073 | 1074 | 1075 | 1076 | 1077 | 1078 | ||||
55 | 1079 | 1080 | 1081 | 1082 | 1083 | 1084 | 1085 | 1086 | 1087 | 1088 | 1089 | 1090 | 1091 | 1092 | 1093 | 1094 | 1095 | 1096 | 1097 | ||||
56 | 1098 | 1099 | 1100 | 1101 | 1102 | 1103 | 1104 | 1105 | 1106 | 1107 | 1108 | 1109 | 1110 | 1111 | 1112 | 1113 | 1114 | 1115 | 1116 | ||||
57 | 1117 | 1118 | 1119 | 1120 | 1121 | 1122 | 1123 | 1124 | 1125 | 1126 | 1127 | 1128 | 1129 | 1130 | 1131 | 1132 | 1133 | 1134 | 1135 | ||||
58 | 1136 | 1137 | 1138 | 1139 | 1140 | 1141 | 1142 | 1143 | 1144 | 1145 | 1146 | 1147 | 1148 | 1149 | 1150 | 1151 | 1152 | 1153 | 1154 | ||||
59 | 1155 | 1156 | 1157 | 1158 | 1159 | 1160 | 1161 | 1162 | 1163 | 1164 | 1165 | 1166 | 1167 | 1168 | 1169 | 1170 | 1171 | 1172 | 1173 | ||||
60 | 1174 | 1175 | 1176 | 1177 | 1178 | 1179 | 1180 | 1181 | 1182 | 1183 | 1184 | 1185 | 1186 | 1187 | 1188 | 1189 | 1190 | 1191 | Zone 3 108 Sektoren (18 Sektoren/Spur) | ||||
61 | 1192 | 1193 | 1194 | 1195 | 1196 | 1197 | 1198 | 1199 | 1200 | 1201 | 1202 | 1203 | 1204 | 1205 | 1206 | 1207 | 1208 | 1209 | |||||
62 | 1210 | 1211 | 1212 | 1213 | 1214 | 1215 | 1216 | 1217 | 1218 | 1219 | 1220 | 1221 | 1222 | 1223 | 1224 | 1225 | 1226 | 1227 | |||||
63 | 1228 | 1229 | 1230 | 1231 | 1232 | 1233 | 1234 | 1235 | 1236 | 1237 | 1238 | 1239 | 1240 | 1241 | 1242 | 1243 | 1244 | 1245 | |||||
64 | 1246 | 1247 | 1248 | 1249 | 1250 | 1251 | 1252 | 1253 | 1254 | 1255 | 1256 | 1257 | 1258 | 1259 | 1260 | 1261 | 1262 | 1263 | |||||
65 | 1264 | 1265 | 1266 | 1267 | 1268 | 1269 | 1270 | 1271 | 1272 | 1273 | 1274 | 1275 | 1276 | 1277 | 1278 | 1279 | 1280 | 1281 | |||||
66 | 1282 | 1283 | 1284 | 1285 | 1286 | 1287 | 1288 | 1289 | 1290 | 1291 | 1292 | 1293 | 1294 | 1295 | 1296 | 1297 | 1298 | Zone 4 85 Sektoren (17 Sektoren/Spur) | |||||
67 | 1299 | 1300 | 1301 | 1302 | 1303 | 1304 | 1305 | 1306 | 1307 | 1308 | 1309 | 1310 | 1311 | 1312 | 1313 | 1314 | 1315 | ||||||
68 | 1316 | 1317 | 1318 | 1319 | 1320 | 1321 | 1322 | 1323 | 1324 | 1325 | 1326 | 1327 | 1328 | 1329 | 1330 | 1331 | 1332 | ||||||
69 | 1333 | 1334 | 1335 | 1336 | 1337 | 1338 | 1339 | 1340 | 1341 | 1342 | 1343 | 1344 | 1345 | 1346 | 1347 | 1348 | 1349 | ||||||
70 | 1350 | 1351 | 1352 | 1353 | 1354 | 1355 | 1356 | 1357 | 1358 | 1359 | 1360 | 1361 | 1362 | 1363 | 1364 | 1365 | 1366 |
Ü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 1571 Diskettenlaufwerks mit Kommentaren. Weiter unten ist dann noch die C Routine aus dem Quellcode von Vice 3.1 kommentiert dargestellt.
Auszug aus dem 1571 ROM | Bemerkung |
---|---|
_ $D55F: A5 80 LDA $80 $D561: F0 EA BEQ $D54D $D563: CD AC 02 CMP $02AC $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: 20 4F A7 JSR $A74F $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 $A74F: 48 PHA $A750: AD 0F 18 LDA $180F $A753: 29 20 AND #$20 $A755: F0 08 BEQ $A75F $A757: 68 PLA $A758: C9 24 CMP #$24 $A75A: 90 04 BCC $A760 $A75C: E9 23 SBC #$23 $A75E: .BYTE $24 $A75F: 68 PLA $A760: AE D6 FE LDX $FED6 $A763: 60 RTS $FED1: .BYTE $11 $FED2: .BYTE $12 $FED3: .BYTE $13 $FED4: .BYTE $15 $FED6: .BYTE $04 $FED7: .BYTE $24 $FED8: .BYTE $1F $FED9: .BYTE $19 $FEDA: .BYTE $12 Unterschiede zum 1541 ROM |
Überprüfen auf legale Spur- und Sektornummern. Spurnummer Fehler, wenn Null mit Maximum 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. Bearbeitung für Tracks größer 35 Spurummer mit Maximum vergleichen Zeiger minus 1 verzweige, wenn Spur größer Maximalzahl der Sektoren holen Ende Bei Spurnummern größer als 35 werden diese in die physikalischen Spurnummern kleiner als 36 umgewandelt. Tracknummer merken Steuerregister lesen Floppy im 1541-Modus? verzweige, wenn ja Tracknummer zurückholen und mit 36 vergleichen verzweige, wenn kleiner sonst 35 abziehen nächsten Befehl überspringen ($A75E: 24 68 BIT $68) Tracknummer zurückholen Anzahl der Zonen holen (4) 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 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ürtzt 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) { // ... gekürzt case DISK_IMAGE_TYPE_D71: if (track > MAX_TRACKS_1571) { return FSIMAGE_BAD_TRKNUM; } if (track > NUM_TRACKS_1541) { track -= NUM_TRACKS_1541; sectors = NUM_BLOCKS_1541; } 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) { // ... gekürzt case DISK_IMAGE_TYPE_D71: 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_D71: if (track > 35) { track -= 35; } 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_1571 70 #define NUM_TRACKS_1541 35 #define NUM_BLOCKS_1541 683 Unterschiede zum D64 Image-Disk Format |
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 70 ist, dann Fehler erzeugen wenn die prüfenden Spur größer als 35 ist dann 35 subtrahieren Sektor auf 683 setzten ─┐ 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 │ │ │ │ │ │ │ │ ◄┘ │ │ │ │ │ │ wenn die prüfenden Spur größer als 35 ist │ dann 35 subtrahieren │ │ │ │ │ │ │ ◄──┘ 17 .. für die Spuren 31-35, 66-70 18 .. für die Spuren 25-30, 60-65 19 .. für die Spuren 18-24, 53-59 21 .. für die Spuren 1-17, 36-52 maximale Anzahl der Spuren auf einer 1571-Diskette Anzahl der Spuren auf einer Standard 1541-Diskette Anzahl der Blöcke auf einer Standard 1541-Diskette (664 frei) Unterschiede zum D64 Image-Disk Format |
Erkennung des Dateiformats[Bearbeiten | Quelltext bearbeiten]
Eine Datei kann nur an der Dateiendung als ein D71 Disk-Image erkannt werden. Eine D71 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 D71 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 D71 Image genau nach den einzelnen Datenblöcken zu finden. Jedes Fehlerinformationsbyte bezieht sich dabei genau auf einen Datenblock des D71 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 D71 Disk-Image sinnvoll sind.
Code | Fehler | Typ | D71 | 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) |