Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
intern:systemdoku [2011/03/25 11:31] volkerpcpm:systemdoku [2024/04/15 11:58] (aktuell) – [Disketten] volkerp
Zeile 107: Zeile 107:
 ==== Speicheraufteilung ==== ==== Speicheraufteilung ====
  
-Damit das CP/M in verschiedenen Speichergrosen ablaufen kann, +Damit das CP/M in verschiedenen Speichergrößen ablaufen kann, 
-ist der Speicherbereich in dem das CP/M liegt nicht festgelegt.+ist der Speicherbereichin dem das CP/M liegtnicht 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>
          +----------------+ oberes Speicherende          +----------------+ oberes Speicherende
                         |                         |
Zeile 147: Zeile 147:
              parameter  |              parameter  |
 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, also+ist immer der zweite Eintrag in der BIOS-Sprungtabelle, also
 BIOS + 0003H.\\ BIOS + 0003H.\\
 Daraus kann ein Programm auch die Startadresse des BIOS Daraus kann ein Programm auch die Startadresse des BIOS
Zeile 250: Zeile 250:
 Abmelden als 'ausloggen' (engl. Log out) bezeichnet. Abmelden als 'ausloggen' (engl. Log out) bezeichnet.
  
 +<code>
 +Track/Spur                                   DPB-Wert (Disk Parameter Block)
 +       +-----------------------------------+
 +0      |   Systemspur 0                    | a = OFF Systemspuren 0..OFF-1
 +         ...                             |  
 +a-1    |   Systemspur a-1                  |
 +       +-----------------------------------+
 +a      | Block 0 | Block 1 | ...           | n Blöcke
 +                                         | DRM+1 Einträge a 32 Byte
 +          Directory                      | 
 +                                         | -> n = (DRM+1)*32/BLS (aufrunden)
 +                             | Block n-1 | -> b = (DRM+1)/4/SPT + a (aufrunden)
 +       +-----------------------------------+
 +b      | Block n | Block n+1 | ...         | m-n Blöcke
 +                                         |
 +                                         | Blockgröße 1K .. 16KByte 
 +                                         | (s. BSH und BLM)
 +                                         | BLS = 128 * 2^BSH = 128 * (BLM+1)
 +          Dateien                        |
 +                                         | Block n muss nicht am Spuranfang
 +                                         | liegen, ist aber fast immer so!
 +                                         |
 +                                         |
 +                                         |
 +                                         |
 +                                         |
 +                                         |
 +                                         |
 +                                         | m = DSM-1
 +                                         | Block m ist nicht immer vollst. 
 +                                         | auf der Disk enthalten
 +trk-1  |             | Block m-1 | Block m | 
 +       +-----------------------------------+ 
 +</code>
  
 ==== Dateien ==== ==== Dateien ====
Zeile 316: Zeile 350:
 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-
 'Portionen'.\\ 'Portionen'.\\
Zeile 330: Zeile 364:
 allgemein für Diskettendaten benutzt. allgemein für Diskettendaten benutzt.
  
-Im Zusammenhang mit Disketten ist auch die Bezeichnung 'logischer +Im Zusammenhang mit Disketten ist auch die Bezeichnung '**logischer 
-Sektor' für einen Record üblich. Damit wird vor allem+Sektor**' für einen Record üblich. Damit wird vor allem
 der Unterschied zwischen einem Sektor auf der Diskette ('physikalischer der Unterschied zwischen einem Sektor auf der Diskette ('physikalischer
 Sektor') und einem 'Sektor', wie ihn das BDOS Sektor') und einem 'Sektor', wie ihn das BDOS
Zeile 357: Zeile 391:
 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 Sekto zusammenfassen.+zu einem physikalischen Sektor zusammenfassen.
  
 CP/M 2.2 unterstützt dieses Zusammenfassen und Aufspalten CP/M 2.2 unterstützt dieses Zusammenfassen und Aufspalten
Zeile 387: Zeile 421:
 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 <del>16384</del> 8192 Directory-Einträge möglich.
  
  
Zeile 504: Zeile 538:
 verwaltet, um so die Zahlweise der Recordnummern von 0 bis verwaltet, um so die Zahlweise der Recordnummern von 0 bis
 127 zu erhalten. 127 zu erhalten.
 +
 +1 Extend = 128 Records = 16 kByte
  
 ==== Extendgruppen ==== ==== Extendgruppen ====
Zeile 717: Zeile 753:
 ==== Sequentieller Zugriff <-> Direkter Zugriff ==== ==== Sequentieller Zugriff <-> Direkter Zugriff ====
  
-Im CP/M 1.4 ist es Aufgabe des Programms, die Eintrags- und+Im **CP/M 1.4** ist es Aufgabe des Programms, die Eintrags- und
 Recordnummer im FCB zu setzen. Soll ein bestimmter Record Recordnummer im FCB zu setzen. Soll ein bestimmter Record
 innerhalb des Files erreicht werden, so muß das Programm die innerhalb des Files erreicht werden, so muß das Programm die
 Extend- und Recordnummer selbst berechnen und in den FCB Extend- und Recordnummer selbst berechnen und in den FCB
 einsetzen.\\ einsetzen.\\
-Aus der absoluten Recordnummer ergibt sich die Extendnummer +Aus der absoluten Recordnummer RRN ergibt sich die Extendnummer EX 
-aus der Division durch 128. Der Divisionrest ist die Recordnummer+aus der Division durch 128. Der Divisionrest ist die Recordnummer CR
 innerhalb des Extends. Diese Werte müssen aber immer innerhalb des Extends. Diese Werte müssen aber immer
 vor dem Öffnen gesetzt sein, damit das BDOS die richtige vor dem Öffnen gesetzt sein, damit das BDOS die richtige
 Blocktabelle in den FCB überträgt. Blocktabelle in den FCB überträgt.
 +
 +<code>
 +RRN -> SRN:
 + RRN = 128 + EX * 128 + CR
 +  
 +SRN -> RRN:
 + EX = RRN / 128
 + CR = RRN modulo 128
 +</code>
  
 Alle höheren Recordnummern können im CP/M 1.4 nur sequentiell Alle höheren Recordnummern können im CP/M 1.4 nur sequentiell
Zeile 735: Zeile 780:
 sequentiellen Zugriff nicht möglich. sequentiellen Zugriff nicht möglich.
  
-CP/M 2.2 bietet daher mit dem direkten Zugriff (engl. Random+**CP/M 2.2** bietet daher mit dem direkten Zugriff (engl. Random
 Access) eine weitere Zugriffsart, mit der jeder Record eines Access) eine weitere Zugriffsart, mit der jeder Record eines
 Files direkt erreicht werden kann. Files direkt erreicht werden kann.
Zeile 750: Zeile 795:
  
 Das BDOS berechnet aus dieser 'Random Record Number' (RRN) Das BDOS berechnet aus dieser 'Random Record Number' (RRN)
-die 'Sequential Record Number' (SRN), bestehend aus Extendgruppe, +die 'Sequential Record Number' (SRN), bestehend aus Extendgruppe EG
-Extend und Recordnummer.+Extend EX und Recordnummer CR.
  
  
-Zwischen der Random Record Nummer und der Sequential Record +Zwischen der Random Record Nummer RRN und der Sequential Record 
-Nummer besteht folgender Zusammenhang:+Nummer SRN besteht folgender Zusammenhang:
  
 <code> <code>
Zeile 831: Zeile 876:
 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 882:
  
 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 bei Directory-Zugriffen.\\+und dient der Geschwindigkeitserhöhung bei Directory-Zugriffen.\\
 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 930:
 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 940:
 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 964:
  
 Der Disk Parameter Block (DPB) beinhaltet alle Parameter, die Der Disk Parameter Block (DPB) beinhaltet alle Parameter, die
-Größe and Aufteilung der Diskette beschreiben, insbesondere+Größe und Aufteilung der Diskette beschreiben, insbesondere
 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 1019:
 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 **BLS** (engl. BLock
 Size). Durch diese 'doppelte' Angabe der Blocklänge werden Size). Durch diese 'doppelte' Angabe der Blocklänge werden
 bestimmte BDOS-interne Rechenoperationen vereinfacht. bestimmte BDOS-interne Rechenoperationen vereinfacht.
Zeile 989: Zeile 1034:
  
 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 (DSM+1)
 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 1045:
 die zweite für 16-Bit Blocknummern an.) die zweite für 16-Bit Blocknummern an.)
  
- BLS EXM+ BLS EXM 8 Bit EXM 16 Bit
  1024 0 -  1024 0 -
  2048 1 0  2048 1 0
Zeile 1007: Zeile 1052:
  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 der Diskette in Bytes ergibt sich aus dem +Die Gesamtkapazität der Diskette in Bytes ergibt sich aus dem 
-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 1063:
 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+//**04/2019:** Unter CPM 2.2 sind nachgewiesen aufgrund der 16Bit-Arithmetik nur Laufwerkwerke bis maximal 8 Mbyte nutzbar!(( 
 +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, dass die Disk 
 +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://groups.google.com/forum/#!topic/comp.os.cpm/rFagrp7WT9E 
 +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.  Before someone else 
 +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 1093:
 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, die sich damit die Anzahl der zu prüfenden Directory-Records, die sich
 aus der Beziehung CKS = (DRM + 1) / 4 ergibt.\\ aus der Beziehung CKS = (DRM + 1) / 4 ergibt.\\
Zeile 1041: Zeile 1100:
 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, wird aber vor dem Dieser Wert ist für das BDOS unerheblich, wird aber vor dem
 Setzen der physikalischen Spurnummer zur errechneten logischen Setzen der physikalischen Spurnummer zur errechneten logischen
Zeile 1290: Zeile 1349:
 Versionen 2.0. 2.1, 2.2 usw. Versionen 2.0. 2.1, 2.2 usw.
  
 +FIXME
  • cpm/systemdoku.1301052671.txt.gz
  • Zuletzt geändert: 2011/03/25 10:31
  • (Externe Bearbeitung)