BS DOS - operacny system pre MB-01 a MB-02

   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.
   Uvitacia obrazovka 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. Systemova konfiguracia
   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.

Nazad / back