ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt
OCR dokumentace SMEP 3S100101
3S100101
SMEP
OS MIKROS
PŘÍRUČKA PRO IMPLEMENTACI
1985
Vydáno pro potřebu uživatelů systému malých elektronických počítačů
Název: | OS MIKROS - Příručka pro implementaci |
Autor: | Zdenek Navrátil |
Určeno: | Řada uživatelských, publikací |
Číslo: | 3S100101 |
Vydáni: | První, rok 1985 |
Vydal: | Kancelářské stroje, k.ú.o., závod OSTRAVA, odbor SI |
Tisk: | Moravské tiskařské závody, závod 20, Novinářská 7, Ostrava |
Publikace neprošla jazykovou ani stylistickou úpravou | |
Náklad: | 1 200 výtisků |
(C) Kancelářské stroje
OBSAH
Příručka, kterou dostáváte do rukou, má sloužit jako pomůcka pro ty uživatele mikropočítačového operačního systému MIKROS, kteří si přejí tento systém upravit pro svoje specifické technické prostředky.
V příručce jsou popsány příkazy umožňující formátování disků, kopírování systému, relokaci už existujícího (vygenerovaného) operačního systému i metodu, jak je možné vygenerovat nový operační systém s upraveným BlOSem. Tato problematika tvoří náplň kapitol 2 až 4.
BIOSu je věnována kapitola 5. Zaobírá se jeho strukturou, požadavky, kterým musí vyhovovat jednotlivé drivery do něj zabudované a sumarizuje parametry a datové struktury potřebné pro rekonfiguraci systému ovládání souborů. Při studiu této kapitoly je nutno využívat zdrojový text BIOSu, na který se výklad odvolává. Tento zdrojový text se nachází na distribučním disku pod jménem BIOS.MAC.
U čtenáře se předpokládá znalost příruček "OS MIKROS - Příručka programátora" a "OS MIKROS Služobné programy - príručka uživateľa".
Příručka se odvolává na standardní MIKROS, takový jaký je implementovaný na Mikropočítačovém Vývojovém Systému (dále MVS) vyvinutém ve VÚVT Žilina. Tato implementace má následující parametry:
0. st. 1. sek. | BOOT (zaváděcí program operačního systému) |
0. st. 2. až 17. sek. | CCP |
0. st. 18. sek. až. 1. st. 19. sek. | BDOS |
1. st. 20. sek. až 26. sek. | BIOS |
Tato kapitola popisuje práci s programy, které slouží pro přípravu disku pro uloženi MIKROSu, generování nové verze systému pro zadaný rozsah, paměti a pro jeho kopírování.
Příkaz FORMÁT umožňuje naformátovat pružný disk pro MIKROS tak, že se mu jeví jako prázdný. Formátuje jej sekvenčně, t.j. posloupnost adres jednotlivých sektorů odpovídá fyzickému uložení těchto sektorů na stopě. Každý sektor přitom popíše vzorem E5H, což je pro MIKROS příznak prázdnosti disku. Připomínáme, že původní obsah disku se přitom zničí.
Protože pro naformátování disku se nedá využit vstupní vektor BIOSu (taková funkce tam není), je potřebné vykonávat ho pomoci kanálového programu příslušného řadiče disku a příkaz FORMÁT je tedy závislý na typu tohoto řadiče. Příkaz FORMÁT, který tvoří součást dodávaného programového vybaveni, umožňuje formátovat pružné disky jednoduché hustoty v jednotkách A a B, (bázová adresa řadiče je 78H).
Syntax a funkce příkazu:
FORMÁT
Po svém odstartování vypíše oznámení:
DISK TO FORMAT OR RETURN TO REBOOT
a čeká na zadání jména jednotky, ve které chceme disk formátovat. Odpovědi, které akceptuje, jsou malá a velká písmena A nebo B. V případě, že nechceme dále formátovat, zadáme znak a program konči. Po odpovědi A nebo B se vypíše žádost o založení formátovaného disku do zadané jednotky. Výpis má formu:
INSERT DISK TO X: THEN TYPE RETURN
Program čeká na založení formátovaného disku do požadované jednotky a na stlačení znaku
Potom disk naformátuje a po ukončení operace vypíše:
FUNCTION COMPLETE
a znovu si žádá zadání jména jednotky pro formátování. V případě, že nemůže formátování provést, (např. disk je chráněný proti zápisu), vypíše:
IMPOSSIBLE TO FORMAT THIS DISK, PERMANENT ERROR OCCURED
a znovu si žádá jméno jednotky.
Příkaz MOVOS umožňuje vytvořit verzi MIKROSu pro zadaný rozsah paměti. Program MOVOS je vlastně relokovatelný tvar MIKROSu, doplněný o relokační program.
Syntax příkazu a popis příkazu:
MOVOS XY *
Parametr XY představuje požadovanou hranici paměti v K bytech, pro kterou chceme MIKROS vygenerovat. Jestliže namísto tohoto parametru zadáme hvězdičku nebo otazník, vygeneruje se verze pro, maximální rozsah dostupné paměti. Hvězdička nebo jakýkoliv jiný znak na místě druhého parametru způsobí, že se po vygenerování tato verze nepřesune do svého úseku paměti a nepřevezme řízení.
Po svém spuštění vypíše MOVOS oznámení:
CONSTRUCTING XYK MIKROS V2.2
a po vygenerování požadované verze končí radou:
READY FOR "SYSGEN" OR
"SAVE XY MIKROSXY.COM"
Nyní je možné příkazem SAVE XY MIKROSXY.COM uložit obraz vygenerované verze jako soubor na disku, nebo bezprostředně použít příkaz SYSGEN k uložení vygenerovaného systému na nultou a prvou stopu.
V případě, že zadáme požadovanou horní hranici paměti (parametr XY) menší než 20 nebo větší než 64 MOVOS hlásí chybu:
INVALID MEMORY SIZE
a končí.
Příkaz SYSGEN slouží pro kopírování operačního systému z jednoho disku na druhý (kopíruje pouze první dvě stopy) nebo k uložení systému z diskového souboru nebo z paměti na první dvě stopy disku. Jak vidíme, je tento příkaz závislý na konkrétní implementaci systému.
Syntax a popis příkazu:
SYSGEN <jméno soubor>
<jméno souboru> udává soubor, který je nositelem dané verze MIKROSu. Tento soubor jsme získali po vykonání příkazů MOVOS a SAVE. Tento soubor se zavede do paměti a SYSGEN si žádá zadat kód disku, na který ho má z paměti uložit, výpisem:
DESTINATION DRIVE NAME (OR RETURN TO REBOOT)
Jestliže zadáme <CR> SYSGEN končí, jestliže zadáme kód disku, požádá nás o založení disku do požadované jednotky a odstartování zápisu systému na tento disk znakem <CR>
DESTINATION ON X, THEN TYPE RETURN
po provedení zápisu vypíše:
FUNCTION COMPLETE
a opět žádá kód disku pro zápis systému.
Při spuštění SYSGENu nemusíme parametr <jméno souboru> zadávat. V tomto případě žádá kód zdrojového disku, z kterého má vzít systém výpisem:
SOURCE DRIVE (OR RETURN TO SKIP)
Jestliže odpovíme znakem <CR>, předpokládá, že systém je připravený v paměti na tom místě, kam by ho načítal ze souboru a žádá o zadání kódu disku, na který ho má uložit. Tento způsob můžeme použít v případě, jestliže jsme před tím generovali systém příkazem MOVOS - je v paměti tam, kde ho SYSGEN předpokládá.
Jestli zadáme kód disku, žádá výpisem:
SOURCE ON X, THEN TYPE RETURN
založení požadovaného disku a spuštění jeho čtení znakem <CR> . Pak se ptá na kód disku, na který má systém uložit. Tento způsob můžeme použit, chceme-li vytvořit identickou kopii systému.
anebo o tom, jak jednoduché věci je možné dělat jednoduchým způsobem.
Instrukční síť mikroprocesoru 8080 neposkytuje možnosti pro relokaci programu, t.j. neumožňuje vytvářet kód, který je přemístitelný v operační paměti. Program, který byl přeložen pro konkrétní adresy, funguje pouze tehdy, je-li umístěný na těchto adresách.
Toto omezení je nutno řešit SW metodami, které jsou velmi různorodé co do složitosti i komplexnosti řešení.
Existuje samozřejmě obrovské množství aplikací, kde není relokace potřebná, avšak v operačních systémech, které si kladou za cíl alespoň trochu efektivně hospodařit s operační pamětí, je relokace nevyhnutelná. I když operační systém MIKROS takovéto nároky nemá, přesto se vyskytuje problém, jak zajistit rekonfiguraci systému do libovolné oblasti paměti. Jak víme, někdy je k dispozici 64K, někdy pouze 48K bytů RAM paměti apod., a protože se systém umísťuje obvykle na konci dostupné paměti, je nutné zajistit jednoduché prostředky pro jeho relokaci.
Na tomto místě je nutné zdůraznit, že požadujeme, aby byl program schopný relokace po dobu jeho zavádění do paměti! Metody, kdy překladač přeloží program do tzv. relokovaného tvaru, kterému pak musíme přidělit absolutní, adresy na pevno pomocí jiného "umisťovacího" programu (locator) náš problém neřeší, protože obvyklý locator nepracuje při zavádění programu, nýbrž absolutní adresy pro umístění programu je nutno poznat předem. Přidělování absolutních adres pomocí tohoto typu locatorů je tedy separátní činnost, která nemůže zohlednit momentální požadavky systému.
Metoda relokace systému popsaná v této kapitole je jednoduchá, úplně vyhovuje požadavkům na rekonfiguraci MIKROSu a je dostatečně obecná na to, aby mohla být použitá i pro jiné účely.
Popravdě řečeno, MIKROS se nerelokuje po dobu svého zavádění do paměti, zavádí se už v absolutním tvaru, ale tento absolutní tvar se připravuje popisovanou metodou. Tato metoda však najde své plné uplatnění v multiprogramové verzi MIKROSu nazvané MIKROM, kde obvyklé metody, jak už bylo řečeno, nevyhovují.
Na adresní prostor mikroprocesoru 8080, který tvoří 64K bytů, můžeme pohlížet jako na 256 stránek, z nichž každá zabírá 256 bytů, (256 = 100H). Znamená to, že adresní odkazy, které jsou vždy dvojbytové, můžeme interpretovat jako čísko stránky a pořadové číslo bytu na této stránce. Příklad: adresa 2030H nás odkáže na 30H-tý byte na 20H-té stránce. Instrukce odvolávající se explicitně na adresu, obsahující tuto adresu v druhém a třetím bytu, anebo, z našeho hlediska, mají v třetím bytu číslo stránky adresního prostoru a v druhém bytu pořadové číslo bytu V rámci této stránky. Přeložme tentýž program jednou od začátku stránky 0 (t.j. od adresy 0000H), a jednou od začátku stránky 1 (t.j. od adresy 0100H) a porovnejme generovaný kód v obou případech.
Obrázek 3-1 ukazuje, jak vypadá vygenerovaný kód při překladu ukázky programu od začátku stránky 0, a obrázek 3-2 ukazuje vygenerovaný kód pro tentýž program, ale přeložený od začátku stránky 1. (V ukázce nehledejte logický smysl, má sloužit pouze k demonstraci generovaného kódu).
Všimneme si, jak se liší oba vygenerované kódy. Vidíme, že posunutím programu o jednu stránku se o jedničku změní (zvětší) právě číslo stránky v adresních odkazech, které jsou v rámci tohoto programu. Číslo bytu v rámci stránky zůstalo nezměněné. Odkazy na adresy, které nejsou závislé na umístění programu v paměti, se nemění. (Volání služby MIKROSu se dělá přes adresu 0005, nezávisle na umístění instrukce CALL MIKROS v paměti).
obr. 3 - 1
ASEG ORG 0 MIKROS EQU 5 ; 0000 11 21(00) START: LXI D,OZNAM 0003 0E 09 MVI C,9 0005 CD 05 00 CALL MIKROS ; 0008 21 1B(00) LXI H,TABCIN 000B 19 DAD D 000C 5E MOV E,M 000D 23 INX H 000E 56 MOV D,M 000F EB XCHG 0010 E9 PCHL ; 0011 21 19 00 CINA: LXI H,25 ; 0014 32 1A(00) CXNB: STA TAM ; 0017 C3 00(00) CINC: JMP START ; 001A FF TAM: DB 0FFH ; 001B 11(00) TABCIN: DW CINA 001D 14(00) DW CINB 001F 17(00) DW CINC ; 0021 4D 49 4B 52 OZNAM: DB 'MIKROS$' 0025 4F 53 24 ; END
obr. 3 - 2
ASEG ORG 100H MIKROS EQU 5 ; 0000 11 21(01) START: LXI D,OZNAM 0003 0E 09 MVI C,9 0005 CD 05 00 CALL MIKROS ; 0008 21 1B(01) LXI H,TABCIN 000B 19 DAD D 000C 5E MOV E,M 000D 23 INX H 000E 56 MOV D,M 000F EB XCHG 0010 E9 PCHL ; 0011 21 19 00 CINA: LXI H,25 ; 0014 32 1A(01) CXNB: STA TAM ; 0017 C3 00(01) CINC: JMP START ; 001A FF TAM: DB 0FFH ; 001B 11(01) TABCIN: DW CINA 001D 14(01) DW CINB 001F 17(01) DW CINC ; 0021 4D 49 4B 52 OZNAM: DB 'MIKROS$' 0025 4F 53 24 ; END
Porovnáním kódu z obr. 3-1 a z obr. 3-2 zjistíme, že se mění byty na relativních, adresách: 0002H, 000AH, 0016H, 0019H, 001CH, 001EH a 0020H. Tato informace postačuje k tomu, abychom mohli umístit uvedený program například od stránky 13H, t.j. od adresy 1300H. K tomu musíme změnit kód ve výše uvedených bytech. Jak jej musíme změnit? K jejich obsahu připočítáme číslo stránky, od který má být náš program umístěný, t.j. 13H. Že je tomu skutečně tak, se přesvědčíme porovnáním našich výsledků s kódem na obr. 3-3, který byl získaný překladem našeho programu od adresy 1300H.
Jakým způsobem můžeme tedy vytvořit relokovatelný program? Stejným způsobem, jakým jsme to ukázali na našem demonstračním programu.
Relokační mapa našeho demonstračního programu vypadá následovně:
00100000 00100000 00000010 01001010 10000000 20H 20H 02H 4AH 80H
Popsanou metodu vytváření programů relokovatelných po stránkách paměti využijeme v následující kapitole při přípravě relokovatelného MIKROSu.
obr. 3-3
ASEG ORG 1300H MIKROS EQU 5 ; 0000 11 21 13 START: LXI D,OZNAM 0003 0E 09 MVI C,9 0005 CD 05 00 CALL MIKROS ; 0008 21 1B 13 LXI H,TABCIN 000B 19 DAD D 000C 5E MOV E,M 000D 23 INX H 000E 56 MOV D,M 000F EB XCHG 0010 E9 PCHL ; 0011 21 19 00 CINA: LXI H,25 ; 0014 32 1A 13 CXNB: STA TAM ; 0017 C3 00 13 CINC: JMP START ; 001A FF TAM: DB 0FFH ; 001B 11 13 TABCIN: DW CINA 001D 14 13 DW CINB 001F 17 13 DW CINC ; 0021 4D 49 4B 52 OZNAM: DB 'MIKROS$' 0025 4F 53 24 ; END
Metodu relokace popsanou v předcházející kapitole využijeme při přípravě relokovátelného MIKROSu. Vytvoříme dva operační systémy. První, budeme jej nazývat MIKROS0, uložíme od adresy 0000H, zatímco druhý, MIKR0S1, úplně totožný s prvním uložíme od adresy 0100H. Tyto dva systémy porovnáme pomocí programu GENMOD, který navíc doplní k obrazu paměti systému MIKROS0 informace potřebné pro relokaci tohoto systému.
Celý generovatelný MIKROS se skládá z následujících modulů:
BOOT
Modul umožňující zavedení operačního systému ze stopy nulté a první do paměti RAM (na adresy, na kterých má být
MIKROS uložený). Tento modul zabírá první sektor nulté stopy, popřípadě i druhý sektor (jeho délka je tedy až 100H bytů).
Bootovací procedura, která je v PROM paměti MVS, ukládá nultou stopu , disku 0 od adresy 3000H a odevzdává na tuto adresu
řízení. To znamená, že modul BOOT je vždy zavedený od adresy 3000H. (pokud je na začátku nulté stopy) a jak už bylo uvedeno,
má na starosti zavedení operačního systému (CCP+BDOS+BIOS) na adresy, které jsou pro tento systém určeny. Operační systém (ve
své absolutní formě) je na disku obvykle uložený ihned za programem BOOT, t.j. na sektorech 2 až 26 nulté stopy a sektorech 1
až 26 první stopy, přičemž první stopu nemusí zabírat celou. Kolik stop, popřípadě sektorů, systém zabírá, je ale věcí
konkrétní implementace.
CCP
Interpretátor příkazů je dostatečně známý z příručky "OS MIKROS Príručka programátora". Ve verzi 2.2 zabírá 800H
bytů a je naprosto nezávislý na technických prostředcích.
BDOS
Jádro operačního systému je taktéž popsáno ve výše uvedené příručce. Pro naše účely postačí vědět, že je
nezávislé na použitých, technických prostředcích, a že zabírá E00H bytů. Společná délka CCP a BDOSu je tedy 1600H bytů.
BIOS
Modul, který v sobě soustřeďuje HW závislosti (obsahuje drivery jednotlivých, přídavných, zařízeni). Jeho délka
je závislá za způsobu, jakým jej uživatel implementuje. Jediné jeho omezení na délku (ale pouze pro standardní systém) vyplývá
z požadavku, že všechny 4 moduly se musí vejit na dvě stopy diskety s jednoduchou hustotou. Dvě stopy mají kapacitu 1A00H bytů
(připomínáme; 1 stopa = 26 sektorů, 1 sektor = 80H bytů). Jestliže BOOT vejde do jednoho sektoru, a to je obvykle splnitelný
požadavek, pak pro BIOS zůstává 1A00H - 1600H(CCP+BDOS) - 80H(BOOT) = 380H bytů (což je sedm sektorů). Je potřebné mít stále
na paměti, že uvedený popis platí pro standardní systém (t.j. nultá a první stopa pro celý systém na disketě s jednoduchou
hustotou). Způsob implementace pro nestandardní disky je věcí každého uživatele a neměl by činit žádné těžkosti.
Všechny uvedené moduly obsahuje dodávaný MIKROSovský systém. Soubor BIOS.MAC obsahuje zdrojový text BIOSu, který je využit na MVS, a který uživatel může přizpůsobit svým technickým prostředkům, nebo jej úplně přepsat.
Soubory BOOT0 a B00T1 obsahují bootovací (zaváděcí) program pro zavedení systému od adresy 0000H (BOOT0.MAC). Pro nestandardní disky musí uživatel tento program upravit. Upozorňujeme ale, že program BOOT se zavádí vždy na stejnou definovanou adresu (pro systém MVS je to adresa 3000H) i přesto, že systém může být vygenerovaný pro jakýkoliv rozsah paměti.
HW nezávislé moduly CCP a BDOS jsou uložené v hexadecimálních souborech MIKSYS0.HEX (CCP+BDOS od adresy 0000H) a MIKSYS1.HEX (CCP+BDOS od adresy 0100H).
Pomoci těchto souborů a programů pro generování je možné vytvořit relokovatelný operační systém MIKROS.
Jak vypadá vlastní generování? Potřebujeme k tomu následující soubory (jsou dodávány na MIKROSovské disketě):
GENER.SUB | Submitovský soubor obsahující potřebné příkazy |
XSUB.COM | Program rozšiřující možnosti SUBMITu |
SUBMIT.COM | Příkaz pro submit |
L80.COM | Umisíovací program (locator) |
M80.COM | Makroassembler |
SLAP.COM | Ladící program |
PIP.COM | Program pro konverzi souborů |
GENHEX.COM | Program pro generaci hexadecimálního formátu |
GENMOD.COM | Program pro porovnání dvou hexadecimálních, souborů |
MIKMOV.COM | Relokační program |
MIKSYS0.HEX | CCP+BDOS od adresy 0000H |
MIKSYS1.HEX | CCP+BDOS od adresy 0100H |
BOOT0.MAC | Bootovací program ve zdrojovém tvaru pro zavedení n sektorů, počínaje druhým na nulté stopě od adresy 0000H |
BOOT1.MAC | Dtto BOOT0.MAC, ale od adresy 0100H |
BIOS.MAC | Drivery operačního systému ve zdrojovém tvaru |
Se soubory GENER. SUB, GENHEX.COM, GENMOD.COM a MIKMOV.COM blíže seznámíme během výkladu. Programy XSUB.COM, SUBMIT.COM, M80.COM, L80.COM, SLAP.COM a PIP.COM známe z příručky"OS MIKROS Služobné programy - Príručka uživateľa". 0 souborech MIKSYS0.HEX, MIKSYS1.HEX, BOOT0.MAC, B00T1.MAC, BIOS.MAC jsme se již zmínili, i když BIOSu je věnována samostatná kapitola. Rádi bychom na tomto místě zdůraznili, že pro samotné generování jsou z uvedeného seznamu nevyhnutelné pouze programy od makroassembleru (M80.COM) níže. V tomto případě ale musíme zdrojové programy překládat dvakrát, vždy pro jinou ukládací adresu a všechny příkazy musíme zadávat z konzoly (nemůžeme využít příkaz SUBMIT).
Čtenář, seznámený se služebními příkazy MIKROSu si potřebné změny, které z toho vyplývají, uvědomí sám.
Soubor GENER. SUB obsahuje všechny potřebné programy pro generování, a tak je možné toto generování, bez znalostí postupu, který bude popsaný níže, udělat jednoduchým operátorským příkazem:
SUBMIT GENER
a pouze sledovat průběh celého generování.
My na tomto místě celý soubor GENER.SUB uvádíme, přičemž jednotlivé příkazy souboru očíslujeme, jelikož se na ně budeme v dalším výkladu odvolávat.
1 XSUB 2 M80 ,=BIOS/R/M 3 L80 /P:1600,BIOS,BIOS0/N/X/M/E 4 L80 /P:1700,BIOS,BIOS1/N/X/M/E 5 ERA BIOS.REL 6 M80 ,=BOOT0/R/M 7 L80 /P:3000,BOOT0,BOOT0/N/X/M/E 8 ERA BOOT0.REL 9 M80 ,=B00T1/R/M 10 L80 /P:3000,B00T1,BOOT1/N/X/M/E 11 ERA B00T1.REL 12 SLAP 13 F100,2FFF,0 14 IBOOT0.HEX 15 RD180 16 IMIKSYS0. HEX 17 R200 18 IBIOS0.HEX 19 R200 20 G0 21 SAVE 27 MIKROS0.COM 22 ERA BOOT0.HEX 23 ERA BIOS0.HEX 24 SLAP 25 F100,2FFF,0 26 IB00T1 .HEX 27 RD180 28 IMIKSYS1.HEX 29 R100 30 XBX0S1.HEX 31 R100 32 G0 33 SAVE 27 MIKROS1.COM 34 ERA B00T1.HEX 35 ERA BIOS1.HEX 36 GENHEX MIKROS0 37 GENHEX MIKROS 1 100 38 ERA MIKROS0. COM 39 ERA MIKROS1.COM 40 PIP MIKROS.HEX=MIKROS0.HEX,MIKROS1 .HEX 41 ERA MIKROS0. HEX 42 ERA MIKROS 1. HEX 43 GENMOD MIKROS.HEX MIKROS. PRL 44 ERA MIKROS.HEX 45 SLAP MIKMOV. COM 46 IMIKROS. PRL 47 R700 48 G0 49 SAVE 39 MOVOS.COM 50 ERA MIKROS.PRL
Vypadá to složitě, ale jen na první pohled. Vždyť vice jak čtvrtina příkazů je ERA, t.j. výmaz již nepotřebných souborů a téměř polovina ostatních příkazů se opakuje.
Zopakujme si:
Chceme vytvořit posloupnost modulů CCP+BDOS+BIOS, která je nejprve umístěna od adresy 0000H a pak od adresy 0100H. Navíc před tuto posloupnost potřebujeme vložit modul BOOT, který se vždy zavádí od adresy 3000H, ale zbytek posloupnosti se (t.j. CCP+BDOS+BIOS) zavádí jednou od adresy 0000H, podruhé od adresy 0100H. Když takovéto dva obrazy paměti porovnáme, budou se právě ty byty, které se v obou obrazech liší, měnit podle toho, od které stránky paměti bude posloupnost modulů CCP+BDOS+BIOS uložena.
Nyní již můžeme rozebrat výše uvedený submitovský soubor a pomocí něj vysvětlit postup generování.
Zopakujme si:
Celý popsaný způsob má jednoduchou myšlenku:
Celý postup generování (generace) je zdlouhavý. Pro jeho urychlení a zmechanizování byl vytvořen submitovský příkaz GENER.SUB. Výsledkem generování je ale operátorský příkaz MOVOS, pomocí kterého během několika sekund, zadáním jediného parametru, umíme připravit verzi MIKROSu pro daný rozsah paměti.
V následujících odstavcích popíšeme podrobněji programy GENHEX a GENMOD. Práce programu MIKMOV (má smysl jenom ve spojení s vytvořeným MIKROS.PRL) byla vlastně popsána v kapitole 1 při popisu práce MOVOS.
Dříve, než se budeme zabývat příkazem GENHEX, seznámíme se s tzv. hexadecimálním formátem.
Základní jednotkou tohoto formátu jsou tzv. recordy, které mají následující tvar:
: DN UKAD TP B1 B2 ... BN CS CR LF , kde
Celý hexadecimální soubor je tvořen posloupností takovýchto recordu.
Příkaz GENHEX dělá konverzi souboru, v kterém je informace uložena v binárním formátu (t.j. z tvaru v jakém se ukládá program do paměti), do právě popsaného formátu hexadecimálního.
Syntax příkazu:
GENHEX <jméno souboru> <ukládací adresa>
<jméno souboru>
je jméno programu, který chceme zkonvertovat do hexadecimálního tvaru. <jméno souboru>,
jak víme, může mít v MIKROSu 2 části - vlastní jméno a verzi. Příkladem jsou SLAP.COM, PROG.MAC atd. Příkaz GENHEX nevyžaduje
udání verze ve <jméně souboru>. Jestliže uvedeme jakoukoliv verzi, popřípadě ji vůbec neudáme, vždy hledá konvertovaný
program pod verzí.COM a výsledný soubor (v hexadecimálním tvaru) ukládá s verzi .HEX. Jestliže už na disku existuje soubor se
stejným jménem i verzí, tak jej zruší. Když se vrátíme v submitovském souboru GENER.SUB k příkazu 36 (GENHEX MXKROS0),
zjistíme, že tento příkaz vezme binární soubor MIKROS0.COM a vytvoří hexadecimální soubor MIKROS0.HEX. V příkaze stačilo uvést
jen samostatné jméno souboru.
<ukládací adresa>
je volitelný parametr. Jestliže jej nezadáme, vytváří se hexadecimální soubor, který má
ukládací adresu 0000H, t.j. ukládací adresa prvního recordu je nula. Tento parametr se zadává jako hexadecimální cifry. V
příkaze 36 submitovského souboru GENER není ukládací adresa uvedená, znamená to, že vytvářený hexadecimální kod (soubor
MXKROS0.HEX) bude mít ukládací adresu 0000H, naproti tomu v příkaze 37 je explicitně uvedený druhý parametr (100), t.j.
vytvářený hexadecimální soubor (MIKROS1.HEX) bude mít ukládací adresu 0100H.
Vypisované zprávy:
HEX FILE WRITTEN
Tímto výpisem oznamuje program GENHEX, že zapsal vytvořený hexadecimální soubor, a že končí svou činnost.
BAD HEX DIGIT IN BASE
Jestliže v<ukládací adrese> je udaná nehexadecimální cifra, vypíše se uvedená zpráva a končí svou činnost.
NO INPUT FILE PRESENT
V případě, že soubor s jménem udaným jako první parametr příkazu, t.j. soubor jméno .COM není na specifikovaném disku, končí
GENHEX svou činnost uvedeným výpisem.
DISK IS FULL
Na disku není místo pro vytvářený hexadecimální soubor - disk je plný. GENHEX tímto končí.
NO.DIRECTORY SPACE
V adresáři standardního systému je místo pro 64 položek (souborů). Jakmile jsou všechny položky adresáře obsazeny (v adresáři
už není místo pro zapsání informací o vytvářeném hexadecimálním souboru), GENHEX končí.
DISK READ ERROR
Tato zpráva se vyskytne, jestliže došlo k chybě při pokusu o čtení z disku. Tato chyba není bezprostředně způsobena technickými
prostředky, např. poškozeným diskem - to by hlásil BDOS výpisem BDOS ERROR ON X: BAD SECTOR, ale jedná se o chybu, kterou
zjistil systém ovládání souborů (během čtení byl vyměněn pružný disk apod.).
CANNOT CLOSE FILE
Tady došlo k chybě při pokusu o uzavření vytvářeného hexadecimálního souboru. Podobně jako v předcházejícím případě nebyla
chyba bezprostředně způsobena technickými prostředky.
Příkaz GENMOD porovnává dva obrazy paměti uložené v hexadecimálním tvaru za sebou v jediném souboru a vytváří výstupní soubor, který obsahuje první z obou obrazů paměti doplněný o tzv. relokační mapu.
Syntax příkazu;
GENMOD <vstupní soubor> <výstupní soubor>
<vstupní soubor>
je jméno hexadecimálního souboru, který obsahuje dva hexadecimální obrazy toho samého programu. Jeden obraz tvoří program
přeložený od adresy 0000H, druhý od adresy 0100H. <vstupní soubor> pro GENMOD získáme z těchto obrazů jejich spojením
pomocí programu PIP. Příklad: Označíme-li. SOUBOR0.HEX hexadecimální soubor programu přeloženého od adresy 0000H a S0UB0R1.HEX
hexadecimální soubor téhož programu přeloženého od adresy 0100H, pak pomocí příkazu:
PIP SOUBOR.HEX=SOUBOR0.HEX,SOUBOR1.HEX získáme hexadecimální soubor SOUBOR.HEX, který je spojením souborů SOUBOR0.HEX a
SOUBOR1.HEX v uvedeném pořadí a slouží jako <vstupní soubor> pro program GENHEX. Je důležité, aby se každé dva
odpovídající byty obou dvou obrazů lišily maximálně o jednu. (Vyplývá to z použité metody popsané v kapitole 3). Jestliže tomu
tak není, udělali jsme při vytváření <vstupního souboru> pro GENMOD chybu, a ten nám ji oznámí (viz Vypisované zprávy).
<výstupní soubor>
obsahuje obraz programu přeloženého od adresy 0000H a relokační mapu. Struktura tohoto výstupního souboru je následující:
adresa | obsah |
0000 až 0000 | 00 |
0001 až 0002 | Délka programu |
0003 až 00FF | 00 |
0100 až 100+(délka programu - 1) | Vlastní program |
0100 + Délka programu | Zač. rel. mapy |
V uvedeném tvaru je program schopný relokace. Soubor obsahuje všechny informace potřebné pro umístění vlastního programu od začátku jakékoliv stránky paměti a pro jeho úpravu do "spustitelného tvaru". Z tohoto důvodu obvykle označujeme výstupní soubor programu GENMOD verzí .PRL (page relocatable). V případě, že na disku existuje soubor se stejným jménem jako <výstupní soubor>, GENMOD jej vymaže.
Jak vypadá vlastní relokační mapa? Je to posloupnost bitů, přičemž každý bit popisuje jeden byte samotného souboru. Jestliže se daný byte při relokaci mění, je hodnota odpovídajícího bitu "1", když se byte nemění, je hodnota tohoto bitu "0". Osmice relokačních bitů tvoří jeden byte, přičemž vyšší bit v bytu odpovídá nižšímu bytu programu. Tedy 7. bit popisuje nultý byte, 6. bit prvý byte, až nultý bit 7. byte programu. Osmý byte programu popisuje 7. bit následujícího bytu relokační mapy atd.
Vypisované zprávy:
Jakmile generování proběhne bez chyb, vypíši se 4 následující zprávy:
REL MOD END <adresa>
REL MOD SIZE <délka>
ABS MOD SIZE <adresa>
MODULE CONSTRUCTED
<adresa> ve zprávě REL MOD END udává délku samotného programu. Tato délka se ukládá do 1. a 2. bytu popsaného 100H bytového úseku na začátku vytvořeného modulu, tzv. hlavičky, <délka> ve zprávě REL MOD SIZE udává délku modulu včetně relokační mapy (je to délka programu + délka relokační mapy). V paměti se celý výstupní soubor připraví od adresy 0800H a <adresa> ve zprávě ABS MOD SIZE udává absolutní adresu konce tohoto souboru v paměti.
Výpisem
MISSING FILE NAME
oznamuje GENMOD, že nebylo udáno jméno vstupního, nebo výstupního souboru. Po tomto výpise jeho činnost končí.
Když zadaný vstupní soubor na disku není, oznámí to GENMOD výpisem:
INPUT FILE NOT PRESENT
a končí.
Jestliže některý znak ve vstupním souboru není hexadecimální, je to chyba, kterou GENMOD oznámí výpisem
BAD HEX DIGIT
a končí.
Vstupní soubor obsahuje 2 obrazy toho samého programu, které jsou proti sobě posunuty právě o 100H bytů. To znamená, že dva odpovídající si byty v obou obrazech se mohou lišit nejvíc o jedničku. Jestliže tomu tak není, je to chyba, kterou GENMOD oznámí výpisem:
RELOC ERROR AT <adresa>
kde <adresa> udává pozici obou porovnávaných bytů od začátku obrazu (t.j. jejich relativní adresu). Po tomto výpise GENMOD končí.
Není-li již místo na disku, nebo v adresáři, nemůže GENMOD zapsat výstupní soubor na disk, což nám oznámí výpisem:
CANNOT CREATE OUTPUT FILE
a skončí.
Ve vstupně - výstupním modulu (BIOSu.) jsou soustředěny všechny části operačního systému, které jsou závislé na technických prostředcích, na kterých je MIKROS implementovaný. Obsahuje drivery jednotlivých přídavných zařízení a všechny parametry pro implementaci systému ovládání souborů na různých typech disků. Implementovat BIOS na konkrétním mikropočítači v konečném důsledku znamená napsat BIOS pro tento počítač, popřípadě upravit BIOS dodávaný.
Mezi jádrem operačního systému (BDOSem) a BlOSem existuje jednoznačně definovaný interface (propojení). BDOS vstupuje do BIOSu jenom přes toto propojení, které je realizováno posloupností skokových instrukcí JMP na jednotlivé drivery (tzv. vstupní vektor BIOSu). Potřebné parametry odevzdává v registru C, popřípadě BC a naopak parametry z BIOSu získává v registru A, popřípadě HL. Pro zajištění návratu do BDOSu musí všechny drivery (služby BIOSu) kromě BOOT a WBOOT (viz dále) končit instrukcí RET. Struktura vstupního vektoru BIOSu je následující:
JMP BOOT | Vstupní bod do BIOSu po počátečním zavedení operačního systému z disku A do paměti. |
JMP WBOOT | Zajistí znovuzavedení modulů CCP a BDOS do paměti. Realizuje službu č. 0 (viz OS MIKROS Příručka programátora). |
JMP CONST | Zjistí připravenost znaku na konzole. |
JMP CONIN | Čti znak z konzoly. |
JMP CONOUT | Vypiš znak na konzolu. |
JMP LIST | Vypiš znak na tiskárně. |
JMP PUNCH | Vyděruj znak do děrné pásky. |
JMP READER | Přečti znak z děrné pásky. |
JMP HOME | Nastav hlavu na nultou stopu vybraného disku. |
JMP SELDSK | Vyber diskovou jednotku. |
JMP SETTRK | Nastav číslo stopy. |
JMP SETSEC | Nastav číslo sektoru. |
JMP SETDMA | Nastav DMA adresu. |
JMP READ | Čti nastavený sektor. |
JMP WRITE | Zapiš na nastavený sektor. |
JMP LISTST | Zjisti připravenost tiskárny. |
JMP SECTRN | Převeď logické číslo stopy na fyzické. |
Adresy, uvedené při jednotlivých skocích, jsou adresy podprogramů, které realizují požadované funkce. Je věcí implementátora systému, jakým způsobem tyto funkce zajistí. Důležité pouze je, aby podprogramy BIOSu splnily následující požadavky (konfrontujte prosím jednotlivé podprogramy s listingem BIOSu):
BOOT
Vstupní bod BlOSu, na který odevzdá řízení zaváděcí program (viz BOOT.MAC na distribuční disketě). Při vstupu na BOOT je už
celý operační systém na svém místě v paměti a úkolem této části BIOSu je inicializovat požadované přerušovací rutiny, nastavit
přes SETDMA adresu DMA na 0080H, inicializovat vstupní body v oblasti systémových parametrů, t.j. na adresu 0000H zapsat
instrukci skoku na položku vstupního vektoru JMP WBOOT, na adresu 0005H zapsat instrukci skoku do BDOSu (její adresní část
bude: adresa začátku BIOSu - E00H + 6) a na adresu 0004H zapsat 0 (indikace diskové jednotky A:). Potom se odevzdává řízení na
CCP skokovou instrukcí na adresu: adresa začátku BIOSu - 1600H.
WBOOT
Na tuto položku vstupního vektoru je odevzdáváno řízení při volání služby č. 0 (reset systému). Na adrese 0000H v oblasti
systémových parametrů je skoková instrukce právě tam. Úkolem WBOOTu je opětovné zavedení modulů CCP a BDOS z disku do paměti
na jejich určená místa a provedení všech funkcí, které dělá BOOT. Jediný rozdíl mezi BOOTem a WBOOTem je v tom, že BOOT už má
CCP a BDOS v paměti.
CONIN
Podprogram přečte ze vstupu konzoly znak do registru A a nuluje jeho sedmý bit. Podprogram čeká, dokud na konzole není znak k
dispozici.
CONOUT
Podprogram zabezpečuje výpis znaku z registru C na konzolu.
LIST
Znak z registru C se vypíše na tiskárně.
PUNCH
Znak z registru C se vyděruje do děrné pásky.
READER
Ze snímače děrné pásky se přečte znak do registru A.
HOME
Na vybraném disku nastaví hlavu na nultou stopu. Všimněme si listingu, že tato funkce nemusí vyvolat odpovídající fyzickou
činnost disku. V našem případě stačí, když v parametrovém bloku pro kanálový program nastavíme příslušný parametr (číslo
stopy).
SELDSK
Pro následující diskové operace vybere disk, jehož číslo je v registru C (0 pro jednotku A, 1 pro B atd.). Podprogram vrátí
v registrech HL adresu 16. bytové oblasti - hlavičky bloku diskových parametrů, patřící vybranému disku. Hodnotu HL = 0 vrátí
při pokuse vybrat neimplementovaný disk. Jako v předcházejícím případě podprogram může udělat jenom zápis do parametrového
bloku kanálového programu.
SETTRK
V registrech BC se zadává číslo stopy, na které se má udělat následující disková operace. Podprogram může opět nastavit tuto
stopu v parametrovém bloku kanálového programu.
SETSEC
V registrech BC se zadává číslo sektoru, s kterým se má udělat následující disková operace. Podprogram opět může nastavit tento
sektor v parametrovém bloku kanálového programu.
SETDMA
V registrech BC se odevzdává počáteční adresa oblasti paměti (v terminologii MIKROSu - DMA adresa), pro následující diskovou
operaci. Na této adrese, kterou SETDMA nastaví, se budou dělat všechny diskové operace až do doby, dokud tuto adresu
podprogram SETDMA nezmění. V tomto případě opět platí, že tento parametr se nastaví v parametrovém bloku.
READ
Podprogram čte jeden záznam o délce 128 bytů z vybraného disku, nastavené stopy a nastaveného sektoru na nastavenou adresu DMA.
V případě úspěšné diskové operace vrátí v registru A nulu, v opačném případě vrátí 1. BDOS nerozlišuje druhy chyb podle jejich
kódu, proto READ vrací jednotný chybový kód. Záznam o délce 128 bytů tvoří tzv. logický sektor MIKROSu. Jestliže je pro
konkrétní mikropočítačový systém výhodnější použít fyzický záznam o jiné délce (násobek 128-mi), musí být vlastní fyzický
přenos dělán přes buffer a logické sektory postupně vybírané z tohoto bufferu tak, aby při výstupu z podprogramu READ měl BDOS
na adrese DMA k dispozici jen svůj logický sektor.
WRITE
Podprogram zapíše jeden záznam o délce 128 bytů (logický sektor) na nastavený sektor na nastavené stopě na vybraném disku z
nastavené DMA adresy, Jestliže fyzický sektor použitých, disků nemá délku 128, ale je jeho násobkem, musí se BDOSem odevzdané
logické sektory sestavovat v bufferu do fyzického sektoru, a ten po jeho naplnění zapsat. Pro tento účel poskytuje BDOS při
vstupu do podprogramu WRITE v registru C následující informace:
0 - normální zápis sektoru
1 - zápis do adresáře
2 - zápis 1, sektoru nového alokačního bloku
V případě úspěšné diskové operace vrátí podprogram VRITE v registru A nulu, v opačném případě vrátí 1.
LISTST
V registru A vrátí hodnotu 0, není-li tiskárna připravena převzít vypisovaný znak, v případě její připravenosti vrátí hodnotu
FFH,
SECTRN
Podprogram zabezpečuje převod logického čísla sektoru na fyzické. Vstupními parametry jsou logické číslo sektoru v registrech
BC a adresa převodní tabulky v registrech DE, Logické číslo sektoru je vlastně indexem v této tabulce. Podprogram poskytuje v
registrech HL odpovídající fyzické číslo sektoru, MIKROS totiž nemusí při zápisu na disk postupovat sekvenčně, ale může po
stopě "skákat" z důvodů minimalizace přístupové doby. Dosáhne tohoto tak, že přečísluje sektory každé stopy. Je-li parametr
tohoto přečíslení rovný například 6, vypadá posloupnost logicky po sobě následujících sektorů takto: 1, 7, 13, 19, 25, 5, 11,
17 atd. Logickému číslu 0 potom odpovídá fyzický sektor 1, číslu 1 odpovídá sektor 7, číslu 2 sektor 13 atd. Z důvodu
kompatibility mezi jednotlivými systémy doporučujeme používat právě parametr 6.
BIOS obsahuje tabulky, které popisují parametry implementovaných disků, jakož i parametry použitého systému ovládání souborů, které se mohou měnit. Konfrontujte prosím následující výklad s listingem BIOSu.
Každé diskové jednotce přísluší 16 bytová oblast, kterou nazýváme hlavička bloku diskových parametrů. Tento blok obsahuje osm dvojbytových parametrů a implementátor systému musí dodržet jeho strukturu, která je následující:
XLT 0000 0000 0000 DIRBUF DPB CSV ALV
Význam každého z těchto parametrů:
XLT
Adresa převodové tabulky mezi logickým a fyzickým číslem sektoru. V případě, že logická čísla odpovídají fyzickým číslům
sektorů, obsahuje XLT nulu. Různé diskové jednotky se mohou odvolávat na tutéž převodovou tabulku, jestliže mají parametr
přečíslení stejný.
0000
Za XLT následují 3 slova (6 bytů) vyhrazená pro výpočty, které provádí systém ovládání souborů, Na jejich počáteční hodnotě
nezáleží.
DIRBUF
Adresa 128 bytového bufferu pro operace s adresářem. Všechny implementované diskové jednotky využívají stejný buffer.
DPB
Adresa bloku diskových parametrů dané jednotky. Diskové jednotky, které mají stejné parametry, se adresou DPB odvolávají na
tentýž blok diskových parametrů.
CSV
Adresa oblasti, do které BDOS ukládá vypočítané kontrolní součty jednotlivých sektorů adresáře. Pro každou diskovou jednotku
musí být rezervována samostatná oblast.
ALV
Adresa tzv. alokačního vektoru, v kterém si BDOS registruje obsazenost disku. Pro každou diskovou jednotku musí být rezervovaná
samostatná oblast pro alokační vektor.
Tyto hlavičky bloku diskových parametrů jsou v BIOSu seřazeny za sebou, počínaje hlavičkou nulté jednotky a konče hlavičkou poslední implamentováné jednotky. Jak bylo uvedeno v popisu podprogramu SELDSK, tento podprogram vrátí v registrech HL adresu popsané hlavičky toho disku, jehož číslo bylo při vstupu do tohoto podprogramu uvedeno v registru C.
Blok diskových parametrů, jehož adresa je uvedená v položce DPB, už obsahuje, konkrétní parametry implementovaných disků a má následující strukturu, kterou je nutno dodržet:
SPT 2 byty
Počet sektorů na stopě.
BSH 1 byte
Prostor na disku je souborům přidělovaný po alokačních blocích. Parametr BSH udává délku alokačního bloku ve formě 2**BSH = počet sektorů alokačního bloku (pro BSH = 3 je alokační blok dlouhý 8 sektorů). Délka alokačního bloku souvisí s kapacitou disku. Je-li maximální číslo alokačního bloku tak velké, že na jeho uložení jsou potřebné 2 byty, potom položka adresáře může popisovat pouze 8 alokačních bloků. Přitom položka adresáře nesmí popisovat menší jak 16K bytovou část souboru. To je ale nemožné, jestliže délka alokačního bloku je menší než 2K bytů.
BLM 1 byte
Maska alokačního bloku. Je to počet alokačních bloků - 1. (Pro BSH = 3 je BLM = 7.)
EXM 1 byte
Maska pro část (extension) souboru. MIKROS logicky rozděluje soubor na 16K bytové části, tzv. extension. Souvisí to s položkou adresáře. Jak víme z příručky "0S MIKROS Príručka programátora", obsahuje položka adresáře 16 bytů, v kterých se zaznamenávají čísla alokačních bloků obsazených souborem. Jestliže má alokační blok délku 8 sektorů, t.j. 1K, zaplněná položka adresáře popisuje právě 16K bytovou část souboru, t.j. 1 extension. V případě, že zvolíme alokační bloky o délce 16 sektorů, t.j. 2K bytů, vejde se do položky adresáře 16 * 2K = 32K bytů, což jsou 2 extensiony. Hodnota EXM + 1 udává právě počet 16K bytových částí souboru, které je možno popsat v jedné položce adresáře. Jak vidíme, souvisí EXM s délkou alokačního bloku (Pro BSH = 3 je EXM = 0) .
DSM 2 byty
Určuje kapacitu diskové jednotky v počtu alokačních bloků. Alokační bloky se číslují od 0 a DSM je maximální číslo alokačního bloku, který se ještě vejde na disk.
DRM 2 byty
Udává počet 32 bytových položek, rezervovaných pro adresář.
AL0,AL1 2 byty
Tyto 2 jednobytové položky představují dva byty alokačního vektoru. Jejich obsahem inicializuje BDOS mapu obsazenosti disků (alokační vektor). Každý bit těchto bytů popisuje obsazenost příslušného alokačního bloku. Hodnoty AL0 a AL1 souvisí s položkami DRM a BSH. Nechť alokační blok má délku 8 sektorů, t.j. 1K a pro adresář jsme rezervovali 64 32 bytových položek, t.j. 2K byty. Potom adresář zabere 2 alokační bloky. Dva bloky tedy musíme v alokační mapě indikovat jako obsazené. To docílíme tak, že nastavíme sedmý a šestý bit AL0 na jedničku a všechny ostatní bity nulujeme. AL0 a AL1 budou tedy inicializované hodnotami C0H a 0H.
CKS 2 byty
Udává počet sektorů adresáře, z kterých má BDOS dělat kontrolní součet.
OFF 2 byty
Počet stop na disku, které jsou rezervované pro operační systém. Jestliže udáme 2 stopy, nebude systém ovládání souborů využívat nultou a prvou stopu a bude předpokládat, že od druhé stopy začíná adresář.
Obsah distribuční diskety OS MIKROS
STAT.COM PIP.COM LOAD.COM DUMP.COM SLAP.COM SUBMIT.COM XSUB.COM ED.COM M80.COM CREF8.0.COM L80.COM LIB.COM FORMAT.COM SYSGEN.COM MOVOS.COM BOOT0.MAC B00T1 .MAC BIOS.MAC GENHEX.COM GENMOD.COM MIKSYS0.HEX MIKSYS1.HEX MIKMOV.COM GENER. SUB
MTZ O 21 85 R 47121
Kancelářské stroje, k. ú. o.
VÚVT | VÝSKUMNÝ ÚSTAV VÝPOČTOVEJ TECHNIKY |
datasystém
ÚVOD | Novinky | 8 Bitů | Příslušenství | Drobnosti | TTL | Kontakt