Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Letzte ÜberarbeitungBeide Seiten der Revision
cpm:write_a_bios:teil_2 [2018/02/01 06:57] – [Variante 2] volkerpcpm:write_a_bios:teil_2 [2018/10/05 06:49] – [Variante 2] volkerp
Zeile 63: Zeile 63:
  
 1 Track = 256 Byte (Fenstergröße)\\ 1 Track = 256 Byte (Fenstergröße)\\
-d.h. 2 Records/track\\+d.h. 2 Records/track 1..2\\
 wir brauchen damit 1600h/256 = 22 Tracks f. Systemspur\\ wir brauchen damit 1600h/256 = 22 Tracks f. Systemspur\\
-insg. 1024 tracks -> DSM = 1023-22 = 1011\\+insg. 1024 tracks -> DSM = 1024-22 = 1012\\
 wir wählen die kleinstmögliche Blockgröße 2k (1k gehen nicht wg. EXM, da DSM > 255)\\ wir wählen die kleinstmögliche Blockgröße 2k (1k gehen nicht wg. EXM, da DSM > 255)\\
 und z.B. 128 Dir-Einträge (d.h. 2 Dir-Blöcke)\\ und z.B. 128 Dir-Einträge (d.h. 2 Dir-Blöcke)\\
Zeile 127: Zeile 127:
  
 1 Track = 2048 Byte\\  1 Track = 2048 Byte\\ 
-d.h. 16 Records/Track\\+d.h. 16 Records/Track 1..16\\
 wir brauchen damit 1600h/2048 = 3 Tracks f. Systemspur\\ wir brauchen damit 1600h/2048 = 3 Tracks f. Systemspur\\
-insg. 256 Tracks-> DSM = 255-3\\+insg. 128 Tracks-> DSM = 128-3\\
 kleinste Blockgröße 1k\\ kleinste Blockgröße 1k\\
 und z.B. 64 Dir-Einträge (d.h. 2 Dir-Blöcke) und z.B. 64 Dir-Einträge (d.h. 2 Dir-Blöcke)
  
 Diese Aufteilung ist aufgrund der kleineren Blockgröße günstiger, wenn viele kleine Dateien auf  Diese Aufteilung ist aufgrund der kleineren Blockgröße günstiger, wenn viele kleine Dateien auf 
-der RAM-Disk gehalten werden sollen. Auch wird weniger Platz für den Allocation Vektor ALVxx benötigt. Aber die Umrechnung logischer Track-Sektor -> Adr. f. RAM-Disk ist aufwendiger!+der RAM-Disk gehalten werden sollen. Auch wird weniger Platz für den Allocation Vektor ALVxx benötigt. Aber die Umrechnung logischer Track und Sektor -> Adr. f. RAM-Disk ist aufwendiger!
  
 <code> <code>
-      ;DISKDEF 1,1,16,,1024,252,64,0,3+      ;DISKDEF 1,1,16,,1024,125,64,0,3
 dpb01: dw 16 ;SPT sectors per track dpb01: dw 16 ;SPT sectors per track
  db 3 ;BSF block shift factor  db 3 ;BSF block shift factor
  db 7 ;BLM block mask  db 7 ;BLM block mask
  db 0 ;EXM null mask  db 0 ;EXM null mask
- dw 251 ;DSM disk size-1+ dw 124 ;DSM disk size-1
  dw 63 ;DRM directory max  dw 63 ;DRM directory max
  db C0H ;AL0 alloc 0  db C0H ;AL0 alloc 0
Zeile 149: Zeile 149:
  dw 3 ;OFS track offset  dw 3 ;OFS track offset
 ; ;
-alv01: ds 0020h             ;allocation vector+alv01: ds 0010h             ;allocation vector
 csv01: ds 0000h             ;check vector csv01: ds 0000h             ;check vector
 </code> </code>
Zeile 181: Zeile 181:
 </code> </code>
  
 +===== Beispiel 3 =====
  
 +Ein Floppy-Laufwerk: 800K, 2 Seiten, 1K phys. Sektorgröße, 5 phys. Sektoren pro Spur und Seite
 +
 +log. Sektoren pro Spur 1..40\\
 +Blockgröße BLS = 2048\\
 +Diskgröße = 800K/BLS = 400\\
 +192 Directory-Einträge\\
 +keine Systemspuren
 +
 +<code>
 + ;DISKDEF 0,1,40,,2048,400,192,192,
 +dpba: dw 40 ;SPT sectors per track
 + db 4 ;BSF block shift factor
 + db 15 ;BLM block mask
 + db 0 ;EXM null mask
 + dw 399 ;DSM disk size-1
 + dw 191 ;DRM directory max
 + db 0E0H ;AL0 alloc 0
 + db 0 ;Al1 alloc 1
 + dw 48 ;CKS check size
 + dw 0 ;OFS track offset
 +alva: ds 0032h   
 +csva: ds 0030h   
 +
 +</code>
 +
 +CP/M zählt die logischen Recordnummern pro Spur von 0..39. SECTRAN übersetzt diese Recordnummern in 1..40 (CP/A-Umrechnung) und übergibt diese berechnete Recordnummer mit SETSEC ans BIOS.
 +
 +CP/M ermittelt anhand DSM, ob 16Bit- oder 8-Bit-Blocknummern genutzt werden: DSM > 255 -> 16Bit-Blocknummern.
 +
 +Die max. Spurnummer berechnet sich als DSM*BLS/SPT/128-OFS.
 +CP/M arbeitet aber intern nicht mit einer maximalen Spurnummer, sondern testet auf Überschreiten von DSM.
 +
 +Der DPB wird vom CP/M wie folgt angezeigt:
 +<code>
 +A>stat dsk:
 +    A: Drive Characteristics
 + 6400: 128 Byte Record Capacity
 +  800: Kilobyte Drive  Capacity
 +  192: 32  Byte Directory Entries
 +  192: Checked  Directory Entries
 +  128: Records/ Extent
 +   16: Records/ Block
 +   40: Sectors/ Track
 +    0: Reserved Tracks
 +</code>
 +
 +POWER gibt ein paar mehr Informationen aus:
 +
 +<code>
 +        POWER 3.03 on CP/M 2.22 1/2
 +A=disk
 +disk capacity:    800K
 +tracks:           160    0 system
 +sectors/track:     40   40 last
 +sectors/system:       48 dir
 +dir entries:      192    6K
 +sectors/group:     16    2K 18FH groups
 +kbytes/extent:     16K
 +</code>
 +
 +Bislang wurde noch nicht darauf eingegangen, dass eine phys. Diskette 2 Seiten hat. Die Adressierung von Diskettenseite/Spur/phys.Sektor incl. Blocking/Deblocking ist Aufgabe des BIOS.
  • cpm/write_a_bios/teil_2.txt
  • Zuletzt geändert: 2021/09/28 08:23
  • von volkerp