Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste ÜberarbeitungBeide Seiten der Revision
cpm:write_a_bios:teil_2 [2012/09/29 17:22] – [Variante 1] volkerpcpm:write_a_bios:teil_2 [2018/02/01 06:57] – [Variante 2] volkerp
Zeile 2: Zeile 2:
  
 weiter geht es mit dem **DPB** weiter geht es mit dem **DPB**
 +
 +das folgende Beispiel stammt aus einer [[cpm:cpa|]]-Implementation.
 +Bei CP/A erfolgt die Sektorzählung ab 1, deshalb steht in sectran ein inc hl. 
 +Die Zählung ab 1 muss bei den direkten Zugriffen beachtet werden!
 +
 +<code>
 +;-----------------------------------------------------------------------------
 +; Uebersetzung Sektornummer in CP/A
 +;-----------------------------------------------------------------------------
 +sectran: ld h, b
 + ld l, c
 + inc hl ;Sektoren zaehlen in CP/A ab 1
 + ret
 +</code>
  
 ===== Beispiel 2 ===== ===== Beispiel 2 =====
Zeile 51: Zeile 65:
 d.h. 2 Records/track\\ d.h. 2 Records/track\\
 wir brauchen damit 1600h/256 = 22 Tracks f. Systemspur\\ wir brauchen damit 1600h/256 = 22 Tracks f. Systemspur\\
-insg. 1024 tracks -> DSM = 1023-22\\ +insg. 1024 tracks -> DSM = 1023-22 = 1011\\ 
-wir wählen die kleinstmögliche Blockgröße 2k (1k gehen nicht wg. EXM, da wir mehr als 256 Spuren haben)\\+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 59: Zeile 73:
 <code> <code>
  ;DISKDEF 0,1,2,,2048,1012,128,0,22  ;DISKDEF 0,1,2,,2048,1012,128,0,22
-dpb00: dw 2 ;sec per track +dpb00: dw 2 ;SPT sectors per track 
- db 4 ;block shift + db 4 ;BSF block shift factor 
- db 15 ;block mask + db 15 ;BLM block mask 
- db 0 ;extnt mask + db 0 ;EXM null mask 
- dw 1011 ;disk size-1 + dw 1011 ;DSM disk size-1 
- dw 127 ;directory max + dw 127 ;DRM directory max 
- db C0h ;alloc0 + db C0h ;AL0 alloc 0 
- db 0 ;alloc1 + db 0 ;Al1 alloc 1 
- dw 0 ;check size + dw 0 ;CKS check size 
- dw 22 ;offset+ dw 22 ;OFS track offset
 ; ;
-alv00: ds 007Fh +alv00: ds 007Fh   ;allocation vector 
-csv00: ds 0000+csv00: ds 0000         ;check vector
 </code> </code>
  
Zeile 119: Zeile 133:
 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 wg. 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-Sektor -> Adr. f. RAM-Disk ist aufwendiger!
  
 <code> <code>
       ;DISKDEF 1,1,16,,1024,252,64,0,3       ;DISKDEF 1,1,16,,1024,252,64,0,3
-dpb01: dw 16 ;sec per track +dpb01: dw 16 ;SPT sectors per track 
- db 3 ;block shift + db 3 ;BSF block shift factor 
- db 7 ;block mask + db 7 ;BLM block mask 
- db 0 ;extnt mask + db 0 ;EXM null mask 
- dw 251 ;disk size-1 + dw 251 ;DSM disk size-1 
- dw 63 ;directory max + dw 63 ;DRM directory max 
- db C0H ;alloc0 + db C0H ;AL0 alloc 0 
- db 0 ;alloc1 + db 0 ;Al1 alloc 1 
- dw 0 ;check size + dw 0 ;CKS check size 
- dw 3 ;offset + dw 3 ;OFS track offset 
-alv01: ds 0020h +; 
-csv01: ds 0000h+alv01: ds 0020h             ;allocation vector 
 +csv01: ds 0000h             ;check vector
 </code> </code>
  
  • cpm/write_a_bios/teil_2.txt
  • Zuletzt geändert: 2021/09/28 08:23
  • von volkerp