Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
Beide Seiten der vorigen Revision Vorhergehende Überarbeitung Nächste Überarbeitung | Vorhergehende Überarbeitung Nächste ÜberarbeitungBeide Seiten der Revision | ||
cpm:write_a_bios:teil_1 [2018/02/01 06:48] – [Der Disk Parameter Block] volkerp | cpm:write_a_bios:teil_1 [2021/09/20 09:30] – [Tabelle] volkerp | ||
---|---|---|---|
Zeile 278: | Zeile 278: | ||
übergebene Sektornummer ins Registerpaar HL zu kopieren. | übergebene Sektornummer ins Registerpaar HL zu kopieren. | ||
- | :!: im CP/A wird einfach der übergebene Wert genommen und um 1 erhöht (die Sektoren | + | Die logische Sektornummer in CP/M reicht von 0 bis max. 65535, die physikalischen Sektornummern auf Disketten-Laufwerken beginnen in der Regel mit 1. |
+ | |||
+ | :!: im CP/A wird daher einfach der übergebene Wert genommen und um 1 erhöht (die phys. Sektoren | ||
zählen in CP/A bzw. auf Diskette ab 1). Nutzt man eine allgemeine SECTRAN- | zählen in CP/A bzw. auf Diskette ab 1). Nutzt man eine allgemeine SECTRAN- | ||
- | Routine für alle Laufwerke, muss dies bei den phys. Laufwerkstreibern f. Read und Write beachtet werden. | + | Routine für alle Laufwerke, muss dies bei den phys. Laufwerkstreibern f. Read und Write beachtet werden, insbesondere bei nachladbaren Treibern wie z.B. für eine RAM-Disk. |
< | < | ||
Zeile 453: | Zeile 455: | ||
- | Ganz einfache Routinen: | + | Ganz einfache Routinen |
< | < | ||
; | ; | ||
Zeile 551: | 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**. | + | Unabhängig von der physischen Sektorlänge gibt es im CP/M noch die **Blockgröße** |
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 594: | Zeile 596: | ||
**EXM** := (block size / 2048) - 1 bei 16 bit-Blocknummern ( DSM > 255)\\ | **EXM** := (block size / 2048) - 1 bei 16 bit-Blocknummern ( DSM > 255)\\ | ||
- | ^ block size ^ BSH | + | ^ block size ^ |
- | ^ :!: 512 Byte | 2 | 3 | 0 | - | | + | ^ :!: 512 Byte | 2 | 3 | 0 | - | |
- | ^ 1 KByte | + | ^ 1 KByte |
- | ^ 2 KByte | + | ^ 2 KByte |
- | ^ 4 KByte | + | ^ 4 KByte |
- | ^ 8 KByte | + | ^ 8 KByte |
- | ^ 16 KByte | 7 | 127 | 15 | 7 | | + | ^ 16 KByte | 7 | 127 | 15 | 7 | |
:!: 512 Byte funktionieren in CP/A und CP/M 2.2, sind aber nicht dokumentiert. Für eine kleine RAM-Disk reicht es. Die cpmtools kommen damit nicht klar! | :!: 512 Byte funktionieren in CP/A und CP/M 2.2, sind aber nicht dokumentiert. Für eine kleine RAM-Disk reicht es. Die cpmtools kommen damit nicht klar! | ||
Zeile 635: | Zeile 637: | ||
Damit wird nicht auf Diskettenwechsel geprüft. | Damit wird nicht auf Diskettenwechsel geprüft. | ||
- | Im DPH (s.o.) wird für den Prüfsummenvektor Speicherplatz definiert (CHKxx). | + | Im DPH (s.o.) wird für den Prüfsummenvektor Speicherplatz definiert (**CHK**xx). |
Dieser muss CKS Byte groß sein: | Dieser muss CKS Byte groß sein: | ||
CHK00: | CHK00: | ||
- | Der Allocation Vektor (ALV) bildet die Belegungstabelle (besser: | + | Der Allocation Vektor (**ALV**) bildet die Belegungstabelle (besser: |
Belegungsvektor) der Diskette. Für jeden Block der Diskette ist im ALV ein Bit | Belegungsvektor) der Diskette. Für jeden Block der Diskette ist im ALV ein Bit | ||
vorhanden, das entsprechend auf 0 (Block frei) oder 1 (Block belegt) gesetzt | vorhanden, das entsprechend auf 0 (Block frei) oder 1 (Block belegt) gesetzt | ||
Zeile 647: | Zeile 649: | ||
(erstes Byte des ALV zuerst). Für ALLxx muss man deshalb (DSM+7)/8 Byte bereitstellen (DSM/8 aufgerundet): | (erstes Byte des ALV zuerst). Für ALLxx muss man deshalb (DSM+7)/8 Byte bereitstellen (DSM/8 aufgerundet): | ||
- | **ALL00**: | + | ALL00: |
Achtung: Bei automatischer Formaterkennung müssen die Speicherplätze CHKxx und | Achtung: Bei automatischer Formaterkennung müssen die Speicherplätze CHKxx und | ||
Zeile 680: | Zeile 682: | ||
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. | ||
+ | |||
+ | -> http:// | ||
< | < | ||
Zeile 689: | Zeile 693: | ||
</ | </ | ||
- | Dieses Beispiel erzeugt genau obige Daten für Beispiel 1. | + | Dieses Beispiel erzeugt |
:!: Die originale diskdef.lib funktioniert nur mit dem MAC/ | :!: Die originale diskdef.lib funktioniert nur mit dem MAC/ |