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 | ||
intern:systemdoku [2011/03/25 11:31] – volkerp | cpm:systemdoku [2024/04/10 06:36] – [Records] volkerp | ||
---|---|---|---|
Zeile 107: | Zeile 107: | ||
==== Speicheraufteilung ==== | ==== Speicheraufteilung ==== | ||
- | Damit das CP/M in verschiedenen | + | Damit das CP/M in verschiedenen |
- | ist der Speicherbereich in dem das CP/M liegt nicht festgelegt. | + | ist der Speicherbereich, in dem das CP/M liegt, nicht festgelegt. |
Statt dessen ist die erste Speicherseite (256 Bytes) | Statt dessen ist die erste Speicherseite (256 Bytes) | ||
für Systeminformationen reserviert und beinhaltet auch den | für Systeminformationen reserviert und beinhaltet auch den | ||
Zeile 118: | Zeile 118: | ||
immer am oberen Speicherende liegt. | immer am oberen Speicherende liegt. | ||
- | Wichtig für den Betrieb von CP/M ist, das der Speicher durchgehend | + | Wichtig für den Betrieb von CP/M ist, daß der Speicher durchgehend |
ist und bei der Adresse 0000H beginnt. Da Anwenderprogramme | ist und bei der Adresse 0000H beginnt. Da Anwenderprogramme | ||
immer ab einer fester Adresse arbeiten, ist dadurch | immer ab einer fester Adresse arbeiten, ist dadurch | ||
Zeile 126: | Zeile 126: | ||
Die Speicheraufteilung im CP/M sieht im Überblick so aus: | Die Speicheraufteilung im CP/M sieht im Überblick so aus: | ||
- | <code> | + | <ditaa noedgesep> |
| | ||
| | ||
Zeile 147: | Zeile 147: | ||
| | ||
BOOT: +----------------+ 0000H | BOOT: +----------------+ 0000H | ||
- | </code> | + | </ditaa> |
An der Adresse BOOT befindet sich grundsätzlich ein Sprung | An der Adresse BOOT befindet sich grundsätzlich ein Sprung | ||
Zeile 153: | Zeile 153: | ||
eines Programms den CCP und das BDOS neu in den | eines Programms den CCP und das BDOS neu in den | ||
Speicher und startet danach wieder den CCP. Das Sprungziel | Speicher und startet danach wieder den CCP. Das Sprungziel | ||
- | ist immer der zweite Eintrag in der BlOS-Sprungtabelle, | + | ist immer der zweite Eintrag in der BIOS-Sprungtabelle, |
BIOS + 0003H.\\ | BIOS + 0003H.\\ | ||
Daraus kann ein Programm auch die Startadresse des BIOS | Daraus kann ein Programm auch die Startadresse des BIOS | ||
Zeile 316: | Zeile 316: | ||
von 128 Bytes gemessen. | von 128 Bytes gemessen. | ||
- | CP/M 2.2 hat diese Rechenweise für Files ubernommen, unterscheidet | + | CP/M 2.2 hat diese Rechenweise für Files übernommen, unterscheidet |
aber zwischen Sektoren auf der Diskette und File- | aber zwischen Sektoren auf der Diskette und File- | ||
' | ' | ||
Zeile 330: | Zeile 330: | ||
allgemein für Diskettendaten benutzt. | allgemein für Diskettendaten benutzt. | ||
- | Im Zusammenhang mit Disketten ist auch die Bezeichnung ' | + | Im Zusammenhang mit Disketten ist auch die Bezeichnung '**logischer |
- | Sektor' | + | Sektor**' für einen Record üblich. Damit wird vor allem |
der Unterschied zwischen einem Sektor auf der Diskette (' | der Unterschied zwischen einem Sektor auf der Diskette (' | ||
Sektor' | Sektor' | ||
Zeile 357: | Zeile 357: | ||
Das BIOS muß beim Lesen jeden physikalischen Sektor in logische | Das BIOS muß beim Lesen jeden physikalischen Sektor in logische | ||
Sektoren aufspalten und beim Schreiben logische Sektoren | Sektoren aufspalten und beim Schreiben logische Sektoren | ||
- | zu einem physikalischen | + | zu einem physikalischen |
CP/M 2.2 unterstützt dieses Zusammenfassen und Aufspalten | CP/M 2.2 unterstützt dieses Zusammenfassen und Aufspalten | ||
Zeile 387: | Zeile 387: | ||
und auch die Anzahl der Einträge ist ein getrennter Parameter. | und auch die Anzahl der Einträge ist ein getrennter Parameter. | ||
Bei der maximalen Blockgröße von 16 kbyte sind im | Bei der maximalen Blockgröße von 16 kbyte sind im | ||
- | CP/M 2.2 maximal 16384 Directory-Einträge möglich. | + | CP/M 2.2 maximal |
Zeile 831: | Zeile 831: | ||
Werte sind Verweise auf weitere Tabellen. | Werte sind Verweise auf weitere Tabellen. | ||
- | Die Sektor-Verschränkungs-Tabelle (XLT) dient zur Umrechnung | + | Die Sektor-Verschränkungs-Tabelle (**XLT**) dient zur Umrechnung |
von logischen zu physikalischen Sektornummern einer Spur. Die | von logischen zu physikalischen Sektornummern einer Spur. Die | ||
Länge dieser Tabelle entspricht der Anzahl logischer Sektoren | Länge dieser Tabelle entspricht der Anzahl logischer Sektoren | ||
Zeile 837: | Zeile 837: | ||
NHDE ist die Nummer des höchsten belegten Directory-Eintrags+1 | NHDE ist die Nummer des höchsten belegten Directory-Eintrags+1 | ||
- | und dient der Geschwindigkeitserhohung | + | und dient der Geschwindigkeitserhöhung |
NHDE wird jeweils beim Einloggen eines Laufwerks und beim | NHDE wird jeweils beim Einloggen eines Laufwerks und beim | ||
Löschen oder Neuanlegen eines Eintrages neu berechnet. Die | Löschen oder Neuanlegen eines Eintrages neu berechnet. Die | ||
Zeile 885: | Zeile 885: | ||
auf ein und denselben DPB verweisen. | auf ein und denselben DPB verweisen. | ||
- | Im CSV sind die Prüfsummen (engl. Checksum) der einzelnen | + | Im **CSV** sind die Prüfsummen (engl. Checksum) der einzelnen |
Directory-Records gespeichert.\\ | Directory-Records gespeichert.\\ | ||
Pro Directory-Record ist im CSV ein Byte vorhanden, das die | Pro Directory-Record ist im CSV ein Byte vorhanden, das die | ||
Zeile 895: | Zeile 895: | ||
im Zusammenhang mit dem Warmstart beschrieben. | im Zusammenhang mit dem Warmstart beschrieben. | ||
- | Der Allocation Vektor (ALV) bildet die Belegungstabelle (besser: | + | Der Allocation Vektor (**ALV**) bildet die Belegungstabelle (besser: |
Belegungsvektor) der Diskette.\\ | Belegungsvektor) der Diskette.\\ | ||
Aus dem Belegungsvektor kann das BDOS ersehen, welche Blöcke | Aus dem Belegungsvektor kann das BDOS ersehen, welche Blöcke | ||
Zeile 919: | Zeile 919: | ||
Der Disk Parameter Block (DPB) beinhaltet alle Parameter, die | Der Disk Parameter Block (DPB) beinhaltet alle Parameter, die | ||
- | Größe | + | Größe |
die Anzahl der logischen Sektoren pro Spur, die Blockgröße, | die Anzahl der logischen Sektoren pro Spur, die Blockgröße, | ||
die Anzahl der Blocks auf der Diskette und die Größe der | die Anzahl der Blocks auf der Diskette und die Größe der | ||
Zeile 974: | Zeile 974: | ||
Verschränkungs-Tabelle (XLT). | Verschränkungs-Tabelle (XLT). | ||
- | BSH und BLM beinhalten beide die Blocklänge BLS (engl. BLock | + | **BSH und BLM** beinhalten beide die Blocklänge |
Size). Durch diese ' | Size). Durch diese ' | ||
bestimmte BDOS-interne Rechenoperationen vereinfacht. | bestimmte BDOS-interne Rechenoperationen vereinfacht. | ||
Zeile 989: | Zeile 989: | ||
kurz | kurz | ||
- | BLS = 128 * 2^BSH - 128 * (BLM+1) | + | BLS = 128 * 2^BSH = 128 * (BLM+1) |
- | In EXM wird die Anzahl von Extends pro Directory-Eintrag | + | In **EXM** wird die Anzahl von Extends pro Directory-Eintrag |
definiert.\\ | definiert.\\ | ||
- | EXM ist abhängig von der Blockgröße und der Anzahl der Blöcke | + | EXM ist abhängig von der Blockgröße und der Anzahl der Blöcke |
pro Diskette. Je nachdem, ob weniger als 256 Blöcke (8-Bit | pro Diskette. Je nachdem, ob weniger als 256 Blöcke (8-Bit | ||
Blocknummern) oder mehr als 255 Blöcke (16-Bit Blocknummern) | Blocknummern) oder mehr als 255 Blöcke (16-Bit Blocknummern) | ||
Zeile 1000: | Zeile 1000: | ||
die zweite für 16-Bit Blocknummern an.) | die zweite für 16-Bit Blocknummern an.) | ||
- | BLS EXM | + | BLS EXM |
1024 0 - | 1024 0 - | ||
2048 1 0 | 2048 1 0 | ||
Zeile 1007: | Zeile 1007: | ||
16384 15 7 | 16384 15 7 | ||
- | DSM enthält die Anzahl von Blöcken pro Diskette -1 bzw. die | + | **DSM** enthält die Anzahl von Blöcken pro Diskette -1 bzw. die |
höchste Blocknummer der Diskette.\\ | höchste Blocknummer der Diskette.\\ | ||
- | Die Gesamtkapazitat | + | Die Gesamtkapazität |
- | Produkt von BLS und (DSH+1); für den Allocation Vector müssen | + | Produkt von BLS und (DSM+1); für den Allocation Vector müssen |
(DSM / 8) + 1 Bytes reserviert werden. | (DSM / 8) + 1 Bytes reserviert werden. | ||
Zeile 1018: | Zeile 1018: | ||
65536 Records, also 8 Megabyte (65536 * 128 Bytes) beschränkt. | 65536 Records, also 8 Megabyte (65536 * 128 Bytes) beschränkt. | ||
- | DRM+1 ist die Anzahl der Directory-Einträge der Diskette. Da | + | // |
+ | P.Schorn, 04/2019: Ich habe ein Experiment mit einer 16 mb und einer 32 mb Disk | ||
+ | gemacht. In beiden Fällen konnte ich zwar STAT überzeugen, | ||
+ | so gross ist, aber ich konnte sie nicht über 8 mb hinaus füllen. Bei | ||
+ | überschreiten dieser Grenze sind dann BDOS Fehler aufgetreten.)) | ||
+ | Mit anderen BDOS-Varianten können größere Laufwerke genutzt werden.((https:// | ||
+ | Reason they only do 16bit math and the limit is the total number of | ||
+ | sectors not the total number of allocation blocks. | ||
+ | If it were the latter it could go to 1GB. If you want that then look | ||
+ | at P2dos, Novados, suprbdos, Zrdos, Dosplus. | ||
+ | chimes in we also had DRIs improved but those only go to 32mb | ||
+ | namely CP/m+ and MPM.)) | ||
+ | // | ||
+ | |||
+ | **DRM**+1 ist die Anzahl der Directory-Einträge der Diskette. Da | ||
die Eintragsnummern - genauso wie die Blocknummern - von | die Eintragsnummern - genauso wie die Blocknummern - von | ||
Null an gezählt werden, enthält DRM den um eins verminderten | Null an gezählt werden, enthält DRM den um eins verminderten | ||
Wert. | Wert. | ||
- | AL0 und AL1 bilden die ersten beiden Bytes des Allocation | + | **AL0 und AL1** bilden die ersten beiden Bytes des Allocation |
Vectors und müssen daher, wie der ALV, als Bitvektor gesehen | Vectors und müssen daher, wie der ALV, als Bitvektor gesehen | ||
werden.\\ | werden.\\ | ||
Zeile 1034: | Zeile 1048: | ||
Directory-Blöcke auf 16 beschränkt. | Directory-Blöcke auf 16 beschränkt. | ||
- | CKS kennzeichnet die Länge des Prüfsummen-Vektors (CSV) und | + | **CKS** kennzeichnet die Länge des Prüfsummen-Vektors (CSV) und |
damit die Anzahl der zu prüfenden Directory-Records, | damit die Anzahl der zu prüfenden Directory-Records, | ||
aus der Beziehung CKS = (DRM + 1) / 4 ergibt.\\ | aus der Beziehung CKS = (DRM + 1) / 4 ergibt.\\ | ||
Zeile 1041: | Zeile 1055: | ||
CKS auch Null sein. | CKS auch Null sein. | ||
- | OFF ist die Anzahl der reservierten Spuren auf der Diskette. | + | **OFF** ist die Anzahl der reservierten Spuren auf der Diskette. |
Dieser Wert ist für das BDOS unerheblich, | Dieser Wert ist für das BDOS unerheblich, | ||
Setzen der physikalischen Spurnummer zur errechneten logischen | Setzen der physikalischen Spurnummer zur errechneten logischen | ||
Zeile 1290: | Zeile 1304: | ||
Versionen 2.0. 2.1, 2.2 usw. | Versionen 2.0. 2.1, 2.2 usw. | ||
+ | FIXME |