EXDOS Műszaki Leírás
ZozoSoft
Tartalom
Az EXDOS a nevéhez méltóan (Enterprise eXpandable DOS) ugyanolyan kitűnően bővíthető, rugalmas rendszer mint az EXOS, amelyet magyarul is részletesen megismerhettünk az EXOS 2.1 változat műszaki leírás című könyvből. Sajnos az EXDOS-ról nem jelent meg hasonló részletességű dokumentáció magyarul, ráadásul az eredeti angol dokumentációk se forogtak közkézen, mint az angol EXOS leírás, amely fénymásolva terjedt a klubokban. Sajnálatos módon ezek az angol dokumentációk az internet korának ellenére még mindig nem kerültek elő. Ha netán valaki rendelkezik a felsorolt dokumentációkkal, kérjük jelentkezzen!
Ezek hiányában megpróbáljuk újraalkotni az EXDOS rendszer részletes leírását, összefoglalva, folyamatosan kiegészítve a fel lelhető információkat. Az alapot a néhány elérhető angol dokumentáció, valamint az HSOFT&Zozosoft által az Enterpressben megjelentett cikksorozat adja, amely jelentős részben a VTDOS leírásán alapult (mivel a TVC operációs rendszerét is az Intelligent Software Ltd. készítette, így a VTDOS igen közeli rokonságot mutat az EXDOS-al), kiegészítve gyakorlati úton szerzett tapasztalatokkal. További hiányzó részletek felderítéséhez pedig Zozosoft belevágott az EXDOS ROM visszafejtésébe, ily módon sikerül egyre újabb és újabb információkat felderíteni. (Ha az eredeti dokumentációk rendelkezésünkre álltak volna, akkor 10-15 évvel korábban is megvalósulhatott volna a merevlemez illesztés, mint ahogy később kiderült, a németeknek már 1987-ben volt ilyen rendszerűk, lásd HDOS)
A rendszer megértéséhez nagyon fontos különbséget tenni az EXDOS és ISDOS között.
Az EXDOS az lemezes bővítés az EXOS operációs rendszer számára, a lemezvezérlő kártyán lévő ROM-ban található, és automatikusan a rendszerhez csatolódik, amikor bekapcsoljuk az Enterprise-t. Ez biztosítja az EXOS számára a lemezes perifériakezelőt, és számos bővítő parancsot amelyek elérhetőek bármely felhasználói programból a rendszerbővítők letapogatása EXOS hívással (Pl. kettősponttal kiadott parancsok az IS-BASIC-ből).
Az ISDOS egy EXOS felhasználói program, amely betöltődhet automatikusan az EXDOS indulásával, vagy később a felhasználó által kiadott paranccsal. Amikor betöltődött az ISDOS veszi át a gép vezérlését, ahogyan pl az ISBASIC is teszi. Az MS-DOS-hoz hasonló parancssoros környezetet* biztosít, amelyből parancsokat adhatunk ki az ISDOS-nak, vagy tranziens programokat tölthetünk be, amelyek futása után az ISDOS-hoz térünk vissza.
(*megjegyzés: az MSDOS-hoz képest sokkal kényelmesebben használható teljes képernyős felület áll rendelkezésünk, hála az EXOS beépített EDITOR eszközének, amely jóval fejlettebb mint az MSDOS CON eszköze.)
Az EXDOS központi része a Filing System Handler (fájlkezelő rendszer), amely biztosítja az összes szükséges funkciót a fájlok eléréséhez és kezeléséhez. A felhasználói programok általában nem közvetlenül a FISH-el lépnek kapcsolatba, hanem vagy a DISK perifériával, vagy az EXDOS CLI-vel (Command Line Interpreter, parancssor értelmező).
A DISK periféria egy EXOS perifériakezelő, amit az EXDOS automatikusan csatol a rendszerhez induláskor. Ugyanúgy használható mint a többi EXOS periféria, a felhasználó csatornákat nyithat, zárhat a lemezen lévő fájlokhoz, adatokat olvashat vagy írhat beléjük.
Az EXDOS CLI egy EXOS rendszerbővítő, amely az EXOS parancsként kiadott utasítások feldolgozását végzi, így biztosítva olyan funkciókat, mint pl a fájlok átnevezése vagy törlése, könyvtár kilistázása, stb.
Amikor az EXDOS a lemezhez akar hozzáférni, ezt mindig egy egységkezelőn (unit handler) keresztül teszi. Az EXDOS ROM beépített egységkezelőt tartalmaz a kártyára köthető négy floppy meghajtóhoz, ennek a neve UNITH. További beépített egységkezelő a RAMUNIT amely a RAMDISK kezelését biztosítja. Lehetséges további egységkezelők csatlakoztatása, amellyel az EXDOS számára elérhetővé tehető bármely újabb lemezes hardver.A UNITH nem kezeli közvetlenül a lemezvezérlő hardvert, hanem a DISKIO-n keresztül fordul hozzá, amely biztosítja a legalacsonyabb szintű vezérlő rutinokat. Ezek az alacsony szintű rutinok elérhetőek a felhasználó számára is, pl. nem szabványos lemezek kezeléséhez, formázásához.
A különböző részek közti kapcsolatot az alábbi ábra szemlélteti. Annak ellenére, hogy az ISDOS nem az EXDOS ROM része, mégis szerepel az ábrán, hogy lássuk az elhelyezkedését. Az ábrán látható felhasználó (USER) lehet egy EXOS felhasználói program, mint pl az IS-BASIC, vagy akár a személy, aki használja ezeket a programokat.
Az ISDOS kódja ROM helyett a lemezen található*, és bekapcsoláskor automatikusan betöltődhet, vagy pedig egy konkrét EXDOS CLI parancsra. Betöltődés után szabványos EXOS környezetet állít be, számos előre definiált csatorna megnyitásával (Pl. video, keyboard, editor), és feldolgozza a felhasználó által begépelt parancsokat.
(*megjegyzés: nem hivatalos továbbfejlesztésként készült olyan ROM változat amely az ISDOS kódját is tartalmazza az EXDOS 1.3 mellett)
Az előbbi ábrán láthattuk az ISDOS és EXDOS legfontosabb kapcsolatait. A felhasználói parancsokat az ISDOS CLI végzi. A parancsok végrehajtása számos különböző módon történhet:
Az ISDOS amikor tranziens programokat tölt be, akkor CP/M és MSXDOS kompatibilis környezetet biztosít számukra a futáshoz. Ezt a feladatot az ISDOS rezidens része végzi, amely a memóriában marad a tranziens program futása alatt is (az ISDOS CLI felülírható a tranziens program által). Ez a rezidens rész fordítja a CP/M hívásokat a FISH részére, és végzi az ISDOS CLI újraindítását (esetleges újratöltését) amikor a tranziens program futása befejeződött. Ide tartozik a kötegelt fájlok feldolgozása is.
A ISDOS által betöltött tranziens programok minden fontos CP/M és MSXDOS hívást használhatnak, és néhány CP/M BIOS hívást is. Ez biztosítja, hogy a CP/M vagy MSXDOS alá írt programok működnek ISDOS alatt. Természetesen az ISDOS programok használhatják az EXOS funkció hívásait is, így kihasználva az Enterprise összes lehetőségeit. A különböző hívásokat bármilyen formában lehet keverni.
Az Enterprise DOS lemezek felépítése
1. A mágneslemez felépítése
A lemez lehet egy-, vagy kétoldalas. A kétoldalas meghajtóval mindkét formátumot tudjuk kezelni. A lemez homlokfelületén a koncentrikus körök - SÁVOK - hordozzák a mágneses információkat. Számuk 40, vagy - duplasűrű forma esetén - 80. A duplasűrű meghajtóval kezelhetünk szimplasűrű lemezt is, de ekkor csak a páros sávokat használjuk. (A sávok számát - korlátozott mértékben - növelhetjük is.) A sávokon 512 byte-os szektorok helyezkednek el. Minden szektor önálló szektor-azonosítóval van ellátva. A sávonkénti szektorszám (512 byte-os szektorokat feltételezve) 8 vagy 9, de 11-ig (ZOZOSOFT újításával 13-ig) lehetséges a számukat bővíteni.
A szektorazonosító felépítése:
byte 0. 0-89 TRACK megadott értékek az általában használtak, 1. 0-1 SIDE 0 és 255 között bármi lehetséges, 2. 1-13 SECTOR másolásvédett lemezeknél 3. 0-3 BYTE/SECTOR (0=128, 1=256, 2=512, 3=1024) 4-5 0-FFFFH CRC
BOOT szektor
A DOS lemezek 0. oldal, 0. sáv, 1. szektorát beolvasva megkapjuk a lemez BOOT szektorát. Az itt található adatok alapján meghatározható a lemez fizikai és logikai felépítése. Az alábbi táblázat lemezekre készült, de a csillaggal jelölt változók RAMDISK esetében is használhatók, a '-'-al jelölteket nem veszi figyelembe az EXDOS, a '!'-lel jelölteknél a megadott értékeken kívül eső érték esetén valamilyen szokásos értékre konvertál, esetleg kijelenti, hogy nem DOS lemez. A '@' jelölésűeket pedig az EPDOS hagyja figyelmen kívül. Az 'X' jelzi azt, hogy az adott értékre nincs ellenőrzés, ilyenkor nekünk kell gondoskodni arról, hogy értelmes adatok legyenek. (Például ne legyen több a BOOT szektorok száma a lemez szektorainak számánál.) A megadott értékek az EXDOS alatt helyesen kezeltek, zárójelben a használt érték. A ^ jellel jelölteket az MSDOS 6.0 sem kezeli, pedig a MICROSOFT találta ki a DOS formátumot.
00-02 | - |
EBH. FEH, 90H IBM ( Ugrás a betöltő kódra) | ||||
03-10 | - |
"EXDOS 1.0" rendszer (formázó software) | ||||
11-12 | * |
! |
^ |
#200 byte / szektor | ||
13 | * |
! |
1-2 szektor / cluster | |||
14-15 | * |
X |
@ |
^ |
1-FFFFH (1) szektor / boot | |
16 | * |
@ |
^ |
1-7 (2) FAT példányok száma | ||
17-18 | * |
X |
1-FFFFH (40H-70H) ROOT_DIR (főkönyvár MAX_FILE) | |||
19-20 | * |
Formától függő szektor / disk | ||||
21 | - |
* |
! |
F8H-FFH FORMA_TYPE | ||
22-23 | * |
X |
1-FFFFH szektor / FAT | |||
24-25 | 8-10-11-13-18-22 szektor / track (EXDOS verziótól függ) | |||||
26-27 | ! |
1-2 SIDE (oldalszám) | ||||
28-29 | * |
X |
@ |
^ |
0-FFFFH (0) fenntartott | |
Innentől csak EXDOS (vagy VT-DOS) lemezeken: | ||||||
30 | - |
^ |
C9H RET, az MSX-DOS BOOT program belépési pontja | |||
31-63 | - |
^ |
0 nullázás | |||
64-69 | * |
^ |
"VOL_ID" azonosító string | |||
70 | * |
^ |
0 UNDEL jelző-byte | |||
71-74 | * |
^ |
X1, X2, X3, X4 32 bites lemezazonosító | |||
75-99 | - |
^ |
0 nullázás | |||
100-511 | - |
^ |
E5H üres terület |
A típus-byte RAMDISK esetében 2AH, lemezeknél F8H-FFH, ahol az alsó 3 bitnek formai jelentése van.
0. bit =1 oldalak száma 2 1. bit =1 sávonként 8 szektor 2. bit =1 szimplasűrű sávkiosztás 3-7. bit =1 beállított
3. bit = 0 - 3.5", HD lemezFFH - DS/SD/8 (320K)
FEH - SS/SD/8 (160K)
FDH - DS/SD/9 (360K)
FCH - SS/SD/9 (180K)
FBH - DS/DD/8 (640K)
FAH - SS/DD/8 (320K)
F9H - DS/DD/9 (720K)
F8H - SS/DD/9 (360K)
F0H - DS/DD/18 (1440K)Az EXDOS leellenőrzi, hogy a típus-byte F8H (F0H)-FFH közé esik-e, de ténylegesen nem ez alapján kezeli a lemezt, hanem a BOOT szektor adatai alapján, ha az érvényes adatokat tartalmaz. Az MS-DOS 1.x verziókkal formázott lemezek nem tartalmaznak még lemez paraméterblokkot a boot szektorban, itt még a FAT elején található típusbájt adta meg a lemez formátumát. Az EXDOS egyedülálló módon képes kezelni az Apricot számítógép lemezeit is, ahol a paraméterek nem a normális helyükön vannak a boot szektorban, hanem eltolva 50h címtől.
A lemez felismerésének pontos menete:
- Disk reset DISKIO hívás, azaz a fej 0. sávra állítása,
- 0. sáv 0. fej 1. szektor, azaz a boot szektor beolvasása:
- Ha nem sikerült, akkor 0. sáv 0. oldalról megpróbál egy szektor azonosítót beolvasni,
- ha ez sikerült, akkor 180-as hiba lesz: Not a DOS disk,
- ha sikertelen volt, akkor 181-es hiba, Unformated disk
(Megjegyzendő, hogy van egy sajnálatos hiba az EXDOS-ban: 1024 bájtos szektorokkal formázott lemez esetén hatalmas fagyás lesz, mert az 512 bájtosra méretezett puffer mögötti memória felül lesz írva az 1024 bájtos boot szektor beolvasásakor. A helyes megoldás az lenne, ha először lenne szektor azonosító olvasás, és abban ellenőrizni, hogy 512 bájtos-e?)- Sikeres boot szektor olvasás esetén ellenőrzi a következő paramétereket (0Bh bájtoktól):
- szektor méret 512 bájt?
- cluster méret 0-nál nagyobb, és 2 hatványa?
- FAT példányok száma 1-7 között van?
- FAT méret 1-12 szektor között van?
- egy sávon max 10 szektor van? (Ez az eredeti érték, ezt azóta többször is módosítottuk.)
- Sikertelen ellenőrzés esetén 50h-tól megismétli az ellenőrzést, azaz Apricot lemezként próbálja értelmezni. Ha így sikerült a felismerés akkor a paramétereket átmásolja a helyükre, vagyis a hívásból visszatérve szabványos boot szektort fog kapni a FISH.
- Ha se a normál se az Apricot módszer nem vezetett eredményre, akkor megpróbálkozik az MS-DOS 1.x lemezekhez való módszerrel:
- beolvassa a 0. sáv 0. oldal 2. szektort, azaz a FAT első szektorát,
- ellenőrzi, hogy az 1. és 2. bájt az FFh, és 0. bájt az F8-FFh, azaz FAT típusbájt-e:
- ha így se sikerült azonosítani, akkor Not a DOS disk,
- ha meg van a típusbájt, akkor az alapján legyárt egy szabvány boot szektort a következő paraméterekkel:
FFH - DS/SD/8 (320K), 1 boot szektor, 2 szektor/cluster, 112 főkönyvtár bejegyzés, 1 FAT szektor, 2 példányFEH - SS/SD/8 (160K), 1 boot szektor, 1 szektor/cluster, 64 főkönyvtár bejegyzés, 1 FAT szektor, 2 példányFDH - DS/SD/9 (360K), 1 boot szektor, 2 szektor/cluster, 112 főkönyvtár bejegyzés, 2 FAT szektor, 2 példányFCH - SS/SD/9 (180K), 1 boot szektor, 1 szektor/cluster, 64 főkönyvtár bejegyzés, 1 FAT szektor, 2 példányFBH - DS/DD/8 (640K), 1 boot szektor, 2 szektor/cluster, 112 főkönyvtár bejegyzés, 2 FAT szektor, 2 példányFAH - SS/DD/8 (320K), 1 boot szektor, 2 szektor/cluster, 112 főkönyvtár bejegyzés, 2 FAT szektor, 2 példányF9H - DS/DD/9 (720K), 1 boot szektor, 2 szektor/cluster, 112 főkönyvtár bejegyzés, 3 FAT szektor, 2 példányF8H - SS/DD/9 (360K), 1 boot szektor, 2 szektor/cluster, 112 főkönyvtár bejegyzés, 2 FAT szektor, 2 példány
- Ha meg van az ellenőrzött boot szektor, akkor következik a lemezkompatibilitás ellenőrzése:
- két oldalas lemez esetén beolvas egy szektor azonosítót a 0. sáv 1. oldalról, és ellenőrzi, hogy tényleg az 1. oldalhoz tartozó azonosítót olvasott be. Ha nem sikerült, akkor 150-es hibakód, Incompatible disk
- elléptet a 8. sávra, és beolvas a 0. oldalról egy szektor azonosítót, majd ellenőrzi, hogy hányadik sávhoz tartozik a beolvasott azonosító:
- 4., azaz SD lemez DD meghajtóban, dupla léptetést bekapcsolja,
- 8., megfelelő beállítás,
- 16., azaz DD lemez SD meghajtóban, Incompatible disk.
Ha több egyforma lemez használunk egymás után, akkor ezt a kompatibilitás ellenőrzést nem végzi újra el. (Ennek az ellenőrzésnek van az a jellegzetes taktak hangja az első lemez beolvasásakor, amit TVC használatakor is fel lehet ismerni, ami nyilván nem véletlen...)
Ha nincs a meghajtóban lemez, vagy nem elérhető a meghajtó akkor természetesen Not ready hiba lesz.
FAT-1 A file-ok raktározására az elemi adatblokkok (CLUSTER), illetve ezeknek a láncolata hivatott. A blokkok könyvelése a FAT-területen történik. A mutatók mindegyike 12 bites szám, melyek sorban helyezkednek el. Pl. az 5. cluster foglaltságát 5*12 bit-től kezdve olvashatjuk. Az értékek jelentése:
000H - szabad cluster
FFFH - file vége
FFEH - nem használható cluster
FF7H - hibás cluster
egyéb - annak a clusternek a száma, ahol a file folytatódik.A rendszer 0-ás és 1-es clustert nem használ, ezért helyükön #Tp, #FF, #FF byte-ok találhatók. (Tp = típus-byte) FAT-2 (vagy az utolsó FAT példány) A FAT-1 minden írási művelet esetén átmásolódik a FAT2 területre. Törlés esetén a cluster-ek felszabadítása csak a FAT-1 területen történik. UNDEL esetén a FAT-2 alapján helyreállítható az eredeti állapot. Ha csak 1 FAT van akkor nincs lehetőség az UNDEL-re. Ha 2-nél több FAT példányt használunk, akkor az utolsó kivételével mind a FAT-1 másolata, és ha a FAT 1 fizikailag megsérül, akkor amíg az EXDOS legalább egy jó példányt talál, addig helyesen (hibajelzés nélkül) kezeli a lemezt.
ROOT DIR A főkönyvtár a file-ok könyvelésére szolgáló, kötött méretű terület. Minden file-hoz 32 byte-os leíró tartozik. Egyes byte-ok jelentése:
00 file név első betűje, E5H ha törölt a file, 0 ha szabad bejegyzés 01-07 file név 08-10 kiterjesztés 11 attribútum 12 törlés után a név első betűje, egyébként 0 13-21 nulla (nem használt) 22-23 idő 24-25 dátum 26-17 kezdő cluster 28-31 méret
attribútum 0. bit = 1 READ ONLY 1. bit = 1 HIDDEN 2. bit = 1 SYSTEM 3. bit = 1 VOLUME 4. bit = 1 DIRECTORY 5. bit = 1 ARCHIVE 6., 7. bit 0 TIME, DATE byte:
File elhelyezési tábla (File Allocation Table, FAT)
A FAT 12 bites bejegyzéseket tartalmaz, a lemez minden alapegységéhez egyet. Az első két bejegyzés a 0. és az 1. alapegységhez tartozik, amelyek nem léteznek, így az első alapegységhez tartozó FAT bejegyzés a FAT 4. byte-ján kezdődik. A FAT első 3 byte-ja a következő :
0. byte : FATID byte, mindig F8h...FFh
1. byte : mindig FFh
2. byte : mindig FFh
A FATID byte a lemezformátum meghatározására szolgál, ha nincs UPB a boot-szektorban, egyébként nem használatos.
Minden alapegységhez tartozó bejegyzés nulla, ha az alapegység szabad, egyébként az alapegység része egy file-nak, és a bejegyzés értéke a file következő alapegységének a számát adja meg. A file utolsó alapegységét a FF8h...FFFh értékek valamelyike jelzi. Ezáltal a file-t alkotó alapegységek láncba fűzötten jelennek meg a FAT-ban.
A FF0h...FF7h értékek a fenntartott alapegységeket jelölik, ha azok nem alkotják egy lánc elemét sem: a FF7h jelzi a hibás alapegységeket, amelyeket nem szabad használni.
Egy lemez a FAT-ot akárhány példányban tartalmazhatja. A másodpéldányokat akkor használják, ha az első lemezhiba miatt olvashatatlanná válik. Rendszerint az összes példány egyforma, de létezik egy kivétel ez alól (a file-visszaállítás érdekében).
Az EXDOS rendszer részletes bemutatása
1. Bevezető
Ahogy korábban írtuk, az EXDOS központi része a FISH, amellyel ugyan általában nincsen közvetlen kapcsolatban a felhasználói program, de az EXDOS CLI és a DISK periféria is a FISH funkcióhívásait használja, ezért elsőként ezt a központi részt részletezzük.
1.1 EXDOS ROM belépési pontok
Az EXDOS ROM egy szabványos EXOS ROM, két további belépési ponttal a FISH és a DISKIO számára. A DISKIO belépési pont lehetőséget biztosít a lemezvezérlő hardver közvetlen használatára az EXDOS kikerülésével. A FISH belépési pont lehetőséget ad valamennyi fájl és lemezkezelő funkció elérésére, pl. az ISDOS számára. Természetesen létezik a normál EXOS belépési pont is, ami szintén számos lehetőséget biztosít, beleértve az inicializálást, és az EXDOS CLI-t. Az EXDOS ROM kezdete a következő:
00h DB "EXOS_ROM"
08h DW 0
0Ah JP SYS_EXT
0Dh JP DISKIO
10h JP FISH
Hidegindítás során az EXOS megtalálja, és beláncolja az EXDOS ROM-ot a rendszerbővítő ROM-ok listájába. Az EXDOS inicializálásának fő lépései:
Az EXOS meghívja az EXDOS ROM-ot 7-es akciókóddal, RAM igény lekérdezésével. Az EXDOS a rendszerszegmensben igényel területet, a belső változók és adat területek számára, beleértve a UNITH, DISKIO, RAMUNIT igényeit. (Szektor pufferek számára viszont nem itt lesz memória foglalva, azokat később periféria beláncolásával, periféria RAM-ként fogja lefoglalni.)
Amíg ez a hívás nem történik meg, addig más akciókódokra nem felel az EXDOS ROM.
Az EXOS 8-as akciókóddal (inicializálás) meghívja az EXDOS ROM-ot. Az EXDOS elsőként alaphelyzetbe állítja a belső változókat (amelyik némelyike egyben az EXDOS által létrehozott EXOS változó is), és adatterületeket. Ezután az EXOS periféria felvétele funkcióval beláncolja a DISK perifériát, és egy speciális ' . ' nevű perifériát, amelynek az a feladata, hogy a szektor pufferek számára igényeljen periféria RAM-ot. Az alapértelmezett periféria a DISK lesz.
A kétnyelvű 1.3-as verzió ezután kérdezi le a 144-es EXOS változó segítségével, hogy egy vagy kétnyelvű-e a gép.
Ezután jelzi egy belső változóban az EXDOS inicializálás megtörténtét. Amíg ez nincs jelezve, addig más akciókódokra nem felel az EXDOS ROM.
Következő lépésként egy speciális* EXOS paranccsal ("EXDOS",0FFH) körbekérdezi a többi EXOS rendszerbővítőt, hogy kíván-e valamelyik bővítő egységet csatlakoztatni az EXDOS rendszerhez. Ha valamelyik ROM válaszol a hívásra, akkor az általa megadott számú meghajtó be lesz láncolva a rendszerbe a belső egységekhez hasonló módon, a további szabad fizikai meghajtószámokat felhasználva.
Ez a körbekérdezés mindaddig tart, ameddig már egyetlen ROM se válaszol a hívásra, tehát az EXDOS bővítő ROM-ok feladata, hogy megjegyezzék válaszoltak-e már a hívásra, és ismételt hívásra már ne válaszoljanak.
Utolsó lépésként egy újabb speciális* EXOS parancsot ad ki az EXDOS: "EXDOS",0FCH, ezzel módot ad arra, hogy az EXDOS bővítő ROM-ok saját hidegindítási inicializálást végezzenek. A válaszoló ROM köteles megőrizni a hívás paramétereit, hogy az a további bővítő ROM-okhoz is eljuthasson.
(*Megjegyzés: ezek a parancsszavak azért ilyenek, hogy csak programban adatként megadva lehessen hívni, a felhasználó billentyűzetről még véletlenül se tudja kiadni)
Végül, az EXOS 1-es akciókóddal (hidegindítás) hívja meg a bővítőket, lehetőséget adva az elindulásra. Az EXDOS ez esetben az EXDOS.INI fájlt keresi, és ha megtalálja, végrehajtja az abban található parancsokat. A parancsok között szerepelhet a "LOAD" is, amely segítségével elindítható egy felhasználói program (pl. az ISDOS). Ha nem indítunk el más programot, akkor a parancsfájl végén az EXDOS visszaadja a vezérlést, lehetőséget adva a többi ROM-nak (pl. az IS-BASIC) a válaszra.
2.1 Inicializálási fájl - "EXDOS.INI"
Az "EXDOS.INI" fájl egy szöveges fájl, amely rendszerbővítő parancsok sorát tartalmazza. Egyszer lesz végrehajtva, amikor az EXOS körbekérdezi a ROM-okat a hidegindítás kódjával. A parancsok lehetnek tetszőleges szövegsorokban, mindegyik körbe lesz kérdezve a bővítő ROM-ok között, némelyiket maga az EXDOS ROM fogja felismerni. Bármely EXDOS CLI parancs (lásd az EXDOS felhasználói kézikönyvet) használható, és természetesen bármely más bővítő által felismert parancsok is használhatóak.
Pl. lehetséges a "RAMDISK" paranccsal létrehozni a RAM disk-et, majd a "COPY" paranccsal fájlokat másolni bele. Ezután folytatódik a ROM körbekérdezés, és pl elindul az IS-BASIC, ha csatlakoztatva van a cartridge. Az "EXDOS.INI"-t lehet használni arra is, hogy bármely más program számára beállítsuk a szükséges környezetet.
Hasznos parancs lehet a "LOAD" is, amivel rendszerbővítőket vagy felhasználói programot (pl. ISDOS) tölthetünk be. A "VAR" parancs segítségével pedig EXOS változókat állíthatunk be.
Amikor megtalálja az "EXDOS.INI" fájlt az EXDOS, a végrehajtás előtt megnyit egy EDITOR csatornát a hozzátartozó VIDEO és KEYBOARD csatornákkal, és ezt állítja be alapértelmezett csatornának, ezzel lehetőséget ad a meghívott parancsprogramoknak az alapértelmezett csatornán történő ki- és bevitelre. A parancsok végrehajtása után ezek a csatornák be lesznek zárva.
2.2 újrainicializálás
Az eddig felsorolt procedúrák csak egyszer, a teljes EXOS hidegindításkor zajlanak le, normális esetben bekapcsoláskor. Ha melegindítás történik valamilyen okból, akkor az EXDOS-t is újrainicializálja az EXOS. Az EXDOS ekkor újra beláncolja az általa létrehozott EXOS perifériákat, ha szükséges. Meghívja a csatlakoztatott egységes kezelőprogramját 1-es akciókóddal (melegindítás), végül pedig az EXDOS bővítő ROM-okat egy újabb speciális paranccsal: "EXDOS",0FBH amelyre a hidegindítási parancshoz hasonló módon kell reagálniuk.
Amikor egy új felhasználói program betöltése közben hiba történik az EXOS szintén 1-es (hidegindítás) kóddal kérdezi körbe a ROM bővítőket, amely egyébként csak bekapcsoláskor jár körbe. Az EXDOS ilyenkor felismeri, hogy újraindítás történik, és nem keresi újra az "EXDOS.INI" fájlt, de automatikusan újratölti az ISDOS-t, ha az ISDOS volt az ami a programot betölteni akarta.
VERIFY Automatikus ellenőrzés írás után (0=be, FFh=ki) DEF_UNIT Default Unit (meghajtó megadásának hiányában használt egység) száma : 1...26 BOOT_DRV Nem használt. STEP_RATE Léptetés az UNITH számára (0=6ms, 1=12ms, 2=20ms, 3=30ms) DSK_CHK 0 esetén engedélyezve a teljes diszk-változás ellenőrzés a már nyitott file-okra AB_ERR ABORT hibát eredményező diszk-hibakód BCH_DIS Ha nem 0, a DOS "elhiszi", hogy a diszk nem változott.
A használt rövidítések:
TRC: transzfercím (IX-regiszter)
MEGH: meghajtó maszk (B-regiszter 0.bit=A, 1.bit=B, 2.bit=C, 3.bit=D)
OLD: oldalszám (SIDE) (0-1) (C-regiszter 0. bitje)
SÁV: sávszám (TRACK) (0-254) (D-regiszter) (a 255 az aktuális sáv)
SZEK: szektorszám (SECTOR) (1-13) (E-regiszter)
SZEKN: szektorok száma (1-13) (L-regiszter)
ST: státus (H-regiszter)
bit 0-1 = fejléptető sebesség,
bit 2 = előkompenzálás engedélyezése,
bit 3 = duplasűrű meghajtó szimplasűrű lemezt kezel,
bit 5 = felírási mód (0=MFM, 1=FM)A hívás általános tudnivalói:
parancsok bit 0 = BA NOT READY (1-6, 8) 1 = B9 VERIFY ERROR (3) 2 = B8 LOST DATA (1-6) 3 = D8 DATA ERROR (1-6) 4 = B7 RECORD NOT FOUND (1-3, 6) 5 = DISK CHANGED (1-7) 6 = B6 WRITE PROTECTED DISK (2, 4) 7 = BD kb. hibás diszkkezelő kódszám (9-255) nincs megadva meghajtó (1-7)
00. Diszk reset
B=MEGH (A következő pozicionálás nem relatívan fog történni), egyszerre több meghajtó is megadható.
Visszatéréskor a C az EXDOS kártya IO port tartományába mutat.01. Szektorok olvasása
B=MEGH
C=OLD
D=SÁV
E=SZEK
H=ST
L=SZEKN L=beolvasott szektorok száma
IX=TRC02. Szektorok írása
B=MEGH
C=OLD
D=SÁV
E=SZEK
H=ST
L=SZEKN L=kiírt szektorok száma
IX=TRC03. Szektorok ellenőrzése
B=MEGH
C=OLD
D=SÁV
E=SZEK
H=ST
L=SZEKN L=ellenőrzött szektorok száma
IX=TRC04. A teljes sáv írása
B=MEGH L=1
C=OLD
D=SÁV
H=ST
IX=TRC05. A teljes sáv beolvasása
B=MEGH L=1
C=OLD
D=SÁV
H=ST
IX=TRC06. A sávon található szektor azonosítók beolvasása
B=MEGH
C=OLD
D=SÁV
H=ST L=beolvasott azonosítók száma
L=azonosítók száma
IX=TRC (L*6 bájt került beolvasásra)07. Hardware lemezcserejel lekérdezése
B=MEGH
Csere esetén a megfelelő hibakód beállítva. Törli az esetleges jelzést, így ismételt lekérdezés már nem jelez cserét, csak akkor ha fizikailag tényleg újabb lemezcsere történt.08. Meghajtó vizsgálat
B=MEGH
H=ST Ha az L=FF akkor a meghajtó duplasűrű
Ha a B=0, akkor eldönti, hogy egy meghajtós-e a rendszer: A=0 ha igen.
A használt rövidítések:
STR: eszköz:\ösvény\fájlnév .kiterjesztés
UV: útvonal (ösvény)
MEGH: meghajtó száma (1 = A, 2 = B, 3 = C, stb, 0 = aktuális)
FMEGH: fizikai meghajtó száma
KFCB: kereső fájl kontrol blokk
MFCB: meghatározott fájl kontrol blokk
TRC: transzfercím (felhasználói puffercím)
SIZE: bájtok száma (fájl vagy blokk méret)
SZEK: logikai szektorszám (kezdő szektorszám)
SZEKN: szektorok száma (mozgatandó szektorok)A hívás általános tudnivalói:
01. Útvonal és KFCB készítés fájlnévből
DE = KFCB C = STR következő karaktere
HL = STR DE = STR folytatása
HL = UV (az STR-ben kialakítva)
IX = KFCB (meghajtó és fájlnév kitöltve)Eredmények :
A = állapotkód
B = visszatérési jelzőbitek
C = záró karakter
DE -> záró karakter
HL = változatlanEz a funkció megkönnyíti a parancssorok elemzését, mivel közvetlenül a FISH-nek átadható útvonalnév-stringet és használatlan FCB-t készít. Tisztán karakterlánc manipulációs funkció, egyáltalán nem fordul a diszk-hez. Fő működése az, hogy kialakít egy érvényes útvonal-stringet abból a karakterláncból, amelyre a HL mutat, úgy, hogy az átadható egy keresési vagy létrehozási FISH funkcióhívásnak.
Ha az utvonalnév-string magában foglal egy file-nevet, akkor azt át lehet másolni a DE által kijelölt FCB-be, amit aztán át lehet adni a FISH-nek mint használatlan FCB-t. A DE által kijelölt FCB-nek érvényes keresési attributumokkal es meghajtószámmal kell rendelkeznie, az FCB további részei kitöltetlenek is lehetnek.
A keresési attributum-byte kötetnév bitje dönti el, hogy "meghajtó/útvonalnév/filenév", vagy "meghajtó/kötetnév" karakterláncot kell-e elemezni.
Ha a kötetnév bit "0" ,akkor a karakterlánc szintaxisa egy opcionális meghajtónév és az ezt követő directory-név sorozat, melynek elemeit "\", "!" vagy " ' " karakterek választják el egymástól. Ha egy elem nem "\" karakterrel van lezárva, akkor azt az utolsó elemzendő egységnek tekinti a FISH. Ezt az utolsó elemet vagy bemásolja az FCB-be, ha a C regiszter "0" volt, vagy belekerül az útvonal-stringbe, ha C regiszter "1" volt. A file-név, ha bemásolódik az FCB-be, végig nagybetűs lesz, szóközökkel kiegeszítve és minden "*" karakter a megfelelő számú "?"-lel kifejtve.
Ha a kötetnév bit "1", akkor a karakterlánc ugyanazt az opcionális meghajtónevet tartalmazza, de utána egy kötetnév következik, amely átmásolódik az FCB-be. A kötetnév bármilyen karaktert tartalmazhat az első "/" karakterig. Minden más file-név végkarakter (a szóköz) is megengedett a kötetnévben, és a kötetnév nem csak nagybetűket tartalmazhat mint a file-név.
A visszaadott útvonalnév-string csak a meghajtónevet foglalja magában.
Ha a karakterlánc meghajtónévvel kezdődik, akkor ez a meghajtószám beíródik az FCB megfelelő byte-jára. Ha nincs meghajtónév a karakterláncban, akkor az FCB-ben levő meghajtószám nem változik, csak ha 0. Ez utóbbi esetben a DEF_UNIT rendszerváltozó értékét veszi fel.
Visszatéréskor a HL regiszterpár tartalma nem változik, s így az érvényes útvonalnév-string kezdőpontjára mutat, amely készen áll arra, hogy a FISH-nek átadják. A string magában foglalja a meghajtót (ha van) és directory elemeket, a korábban leírtak szerint. A string egy null-karakterrel végződik a megfelelő helyen, de ettől eltekintve változatlan marad.
A DE regiszterpár az eredeti karakterláncban az első fel nem dolgozott karakterre fog mutatni, amely lehet a karakterlánc vége is, ha az egész string feldolgozásra került. A HL által kijelölt karakterlánc végére kerülő null-karakter felülírhatja a DE által megcímzett pozíción lévő eredeti karaktert, ezért ezt a C regiszterben külön visszaadja a FISH. Ne tekintsük ezt a karaktert érvényesnek a stringben, de az útvonalnév-string használata után visszaírhatjuk.
A visszatérési jelzőbitek, amelyeket a B regiszterben kapunk vissza, bizonyos, potenciálisan hasznos tényeket közölnek az elemzési műveletről az alábbiak szerint:B 0. bit = 1 ha a meghajtónéven kívül más kielemzett karakterek is vannak
B 1. bit = 1 ha volt specifikált útvonal
B 2. bit = 1 ha van specifikált meghajtónév
B 3. bit = 1 ha az utolsó elem file-név
B 4. bit = 1 ha az utolsó elem kiterjesztés
B 5. bit = 1 ha az utolsó elem többértelmű ('?' vagy '*')
B 6. bit = 1 ha az utolsó elem speciális ('.' vagy '..')
B 7. bit 7 1 ha az utolsó elem '..', csak ha 6. bit is 1
02. Aktuális katalógus megadás
HL = UV HL = UVEz a funkció megváltoztatja az aktuális directory-t az adott meghajtón. Az útvonalnév-string megadja a meghajtót (ha nem, akkor az implicit meghajtót használjuk) és egy al-directory listát. Ha "." vagy ".." elemek találhatók benne akkor ezeket a FISH funkció megfelelően kifejti. Ha az útvonalnév-string "\", "!" vagy " ' " karakterrel kezdődik, akkor a régi aktuális útvonal figyelmen kívül marad, egyébként pedig az új útvonalnév hozzáadódik az aktuális útvonalhoz. Ha az útvonalon bármelyik directory nem létezik, akkor a FISH ".NODIR" hibát jelez, és az aktuális útvonal nem változik.
Az új aktuális directory-string azonos azzal a karakterlánccal, amelyet egy "aktuális directory beolvasása" funkcióhívás adna vissza és az ezen funkció leírásában olvasható megjegyzések ide is vonatkoznak .03. Aktuális katalógus lekérés
B = MEGH HL = UV (a FISH területen)Ez a funkció visszaad egy pointert, amely az aktuális útvonalnév-stringre mutat az adott meghajtón a karakterláncnak sem az elején, sem a végén nincsenek "\" karakterek, és 00h-val végződik. Ha az aktuális directory azonos a kiindulási directory-val, akkor a visszaadott karakterlánc null-string.
04. Első bejegyzés keresése
BC = MFCB BC = MFCB
DE = KFCB DE,IX = KFCB
HL = UV HL = UV (már a FISH területen)Az adott directory-ban olyan belépési pontot keres, amelyben a név meg-egyezik a DE által kijelölt FCB-ben levővel. Az FCB-ben lévő file-név többértelmű is lehet, mely esetben az első egyező nevet tartalmazó belépési pontot találja meg. Ha nem talál egyező nevet, akkor ".NOFIL" hibával tér vissza. A HL-ben kijelölt "teljes útvonal-string" nem érvényes, ha az indulásnál a DE "meghatározott FCB"-re mutat.
Ha a keresési FCB-ben az attributum-byte kötetnév bitje "1", akkor csak a kötetnév belépési pontot adja vissza a FISH-funkció és ezt mindig visszaadja (ha van), tekintet nélkül az FCB-ben lévő útvonalnévre, vagy file-névre. Ha a kötetnév bit "0", akkor a kötetcímke belépési pontot sohasem adja vissza, és másféle egyeneseket figyel. Ebben az esetben a hívónak kell vizsgálnia a "rendszer file", a "rejtett file" és "al-directory" biteket az attributum byte-ban, ha korlátozni akarja a keresést.
Ha a DE meghatározott FCB-re mutat, akkor annak egy meghatározott aldirectory-nak kell lennie (a directory-bejegyzésnél az attributum byte ellenőrzésre kerül), a meghatározott FCB-név mezőjét pedig előzetesen felül kellett írni az ebben az al-directory-ban keresendő új file-névvel.
Ha a FISH funkció talált egy megfelelő directory bejegyzést, akkor egy új meghatározott FCB-t hoz létre a BC által kijelölt címen. Ez egy FEh byte-tal fog kezdődni, amely után következő 7 byte a keresési FCB-ből másolódik át (ebben benne van a keresési attributum byte és a meghajtó), majd a directory bejegyzés 32 byte-ja. Az új FCB utolsó 8 byte-ja nem töltődik ki.
Jegyezzük meg, hogy az új FCB 6. byte-ja (az attributum byte) a keresési FCB megfelelő byte-jával lesz azonos, nem pedig a meghatározott directory- bejegyzés attributumával, amely a file-név utáni byte-on lesz.05. Következő bejegyzés keresés
BC = MFCB BC = MFCB (kitöltve)
DE = KFCB DE, IX = KFCB
HL = UV (FISH területen)Egy "első keresése" funkcióhívás után ezt a funkciót ismétlődően sokszor meg lehet hívni a további egyező nevek meghatározása céljából, ha a név többértelmű volt. A BC-ben megadott cím különbözhet az előző keresésben használttól, ha megmarad azokban az esetekben, mint az "első keresése" funkciónál.
A keresési FCB fenntartott része tartalmazza azokat az információkat, amelyekre a FISH-nek a keresés folytatásához szüksége van, így nem szabad módosítani az "első keresése" és a jelen funkció bármely hívása között. Szükség esetén elmentés céljából át lehet másolni, de ez általában elkerülhető.06. Fájl létrehozás
BC = MFCB BC = MFCB
DE = KFCB DE, IX = KFCB
HL = UV HL = UV (FISH területen)Ez a funkció nagyon hasonlít az "első keresése" funkcióhoz, kivéve, hogy többértelmű file-név nincs megengedve. Ha egyező névvel directory bejegyzést talál, akkor azt - ha lehetséges - kitörli és a hozzá allokált területet felszabadítja. Ha a bejegyzés nem törölhető, akkor a következők szerint egy megfelelő hibajelzéssel tér vissza:
".DIRX" - a bejegyzés egy directory. A directory-kat explicit módon kell törölni.
".SYSX" - a bejegyzés egy rendszer-file. Ezeket explicit módon kell törölni.
".FILRO" - a bejegyzés csak olvasható file. Ezeket nem lehet törölni ,csak ha előzetesen megváltoztatjuk a jellemzőjüket .Ha nem talál egyező névvel bejegyzést, akkor a directory-ban az első üres bejegyzést veszi használatba. Ha a directory tele van, akkor kibővíti egy alapegységgel (kivéve, ha a kiindulási directory-ban vagyunk, amikor ".DRFUL" hibát ad vissza, vagy ha nincs szabad alapegység a lemezen, amikor ".DKFUL" hibát jelez ).
Ha a "file-létrehozás" funkció talál egy megfelelő directory-bejegyzést, akkor beleírja a file-nevet az FCB-ből (".IFNM" hibával tér vissza, ha a file-név illegális), kitölti az attributum byte-ot úgy, hogy csak az "archiválás" bit "1", beírja a "0" file-méretet, valamint az aktuális dátumot és időpontot, amelyet a FISH rendszer-órája tart nyilván.
A BC-ben megadott címen egy erre az új bejegyzésre vonatkozó meghatározott FCB jön létre - pontosan olyan, amilyet az "első keresése" funkció ad vissza.
Az új file nem nyitódik meg automatikusan, egy külön "file-megnyitás" funkcióhívásra van szükség, hogy írni vagy olvasni lehessen. Ha azt akarjuk, hogy a file rendszer-file, vagy rejtett, vagy csak olvasható legyen, ezt a létrehozás után egy "file-attributumok változtatása" funkcióhívással érhetjük el.
Ha a használatlan FCB-ben a keresési attributum byte kötetnév bitje "1", akkor ez a funkció a lemez kötetnevét fogja létrehozni, vagy megváltoztatni. Ez esetben a kötetnevet keresi, s ha megtalálja kicseréli az FCB-ben levő névre. Ha nincs kötetnév-bejegyzés, akkor a kiindulási directory első üres bejegyzésén létrehozza a kötetnevet.
A funkcióból való visszatéréskor a DE által kijelölt FCB keresési FCB lesz. Ez a BC-ben megcímzett meghatározott FCB-vel együtt ugyanúgy használható, mintha az "első keresése" funkció adta volna vissza. Ez gyakran hasznos, ha megkíséreltünk egy létrehozást, és ".DIRX" hibajelzést kaptunk, tehát a név egy directory neve volt. A program tovább mehet, és létrehozhatja a file-t ebben a directory-ban. A BC és DE regiszterpárok tartalma megmarad az "első keresése" funkciónál ismertetett feltételek mellett.07. Katalógus létrehozás
BC = MFCB BC = MFCB
DE = KFCB DE, IX = KFCB
HL = UV HL = UV (FISH területen)Ez a funkció nagyon hasonló a "file-létrehozása" funkcióhoz kivéve, hogy nem file számára készít directory bejegyzést, hanem egy al-directory számára.
Megvizsgálja, hogy van-e az adott névvel directory bejegyzés, de ha talál egy ilyen file-t nem törli ki, még ha törölhető is lenne, hanem ".FILEX" hibajelzéssel visszatér.
Az új al-directory egy alapegységnyi diszk-területet foglal el és üres lesz, eltekintve a "." és ".." jelzésű két bejegyzéstől, amelyek a directory-ra magára, ill. a "szülő" directory-ra mutatnak. E két al-directory jellemzője "rejtett" lesz, így normál directory-listázáskor nem jelennek meg.08. Fájl vagy katalógus törlés
DE = MFCB IX = MFCB
HL = KFCBA meghatározott FCB-hez tartozó directory-bejegyzés törlődik, kivéve, ha csak olvasható file (".FILOR" hibajelzés), vagy nem üres al-directory (".DIRNE" hibajelzés). A "." és ".." al-directory-kat nem lehet törölni (".DOT" hiba-jelzés). Ha nincs hiba, akkor minden, a file-hoz vagy a directory-hoz rendelt lemezterület felszabadul. Ha a lemeznek van érvényes kötetazonosítója akkor a "piszkos diszk" jelző "1"-be áll, és a FAT utolsó példányában az alapegységek nem szabadulnak fel. Ez lehetővé teszi a file-ok visszaállítását az UNDEL program segítségével.
09. Fájl vagy katalógus átnevezés
BC = MFCB (új névvel)
DE = MFCB IX = MFCB
HL = KFCBA meghatározott directory-bejegyzés neve megváltozik a BC által megcímzett FCB-ben levő névre. Ez az új név többértelmű is lehet, ahol "?" fordul elő benne, azon a pozíción megmarad az eredeti karakter. Visszatéréskor a meghatározott FCB-ben az új név szerepel, a "?"-ek megfelelően helyettesítve.
Ellenőrzés történik, hogy ne keletkezhessen duplikált, vagy érvénytelen file-név; ha a funkcióhívás végrehajtása erre vezetne, akkor ".DUPF", ill. ".IFNM" hibajelzést ad vissza. A "." és ".." al-directory-k nem nevezhetők át, ennek megkísérlése ".DOT" hibajelzéshez vezet. A használatlan FCB-ben, a meghatározott és a keresési FCB-ben a meghajtónak azonosnak kell lennie, ha nem így van, ".IDRV" hibajelzés történik.
Ha olyan al-directory nevét változtatjuk meg, amely az aktuális directory-útvonalnak eleme, akkor az aktuális directory-útvonal a következő hozzáféréskor törlődik, mivel a FISH nem tudja relokálni a directory-útvonalat.10. Fájl vagy katalógus áthelyezés
BC = UV (új útvonal)
DE = MFCB IX = MFCB
HL = KFCBA meghatározott directory-bejegyzést kiveszi abból a directory-ból, ahol jelenleg van, és áthelyezi abba a directory-ba, amelyet a BC-ben megcímzett útvonalnév-string specifikál. ".IATTR" hibajelzés történik, ha a bejegyzés kötetnév. A funkció ellenőrzést végez, hogy ne keletkezzék duplikált filenév. Ha az új útvonalnévben meghajtó is szerepel, akkor ez meg kell, hogy egyezzen annak a meghajtónak a számával, ahol a directory-bejegyzés található, különben ".IDRV" hibajelzés történik.
Ha al-directory áthelyezéséről van szó, akkor további ellenőrzéseket végez a funkció, hogy nem a "." vagy ".." bejegyzéseket akarjuk áthelyezni és, hogy a directory-t nem valamelyik saját "leszármazottjába" akarjuk áthelyezni. Ez ".DIRE" hibajelzést eredményez, mivel hurkot hozna létre. Egy al-directory sikeres áthelyezése után a ".." bejegyzés aktualizálódik, az új "szülő" directory-ra.11. Attribútum és idő változtatás
DE = MFCB (módosított attribútum / idő / dátum)
HL = KFCB IX = MFCBEz a funkció kicseréli a meghatározott directory-bejegyzés attributum byte-ját, továbbá a dátum és időadatát a meghatározott FCB-ben szereplő adatokra. A directory-bejegyzés többi mezőjét változatlanul hagyja. Az attributum byte-ot ellenőrzi, hogy a változtatás megengedett-e, és ha nem akkor sem a dátumot és az időpontot, sem a jellemzőket nem változtatja meg, hanem ".IATTR" hibajelzéssel tér vissza. Az új dátumot és időpontot nem ellenőrzi.
Jegyezzük meg, hogy az új jellemzők a meghatározott FCB directory-bejegyzés példányában vannak definiálva, és nem a keresési attributum byte-ban. Az új datumok és időpontok a meghatározott FCB-ben a normál pozíción kell lenniük, ami nem azonos azzal a pozícióval, amelyet megnyitás után foglalnak el az FCB-ben.
12. Fájl megnyitás
DE = MFCB DE, IX = MFCB
HL = KFCBA meghatározott directory-bejegyzéshez tartozó file-t megnyitja, így az készen áll írásra vagy olvasásra. A bejegyzés nem lehet al-directory vagy kötetnév, és ha "csak olvasható", akkor írni nem lehet bele. A file mérete, a dátum, az időpont és a meghajtó aktuális kötetazonosítója bemásolódik az FCB-be, a file-mutató nullázódik. Az FCB azonnal használható a file elejétől induló szekvenciális írásra vagy olvasásra.
Jegyezzük meg, hogy a file-méret, a dátum és az időpont a megnyitott FCB-ben nem ugyan azon a helyen van, s nem is ugyan abban a sorrendben, mint a meghatározott FCB-ben volt a megnyitás előtt.13. Fájl lezárás
DE = MFCB DE, IX = MFCB
HL = KFCBLezárja az FCB-hez tartozó file-t. Azokat a file-okat, amelyeket csak olvastunk, nem szükséges lezárni; ha mégis lezárjuk a diszk-directory nem változik. Ha irtunk a file-ba, akkor a directory-bejegyzést megfelelően aktualizálja az új dátum-, idő-, méret- és helyfoglalási információkkal és az archiválási bitet "1"-be állítja.
Jegyezzük meg, hogy ha az FCB-ben a file-név megváltozik, akkor a lezárás nem történik meg helyesen. Az attributum byte sem változhat meg a directoryban; ezt csak az "attributumok változtatása" funkcióhívás teheti meg.
Az FCB a file lezárása után is használható a file-hoz való hozzáférésre, így a file-lezárás funkció arra is alkalmas, hogy hosszabb file-írás közben időnként a file változásait teljes egészében rögzítsük a lemezen biztonsági okokból. Egy FCB-t csak akkor szabad lezárni, ha előzőleg sikeresen megnyitottuk. AFISH-nek nincs módja ezt ellenőrizni; ha megkíséreljük, a hatása nem definiált és katasztrofális lehet.14. Pufferek törlése (Meghajtó adatterület lekérdezésre is használható)
B=MEGH B=0
(Ha B = 255, akkor minden puffert töröl)
C = 0 csak puffertörlés
HL = MEGH PTR (HL) = MEGH. puffer szegm.
(HL+1) = cím az 1. lapon
C = 255 pufferek törlése és érvénytelenítése
DE = MEGH terület az 1. lapon
HL = DE+9Ez a funkció kitörli az összes piszkos szektorpuffert az adott meghajtóra (vagy mindegyikre, ha B=FFh). A nyitott file-ok nem záródnak le (mivel a FISH nem tartja nyilván őket). Mindig 0 állapotkódot ad vissza, kivéve, ha a meghajtószám érvénytelen, vagy ha megnyomták a STOP billentyűt.
Ha a C regiszter 0 volt, akkor a "piszkos pufferek" törlődnek, de a bennük maradó adatok nem kapnak "érvénytelen" jelzést. Ha a C regiszter tartalma FFh, akkor a pufferek törlése mellett az adatok is érvénytelenek lesznek, így többé nem használhatók fel. Ebben az esetben is mindegyik meghajtó olyan jelzést kap, hogy a benne levő lemezt ellenőrizni kell.
Ezt a lehetőséget olyan külső programok alkalmazzák, mint a FORMAT vagy a DISKCOPY, amelyek közvetlenül "összemaszatolják" a diszket a DISKIO használatával, így biztosítva, hogy a FISH felismerje a módosított lemezt.15. Szekvenciális olvasás
BC = SIZE BC = sikeresen beolvasott bájtok száma
DE = MFCB DE = MFCB
IX = TRC IX = TRC a következő bájtra mutatBeolvassa a megadott számú byte-ot a file-ból a "diszk átviteli" címmel kezdődő memóriaterületre. Max. 64k olvasható; ".OV64k" hiba történik, ha az IX és a BC regiszterpárok tartalmának összege túlcsordul a 3. memórialap tetején. Az FCB-t előzőleg meg kell nyitni.
A file-on belüli pozíciót az FCB file-mutató mezője határozza meg, amely minden olvasás után aktualizálódik, s így a következő byte-ra mutat. Ha a funkció hibát jelez, a sikeresen olvasott byte-ok száma kisebb lehet, mint a két byte-szám. Ez a visszaadott szám minden hibajelzés esetén helyes, kivéve a ".STOP" és ".ABORT" hibákat. Ha a file végén túl próbálunk meg olvasni, ".EOF" hibajelzést kapunk.16. Szekvenciális írás
BC = SIZE BC = sikeresen kiírt bájtok száma
DE = MFCB DE = MFCB
IX = TRC IX = TRC a következő bájtra mutatA diszk átviteli területről a megadott számú byte-ot beírja a file-ba. Maximum 64k írható, és ".OV64k" hibajelzést kapunk, ha a BC és az IX regiszterpárok összege túlcsordul a 3. memórialap tetején. Ha a VERIFY rendszerváltozó értéke "0", akkor a fölírt adatokat automatikusan ellenőrzi. Az FCB-t előzőleg meg kell nyitni.
A file-on belüli pozíciót az FCB file-mutató mezője határozza meg, amely minden írás után aktualizálódik, s így a következő byte-ra mutat. Ha hibajelzéssel tér vissza a funkció, akkor a sikeresen fölírt byte-ok száma kisebb lehet, mint az írni kívánt byte-szám. A visszaadott szám minden hibakód esetén érvényes, kivéve a ".STOP" és az ".ABORT" hibajelzéseket.
Ha az írás túlhalad a file végén, akkor a file számára szükség szerint további lemezterületeket foglal le, a file-méretet pedig aktualizálja. Ha az írás a file végén túl kezdődik, akkor a "hézag" betöltésére a lemezterületet lefoglalja, de nem inicializálja. Ha nincs elég hely a lemezen a teljes írási művelet számára, akkor a ".DKFUL" hibajelzéssel tér vissza és egyáltalán nem ír fel adatot, még akkor sem, ha az adatok egy része számára volna hely.17. Szekvenciális írás 0 feltöltéssel
BC = SIZE BC = sikeresen kiírt bájtok száma
DE = MFCB DE = MFCB
IX = TRC IX = TRC a következő bájtra mutatEz a funkció azonos a fent ismertetett "írás file-ba" funkcióval. Az egyetlen különbség, hogy ha az írás a file végén túl kezdődik, akkor a "hézag" kitöltésére lefoglalt lemezterületet 0-val írja végig.
18. Szektorok olvasása (logikai szektor)
DE = SZEK DE = következő SZEK
H = SZEKN H = beolvasott SZEKN
L = MEGH L =MEGH
IX = TRC IX = TRC a következő bájtra mutatA megadott szektorokat beolvassa a diszkről az IX-ben adott címtől kezdődő memóriaterületre. Max. 64k olvasható, és ".OV64k" hibajelzést ad, ha az IX tartalmának és a beolvasandó szektorok összesített byte-számának összege túlcsordul a 3. memórialap tetején.
Hiba előfordulásakor a beolvasott szektorok száma kisebb lehet, mint a kért szektorok száma. A visszaadott szám minden hibakód esetén érvényes, kivéve a ".STOP" és ".ABORT" hibajelzéseket. Hiba esetén ismételt próbálkozások történnek, s a diszk-hibák keresztülmennek a normál ABORT / RETRY / IGNORE hibakezelő szubrutinon.19. Szektorok írása (logikai szektor)
DE = SZEK DE = következő SZEK
H = SZEKN H = kiírt SZEKN
L = MEGH L = MEGH
IX = TRC IX = TRC a következő bájtra mutatA megadott szektorokra fölírja a diszk átviteli területen levő adatokat. Max. 64k írható, és ".OV64k" hibajelzést ad, ha az IX tartalmának és a fölírandó szektorok összesített byte-számának összege túlcsordul a 3. memórialap tetején.
Hiba előfordulásakor a felírt szektorok száma kisebb lehet, mint a felírni kívánt szektorszám. A visszaadott szám minden hibakód esetén érvényes, kivéve a ".STOP" és ".ABORT" hibajelzéseket. Ha a "VERIFY" rendszerváltozó értéke 0, akkor automatikusan szektor ellenőrzés történik.20. Rendelkezésre álló meghajtók lekérdezése
DE+HL = 26 bites szám amelyik bit 1 az a meghajtó létezik
L 0. bit = A
L 1. bit = B
...
L 5. bit = E
stb.A logikai vektor egy 26 bites szám, amely azt adja meg, hogy mely logikai meghajtók használhatók. Az UPM-töl eltérően a rendszer valamennyi meghajtója állandóan "él", így a login vektor egyszerűen azt mutatja, hogy mely meghajtók vannak jelen a rendszerben. A 0. bit az A: meghajtónak felel meg, és így tovább ; az "1"-be állított bitek jelzik a meglevő meghajtókat.
21. Allokációs információ
B = MEGH B = szektor/cluster
DE = cluster/lemez
HL = szabad cluster
IX = meghajtó adatterület (ez az EXDOS által belsőleg használt meghajtó leíró +8 bájtjára mutat)E funkció fő felhasználása információ szerzés a diszk méretéről és a szabad terület nagyságáról. Az alapegységenkénti szektorszám, amit a B regiszteren kapunk meg, mindig 2 egész kitevőjű hatványa, a szektorméret pedig mindig 512 byte. Így az alapegység mérete 512 byte-tól 64k-ig terjedhet. C regiszterben a meghajtó adatterület szegmensszámát kapjuk vissza (ez a beépített eszközöknél a rendszerszegmens, bővítéseknél (pl. merevlemez) azonban bármi más is lehet). A szabad hely fölmérése néhány másodpercet igénybe vesz, mert a diszken az egész FAT-ot meg kell vizsgálni.
Az IX-ben visszaadott mutató felhasználásával részletesebb információt kaphatunk a lemezformátumról:
IX-08h meghajtó RAM terület szegmensszáma, kivéve a beépített egységek esetén, ott a UNITH meghajtóinál 0, RAMUNIT-nál 2 IX-07h,06h meghajtó RAM terület címe, beépített EXDOS egységek esetén ez szokásosan az EXDOS RAM terület 80h bájtjára mutat, bővítő egységek esetén megegyezik azzal a címmel, amit a bővítő megadott a leírok létrehozásához, tehát a meghajtó leíróblokk 0. bájtjára mutat. IX-05h meghajtó kezelőprogram szegmensszáma IX-04h, 03h meghajtó kezelőprogram címe (3. lapon) IX-02h belső egységszám, minden egység esetén 0-tól induló belső sorszám, és addig tart ahány alegységet kezel (pl. a floppyt kezelő UNITH esetén ez 0-3) IX-01h (1-26) meghajtószám MAPDISK átirányításhoz, ha nincs átirányítás, akkor megegyezik a fizikai meghajtószámmal IX-00h fizikai meghajtószám, 1-től kezdődik, a beláncolás sorrendjében folyamatosan növekvően kerül kiosztásra IX+01h belső lemezcsere ellenőrzés jelzőbájt IX+02h cluster maszk (egy clusterben lévő szektorok száma-1) IX+03h cluster eltolás (clusterméret 2-es alapú logaritmusa, azaz 2 hányadik hatványa a méret) IX+04h, 05h boot szektorok száma = első FAT szektor sorszáma IX+06h FAT példányok száma IX+07h bejegyzések száma az utolsó főkönyvtár szektorban, 0 ha 16 bejegyzés van, azaz a teljes szektort kitölti IX+08h főkönyvtár teljes szektorainak száma, ha ez előző érték nem 0, akkor van még 1 csonka szektor is IX+09h FAT szektorok száma IX+0Ah, 0Bh első főkönyvtár szektor sorszáma IX+0Ch, 0Dh 2. cluster logika szektorszáma (első adatszektor) IX+0Eh, 0Fh legnagyobb lehetséges cluster sorszám+1 (clusterek száma+2) IX+10h "piszkos diszk"-jelző : 0 = tiszta ; 1 = piszkos (UNDEL jelzőbájt) IX+11h-14h bites lemez azonosító (ID) (amelyik lemez nem tartalmaz ilyet, ott FFFFFFFFh) IX+15h formázási típusbájt IX+16h, 17h aktuális könyvtár kezdő cluster száma, (IX+17h) 7-es bitje 1 ha a főkönyvtár az aktuális IX+18h-57h aktuális útvonal sztring, 00h-val lezárva 22. Fizikai meghajtó lekérdezés (az 1.0-ás verzió nem kezeli)
B = MEGH B =MEGH
C = FMEGHEz a funkció logikai, vagy fizikai egységszám konvertálására szolgál fizikai és aktuális meghajtószámmá. A logikai egységszámok azok, amelyeket a felhasználó begépel a parancsokban, és amelyeket az FCB-be teszünk. Ezeket a FISH fizikai egységszámokká konvertálja az ASSIGN műveletekben megadott összerendelések szerint. Ez egy egyszerű konverzió és, ha nem volt ASSIGN akkor a logikai és fizikai meghajtószámok megegyeznek.
A fizikai egységszámokat aktuális egységszámokká konvertálja a FISH a MAPDISK műveletekre megadott összerendelések szerint. Egy meghajtós rendszerben a "B:" fizikai meghajtó automatikusan az "A:" aktuális meghajtóhoz rendelődik, így két diszk érhető el az egy meghajtón. Az aktuális egységszámok közvetlenül meghajtókat jelentenek, így az 1...4 aktuális egységszámok mindig azt a négy meghajtót jelentik, amelyeket a DISKIO kezelni tud.
Ez a funkció olyan parancsok számára készült, amelyek a DISKIO-t közvetlenül használják, különösen, ha emellett FISH funkcióhívásokkal is fordulnak a diszk-hez. A felhasználótól kapott meghajtószám logikai egységszámnak tekintendő, és közvetlenül átadandó a FISH-hívásoknak. A DISKIO viszont meghajtó maszkot vár, amely az 1...4 aktuális meghajtóknak felel meg. Ezeket a felhasználótól kapott logikai meghajtószámokat aktuális fizikai meghajtószámmá kell konvertálni, mielőtt meghajtómaszkot készítenénk belőle, s ezt átadnánk a DISKIO-nak. Ez biztosítja, hogy minden érvényes ASSIGN és MAPDISK művelet érvényre jut.
Az egységleíró terület, amelyet az IX-től kapunk meg, azonos a "lemez foglaltsági információ beolvasása" funkciótól visszakapott eredménnyel. Megjegyzendő azonban, hogy ez a funkció nem vizsgálja meg a lemezt, mielőtt visszaadná a mutatót, így lehet, hogy számos mező nem lesz kitöltve. Ha a funkció hívása előtt közvetlenül a diszk-hez fordulunk, akkor az egységleíró mezők érvényesek lesznek.23. memóriaterület foglalása
Ezzel kisebb memóriaterületet lehet átmenetileg lefoglalni, BC-ben a kért méret, visszatéréskor B a szegmensszám, DE pedig a terület fölé mutat.
A trükk itt az, hogy a FISH egy jelzőbiten keresztül üzen a DISK perifériának, hogy ne normál fájlkezelő módban működjön, hanem csak foglalja le a megadott méretet csatorna-pufferként. Így nyit meg egy csatornát (szabad csatornaszámot keres hozzá), a kapott csatorna-puffer címét adja vissza a felhasználónak. A területet addig használhatjuk, amíg nem történik a csatornák bezárásával járó művelet.24. Meghajtó beláncolása
B=szegmensszám,
DE=cím mutat a leendő meghajtó leíróblokk helyére, ahol a következő adatokat kell elhelyezni:
0: belső egység darabszám
1-2: kezelőprogram címe
3: kezelőprogram szegmensszáma
A megadott területnek RAM-ban kell lennie, méret 3 bájt (a következő leíróblokkra mutató cím számára) + annyiszor 60H bájt ahány belső egységet megadtunk. A leíróblokkban a kezelőprogram RAM területének a híváskor megadott szegmens: cím lesz bejegyezve. Ezzel a hívással nem csak hidegindításkor, hanem akármikor tudunk meghajtót beláncolni!25. Mapdisk megadás
B = MEGH BC=0
C = FMEGH26. Assign megadás
B = MEGH BC=0
C = FMEGHEz a funkció a parancsértelmező számára készült az ASSIGN parancs végrehajtásához. Ha egyik egységszám sem 0, akkor minden jövőbeni hivatkozás az első egységszámra konvertálódik, és a második egységszámra fog vonatkozni. Ha a második egységszám 0, akkor az első egységszám visszarendelődik önmagához. Ha az első egységszám 0, akkor minden előző ASSIGN művelet törlődik.
Megjegyezzük, hogy e funkció használata után a megnyitott FCB-k hirtelen másik lemezre fognak vonatkozni (mivel az FCB-ben levő egységszámok logikai egységszámok). Ennél fogva ajánlatos, hogy a funkció meghívásakor ne legyenek megnyitott FCB-k.27. A diskpufferek számának növelése
B regiszterben adjuk meg a pufferek új számát (max. 10 lehet), 0 esetén lekérdezés.
Ezt használja a BUFFERS parancs, ami eredetileg benne volt az EXDOS-ban (lásd 0.3), de később kiszorult belőle és csak az ISDOS-ban található meg.
Megjegyzés: ha kevesebbet adunk meg, mint amennyi jelenleg van, akkor se történik semmi, csak visszakapjuk az aktuális értéket, vagyis FISH-en keresztül csökkenteni nem lehet. Ez úgy oldható meg, hogy a FISH adat területen átírjuk a pufferek számát (IY+21H), majd kiadunk egy EXOS reset-et 20H-val, így újraszerkesztődik a periférialánc, ezáltal a pufferek számára memóriát foglaló '.' nevű periféria is újra lesz beláncolva, az általunk megadott puffer-mérettel.
Amikor a FISH 27 működik, az pluszban vesz fel még egy '.' nevű perifériát, a szükséges plusz pufferek foglalásához. Ez jól látható, ha az EPDOS DEVS parancsával kilistázzuk a periférialáncot a BUFFERS parancs használata után. Ha azonban kilépünk pl. BASIC-be az ISDOS-ból, már ismételten csak egy '.' lesz, mivel ilyenkor végrehajtódik egy EXOS reset, így újra láncolódnak a perifériák.28. RAMDISK létrehozás-törlés
B = Szegmensek száma (0 = törlés)29. Formázás
B = forma (F8-FF)
C = MEGH HL = MEGH adatterület
DE = pufferterület (6500 bájt)Ez a funkció formattálja a megadott meghajtóban levő lemezt, a formázási típusbájt által definiált módon. Nincs ellenőrzés arra vonatkozóan, hogy a lemez már formattált-e, a hívó programnak kell megbizonyosodni róla, hogy a felhasználó valóban formattálni akarja a lemezt. A FISH nem végez ellenőrzést a típusbájttal kapcsolatban, azt változatlanul adja tovább a meghajtó kezelőprogramjának. A hívásnál a DE-vel megfelelő méretű pufferterületre kell mutatni, ez a beépített lemezegység kezelőnél 6500 bájtot jelent. Ramdisk-et kezelő RAMUNIT nem kezeli a funkció hívást, a floppy meghajtókat kezelő UNITH egység pedig a következő módon hajtja végre: a funkció ellenőrzi, hogy az adott meghajtó alkalmas-e a kívánt formátumban való működésre, és szükség esetén 40-ben korlátozza a sávok számát, ill. 1-ben az oldalakét.
A formázási típusbájt olyan, mint a FATID byte a FAT elején és a boot-szektorban a port-MS-DOS2 lemezeken. A megformattált lemez boot-szektora egy véletlenszerű kötetazonosítóval jön létre. A FAT-ok és a directory inicializálódnak, és a lemeznek nem lesz kötet-azonosítója.
formázási típusbájt oldal szektor / sáv sáv / oldal0F8h 1 9 800F9h 2 9 800FAh 1 8 800FBh 2 8 800FCh 1 9 400FDh 2 9 400FEh 1 8 400FFh 1 8 4030. Szektorpuffer lefoglalása / felszabadítása
B=255 paraméter esetén a FISH az általa használt szektorpufferek közül egyet kivon a normál használatból, és címét átadja HL-ben. A HL által mutatott 512 bájt terület szabadon felhasználható annak felszabadításáig. Melegindításkor vagy EXOS 0 híváskor a foglaltság megszűnik. Csak egy ilyen puffert lehet foglalni, ismételt híváskor a már korábban lefoglalt puffer címét adja vissza. A pufferterület a 2-es lapon, a rendszerszegmensben található.
B=0 (vagy bármi 255-nél kisebb) paraméter esetén a korábban lefoglalt puffer visszakerül a FISH normál használatába.
6. File Control Block-ok (FCB-k) formátuma
KFCB: (használatba vétel előtt a területet nullázni)
00 FF (keresési FCB) 01-05 kötelezően 0 06 Keresési attribútum (csak VOL-ra) 07 Meghajtó (0 = aktuális) 08-0F Fájlnév > (lehet ? is) 10-12 Kiterjesztés 13-1C ? 1D-1E Logikai szektorszám 1F A katalógushoz tartozó szektorok száma: (DEC ciklusszámláló 1 = utolsó) 20 A szektorhoz tartozó fájlleírók száma (DEC ciklusszámláló 16 = 1. fájl) 21-2B ? 2C-2F Lemez azonosító (ID szám) MFCB: (megtalálva)
00 FE (meghatározott FCB) 01-05 0 06 Keresési attribútum 07 Meghajtó 08-0F Fájlnév (08-27 a beolvasott fájlleíró adatok) 10-12 Kiterjesztés 13 Fájl attribútum 14-1D 1E-1F Idő 20-21 Dátum 22-23 Kezdő cluster 24-27 Fájlméret 28-2B Fájlmutató 2C-2F Lemez azonosító (ID szám) MFCB: (megnyitva)
00 FE 01-05 0 06 Keresési attribútum 07 Meghajtó 08-12 Fájlnév + kiterjesztés 13 Attribútum 14-16 0 17-1A Fájl meglévő mérete (SIZE) 1B-1C Dátum 1D-1E Idő 1F ? 20 ? (ha bit 6 = 1 akkor írás történt) 21-22 Kezdő cluster 23-24 Aktuális cluster 25-27 Cluster számláló (0 = első) 28-2B Fájlmutató 2C-2F Lemez azonosító
7. Meghajtó adatterület (3+n*60H méretű)
Minden lemezkezelő eszközhöz tartozik egy meghajtó leíróblokk, amelyek láncba vannak szervezve. A blokk első 3 bájtja az előző leíróblokk címe: szegmensszám, első lapon érvényes cím. Nullás értékek jelzik a lista végét. Ezután következnek az adott eszközhöz tartozó 60H hosszú meghajtó leírók, annyi darab, ahány belső egységet kezel az eszköz (A floppykat kezelő UNITH esetén ez 4, a RAMUNIT esetén 1, IDE bővítés esetén a felismert partíciók számától függ).
00 Meghajtó RAM terület szegmensszáma, kivéve a beépített egységek esetén, ott a UNITH meghajtóinál 0, RAMUNIT-nál 2. 01-02 Meghajtó RAM terület címe. Beépített EXDOS egységek esetén ez szokásosan az EXDOS RAM terület 80h bájtjára mutat, bővítő egységek esetén megegyezik azzal a címmel, amit a bővítő megadott a leírok létrehozásához, tehát a meghajtóleíró-blokk 0. bájtjára mutat.03 Meghajtó kezelőprogram szegmensszáma. 04-05 Meghajtó kezelőprogram címe (3. lapon). 06 Belső egységszám. Minden egység esetén 0-tól induló belső sorszám. 07 Meghajtószám MAPDISK átirányításhoz. Ha nincs átirányítás, akkor megegyezik a fizikai meghajtószámmal.08 Fizikai meghajtószám. 1-től kezdődik, beláncolás sorendjében folyamatosan növekvően kerül kiosztásra FISH 21 ide mutató IX-et ad vissza.09 Lemezcsere ellenőrzés jelzőbájt, beláncoláskor 0.
0,1 érték esetén nem ellenőriz, 2 esetén a hw lemezcserejelet kéri le és ha az cserét jelez, akkor ellenőrzi a lemez sorozatszámát.
2-nél nagyobb érték esetén egyből a lemez sorozatszámát ellenőrzi. 2-nél nagyobb érték esetén a DISK: megszakítás 1-el csökkenti lemezcsere ellenőrzött művelet után 100-ra állítja.0A Cluster maszk (egy clusterben lévő szektorok száma-1) 0B Cluster eltolás (clusterméret 2-es alapú logaritmusa, azaz 2 hányadik hatványa a méret).0C-0D Boot szektorok száma = első FAT szektor sorszáma. 0E FAT példányok száma. 0F Bejegyzések száma az utolsó főkönyvtár szektorban, 0 ha 16 bejegyzés van, azaz a teljes szektort kitölti.10 Főkönyvtár teljes szektorainak száma. Ha ez előző érték nem 0, akkor van még 1 csonka szektor is.11 FAT szektorok száma. 12-13 Első főkönyvtár szektor sorszáma (0. cluster). 14-15 2. cluster logika szektorszáma (első adatszektor). 16-17 Legnagyobb lehetséges cluster sorszám+1 (clusterek száma+2). 18 UNDEL jelzőbájt. 19-1C 32 bites lemez azonosító (ID). 1D Formázási típusbájt. 1E-1F Aktuális könyvtár kezdő cluster száma, 1Fh 7-es bitje 1, ha a főkönyvtár az aktuális.20-5F Aktuális útvonal sztring, 00h-val lezárva.
8. A FISH ás EXOS változók összefüggése
64 (IY-5E) EXDOS-ROM szegmensszám 65 -5D P0 66 -5C P1 A transzfercím számoláshoz 67 -5B P2 68 -5A P3 69 -59 ECHO-flag 70 -58 VERIFY-flag 71 -57 aktuális meghajtó 72 -56 ISDOS-BOOT-DRV 73 -55 STEP-RATE 74 -54 DISK-CHANGE-FILE-flag 75 -53 ERROR-INP-csat 76 -52 ERROR-OUT-csat 77 -51 CLI-INP-csat 78 -50 CLI-OUR-csat 79 -4F DATE-TIME-forma 80 -4E ERROR-DISABLE-flag 81 -4D DISK-ERROR-code 82 -4C ISDOS-ERROR-code 83 -4B ISDOS-CLI-védelmi-flag 84 -4A RND0 85 -49 RND1 A VOL-ID-hez 86 -48 RND2 87 -47 RND3 88 -46 CLI-END-flag 89 -45 DISK-CHANGE-flag 90 -44 FAST-VIDEO-flag 91 -43 DIR-END-flag 92-99 -42-3B fenntartott terület -3A ERROR-seg -39 ERROR-prtL -38 ERROR-prtH
CFh .NOFIL File not found a file nem található BFh .NOUPB belső hiba BDh .ICMD belső hiba BCh .IUNUM belső hiba BBh .ISECT belső hiba BAh .NRDY Not ready nem üzemkész B9h .VERIFY Verify error hiba az ellenőrzésnél B7h .SNF Sector not found a szektor nem található B6h .WPROT Write protected disk írásvédett lemez B5h .UFORM Unformatted disk formálatlan lemez B4h .NDOS Not a DOS disk nem DOS lemez B3h .WDISK Wrong disk rossz lemez B2h .WFILE Wrong disk for file rossz lemez a file számára B1h .WDRV Insert disk for drive x: helyezzen be lemezt az x: meghajtóba B0h .ICALL érvénytelen FISH funkciószám AFh .IDRV Invalid drive érvénytelen meghajtó AEh .IPARM Invalid parameter érvénytelen paraméter ADh .DRFUL Root directory full a gyökérkönytár megtelt ACh .DKFUL Disk full a lemez megtelt ABh .DUPF Duplicate file name kétszeres file név AAh .NODIR Directory not found a directory nem található A9h .DIRE Invalid directory move érvénytelen directory áthelyezés A8h .IPATH Invalid pathname string érvénytelen útvonalnév-string A7h .FILRO Read only file csak olvasható file A6h .IFNM Invalid filename érvénytelen file név A5h .DIRNE Directory not empty a directory nem üres A4h .ABORT Disk operation aborted a lemezművelet félbeszakadt A3h .IFAT Egy, a FAT táblából beolvasott érték kívül esik a lemez címtartományán. A0h .IFCB Érvénytelen volt a FISH-nek átadott FCB 9Fh .INP Invalid number of parameters érvénytelen számú paraméter 9Eh .DOT Invalid . or .. operation érvénytelen . vagy .. művelet 9Ch .BFUL Command too long túl hosszú parancs (max. 128 karakter) 9Bh .OV64k A 64k-s területen túlnyúló mennyiségű adatot próbáltunk meg írni/olvasni 9Ah .FILE A file alapegységlánca túl rövid a directory-bejegyzésben megadott mérethez. 99h .SYSX System file exists a rendszer-file létezik 98h .DIRX Directory exists a directory létezik 96h .NCOMP Incompatible disk nem kompatibilis lemez 95h .ICOPY File cannot be copied onto itself a file nem másolható önmagára A FISH hibakezelés átvétele: (IY-3A-38)
A rutin a 0. vagy az 1. lapon lehet. A szegmensszám nem nulla értéke esetén, minden FISH hibánál megkapjuk a vezérlést.
B = hibakód A = 0 - a hibakezelés visszaadása a FISH-nek
C = MEGH = 1 - ABORT
= 2 - RETRY
= 3 - IGNORE
= 4-255 - ABORT