Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
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] volkerp | cpm: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: | ||
+ | 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! | ||
+ | |||
+ | < | ||
+ | ; | ||
+ | ; Uebersetzung Sektornummer in CP/A | ||
+ | ; | ||
+ | sectran: | ||
+ | ld l, c | ||
+ | inc hl ; | ||
+ | ret | ||
+ | </ | ||
===== Beispiel 2 ===== | ===== Beispiel 2 ===== | ||
Zeile 51: | Zeile 65: | ||
d.h. 2 Records/ | d.h. 2 Records/ | ||
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 |
- | 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: | ||
< | < | ||
;DISKDEF 0, | ;DISKDEF 0, | ||
- | dpb00: | + | dpb00: |
- | db 4 ; | + | db 4 ;BSF block shift factor |
- | db 15 ; | + | db 15 ;BLM block mask |
- | db 0 ;extnt mask | + | db 0 ;EXM null mask |
- | dw 1011 ; | + | dw 1011 ;DSM disk size-1 |
- | dw 127 ; | + | dw 127 ;DRM directory max |
- | db C0h ;alloc0 | + | db C0h ;AL0 alloc 0 |
- | db 0 ;alloc1 | + | db 0 ;Al1 alloc 1 |
- | dw 0 ; | + | dw 0 ;CKS check size |
- | dw 22 ; | + | dw 22 ;OFS track offset |
; | ; | ||
- | alv00: | + | alv00: |
- | csv00: | + | csv00: |
</ | </ | ||
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 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! | ||
< | < | ||
;DISKDEF 1, | ;DISKDEF 1, | ||
- | dpb01: | + | dpb01: |
- | db 3 ; | + | db 3 ;BSF block shift factor |
- | db 7 ; | + | db 7 ;BLM block mask |
- | db 0 ;extnt mask | + | db 0 ;EXM null mask |
- | dw 251 ; | + | dw 251 ;DSM disk size-1 |
- | dw 63 ; | + | dw 63 ;DRM directory max |
- | db C0H ;alloc0 | + | db C0H ;AL0 alloc 0 |
- | db 0 ;alloc1 | + | db 0 ;Al1 alloc 1 |
- | dw 0 ; | + | dw 0 ;CKS check size |
- | dw 3 ; | + | dw 3 ;OFS track offset |
- | alv01: | + | ; |
- | csv01: | + | alv01: |
+ | csv01: | ||
</ | </ | ||