Unterschiede
Hier werden die Unterschiede zwischen zwei Versionen angezeigt.
| Beide Seiten der vorigen Revision Vorhergehende Überarbeitung | |||
| cpm:write_a_bios:teil_2 [2021/09/28 08:23] – volkerp | cpm: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: | + | Das BIOS erhält die Information, |
| + | * SETDSK (Laufwerk, 0..15), | ||
| + | * SETTRK (Track, Spur 0...x, berechnet aus Blocknummer + Systempuren), | ||
| + | * SECTRAN (Transformation der aktuellen log. Record-Nummer 0..BSM, Sektorversatz, | ||
| + | * 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/ | ||
| + | |||
| + | Das folgende Beispiel stammt aus einer [[cpm: | ||
| 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 |
| < | < | ||
| Zeile 29: | Zeile 37: | ||
| - Ausgabe A17..A16 auf Port " | - Ausgabe A17..A16 auf Port " | ||
| - Ausgabe A15..A8 auf Port " | - Ausgabe A15..A8 auf Port " | ||
| - | - Einblenden in den Hauptspeicher (auf Adresse " | + | - Einblenden |
| - Zugriff auf " | - Zugriff auf " | ||
| 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/ | + | Die max. Spurnummer berechnet sich als DSM*BLS/ |
| 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/ | Blocking/ | ||
| + | TODO | ||