Ked som si s pomocou svojho priatela MDV postavil
svoju prvu disketovu jednotku MB-01, bolo treba este vyriesit
dve dolezite veci. Jednou z nich bol obsluzny program, ktory zabezpeci rozhranie medzi
apliakaciami a formatom diskety (skratka operacny system). Vzhladom na to, ze som si pre
ulozenie suborov na diskety vymyslel uplne svoj vlastny format,
musel som si k nemu naprogramovat aj svoj vlastny operacny system pre obsluhu tohto formatu.
Tak vznikol BS-DOS, ako som tento operacny system nazval. Asi spravne tusite,
znamena to Busy Soft Ddisk Operating System. Verzie
az do 105 boli urcene pre moju staru MB-01, vyssie cisla verzii pre novsiu MB-02.
System BS-DOS sa sklada zo styroch hlavnych modulov. Prvym z nich je upravena romka.
Bezne sa pouziva moja BS rom 118, ale v principe je mozne pouzit
aj ine romky. Vzhladom na to, ze disketova jednotka MB-02 nie je vybavena automatickym
prepinanim vnutornej romky ZX Spektra pri vykonavani kodu na urcitych adresach
(#08, #1700...) ako niektore ine disketove jednotky, je potrebne, aby v jednej
zo 16kB baniek bola umiestnena romka, do ktorej su pridane odskokove vektory
na prislusnych miestach. Ma to tu nevyhodu, ze uz to nie je povodna originalna romka
a niektore programy, ktore si romku testuju, nemusia fungovat (ale prakticky som sa
este zo ziadnym takym nestretol). Ale zase to ma vyhodu v tom ze odskokove vektory sa
daju "napichat" hocikam. Napriklad prave vdaka vektorom na zaciatku beznych magnetofonovych
rutin #4C6 a #562 je zabezpecena kompatibilita s magnetofonom, o ktorej este bude rec.
Druhym modulom je ROM bios. Je to subor kratkych rutiniek (34 bajtov), ktore
sa staraju o prepinanie RAM baniek v MB-02 a zabezpecuju medzibankove volania podprogramov.
Treti modul je FDC bios (dlhy cca 600 bajtov), zabezpecuje komunikaciu s doskou
FDC radica a obsluhu disketovych mechanik. Vdaka tymto dvom kratkym modulom je cely
system lahko prenositelny na akykolvek iny hardware, jedina poziadavka na hardware je,
aby poskytoval aspon dve 16 kB banky prepinatelne miesto romky s moznostou zakazania
zapisu. Pri prisposobovani operacneho systemu na iny hardware staci prisposobit len tie
dva moduly a cely system, kedze s hardwerom komunikuje len cez ne, bude automaticky fungovat.
Poslednym modulom systemu je dosove jadro. Toto jadro zabezpecuje vyssie funkcie
systemu, ako napriklad cacheeovanie disku, rozhranie pre basic, kompatibilita s kazetakom,
sekvencny pristup k suborom a mnohe dalsie. Vsetky tieto funkcie budu podrobnejsie popisane
v nasledujucich castiach.
Ked som navrhoval operacny system, nechcel som aby sa disketova jednotka MB-01 a potom
neskor aj MB-02 stala tym, cim boli vsetky ostatne disketove jednotky na ZX Spektre:
novy standart, kompatibilny len sam so sebou. Chcel som, aby bola kompatibilna s niecim,
co je uz hojne rozsirene a na co je uz vela programov, aby nebolo treba pracne prerabat
vsetky programy pre nejake nove diskove ovladanie. Nasledujuca myslienka bude mozno vyzerat
trochu divne, ale ked sa nad tym hlbsie zamyslite, zistite ze je to pravda. Najrozsirenejsie
zaznamove medium pre ZX Spektrum je magnetofon. Nie ze by ho ludia nejak najviac pouzivali,
ide skor o to, ze rutinkami pre obsluhu magnetofonu je vybavene skutocne kazde ZX Spektrum,
a tiez kazdy seriozny program ktory umoznuje ukladat a citat nejake data z nejakeho disku,
umoznuje ukladat a citat data aj na magnetofon. A preto, inspirovany mikropocitacom
AP-01 od MDV a takmer vsetkymi emulatormi ZX Spektra,
som do operacneho systemu zaviedol kompatibilitu s magnetofonom.
Ako som uz vyssie pisal, kompatibilita s magnetofonom je zabezpecena odchytavanim
volani beznych magnetofonovych rutiek na adresach #4C6 a #562. To znamena, ze ak napriklad
nejaka aplikacia chce loadnut z pasky nejaky blok, zavola pre tento ucel rutinku na adrese
#562. Operacny system toto volanie "odchyti" a pozadovany blok nacita z diskety. Samozrejme
pre spravnu cinnost je potrebne, aby aplikacie pre magnetofonove operacie korektne vyuzivali
romkove load-save rutinky. To znamena ze nejake vlastne loadery fungovat nebudu. Basicove
prikazy LOAD, SAVE, VERIFY, MERGE volaju spominane rutinky, preto aplikacie, ktore robia
obsluhu magnetofonu z basicu, budu fungovat automaticky bez problemov.
Tento sposob prace priniesol pre operacny system jednu dolezitu vec. Adresar na diskete
uz nemozno chapat len ako obycajnu mnozinu suborov, ale ako nejaku virtualnu magnetofonovu
pasku, na ktorej maju dane subory presne definovane poradie, t.j. v akom poradi su na paske
nahrane. Operacny system si tiez musi pametat, ktory subor bol naposledy nahravany, alebo
inac povedane, kde je prave pretocena vyssie spominana virtualna paska. Hodnota, ktora
uchovava poziciu pasky, sa nazyva load kurzor. Funguje to tak, ze ak operacny system
zisti, ze aplikacia prostrednictvom rutinky #562 pozaduje loadnut nejaky blok, tak sa
aktualny adresar zacne prehladavat od aktualnej pozicie load kurzoru a do pameti sa nahra
prvy blok, ktory ma zadanu dlzku a flagbajt. V pripade, ak sa narazi na koniec adresara,
prehladavania pokracuje od zaciatku adresara (pretocenie pasky na zaciatok).
Ku kazdemu adresaru a suboru sa okrem mena da pristupovat aj jeho poradovym cislom. Toto bez problemov umoznuje mat na disku viac adresarov pomenovanych rovnako a tak isto aj v jednom adresari viac rovnako pomenovanych suborov (podobne ako na magnetofonovej paske). Pristup prostrednictvom poradoveho cisla umoznuje v mnohych pripadoch zrychlenie diskovych operacii, pretoze nie je potrebne vyhladavat objekt s danym menom medzi ostatnymi. Samotne mena suborov, adresarov a meno disku nie su nijak obmedzene - mozu vzdy obsahovat 10 akychkolvek znakov s kodmi od 0 do 255.
BS-DOS je vybaveny vyrovnavacou cache pametou pre zrychlenie diskovych
operacii. V tejto cahce sa pametaju dolezite informacie o diskete
(typ, format, aktualny adresar, fatka, adresarove sektory) - hlavicka
mechaniky tym padom nemusi stale chodit na nultu stopu citat tieto udaje
co niekedy aj dvoj-trojnasobne zrychli loadovanie viacblokovych programov.
Operacny system BS-DOS poskytuje programatorom okrem stantartneho ovladania
basicovymi prikazmi este aj priamo volatelne sluzby operacneho systemu,
t.j. definovane vstupne body podprogramov, pomocou ktorych je jednoducho
a lahko ovladatelna zo strojoveho kodu. Detailny popis sluzieb operacneho
systemu je sucastou uzivatelskej dokumentacie.
Pri navrhu operacneho systemu som prisne dbal na jednu vec. Je to absolutna odolnost
voci akemukolvek nasilnemu preruseniu (NMI, reset, vypnutie napajania) prave
prebiehajucej operacie v ktoromkolvek okamihu. Teda nie ze by system nejak dokazal
zakazat NMI alebo nebodaj reset, ale nikdy sa z tejto priciny nedostane do nejakeho
nekorektneho stavu. Avsak moze sa stat, ze ked ZX Spektrum resetnete uprostred
sejvovania nejakeho sektora, tento sektor bude pri citani vyhadzovat CRC chybu.
Avsak format disku je navrhnuty tak, aby v ziadnom pripade
neslo ku strate dat, ktore na disku uz boli ulozene.
Vzhladom na to, ze operacny system je umiestneny v RAM-ke, niekedy je potrebne
ho tam nejak dostat. Na tento ucel je MB-02 vybavena pametou EPROM, v ktorej
je umiestneny zavadzac operacneho systemu. Jeho ulohou je nahrat z diskety
do pameti boot sektor a spustit ho. Je to vlastne klasicke
bootovanie systemu presne ako ho pozname z PeCe.
A ako presne prebieha toto bootovanie ? Po resete alebo zapnuti ZX Spektra
sa spusti program umiestneny v bootovacej EPROM. Tento program caka na nejaku
disketu v prvej mechanike. Potom nacita z tejto diskety boot sektor
do pameti a spusti ho. V tomto boot sektore je kratky program, ktory
nainstaluje do pameti FDC bios. Vsetky dalsie diskove operacie sa
potom vykonavaju prostrednictvom tohto biosu. Kratky program v boot sektore
po instalacii biosu nacita a spusti MasterBoot sektor. Masterboot nie
je ani tak doslova sektor, je to subor o dlzke 2 kB. Tento masterboot potom
vypise systemovu konfiguracnu tabulku (na obrazku) a zabezpeci nacitanie
a instalaciu ostatnych komponentov systemu.
Ked su vsetky styri casti operacneho systemu na mieste, system sa pozrie
ci sa nahodou v nultom adresari systemovej diskety nenachadza subor
autosys. Ak nie, vykona sa velky 128k reset (prikaz sipka hore ^)
a system je pripraveny na pracu.
Ak sa subor autosys najde, nacita sa a spusti. Tento subor zinicializuje
vsetky systemove premenne basicu. Tato inicializacia nie je pre samotny
system nutna, avsak je potrebna pre dalsiu cinnost.
Na zaver suboru autosys sa vykona prikaz NEW "autoexe".
Subor autoexe je nieco ako PeCoidne config.sys a autoexec.bat
dohromady - uzivatel si tam moze dat vsetko, co chce aby sa mu vykonalo
po nabootovani. Napriklad nejake pekne privitanie :-)
Typicky priklad je instalacia ramdisku
a skopirovanie niektorych najcastejsie pouzivanych utilit na ramdisk
(aby boli vzdy po ruke). Vzhladom na to ze
sa spusta standartnym prikazom NEW "autoexe", moze byt subor autoexe
basic alebo bytes, zalezi plne na uzivatelovi. Na systemovej diskete
sys308.rar je takyto subor autoexe:
10 | NEW "ramdrive" |
20 | NEW "ramdinit" |
80 | IF PEEK 23681 THEN NEW $1"cdd":1';PEEK 23681,0:@1$0 |
90 | NEW "tma" |
100 | NEW "clock":^ |
Hned na zaciatku sa nainstaluje ramdisk. Ak to bola prva instalacia a ramdisk este nie je naformatovany, na riadku 20 sa zinicializuje a na riadku 30 sa do adresara 0 na ramdisku pomocou kopirovacieho programu cdd skopiruju vsetky subory ktore su na systemovej diskete v adresari 1. Ak ramdisk bol inicializovany uz niekedy predtym, jeho obsah sa nijak nemeni. Len pre pripomenutie: utilitka ramdinit nechava v systemovej premennej 23681 cislo inicializovaneho ramdisku. Potom sa riadku 90 spusti utilitka tma ktora upravi romku tak, aby po resete bolo biele pismo na ciernom podklade. Ked sa toto vsetko urobi, spustia sa hodinky clock. Tym sa uzivatel dozvie ze operacny system aj ramdisk su pripravene na pracu. Po stlaceni lubovolnej klavesy sa vykona velky 128k reset a uzivatel moze zacat pracovat.