CP/M Disc Parameter Header

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.
Die Adresse der DPH kann mittels der BIOS Funktion SELDSK bestimmt werden. Im DPH ist der Disc Parameter Block, DPB, enthalten, dessen Adresse mit der BDOS Funktion 31 ermittelt werden kann.

[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 DPH

Dies 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 Puffer

Dies 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 DPH

Dies 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.

Letzte Änderung: 21.Juli 2005