Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende ÜberarbeitungLetzte ÜberarbeitungBeide Seiten der Revision | ||
cpm:write_a_bios:teil_1 [2021/09/20 09:30] – [Tabelle] volkerp | cpm:write_a_bios:teil_1 [2021/09/24 05:44] – [Der Disk Parameter Block] volkerp | ||
---|---|---|---|
Zeile 553: | Zeile 553: | ||
:!: CP/A nutzt die erste Variante. | :!: CP/A nutzt die erste Variante. | ||
- | Unabhängig von der physischen Sektorlänge gibt es im CP/M noch die **Blockgröße** (engl. block size, BLS). | + | Unabhängig von der physischen Sektorlänge gibt es im CP/M noch die **Blockgröße** (engl. block size, **BLS**). |
Das BDOS teilt jede Diskette in Blöcke (engl. Blocks) auf, um damit den | Das BDOS teilt jede Diskette in Blöcke (engl. Blocks) auf, um damit den | ||
Verwaltungs- und Speicheraufwand für die Belegungstabelle zu verkleinern. | Verwaltungs- und Speicheraufwand für die Belegungstabelle zu verkleinern. | ||
Zeile 616: | Zeile 616: | ||
sollte gewahrt bleiben. Es ist wenig sinnvoll, mehr Directory-Einträge als Blöcke zu haben. | sollte gewahrt bleiben. Es ist wenig sinnvoll, mehr Directory-Einträge als Blöcke zu haben. | ||
DSM/ | DSM/ | ||
+ | |||
+ | Es sollte außerdem | ||
+ | |||
+ | für 8-Bit-Blocknummern: | ||
+ | für 16-Bit-Blocknummern: | ||
+ | |||
+ | sein, sonst bekommt man die Diskette gar nicht voll. | ||
Im Beispiel ergibt sich für drei 2K-Blöcke 3 * 2048/32 = maximal mögliche 192 Einträge, | Im Beispiel ergibt sich für drei 2K-Blöcke 3 * 2048/32 = maximal mögliche 192 Einträge, | ||
das Maximum sollte man auch nutzen und DRM auf 191 setzen. | das Maximum sollte man auch nutzen und DRM auf 191 setzen. | ||
- | ^ block size | + | ^ Anz. Dir.Blöcke |
- | ^ ^ 1^ 2^ 3^ 4^ 5^ 6^ 7^ 8^ 9^ 10^ 11^ 12^ 13^ 14^ 15^ 16^ | + | ^ AL0, |
- | ^ 1 KByte| | + | ^ block size |
- | ^ 2 KByte| | + | ^ 1 KByte | |
- | ^ 4 KByte| | + | ^ 2 KByte | |
- | ^ 8 KByte| | + | ^ 4 KByte | 127 | 255 | 383 | 511 | 639 | 767 | 895 | |
- | ^ 16 KByte| | + | ^ 8 KByte | 255 | 511 | 767 | |
+ | ^ 16 KByte | ||
CP/M erkennt Diskettenwechsel, | CP/M erkennt Diskettenwechsel, | ||
Zeile 696: | Zeile 704: | ||
:!: Die originale diskdef.lib funktioniert nur mit dem MAC/ | :!: Die originale diskdef.lib funktioniert nur mit dem MAC/ | ||
+ | |||
+ | Der Makroaufruf **DISKDEF** hat die Form: | ||
+ | |||
+ | DISKDEF dn, | ||
+ | |||
+ | wobei | ||
+ | |||
+ | dn ist die logische Plattennummer, | ||
+ | fsc ist die erste physische Sektornummer (0 oder 1). | ||
+ | lsc ist die letzte Sektornummer. | ||
+ | skf ist der optionale Sektor-Skew-Faktor. | ||
+ | bls ist die Blockgröße der Datenzuordnung. | ||
+ | dks ist die Anzahl der Blöcke auf der Platte. | ||
+ | dir ist die Anzahl der Verzeichniseinträge. | ||
+ | cks ist die Anzahl der geprüften Verzeichniseinträge. | ||
+ | ofs ist der Spurversatz zur logischen Spur 00. | ||
+ | [0] ist ein optionales 1.4-Kompatibilitätsflag. | ||
+ | |||
+ | Der Wert dn ist die Laufwerksnummer, | ||
+ | |||
+ | Wenn die Anzahl der Sektoren weniger als 256 beträgt, wird eine Einzelbyte-Tabelle erstellt, ansonsten belegt jedes Übersetzungstabellenelement zwei Bytes. Es wird keine Übersetzungstabelle erstellt, wenn der Parameter skf weggelassen wird oder gleich 0 ist. | ||
+ | |||
+ | Der Parameter bls gibt die Anzahl der Bytes an, die jedem Datenblock zugeordnet sind und nimmt die Werte 1024, 2048, 4096, 8192 oder 16384 an. Im Allgemeinen steigt die Leistung mit größeren Datenblockgrößen, | ||
+ | |||
+ | Der Parameter dks gibt die Gesamtplattengröße in bls-Einheiten an. Das heißt, wenn bls = 2048 und dks = 1000 ist, beträgt die Gesamtplattenkapazität 2.048.000 Byte. Wenn dks größer als 255 ist, muss der Blockgrößenparameter bls größer als 1024 sein. Der Wert von dir ist die Gesamtzahl der Verzeichniseinträge, | ||
+ | |||
+ | Der Parameter cks bestimmt die Anzahl der Verzeichniselemente, | ||
+ | |||
+ | Wie im vorherigen Abschnitt erwähnt, ist der Wert von cks = dir, wenn das Medium leicht geändert werden kann, wie es bei einem Disketten-Subsystem der Fall ist. Wenn die Platte permanent gemountet ist, ist der Wert von cks normalerweise 0, da die Wahrscheinlichkeit eines Plattenwechsels ohne Neustart gering ist. | ||
+ | |||
+ | Der Wert ofs bestimmt die Anzahl der zu überspringenden Spuren, wenn dieses bestimmte Laufwerk angesprochen wird. Dies kann verwendet werden, um zusätzlichen Betriebssystemspeicherplatz zu reservieren oder mehrere logische Laufwerke auf einem einzelnen physischen Laufwerk mit großer Kapazität zu simulieren. Schließlich ist der Parameter [0] enthalten, wenn Dateikompatibilität mit Versionen von 1.4 erforderlich ist, die für Festplatten mit höherer Dichte modifiziert wurden. Dieser Parameter stellt sicher, dass für jeden Verzeichnisdatensatz nur 16 KB zugewiesen werden, wie dies bei früheren Versionen der Fall war. Normalerweise ist dieser Parameter nicht enthalten. | ||
+ |