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
Nächste ÜberarbeitungBeide Seiten der Revision
cpm:write_a_bios:teil_1 [2018/02/01 06:48] – [Der Disk Parameter Block] volkerpcpm:write_a_bios:teil_1 [2021/09/20 09:30] – [Tabelle] volkerp
Zeile 278: Zeile 278:
 übergebene Sektornummer ins Registerpaar HL zu kopieren. übergebene Sektornummer ins Registerpaar HL zu kopieren.
  
-:!: im CP/A wird einfach der übergebene Wert genommen und um 1 erhöht (die Sektoren +Die logische Sektornummer in CP/M reicht von 0 bis max. 65535, die physikalischen Sektornummern auf Disketten-Laufwerken beginnen in der Regel mit 1.  
 + 
 +:!: im CP/A wird daher einfach der übergebene Wert genommen und um 1 erhöht (die phys. Sektoren 
 zählen in CP/A bzw. auf Diskette ab 1). Nutzt man eine allgemeine SECTRAN- zählen in CP/A bzw. auf Diskette ab 1). Nutzt man eine allgemeine SECTRAN-
-Routine für alle Laufwerke, muss dies bei den phys. Laufwerkstreibern f. Read und Write beachtet werden.+Routine für alle Laufwerke, muss dies bei den phys. Laufwerkstreibern f. Read und Write beachtet werden, insbesondere bei nachladbaren Treibern wie z.B. für eine RAM-Disk.
  
 <code> <code>
Zeile 453: Zeile 455:
  
  
-Ganz einfache Routinen:+Ganz einfache Routinen (konkrete Beispiele folgen im 2. Teil):
 <code> <code>
 ; ;
Zeile 551: Zeile 553:
 :!: CP/A nutzt die erste Variante. :!: CP/A nutzt die erste Variante.
  
-Unabhängig von der physischen Sektorlänge gibt es im CP/M noch die **Blockgröße**.+Unabhängig von der physischen Sektorlänge gibt es im CP/M noch die **Blockgröße** (engl. block size, BLS).
 Das BDOS teilt jede Diskette in Blöcke (engl. Blocks) auf, um damit den  Das BDOS teilt jede Diskette in Blöcke (engl. Blocks) auf, um damit den 
 Verwaltungs- und Speicheraufwand für die Belegungstabelle zu verkleinern. Verwaltungs- und Speicheraufwand für die Belegungstabelle zu verkleinern.
Zeile 594: Zeile 596:
 **EXM** := (block size / 2048) - 1 bei 16 bit-Blocknummern ( DSM > 255)\\ **EXM** := (block size / 2048) - 1 bei 16 bit-Blocknummern ( DSM > 255)\\
  
-^ block size  BSH  BLM  ^ EXM (8)  EXM (16)  +^ block size    ^  BSH ^  BLM  EXM (8)  EXM (16) ^ 
-^ :!: 512 Byte    |    2 |    3 |        0 |         - | +^ :!: 512 Byte  |    2 |    3 |        0 |         - | 
-^ 1 KByte     |    3 |    7 |        0 |         - | +^ 1 KByte       |    3 |    7 |        0 |         - | 
-^ 2 KByte     |    4 |   15 |        1 |         0 | +^ 2 KByte       |    4 |   15 |        1 |         0 | 
-^ 4 KByte     |    5 |   31 |        3 |         1 | +^ 4 KByte       |    5 |   31 |        3 |         1 | 
-^ 8 KByte     |    6 |   63 |        7 |         3 | +^ 8 KByte       |    6 |   63 |        7 |         3 | 
-^ 16 KByte    |    7 |  127 |       15 |         7 |+^ 16 KByte      |    7 |  127 |       15 |         7 |
  
 :!: 512 Byte funktionieren in CP/A und CP/M 2.2, sind aber nicht dokumentiert. Für eine kleine RAM-Disk reicht es. Die cpmtools kommen damit nicht klar! :!: 512 Byte funktionieren in CP/A und CP/M 2.2, sind aber nicht dokumentiert. Für eine kleine RAM-Disk reicht es. Die cpmtools kommen damit nicht klar!
Zeile 635: Zeile 637:
 Damit wird nicht auf Diskettenwechsel geprüft. Damit wird nicht auf Diskettenwechsel geprüft.
  
-Im DPH (s.o.) wird für den Prüfsummenvektor Speicherplatz definiert (CHKxx). +Im DPH (s.o.) wird für den Prüfsummenvektor Speicherplatz definiert (**CHK**xx). 
 Dieser muss CKS Byte groß sein: Dieser muss CKS Byte groß sein:
  
 CHK00: DS xx ;check vector 0 = CKS Byte CHK00: DS xx ;check vector 0 = CKS Byte
  
-Der Allocation Vektor (ALV) bildet die Belegungstabelle (besser: +Der Allocation Vektor (**ALV**) bildet die Belegungstabelle (besser: 
 Belegungsvektor) der Diskette. Für jeden Block der Diskette ist im ALV ein Bit  Belegungsvektor) der Diskette. Für jeden Block der Diskette ist im ALV ein Bit 
 vorhanden, das entsprechend auf 0 (Block frei) oder 1 (Block belegt) gesetzt  vorhanden, das entsprechend auf 0 (Block frei) oder 1 (Block belegt) gesetzt 
Zeile 647: Zeile 649:
 (erstes Byte des ALV zuerst). Für ALLxx muss man deshalb (DSM+7)/8 Byte bereitstellen (DSM/8 aufgerundet): (erstes Byte des ALV zuerst). Für ALLxx muss man deshalb (DSM+7)/8 Byte bereitstellen (DSM/8 aufgerundet):
  
-**ALL00**: DS xx ;allocation vector 0 = (DSM+7)/8 Byte+ALL00: DS xx ;allocation vector 0 = (DSM+7)/8 Byte
  
 Achtung: Bei automatischer Formaterkennung müssen die Speicherplätze CHKxx und  Achtung: Bei automatischer Formaterkennung müssen die Speicherplätze CHKxx und 
Zeile 680: Zeile 682:
  
 die Berechnung des DPB und der Größe der Speicherbereiche kann durch die Makro-Bibliothek diskdef.lib erfolgen. die Berechnung des DPB und der Größe der Speicherbereiche kann durch die Makro-Bibliothek diskdef.lib erfolgen.
 +
 +-> http://www.gaby.de/cpm/manuals/archive/cpm22htm/ch6.htm#Section_6.11
  
 <code> <code>
Zeile 689: Zeile 693:
 </code> </code>
  
-Dieses Beispiel erzeugt genau obige Daten für Beispiel 1.+Dieses Beispiel erzeugt beim Assemblieren mit MAC genau obige Daten für Beispiel 1.
  
 :!: Die originale diskdef.lib funktioniert nur mit dem MAC/RMAC-Assembler. Für den M80 gibt es eine angepasste Version BUGS fixed 07/07/82 JDW Software {{ :cpm:write_a_bios:diskdef_jdw.zip |}}. :!: Die originale diskdef.lib funktioniert nur mit dem MAC/RMAC-Assembler. Für den M80 gibt es eine angepasste Version BUGS fixed 07/07/82 JDW Software {{ :cpm:write_a_bios:diskdef_jdw.zip |}}.
  • cpm/write_a_bios/teil_1.txt
  • Zuletzt geändert: 2024/04/12 12:34
  • von volkerp