Unter CP/M ist der DPH eine BIOS Struktur, die Informationen über das Laufwerk enthält.
Das aktuelle Format eine DPH ist abhängig von der Version.
[Der Vollständigkeit halber ist auch der DPH für CP/M 2 mit angegeben] Verschiedene BIOS Implementierungen können zusätzliche Felder entweder an den Anfang oder das Ende der DPH hängen. CP/M 3 DPHDies ist das Format der DPH in CP/M 3 Systemen mit 8 Bit: 0000 DW xlt ;Adresse der Sektor-Übersetzungstabelle 0002 DW 0,0,0,0 ;Wird von CP/M als Arbeitsbereich benutzt 000A DB mf ;Datenträgermerker. Wenn das BIOS über ein Interrupt ;betriebenes System zur Erkennung eines ;Datenträgerwechsels verfügt, dann sollte dieser ;Merker bei einem Wechsel gesetzt werden ;(und auch der 'Merker für geöffnetes Laufwerk' ;im SCB) auf 0FFh. 000B DB 0 ;Arbeitsbereich 000C DW dpb ;Adresse der DPB, ;definiert das Format dieses Laufwerkes. 000E DW csv ;Adresse des Directory Prüfsummenvektors ;für dieses Laufwerk (in Bank 0). 0010 DW alv ;Adresse des Belegungsvektors ;für dieses Laufwerk (in Bank 0). 0012 DW dirbcb ;Adresse der Directory Pufferverkettung. 0014 DW dtabcb ;Adresse der Daten-Pufferverkettung. 0016 DW hash ;Adresse des Hash Puffers ;für dieses Laufwerk. 0018 DB hbank ;Bank Nummer des Hash Puffers. Prüfsummenvektor (Checksum Vektor)Dies ist ein Puffer, den CP/M benutzt, um die Prüfsumme jedes 128-Byte Rekords in der Directory abzulegen. Wenn sich die Prüfsumme eines Sektors unerwartet ändert, dann wird angenommen, dass sich der Datenträger geändert hat. Im Falle einer Festplatte existiert ein solcher Puffer nicht und seine Adresse in der DPH ist 0000. Belegungsvektor (Allocation Vector)Dies ist eine Bitmap der belegten/freien Blöcke auf dem Datenträger. Unter CP/M 2 gibt es ein Bit für jeden Block. Unter CP/M 3 gibt es ein Bit oder zwei Bits für jeden Block. Pufferverkettung (Buffer Chains)Im nichtsegmentierten CP/M 3 weist jeder BCB Zeiger (DIRBCB/DTABCB) direkt auf einen einzigen Buffer Control Block. Im segmentierten System weist jeder auf ein Wort, das der Reihe nach auf den ersten BCB in einer verketten Liste. Die beiden BCB Zeiger sind nur dann gleich, wenn es eine nichtsegmentierte CP/M 3 Version und das Laufwerk eine Festplatte ist. Das Format jeder BCB ist wie folgt: 0000 DB lfwrk. ;Das Laufwerk, das diesen Puffer nutzt, 0FFh wenn leer. 0001 DB sec# ;Sektornummer, die diesen Puffer nutzt (24-Bit). 0004 DB wflg ;Ungleich Null wnn Puffer zurückgeschrieben werden muss 0005 DB 0 ;Ablagebyte. 0006 DW track ;Track von wo der Puffer gelesen wurde. 0008 DW sector ;Sektor von wo der Puffer gelesen wurde. 000A DW buffer ;Adresse der gepufferten Daten. 000C DB bank ;Bank der gepufferten Daten ;(nur bei segmentiertem CP/M). ;BCBs in der Directory Kette müssen in Bank 0 liegen. ;BCBs für Daten können in jeder Bank liegen, ;die die BIOS Aufrufe XMOVE/MOVE unterstützen. 000D DW link ;Adresse der nächsten BCB Verkettung, 0 für Ende. ;(nur bei segmentiertem CP/M). Hash PufferDies ist eine optionale Hash Tabelle mit vier Bytes für jeden Directory Eintrag, genutzt für schnelle Dateizugriffe. Wenn diese 0FFFFh ist, existiert keine solche Tabelle. CP/M 2 DPHDies ist das Format der DPH in CP/M 2 Systemen: 0000 DW xlt ;Adresse der Sektor-Übersetzungstabelle 0002 DW 0,0,0 ;Wird von CP/M als Arbeitsbereich benutzt 0008 DW dirbuf ;Adresse eines 128-Byte Sektor Puffers; er ist ;für alle DPHs im System derselbe. 000A DW dpb ;Adresse der DPB, ;definiert das Format dieses Laufwerkes. 000C DW csv ;Adresse des Directory Prüfsummenvektors ;für dieses Laufwerk. 000E DW alv ;Adresse des Belegungsvektors ;für dieses Laufwerk. |