tiskoviny/mikrobaze/cpm3

Seriál o CP/M - BetaDisku

Postavte si s námi diskový řadič (3)

Minule jsme si povídali o TR-Dosu 5.xx a jeho využití v Basicu. Dnes Vám nabízím novou věc - využití TR-DOSu ve strojovém kódu. Tímto způsoben se možnosti Betadisku zmnohonásobí.

Pokud je mi známo, nebyl dosud publikován přehled služeb DOSu. Původní výrobce dokonce ve svém návodu pečlivé zamlžuje, že vůbec tyto služby existují. Podle originálního návodu firmy Technology Research se dá volat DOS ve strojovém kódu takto:

CHADD EQU 23645 ;Basicová syst.proměnná
  ORG xxxxx ;Uložení tohoto kódu
  LD HL,(CHADD) ;Dočasné uložení adresy
  LD (TEMP),HL ;z CHADD
  LD HL,SAVE ;Adresa pro zápis
  LD (CHADD),HL ;do CHADD
  CALL 15619 ;Volání DOSu
  LD HL,(TEMP) ;Zrestaurování obsahu CHADD
  LD (CHADD),HL ;na původní hodnotu.
  RET    
       
TEMP DEFS 2 ;Místo pro dočasné uložení.
       
SAVE DEFB 234 ;REM
  DEFB 58 ;:
  DEFB 248 ;SAVE
  DEFB 34 ;"
  DEFB "nazev" ;název programu
  DEFB 34 ;"
  DEFB 13 ;ENTER

To sice v zásadě funguje, ale problémy vzniknou při pokusu zadat např. číslo řádku pro autostart, nabo adreu pro CODE.

Tento způsob přístupu ve strojovém kódu je mírně řečeno nepraktický. Při zkoumání DOSu jsem včav zjistil, že jsou zde k dispozici přímo služby, jak tomu bývá zvykem u jiných systémů. Zde je jejich úplný seznam, doplněný adresami, na kterých ve verzi 5.03 záčíná vlastní rutina (není to adresa pro volání služby!):

Číslo službyAdresa v ROMPopis funkce
03D98hRESTORE - hlava na stopu 0
výstup: BC kód chyby
13DCBhSELECT DRIVE - zvolení mechaniky s níž se bude pracovat
vstup : A číslo mechaniky
výstup : BC kód chyby
23E63hSEEK - posune hlavu na určenou stopu
vstup: A číslo stopy
výstup: BC kód chyby
33F02hSTORE SEKTOR NUMBER - uloží číslo sektoru
vstup: A číslo sektoru
výstup: na 5CFFh číslo sektoru, BC kód chyby
43F06hSTORE BUFFER ADDRESS - uloží adresu bufferu
vstup: HL adresa bufferu
výstup: na 5D00h adresa bufferu, BC kód chyby
51E3DhREAD SECTOR - čtení sektoru z diskety
vstup: HL adresa bufferu, D číslo stopy, E číslo sektoru, B počet sektorů
výstup: obsah sektorů na adrese HL, BC kód chyby
61E4DhWRITE SECTOR - zápis sektoru na disketu
vstup: HL adresa bufferu, D číslo stopy, E číslo sektoru, B počet sektorů, data v bufferu
výstup: sektory na disketě, BC kód chyby
728D8hCAT - výpis katalogu diskety (adresáře)
vstup: A kanál (standardně 2)
výstup: katalog disku v zadaném kanálu (tedy třeba na obrazovce), BC kód chyby
8165ChREAD HEADER - načtení zvolené hlavičky z adresáře
vstup: A pořadí hlavičky v adresáři
výstup: od 5CDDh hlavička, BC kód chyby
91664hWRITE HEADER - zapsání zvolené hlavičky do adresáře
vstup: A pořadí hlavičky v adresáři, od 5CDDh hlavička
výstup: BC kód chyby
101CF0hHEADER INDEX - vrátí pořadové číslo hlavičky v adresáři
vstup: od 5CDDh hlavička
výstup: na 5D0Fh číslo hlavičky, jinak FFh, nebo v C číslo hlavičky, jinak 0 (nález Z, jinak NZ)
1128FBhSAVE BYTES - uloží binární soubor na disketu
vstup: od 5CDDh hlavička (bez umístění na disketě), HL začátek bloku, DE délka bloku
výstup: BC kód chyby
1228F2hSAVE BASIC - uloží basicový program na disketu
vstup: od 5CDDh hlavička, na 5CD1h buď 0, nebo řádek autostartu
výstup: BC kód chyby

(Zdroj: Mikrobaze 07/1989, str.20)

 Předchozí část  Pokračováni příště

Stránka byla už zobrazena: 476 ×

Aktualizováno: 6. 4. 2018, 18:05



     psp-ikona.gif, 2 kB    Text to HTML converter and formatter  builder_ikonka.gif, 3 kB
           
  Best Old Games      kabelmanie.gif, 2 kB  root_ico.gif, 2 kB  český diskmag pro počítače ZX Spectrum a kompatibilní
synapse.gif, 4 kB   TuningPC.cz - Vše pro tuning a casemodding vašeho PC        pspad88x31.gif  delphix.gif, 1 kB
sgatlantis_88x31_3.jpg, 4 kB  atlan.gif, 22 kB  arkon.jpg, 12 kB  ico_abeceda.gif, 888B  blog.idnes.cz   
           
       
 
  torry_logo.gif, 4 kB  

Stránka načtena za 0.00167 sekund.