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:28] – Page moved from cpm:systemdoku to intern:systemdoku volkerp | cpm:systemdoku [2016/07/25 13:59] – [Der Disk Parameter Block] volkerp | ||
---|---|---|---|
Zeile 1: | Zeile 1: | ||
- | Klaus Kämpf: CP/M 2.2 Assembler-Listing | + | ====== CP/M 2.2 Interna ====== |
- | ISBN 3-925074-II-2 | + | |
- | 1. Auflage, Dezember 1985 | + | **Klaus Kämpf: CP/M 2.2 Assembler-Listing\\ |
- | (c) 1985 by Röckrath MICROCOMPUTER | + | ISBN 3-925074-II-2\\ |
- | Noppiusstr. 19 | + | 1. Auflage, Dezember 1985\\ |
+ | (c) 1985 by Röckrath MICROCOMPUTER**\\ | ||
+ | Noppiusstr. 19\\ | ||
5100 Aachen | 5100 Aachen | ||
Zeile 24: | Zeile 26: | ||
Aachen, im November 1985 | Aachen, im November 1985 | ||
- | Klaus Kampf | + | Klaus Kämpf |
===== Grundlagen ===== | ===== Grundlagen ===== | ||
Zeile 105: | 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 116: | 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 124: | 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 145: | 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 151: | 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 385: | 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 917: | 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 987: | 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 1007: | Zeile 1009: | ||
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. | ||
Rein theoretisch ist zwar eine Maximalkapazität von einem | Rein theoretisch ist zwar eine Maximalkapazität von einem | ||
- | Gigabyte (65536 Blöcke a 16 kbyte) denkbar, diese ist aber | + | Gigabyte (65536 Blöcke a 16 kbyte) denkbar<del>, diese ist aber |
durch die Verwaltung der Recordnummern im 16-Bit Format auf | durch die Verwaltung der Recordnummern im 16-Bit Format auf | ||
- | 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 | DRM+1 ist die Anzahl der Directory-Einträge der Diskette. Da | ||
Zeile 1035: | Zeile 1037: | ||
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.\\ | ||
- | Falls eine Prufung | + | Falls eine Prüfung |
z.B. bei Festplattenlaufwerken, | z.B. bei Festplattenlaufwerken, | ||
CKS auch Null sein. | CKS auch Null sein. | ||
Zeile 1185: | Zeile 1187: | ||
^ Nummer: | 8 | | ^ Nummer: | 8 | | ||
^ Bezeichnung: | ^ Bezeichnung: | ||
- | ^ I: | C = 8H\\ E = I/O-Byte | | + | ^ I: | C = 08H\\ E = I/O-Byte | |
^ O: | - | | ^ O: | - | | ||
Zeile 1288: | Zeile 1290: | ||
Versionen 2.0. 2.1, 2.2 usw. | Versionen 2.0. 2.1, 2.2 usw. | ||
+ | FIXME |