Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen angezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
cpm:write_a_bios:teil_2 [2021/09/28 08:23] volkerpcpm:write_a_bios:teil_2 [2025/04/19 15:36] (aktuell) volkerp
Zeile 3: Zeile 3:
 weiter geht es mit dem **DPB** weiter geht es mit dem **DPB**
  
-das folgende Beispiel stammt aus einer [[cpm:cpa|]]-Implementation.+Das BIOS erhält die Information, wo konkret auf die Datenspeicher zugriffen werden soll, via BIOS-Funktion  
 +  * SETDSK (Laufwerk, 0..15),  
 +  * SETTRK (Track, Spur 0...x, berechnet aus Blocknummer + Systempuren),  
 +  * SECTRAN (Transformation der aktuellen log. Record-Nummer 0..BSM, Sektorversatz, skewing)  
 +  * und SETSEC (Sector, transformierte Record-Nummer). 
 + 
 +Das BDOS ruft diese genannten BIOS-Funktionen immer vor Aufruf von READ oder WRITE in dieser Reihenfolge auf. Ein BIOS speichert daher die Werte für Laufwerk, Spur, Sektor zwischen und greift bei Lese- und Schreiboperationen darauf zu. Pro Format/Laufwerkstyp gibt es dazu üblicherweise eine Funktion zur Adressberechnung, die aus logischer Spurnummer und transformierter Record-Nummer die physisch anzusprechenden Werte ermittelt. Bei Disketten sind das Seite, Spur, phys. Sektor, Pos. innerhalb des phys. Sektors. 
 + 
 +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.  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!+Die Zählung ab 1 muss bei den direkten Zugriffen (Adressberechnung, Read, Write) beachtet werden!
  
 <code> <code>
Zeile 29: Zeile 37:
   - Ausgabe A17..A16 auf Port "Bank",    - Ausgabe A17..A16 auf Port "Bank", 
   - Ausgabe A15..A8 auf Port "HiAdr",    - Ausgabe A15..A8 auf Port "HiAdr", 
-  - Einblenden in den Hauptspeicher (auf Adresse "Window" bis "Window"+255, +  - Einblenden von 256 Byte in den Hauptspeicher (auf Adresse "Window" bis "Window"+255, 
   - Zugriff auf "Window"+A7..A0   - Zugriff auf "Window"+A7..A0
  
Zeile 242: Zeile 250:
 CP/M ermittelt anhand DSM, ob 16Bit- oder 8-Bit-Blocknummern genutzt werden: DSM > 255 -> 16Bit-Blocknummern. 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.+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. CP/M arbeitet aber intern nicht mit einer maximalen Spurnummer, sondern testet auf Überschreiten von DSM.
  
Zeile 278: Zeile 286:
 Blocking/Deblocking ist Aufgabe des BIOS. Blocking/Deblocking ist Aufgabe des BIOS.
  
 +TODO
  • cpm/write_a_bios/teil_2.txt
  • Zuletzt geändert: 2025/04/19 15:36
  • von volkerp