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 [2025/09/05 08:00] (aktuell) – [Kalt- und Warmstart] volkerp | ||
|---|---|---|---|
| Zeile 86: | Zeile 86: | ||
| * IOBYTE 0003h setzen | * IOBYTE 0003h setzen | ||
| * CDRIVE 0004h setzen (Highnibble = aktuelle Benutzernummer, | * CDRIVE 0004h setzen (Highnibble = aktuelle Benutzernummer, | ||
| - | * C = aktuelles Laufwerk. WBOOT sollte | + | * C = aktuelles Laufwerk. WBOOT sollte |
| * Sprung nach CCP | * Sprung nach CCP | ||
| 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, | ||
| Zeile 681: | Zeile 690: | ||
| CHK00: | CHK00: | ||
| </ | </ | ||
| + | |||
| + | |||
| + | ===== DISKDEF.LIB ===== | ||
| die Berechnung des DPB und der Größe der Speicherbereiche kann durch die Makro-Bibliothek diskdef.lib erfolgen. | die Berechnung des DPB und der Größe der Speicherbereiche kann durch die Makro-Bibliothek diskdef.lib erfolgen. | ||