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žby | Adresa v ROM | Popis funkce |
0 | 3D98h | RESTORE - hlava na stopu 0 |
výstup: BC kód chyby | ||
1 | 3DCBh | SELECT DRIVE - zvolení mechaniky s níž se bude pracovat |
vstup : A číslo mechaniky | ||
výstup : BC kód chyby | ||
2 | 3E63h | SEEK - posune hlavu na určenou stopu |
vstup: A číslo stopy | ||
výstup: BC kód chyby | ||
3 | 3F02h | STORE SEKTOR NUMBER - uloží číslo sektoru |
vstup: A číslo sektoru | ||
výstup: na 5CFFh číslo sektoru, BC kód chyby | ||
4 | 3F06h | STORE BUFFER ADDRESS - uloží adresu bufferu |
vstup: HL adresa bufferu | ||
výstup: na 5D00h adresa bufferu, BC kód chyby | ||
5 | 1E3Dh | READ 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 | ||
6 | 1E4Dh | WRITE 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 | ||
7 | 28D8h | CAT - 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 | ||
8 | 165Ch | READ 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 | ||
9 | 1664h | WRITE 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 | ||
10 | 1CF0h | HEADER 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) | ||
11 | 28FBh | SAVE 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 | ||
12 | 28F2h | SAVE 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
Stránka načtena za 0.00167 sekund.