Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung | ||
cpm:write_a_bios:teil_1 [2021/09/22 06:30] – [Der Disk Parameter Block] volkerp | cpm:write_a_bios:teil_1 [2024/12/05 12:54] (aktuell) – [Der Disk Parameter Block] volkerp | ||
---|---|---|---|
Zeile 235: | Zeile 235: | ||
**SETSEC** bezieht sich auf den im Registerpaar | **SETSEC** bezieht sich auf den im Registerpaar | ||
- | BC übergebenen Sektor. Die so gesetzte Sektornummer ist immer | + | BC übergebenen |
das Ergebnis der SECTRAN-Funktion (s.u.). Auch hier ist ein | das Ergebnis der SECTRAN-Funktion (s.u.). Auch hier ist ein | ||
tatsächlicher Diskzugriff auf diesen Sektor nicht garantiert. | tatsächlicher Diskzugriff auf diesen Sektor nicht garantiert. | ||
+ | |||
+ | Vor direktem Aufruf von SETSEC muss daher immer SECTRAN erfolgen! | ||
**SETDMA**: Alle nachfolgenden Diskzugriffe müssen die DMA-Adresse als | **SETDMA**: Alle nachfolgenden Diskzugriffe müssen die DMA-Adresse als | ||
Zeile 330: | Zeile 332: | ||
Ein DPH umfasst 8 Einträge zu je 16 Bit und hat folgende Struktur: | Ein DPH umfasst 8 Einträge zu je 16 Bit und hat folgende Struktur: | ||
- | <ditaa> | + | <a2s> |
- | | + | |
| XLT | NHDE | CLTK | FSCT | DIRBUF | DPB | CSV | ALV | | | XLT | NHDE | CLTK | FSCT | DIRBUF | DPB | CSV | ALV | | ||
- | | + | |
Byte 0/1 | Byte 0/1 | ||
- | </ditaa> | + | </a2s> |
XLT (s.o.), NHDE, CLTK, FSCT sind mit 0 vorbelegt, DIRBUF ist ein 128 Byte | XLT (s.o.), NHDE, CLTK, FSCT sind mit 0 vorbelegt, DIRBUF ist ein 128 Byte | ||
Zeile 509: | Zeile 511: | ||
Ein DPB umfasst 15 Bytes in folgender Aufteilung: | Ein DPB umfasst 15 Bytes in folgender Aufteilung: | ||
- | <ditaa> | + | <a2s> |
- | +----------------------------------------------------------+ | + | #-----#-----#-----#-----#-----#----#-----#-----#-----#-----# |
| SPT | BSH | BLM | EXM | DSM | DRM| AL0 | AL1 | CKS | OFF | | | SPT | BSH | BLM | EXM | DSM | DRM| AL0 | AL1 | CKS | OFF | | ||
- | +----------------------------------------------------------+ | + | #-----#-----#-----#-----#-----#----#-----#-----#-----#-----# |
0/1 | 0/1 | ||
| | ||
- | </ditaa> | + | </a2s> |
Zeile 553: | Zeile 555: | ||
:!: 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 618: | ||
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, |