####################################################
## 03 Busy soft: Techman operanho systmu MB-02 ##
####################################################
      Index: 960331163326   Prsne tajn !!!

  Obsah

    1. ROM-BIOS
       - popis
       - volania
         -- strnkovanie
         -- presmerovanie load-save

    2. FDC-BIOS 26
       - popis
       - sluby
       - truktry dt
         -- fyzick slo
         -- status

    3. BS-DOS 306
       - popis
       - sluby
       - systmov premenn

    4. Formt disku
       - BOOT sektor
       - DIRS sektor
       - adresrov sektory a poloky
       - File alocation table

---------------------------------------------------------------------------
          *** ROM-BIOS ***

ROM-BIOS sli na prepnanie ramiek a povolenie alebo zakzanie zpisu do
ramiek. Tie zabezpeuje komunikciu medzi jednotlivmi ramkami - ke treba
zavola podprogram z jednej ramky do druhej, priom pam nad #4000 nemono
poui.

Volania:
 call #3C98 ... zapne ROM-ramku, zake zpis
 call #3C9A ... zapne DOS-ramku, zake zpis
 call #3C9C ... zapne ROM-ramku, povol zpis
 call #3C9E ... zapne DOS-ramku, povol zpis

Tieto volania funguj nezvisle od toho, ktor ramka je prve zapnut
(pristrnkovan) a i je povolen alebo zakzan zpis.
Zsadne sa neodpora prepna ramky pomocou OUT pretoe jednotliv adresy
portov sa mu na jednotlivch hardweroch meni (aj sa menia!) ale tieto
volania s vade rovnak (s tandardizovan).

Sasou ROM-biosu s aj volania urujce orientciu LOAD-SAVE rutn v romke
na adresch #4C6 a #562. S to tieto volania:

 call #3CA2 ... presmeruje rutinky na kazetu
 call #3CA4 ... presmeruje rutinky na disketu

Ale tieto volania treba vola pri pristrnkovanej ROM-ramke.
-----------------------------------------------------------------------------
       *** FDC-BIOS ***

FDC-BIOS sli na ovldanie vetkch ostatnch hardwarovo zvislch zariaden
- FDC a DMA kontrolry, porty na ovldanie motorov mechank, prepnanie HD/DD
a podobne.  Cieom FDC-biosu (nakoniec aj ROM-biosu) je zabezpei hardwerov
nezvislos a pln prenositenos vetkch programov od samotnho BS-dosu cez
uvatesk prostredie typu windows (napr. NS WINDOWS) a po samotn
uvatesk aplikcie. Preto vlastne sa neodpora prepna ramky outami alebo
pouva priamy prstup na perifrie, ale len cez tieto dva biosy.

Vetky asovo nron opercie pri prenose bajtov medzi pameou a diskom
sa robia pomocou FDC a DMA kontrolrov, preto sa pri diskovch opercich
ani nezakazuje ani nepovouje preruenie. Uvate preto me kudne
necha cez preruenie IM2 vykonva ubovon rutinku. Na tto
rutiku s vak kladen urit ohranienia - presne tak ist ako na rutinku
popisovan pri slube SETMLT (#10), ale s tm rozdielom, e rutinka v preruen
samozrejme nesmie meni iadne registre.

Vetky sluby FDC-biosu sa volaj intrukciou RST #18 pri nastrnkovanej
DOS-ramke, priom v registri A je vdy slo volanej sluby.  V ostatnch
registroch s potom alie parametre pre volan slubu.

  slo sluby: Mnemotechnick nzov sluby
             I: register=hodnota  [vstupn parametre v registroch]
             O: register=hodnota  [vstup parametre v registroch]
 ...strun slovn popis danej sluby...

 #00: RESET
   O: A=status
 Resetuje FDC kontrolr.
 Ttu slubu je vhodn zavola vdy na zaiatku prce s FDC-biosom.

 #01: STATUS
   O: A=status
 Vracia v registri A status. Inak ni in nerob.
 Status-bajt je popsan niie.

 #02: RESTORE
   O: A=status
 Presunie hlaviku aktivovanej mechaniky na nult stupu.

 #03: SEEK
   I: D=stopa
   O: A=status
 Presunie hlaviku aktivovanej mechaniky na dan stopu.

 #04: RDSEC
   I: DE=fyzick slo sektora, HL=adresa
   O: A=status
 Pretanie sektora DE z diskety na adresu HL.

 #05: WRSEC
   I: DE=fyzick slo sektora, HL=adresa
   O: A=status
 Zpis sektora DE na disketu z adresy HL.

 #06: RDTRK
   I: D=stopa, bit7,E=strana, HL=adresa
   O: A=status
 Pretanie stopy z diskety na adresu HL.

 #07: WRTRK
   I: D=stopa, bit7,E=strana, HL=adresa
   O: A=status
 Zpis stopy na disketu z adresy HL.
 Tto funkcia sa pouva pri formtovan diskety.

 #08: RDADD
   I: D=stopa, bit7,E=strana, HL=adresa
   O: A=status
 Pretanie identifikcie sektora z diskety na adresu HL.

 #09: REIM
   I: E=0 pre DD, 1 pre HD, 2 pre ED, ...
   O: Z=reim nastaven, NZ=error
 Nastavenie hustoty zznamu na aktivovanej mechanike.
 Ak je pri nvrate prznak NZ tak mechanika dan reim nepodporuje.

 #0C: AKTIVE
   I: E=slo mechaniky
   O: A=vsledok
 Aktivizuje dan mechaniku (rozto motor a povol enable)
 Ak bola pred tm niektor mechanika aktvna, vypne ju volanm PASIVE.
 Vsledok aktivizcie danej mechaniky me by:
   0 ... unknown disk ... tak mechanika neexistuje
   1 ... disk not ready ... v mechanike nie je disketa (alebo otvoren dvierka)
   2 ... disk activated ... disk aktivny, disketa nebola vymenena
   3 ... disk activated ... disk aktivny, ale bola vymenena disketa
 Po nespench prpadoch 0 a 1 ostan vetky mechaniky vypnut.

 #0D: PASIVE
 Vypna aktvnu mechaniku (zdru enable).
 i povypna aj toiace sa motory, to zvis od nastavenia SETOFF.

 #0E: INFO
   I: E=slo mechaniky
   O: DE=informcie o mechanike
 Tto sluba vracia tieto informcie o danej mechnike:
   D = poet stp
   E = podporovan reimy (bit 0=DD, bit 1=HD, bit 2=ED, ...)
 Ak dan mechanika neexistuje, v registri DE sa vrti nula.

 #0F: SETMAX
   I: BC=maximlna prenan dka
 Nastavuje maximlny poet bajtov, ktor prenesie DMA kontrolr pri  vykonvan
 sluieb RDSEC a RDADD. Vznam to m vtedy, ak nie je vopred znmy poet
 bajtov ktor sa maj nata pri volan tchto sluieb.
 [napr. pri tan stopy, alebo ak nie je znma dka sektora]
 Obsluha si takto me vemi jednoducho zabezpei, aby tan data ani
 omylom nepremazali as pamete ktor le nad buffrom pre tan data.

 #10: SETMLT
   I: HL=adresa rutinky, alebo nula
 Keԧe poas samotnho prenosu dt medzi diskom a pameou nie je potrebn
 a procesora, me sa procesor venova inej innosti. Pomocou tejto sluby
 sa FDC-biosu odovzdva adresa rutinky, ktor bude zavolan prve poas tohto
 prenosu dt. Rutinka me vykonva ubovon innos, ale keԧe sa tto
 rutinka vol poas DMA opercie s diskom, s na u kladen tieto obmedzenia:
   - nesmie rui prenos dt !!! [nesmie siaha na DMA, FDC a porty mechank]
   - nemala by obsahova presn asov sluky [lebo DMA vtedy zdruje pame]
   - nemala by trva viac ako 5-10 ms [ale toto nie je kritick]
   - mus sa poctivo vrti intrukciou RET nasp do DOS-ramky
   - me meni vetky registre

 #11: SETOFF
   I: E=md vypnania motorov
 Tu sa uruje, i sluba PASIVE bude (E=#00) alebo nebude (E=#ff) vypna aj
 motor pri deaktivcii mechaniky. Nevypna motor m vznam napr. vtedy, ke
 sa kopruje vemi vea dt [e sa nemestia naraz do pamete] medzi dvomi
 mechanikami - netreba zbytone aka na roztanie motorov mechank.


Fyzick slo sektora v registri DE sa sklad z tchto dajov:
  bit 0-7,D ... slo stopy
  bit   7,E ... strana
  bit 0-6,E ... slo sektora na stope D

Mnoh sluby vracaj v registri A truktru zvan "status". Status je bajt,
ktor pecifikuje vsledok diskovej opercie - kad bit m svoj vznam.
Ak je bit jednotkov, znamen to e nastala pecifikovan chyba.
V ztvorkch s napsan sluby, ktorch sa tka dan chyba a teda pri ktorch
m vznam testova tento bit.

bit 0 ... time out ... opercia by trvala dlhie, ako sa patr [#04-#08]
bit 1 ... disk not ready ... mechanika nie je pripraven  [#04-#08]
bit 2 ... lost data .... chyba pri prenose dt disk-pame [#04-#08]
bit 2 ... track 0 ... hlava je na stope 0                 [#00-#03]
bit 3 ... CRC error ... pri tan nesed kontroln set [#04,#06,#08]
bit 4 ... record not found ... nenaiel sa sektor         [#04,#05,#08]
bit 4 ... seek error ... mechanika nem nult stopu (?!)  [#02]
bit 5 ... break ... pri diskovej opercii bol stlaen QW [#04-#08]
bit 6 ... write protect ... disk chrnen pred zpisom    [#00-#02,#03,#05,#07]
bit 7 ... not ready ... chyba aktivizcie mechaniky       [#04-#08]

------------------------------------------------------------------------------
        *** BS-DOS ***

BS-DOS je u hardwerovo nezvisl as operanho systmu ktor poskytuje
uvateovi vetky mon sluby od tch nich ako napr. vpis jednho
znaku, nastavenie aktulnej mechaniky a po sluby najvyej rovne ako
napr. emulcia load-save rutn na adresch #4C6 a #562 alebo interpret
basicovch prkazov a funkci ovldjcich disketov jednutky.

Sluby operanho systmu s logicky rozdelen do tyroch skupn.
Prv skupinu tvoria sluby #00-#0F a #34. S to mal pomocn podprogramy,
ako naprklad vpis jednho znaku, ppnutie alebo jednoduch prevody.
Druh skupinu tvoria sluby #10-#1F a #30. S to zkladn diskov opercie,
ako naprklad nastavenie aktulneho disku, adresra, prepsanie adresrovej
poloky, zistenie vonho miesta na diskete alebo zmazanie CACHE pamet.
Tretiu skupinu tvoria sluby #22-#2F a #33. S to diskov opercie vyej
rovne ktor viac-menej zodpovedaj jednotlivm basicovm prkazom.
Naprklad zmazanie sborov, presunutie do inho adresra alebo katalg.
tvrt skupinu tvoria sluby #20,#21,#31,#32. S to sluby uren na
pecilne ely a pre uvatea prakticky nepouien. Sem patr emulcia
romkovch load-save rutn (#4C6 a #562) a basicov interpreter.

Niektor sluby vracaj alebo vyaduj zada 32-bitov hodnotu.
Tto hodnota sa zadva vdy v registroch DE a HL tak, e plat:
DEHL hodnota = 256^3*D + 256^2*E + 256^1*H + 256^0*L
[Teda v D je najvy bajt a v L najni.]

Sluby oznaen hviezdikou vdy vracaj v prznaku CY informciu o tom, ako
dopadli. V prpade, e CY je pri nvrate nastaven, sluba prebehla v poriadku.
Ak sa pri vykonvan sluby vyskytne nejak chyba, na ktor uvate odpovie
RETRY a sluba potom prebehne v poriadku, tie sa vrti s nastavenm CY.
Ak vak uvate odpovie ABORT, sluba sa vrti s nulovm CY.

Vetky sluby BS-DOSu sa volaj intrukciou RST #20 pri nastrnkovanej
DOS-ramke, priom v registri A je vdy slo volanej sluby.  V ostatnch
registroch s potom alie parametre pre volan slubu.

  slo sluby: Mnemotechnick nzov sluby [hviezdika]
             I: register=hodnota  [vstupn parametre v registroch]
             O: register=hodnota  [vstup parametre v registroch]
 ...strun slovn popis danej sluby...

 #00: GETVER
   O: BC=verzia operanho systmu, IX=adresa pomocnho dtovho buffera
 Poda tejto sluby si aplikan programy mu vemi ahko zisti s akou
 verziou dosu spolupracuj a preds tak niektorm komplikcim ktor by
 vznikli keby program volal nejak slubu v starej verzii dosu, kde tto
 sluba ete nie je implementovan.
 Do pomocnho dtovho buffera sa ukladaj rzne informcie o innosti
 systmu - naprklad informcie o chybe, ak nejak nastane. Bliie o
 tomto vi v popise sluby #35:SDMSX.

 #01: DISP
   I: E=ascii kd znaku
 Toto je print-rutinka vypidujca jeden znak. Pozcia vpisu je dan systmovou
 premennou XXX a YYY, spsob vypisovania sa uruje slubou SDDX [#0C] a
 v prpade e vpis prebieha na obrazovke je farba vpisu uren systmovou
 premennou COLOR.
 Tto sluba nevie spracva iadne riadiace kdy ako napr. CR,LF.
 Vypisuje iba platn vypsaten znaky od kdu #1E vyie.

 #02: ENTER
 Presunie kurzor vypisovania na zaiatok alieho riadku tak, e do zvyku
 riadku na ktorom je kurzor a do konca riadku vypisuje medzery.

 #03: TAB
   I: E=slo stpca
 Vypisuje medzery dovtedy, pokm pozcia vpisu nebude v danom stpci.

 #04: TXXT
   I: HL=adresa textu
 Vypisuje text uloen na danej adrese. Text mus koni bajtom nula.

 #05: DEC8X
   I: E=hodnota, C=znak pre nevznamn nuly
 Vypisuje osembitov desiatkov slo, priom naniesto zaiatonch nl vype
 znak v registri C. Ak teda chcete ma sla zarovnan vpravo, vlote do C
 medzeru, ak chcete mat vypsan iba platn slice, vlote do C kd #00.
 Na samotn vpis znakov sa vol sluba DISP.

 #06: DEC16X
   I: HL=hodnota, C=znak pre nevznamn nuly
 Vypisuje 16-bitov islo, inak presne tak isto ako DEC8X.

 #07: DEC32X
   I: DEHL=hodnota
   I: C=znak pre nevznamn nuly, B=maximlna dka sla [max 10 znakov!]
 Vypisuje 32-bitov hodnotu ako desiatkov slo. Ak chcete aby dka sla
 nepresiahla napr. 8 znakov, vlote do B hodnotu 8.

 #08: DEC32
   I: DEHL
   O: DEHL = DEHL-1

 #09: INC32
   I: DEHL
   O: DEHO = DEHL+1

 #0A: ADD32
   I: DEHL,BC
   O: DEHL = DEHL+BC

 #0B: SUB32
   I: DEHL,BC
   O: DEHL = DEHL-BC
 Tieto tyri sluby XXX32 slia pre 32-bitov aritmetiku.

 #0C: SDDX
   I: E=md vpisu
 Urenie spsobu vypisovania znakov pre slubu DISP.
 E=0...sluba DISP bude vypisova znaky normlne na obrazovku.
 Pozcia vpisu je dan systmovmi premennmi XXX (stpec) a YYY (riadok).
 Po kadom vypsanom znaku sa pozcia posunie doprava, alebo na zaiatok
 alieho riadku, ak je u celkom na kraji. A je na poslednom riadku,
 presunie sa na prv riadok obrazovky.
 E=1...sluba DISP bude vypisova znaky tak, e ich bude uklada do pameti
 na adresu dan systmovou premennou XXX (ni bajt) a YYY (vy bajt).
 Toto vypisovanie "do pameti" sa d vemi vhodne poui napr. ak chcete
 vypsa 32-bitov slo, ale chcete poui nejak vlastn print-rutinku.
 Pomocou SDDX nastavte vypisovanie do pameti, do XXX ulote adresu nejakho
 buffera, zavolte slubu DEC32X, no a v bufferi mte toto slo v textovom
 tvare a mete ho vypsa vlastnou print-rutinkou.

 #0D: BEEP
 Ppnutie na AY - nemen farbu borderu. Tn sa vytvra rchlym striedanm
 hodnt #00 a #0F v registri #0A [hlasitos kanlu C]. Ak prve na AY hraje
 nejak hudba z preruenia, potom pputie bude "modulovan" touto hudbou.
 Po ppnut sa do registra #0A vrti pvodn hodnoda ak mal pred zaiatkom
 ppnutia. Ostatn registre AY sa pri ppnut ani nenastavuj ani nemenia.

 #0E: PREVODX
   I: HL=logick slo sektora, E=pocet sektorov na stopu
   O: HL=DE=fyzick slo sektora
 Cel BS-DOS pracuje s logickmi slami sektorov, avak FDC-BIOS pracuje iba
 s vhradne fyzickmi slami. Preto vdy vtedy, ke treba v BS-dose zavola
 nejak slubu FDC-biosu tak sa pred tm vol tto sluba PREVODX.
 Defincia fyzickho sla sektoru je v popise FDC-biosu.

 #0F: HOWSEC
   I: DEHL=dka sboru
   O: BC=poet sektorov ak Z, error ak NZ
 Tto sluba vypota, koko sektorov by na disku zaberal sbor s dkou DEHL.
 Ak by mal poet sektorov presiahnu 65536, tak do BC sa ulo iba dolnch
 16 bitov tejto hodnoty a vynuluje sa priznak zero (NZ). Ak je poet sektorov
 pod 65536 tak bude zero nastavene (Z).

 #10: KUKNI *
 Aktualizcia vntornch CACHE pamet. Skontroluje disketu v aktulnej
 mechanike a nastav poda nej obsah tchto pamet.

 #11: KUINI *
 Aktualizcia CACHE pamet ako #10 KUKNI, ale s tm e pred tm vymae star
 obsah pamet. To znamen, e vdy djde z znovunataniu vetkch informci
 z diskety.

 #12: GETCST *
   O: D=aktulny adresr, E=aktulny disk, HL=load-kurzor
 Tto sluba zisuje aktulnu cestu [disk a adresr] a na ktorom sbore je
 pretoen virtulna kazeta.

 #13: SETDRV
   I: E=slo mechaniky
 Nastavenie aktulnej mechaniky. Ak uvate nastav mechaniku, ktor fyzicky
 neexistuje, chyba nenastane hne ale a pri fyzickom prstupe na tto
 mechaniku.

 #14: SETDIR *
   I: E=slo adresra
 Nastavenie aktulneho adresra na diskete vloenej do aktulnej mechaniky.

 #15: SETLCX *
   I: BC=load-kurzor
 Pretoenie virtulnej kazety na sbor s slom BC na diskete vloenej do
 aktulnej mechaniky. Znamen to, e pri volan load-rutinky na #562 sa bude
 prve tento sbor ako prv spracva.

 #16: GETSUB *
   I: BC=slo sboru (load-kurzor), IX=adresa 32-bajtovho buffera
   O: zero=platnos dajov v bufferi
 Tto sluba vrti v bufferi 32-bajtov adresrov poloku danho sboru.
 V prpade e adresrov poloka s takmto slom neexistuje [adresr je
 krat ako daj v BC] tak sluba sa vrti s nastavenm zero-prznakom.
 Presn pecifikcia truktry adresrovej poloky je v asti popisujcej
 formt diskety.

 #18: KOLKOX *
   O: DE=poet adresrovch poloiek v aktulnom adresri.
 Tto sluba vracia inmi slovami povedan dku aktulneho adresra.
 M to vznam vtedy, ak chcete do pameti nata adresr slubou GETSUB
 a potrebujete zistit e koko poloiek sa v adresri nachdza.

 #19: SEASX *
   I: HL=adresa 10-znakovho mena, E=typ sboru
   O: zero=prznak i sa tak meno nalo
 Hadanie sboru s danm menom a typom v aktulnom adresri. Meno mus by
 10 znakov. V registri E je typ sboru (0=basic;1,2=data,3=bytes;...atd)
 Ak je v E hodnota 255 tak typ sboru sa nekontroluje a porovnva sa iba
 10 znakov meno. Tto sluba pracuje tak, e had dan sbor od aktulnej
 pozcie load-kurzoru smerom ku koncu adresra. Ke sa dostane na koniec,
 pokrauje zase od zaiatku adresra. Hadanie kon vtedy, ak sa alebo
 dan sbor njde alebo ak sa prde na vchodiskov miesto hadania.
 Ak sa dan sbor njde, load-kurzor sa na nastav a sluba sa vrti
 s nastavenm zerom (Z), ak sa nenjde, load-kurzor sa nemen a bude NZ.
 Tto sluba sa vyuva napriklad vtedy, ak do basicovho prkazu pre
 nastavenie load-kurzora zadte reazcov parameter [meno sboru].

 #1A: SEADX *
   I: HL=adresa 10-znakovho mena
   O: zero=prznak i sa tak meno nalo, A=slo adresra (ak sa naiel)
 Hadanie adresra s danm menom. Tto sluba pracuje tak, e had dan
 adresr smerom k adresru 255. Ke sa tam dostane, pokrauje zase
 od adresra 0. Hadanie kon vtedy, ak sa alebo dan adresr njde alebo
 ak sa prde na vchodiskov miesto hadania. Ak sa dan adresr njde,
 sluba vrti jeho slo v registri A s nastavenm zerom (Z), ak sa nenjde,
 bude NZ.
 Tto sluba sa vyuva naprklad vtedy, ak do basicovho prkazu pre
 nastavenie adresra zadte reazcov parameter [meno adresra].

 #1B: OWSUB *
   I: HL=slo sboru, IX=adresa 32-bajtovho buffera
 Prepsanie adresrovej poloky. V bufferi sa mus nechdza nov poloka,
 ktorou sa nahrad star adresrov poloka patriaca sboru s slom HL.
 Ak sbor s slom HL neexistuje [adresr je krat ako HL] vtedy sa nevykon
 iadna innos.
 Tto slubu pouvajte vemi opratrne, lebo jej neuvenm pouitm mono
 vemi ahko pokazi integritu dt uloench na diskete.
 Odporan postup pouitia je takto: Najpr si slubou GETSUB ulote
 dan poloku do buffera, potom spravte v poloke uloenej v bufferi potrebn
 zmeny a nakoniec slubou OWSUB u modifikovan poloku ulote sp na disk.
 Meni mete dtum, as, daje v magnetofnovej hlavike a adresu tela.
 Ostatn daje sa neopora meni. V iadnom prpade nemente zaiaton
 sektor sboru !!!
 Ttu slubu vyuva naprklad basicov prkaz RENAME.

 #1E: KILLX
 Zruenie vntornch CAHCE pamet pre disketu. Tto slubu je potrebn zavola
 vdy vtedym, ke sa boli zmenen data na diskete inak ako prostrednctvom
 basicovch prkazov alebo tandartnch sluieb BS-dosu. Vyuva ju napr.
 formtovac program.

 #1F: FREEX *
   O: DEHL=von miesto v bajtoch, BC=von miesto v sektoroch
 Vracia vekos vonho miesta na diskete v aktulnej mechanike.

 #20: EMM562 *
 Emulcia rom-load rutinky na adrese #562, pre uvatea inak nezaujmav
 Emuluje aj load, aj verify. Vyuvaj sa pri tom sluby #22 LOA1X a #24 VERIX.

 #21: EMM4C6 *
 Emulcia rom-save rutinky na adrese #4C6, pre uvatea inak nezaujmav
 Vyuvaj sa pri tom sluby #26 CREATX, #25 SAVEX a #24 VERIX.

 #22: LOA1X *
 #23: LOA2X *
 #24: VERIX *
 #25: SAVEX *
   I: HL=slo sboru, IX=adresa pameti, BC=zaiaton sektor, E=poet sektorov
 Toto s tyri komplexn sluby, pomocou ktorch je mon ta (LOA1X,LOA2X),
 zapisova (SAVEX) alebo skontrolova (VERIX) urit as sboru.
 HL obsahuje slo sboru ktor pecifikuje sbor, s ktorm sa bude pracova,
 IX ukazuje na zaiatok pameti kam sa bude loadova, prpadne odkia sa bude
 sejvova alebo obsah ktorej sa skontroluje s obsahom sboru.
 BC je slo znamenajce od ktorho sektora zana as sboru s ktorou budeme
 pracova. Sektory sa potaju od nuly, ie BC=0 je plne prv sektor sboru.
 E je poet sektorov ktor loadujeme, sejvujeme alebo verifikujeme.
 Set BC+E nesmie by ve ako celkov poet sektorov danho sboru.
 Celkov poet sektorov sa najjednoduchie d zisti pouitm sluby HOWSEC.
 Roziely medzi LOA1X a LOA2X s tieto: Ak dka sboru nie je celoseln
 nsobok 1024, potom LOA1X nahrva iba prslun as poslednho sektora,
 zatia o LOA2X nahrva cel posledn sektor. Ak by sa mali nahrvan data
 uloi pod adresu #4000 tak LOA1X tieto data neuklad do pameti. Tm je
 operan systm chrnen pred prepsanm. Naproti tomu LOA2X ni nekontroluje
 a nahrva vdy cel sektory. Tmto pdom je LOA1X bezpenejie, ale LOA2X je
 rchlejie a mono tm nahrva aj pod #4000.
 VERIX je normlne verify, to znamen e fyzicky kontroluje obsah danej asti
 sboru s obsahom pameti. V prpade zistenej nezhody vype chybov oznam,
 v ktorom uvedie adresu prvho a poslednho nezhodnho bajtu a tie celkov
 poet nezhodnch bajtov.

 #26: CREATX *
   I: IX=adresa 32-bajtovej adresrovej poloky
   O: HL=slo vytvorenho sboru
 Alokcia miesta na disku pre dan sbor. Tto sluba pracuje tak, e najprv
 njde von poloku v adresri, do nej presunie dan adresrov poloku
 z adresy IX, poda dky tela v tejto poloke naalokuje prslun poet
 vonch sektorov vo FATke na disku a do adresrovej poloky nastav slo
 prvho sektora. Tmto vlastne priprav dan sbor tak, aby sluba SAVEX
 do neho mohla bez problmov uloi dan obsah.
 Sluby #23-#26 vyuva napr. koprovac program CDD takto: Najprv pomocou
 LOA2X nata do pameti sbor, ktor potom sejvne pomocou CREATX a SAVEX.

 #27: UTRASX *
 Utrasenie aktulneho adresra - presne ako basicov prkaz PRESS.

 #28: ERASEX *
   I: BC=slo sboru
 Zmazanie danho sboru v aktulnom adresri. Ak BC=0 tak sa zmae cel
 adresr. Ak je adresr neprzdny [obsahuje nezmazan sbory] tak sa ete pred
 zmazanm vype otzka ktorou je treba potvrdi zmazanie vetkch sborov
 v tomoto adresri.

 #29: ERASIX *
   I: BC..HL=interval sborov
 Zmazanie sborov ponc BC-tym a po HL-ty vtane. Mazanie celho intervalu
 sborov naraz m tu vemi vek vhodu e je to ovea ovea ovea rchlejie
 ako mazanie sboru po jednom a viac sa pri tom etr disketa - naprklad tak
 e FATka sa zapisuje iba raz na konci po zmazan vetkch sborov v intervale.

 #2A: MOVEXX *
   I: BC=slo sboru, E=cieov adresr
 Presunutie sboru do adresra E. Funguje presne ako basicov prkaz MOVE BC,E
 Ak je BC=0 [presva sa cel adresr] tak potom sa len aktulny adresr vymen
 so pecifikovanm. Ak cieov adresr a aktulny je ten ist, tak sa dan
 sbor iba presunie na koniec tohto adresra. Toto sa d vemi dobre poui
 na usporadvanie sborov v adresri.

 #2B: MOVEIX *
   I: BC..HL=interval sborov, E=cieov adresr
 Presunutie intervalom pecifikovanch sborov do adresra E. Funguje presne
 tak isto ako basicov prkaz MOVE E;BC TO HL. Sbory sa postupne jeden po
 druhom ponajc sborom BC a koniac sborom HL presvaj do adresra E
 presne tak isto ako v slube MOVEXX.

 #2C: CATX *
   I: BC=pecifikcia adresra
 Vpis katalgu pecifikovanho adresra. Ak B=1 tak sa bude vypisova aktulny
 adresr, ak B=0 tak sa bude vypisova adresr C. To, i sa bud vypisova aj
 zmazan sbory (CAT!) je uren nultm bitom systmovej premennej OPTIO.
 Ako print-rutinka sa pri vypisovan adresra pouva sluba DISP.

 #2D: SEAXXX *
   I: DE=adresa reazca, BC=dka reazca (max 10)
 Hadanie reazca vo vetkch mench sborov a adresrov. Je to vlastne to ist
 ako basicov prkaz SEARCH "reazec". To, i sa bud prehadva aj zmazan
 sbory (SEARCH!) je uren nultm bitom systmovej premennej OPTIO.
 Ako print-rutinka sa pri vypisovan pouva sluba DISP.

 #2E: CATXD *
   I: BC=pecifikcia adresra, L=slo mechaniky
 Pracuje presne tak isto ako CATX ale vypisuje katalg aktulneho adresra
 na diskete v mechanike L. Je to vlastne basicov prkaz CAT #L

 #2F: SEAXXD *
   I: DE=adresa reazca, BC=dka reazca (max 10), L=slo mechaniky
 Pracuje presne takisto ako SEAXXX ale prehadva men a adresre na diskete
 v mechanike L. Je to vlastne basicov prkaz SEARCH #L,"reazec"

 #30: START
 Start operanho systmu po nabootovan zo systmovej diskety. Pre uvatea
 nem iadny praktick vznam.

 #31: BASIC
 Interpret basicovch prkazov. Pre uvatea nem iadny praktick vznam.

 #32: FUNKC
 Interpret basicovch funkci. Pre uvatea nem iadny praktick vznam.

 #33: FORMX *
 Rchly formt diskety. Je to vlastne vkonn rutinka prkazu FORMAT.
 Pred zmazanm celej diskety sa ete vype otzka, ktorou je treba zmazanie
 diskety potvrdi.

 #34: MESSX
   I: HL=adresa textu
   O: CY=prznak reakcie uvatea
 Tto sluba rob nasledujcu innos: Najpr si odpamet obrazovku, potom
 zobraz tandartn chybov okienko, do ktorho nape dan text. V okienku
 sa tie vype toto: ENTER=OK/RTR,SPACE=ABORT. Po zobrazen okienka sa ak
 na stlaenie enteru alebo medzery. Ke uvate stla jednu z tchto dvoch
 klves, okienko sa zmae, na obrazovku sa vrti jej pvodn obsah a sluba
 v CY vrti informciu o tom, ak klvesu stlail uvate. Ak stlail ENTER
 bude C, ak medzeru bude NC.
 Pozor ! Dleit: Text nesmie by dlh ako 28 bajtov a mus koni bajtami
 #00,#C9. Teda naprklad mus vyzera nejak takto: DB 'bla-bla-bla',#00,#C9

 #35: SDMSX
   I: HL=adresa rutinky, alebo nula.
 Presmerovanie vpisov oznamov a chybovch hlasen. BS-DOS obsahuje v sebe
 rutinku, ktor vetky oznamy a chybov hlsenia vypisuje do rmika v
 hornej tretine obrazu. Niekedy ale ale vhodn, ak m uvate monos si
 napsa vlastn rutinku, ktor mu bude vypisovat chyby a reagova na
 klvesy tak ako sa to dizajnovo hod do jeho uvateskho programu.
 Prve na tento el je tu tto sluba.
 V registri HL mus by adresa obslunej rutinky na vpis chybovho
 hlsenia, alebo nula. Ak je v HL nula, nastav sa vntorne vektor
 vpisovej rutinky na defaultn vntorn rutinku.

 #36: UNERAX *
   I: BC=slo sboru
 Obnovenie danho sboru v aktulnom adresri. Ak BC=0 tak sa obnov zmazan
 adresr. Pri obnovovan adresra sa sbory v om neobnovuj automaticky.
 Slubami #36 a #37 sa d do pvodnho stavu obnovi disketa, ktor bola
 zmazan QuickFormtom (#33).

 #37: UNERIX *
   I: BC..HL=interval sborov
 Obnovenie sborov ponc BC-tym a po HL vtane. Obnovenie celho intervalu
 sborov naraz m tu vemi vek vhodu e je to ovea ovea ovea rchlejie
 ako obnovenie sboru po jednom a viac sa pri tom etr disketa - naprklad tak
 e FAT sa zapisuje iba raz na konci po obnoveni vetkch sborov v intervale.
 Poznmka: Ak nastane pri niektorom sbore z intervalu chyba "Can't unerase"
 tak vetky sbory z tohto intervalu ostan v pvodnom stave a ani jeden nebude
 obnoven.


    Bli popis k slubm #34:MESSX a #35:SDMSX

Uvatesk rutinka vypisujca oznam alebo chybov hlsenie dostane
potrebn informcie umiestnen v pamti - konkrtne v pomocnom dtovom
bufferi, ktorho bzov adresu [zaiatok] vracia sluba #00:GETVER v
registri IX.  V tomto bufferi sa pri potrebe vypsa nejak oznam alebo
chybov hlsenie nachadzaj takto daje:

 Buffer + #80 ... text oznamu alebo chybovho hlsenia ukonen bajtom #00
      + #C0 ... (dva bajty) fyzick slo sektora, pri ktorom dolo ku chybe
      + #C2 ... slo sektora na stope [vypotan z fyzickho sla]
      + #C3 ... farba, akou by sa malo vypisova hlsenie

Ak je slo sektora (#C2) nula, potom sa jedn o obyajn oznam (napr
generovan slubou #34:MESSX) a vtedy daje o sle sektora nemaj iadny
vznam.

Rutinka mus nielen vypsa hlsenie, ale aj spracova uvateovu vobu
medzi monosami RETRY alebo ABORT.  Na vstupe z rutinky mus by v
CARRY prznak poadovanej voby: CY=1 pre retry a CY=0 pre abort.

Pri prci me tto rutinka vyuva sluby #00 a #0F operanho
systmu. Nesmie ni robi s diskom a ani vola sluby dosu pracujce s
diskom. Zo sluieb dosu me vyuva len sluby #00 a #0F. Me meni
vetky registre.


Niektor systmov premenn BS-dosu:

   #03E0 XXX ....... stpec alebo ni bajt pozcie vpisu
   #03E1 YYY ....... riadok alebo vy bajt pozcie vpisu
   #03E2 COLOR ..... farba vpisu, ak vpis prebieha na obrazovku
   #03E3 OPTIO ..... rzne prznaky prce BS-dosu (jednotliv bity)
   #03EE DISK ...... slo aktulnej mechaniky [toto nastavuje sluba SETDRV]

 Bity systmovej premennej OPTIO:

   bit 0 .... spsob vpisu katalgu a prehadvania adresrov
              0 = berie do vahy iba platn sbory
              1 = berie do vahy aj zmazan adresrov poloky
   bit 1 .... spsob vpisu katalgu
              0 = vypisuje od zaiatku katalgu (od sboru 1)
              1 = vypisuje od aktulnej pozcie load-kurzora
   bit 7 .... natavanie disku pred zpisovmi operciami
              0 = vdy nanovo nata potrebn informcie z diskety
              1 = berie informcie z CACHE pamete (ak tam s)
   In bity s nepouit, ale z dvodu kompatibility ich treba necha nulov.

-------------------------------------------------------------------------------
      *** Strun info o formte diskety ***

BOOT sektor:
 fyzick slo: stopa 0 strana 0 sektor 1
 logick slo: 0
 Tento sektor obsahuje:

  #00-#01 ... Skok na systmov zavdza
  #02 ....... nepouit, obyajne je tu #80
  #03 ....... tu mus by #02 (znaka MB-02)
  #04-#05 ... poet fyzickch stp na disku (vinou 80 alebo 82)
  #06-#07 ... poet sektorov na stope (potaj sa od 1)
  #08-#09 ... poet povrchov na disku (tandartne 2)
  #0A-#0B ... poet sektorov na cluster (tandartne 1)
  #0C-#0D ... logick slo sektora DIRS
  #0E-#0F ... poet sektorov FAT (1 a 4)
  #10-#11 ... dka FAT (#400 * poet sektorov FAT)
  #12-#13 ... logick slo prvho sektora prvej FAT
  #14-#16 ... logick slo prvho sektora druhej FAT

  #20 ....... tu mus by #00 (znaka MB-02)
  #21-#24 ... dtum a as formtovania (kdovanie ako PC)
  #25 ....... tu mus by #00 (znaka MB-02)
  #26-#2F ... meno diskety
  #30-#3F ... rozrenie mena diskety
  #40-#5F ... systmov identifikcia diskety

 Poda bajtov oznanch ako "znaka" rozpoznva BS-DOS e sa jedn o
 disketu zo systmu MB-02. V boote s zapsan sla prvch sektorov FAT.
 alie sektory FAT sa daj najs priamo poda FAT - lebo obidve FAT s
 uloen ako sbory - riadne sekvencie sektorov.

DIRS sektor
 Jeho logick slo je zaznaen v BOOTe na offsete #0C-#0D
 Tento sektor obsahuje 256 tvorbajtovch poloiek, kde kad
 jedna poloka znamen jeden adresr.
 Vznam bajtov v tejto poloke:

  #00 ....... identifikcia poloky
              #80 = platn poloka a adresr existuje
              in = adresr neexistuje a neplatn poloka
  #01 ....... xor mena adresra (kli rchlejiemu hadaniu)
  #02,#03 ... logick slo prvho sektora adresra (len bity 0-13)

Adresrov sektory
 Logick slo prvho sektora kadho adresra je uloen v
 bajtoch #02-#03 poloiek v sektore DIRS.
 Obsahuj 32 bajtov poloky. Vznam bajtov v poloke:

  #00 ....... identifikcia poloky
              #90 = sbor obsahuje iba hlaviku
              #A0 = sbor obsahuje iba telo
              #B0 = sbor obsahuje aj hlavu aj telo
              #80 = sbor neobsahuje hlavu ani telo (nestva sa asto)
              In hodnoty znamenaj neplatn adresrov poloku.
  #01-#04 ... dtum a as vytvorenia sboru
  #05-#15 ... klasick magnetofnov hlavika
  #16-#17 ... adresa tela
  #18-#1B ... dka tela (#18=najni, #1B=najvy bajt)
  #1C ....... flagbajt tela
  #1D ....... atribty sboru
  #1E-#1F ... logick slo prvho sektora tela (iba bity 0-13)

 Tto 32-bajtov truktra sa odborne nazva "adresrov poloka".
 S tmito polokami pracuj sluby GETSUB a OWSUB.

 Nult adresrov poloka m pecilny vznam - je vdy platn a obsahuje
 takto bajty:

  #00 ....... identifiktor (vinou #80)
  #01-#04 ... dtum a as vytvorenia adresra
  #05 ....... slo nad-adresra (do ktorho patr tento adresr)
  #06-#0f ... meno adresra
  #10-#1f ... rozrenie mena adresra


File alocation table
 FAT obsahuje 16-bitov poloky. kad pecifikuje jeden sektor na diskete.
 Vznam jednotlivch bitov v poloke:

 Bit 15: 0 ... neobsaden, von sektor pripraven na pouitie
         1 ... obsaden, vyuit sektor [obsahuje daje alebo je chybn]
     14: 0 ... posledn sektor sboru
         1 ... prieben sektor, nie posledn
   0-13: [bit14=0] poet bajtov v sektore do konca sboru
         [bit14=1] logick slo nasledujceho sektora v sbore

 Pozor, ak bity 8-15 obsahuj sam jednotky, potom vznam hodnoty
 v bitoch 0-7 je takto:

   #00 ... pecilny sektor na sluobn cely [boot, zalohovac sektor]
   #F? ... nepouiteln sektor:
       #FC - chybn sektor [CRC error]
       #FD - chybn sektor [Rec. mot found]
       #FE - neexistujci sektor [druh strana jednostrannho disku]
       #FF - neexistujci sektor [za fyzickm okrajom diskety]

-------------------------------------------------------------------------------