MDOS je diskový systém disketových mechanik Didaktik D40, Didaktik D80 případně počítačů Didaktik Kompakt s vestavěnou D80.
Systém byl velmi dobře známý na území ČR a SR někdy v letech 1990 - 1995, vyráběla ho slovenská firma Didaktik Skalica ke svým počítačům Didaktik Gama, Didaktik M a samozřejmě Didaktik Kompakt, případně Didaktik Profi, který byl zabudovaný do klasického PC minitoweru včetně dalších rozšíření. Neujal se, protože konkurence PC se začínala projevovat a taky nebyl nejlevnější, ale přesto to byl velmi zajímavý počin.
Sám jsem kdysi D40 vlastnil, ale prodal jsem ji protože nepracovala tenkrát s modernějším ZX Spectrem 128kB, kdežto Betadisk byl pro něj přímo určen a 128kB lépe podporoval. Ačkoli později byla D40 (tím budu nadále myslet všechny modely) pro ZX Spectrum 128kB upravena a úprava nebyla složitá už jsem ji neměl. Takže některé drobnosti v textu jsem ověřoval Betadiskem za pomoci MDOSových disket. Takže ač zajímavý systém, na internetu je o něm bohužel materiálů velmi málo. Proto jsem se pokusil sepsat alespoň něco málo, co by případným zájemců o historii :-) mohlo pomoct.
MDOS obsahuje velice kvalitní rozšíření BASICu o příkazy pro práci s disketami, ale NEOBSAHUJE služby pro programy v assembleru, takže pokud změníte hardware k čemuž došlo u počítače Didaktik Kompakt a prý i u posledních modelů D80 stane se nová verze nekompatibilní pro všechny programy, které volaly rutiny přímo v ROM. Se změnou hardware totiž nutně musíte změnit některé rutiny DOSu a tedy nutně musí dojít k drobnému prodloužení, nebo zkrácení rutin a tedy k posunutí vstupních adres. Takže program, který volal přímo některou rutinu v ROM provádí skok sice a stejnou adresu, ale obsahující dávno něco jiného a obvykle se zhroutí.
MDOS umí pracovat s různými počty sektorů a různými počty stop (tracks) na disketě. Standardně se používá 40 nebo 80 stop a na každé stopě je 9 sektorů, v každém sektoru 512 bytů (např. 512*40*9*2=360kB - disketa je vždy oboustranná). Pokud ovšem chcete trochu zvýšit kapacitu diskety je možné formátovat 10 sektorů na stopě a o jednu, nebo dvě stopy více. Je ovšem nutné dbát na to, aby takový formát zvládla většina disketových mechanik a právě při zvyšování počtu stop mohou nastat problémy.
Pokud použijete místo 40 stopé 5 1/4" mechaniky 80 stopou, můžete formátovat diskety 5 1/4" na 720kB. V podstatě je to úplně stejné jako u Betadisku, oba systémy umí pracovat jen s DD disketami.
Jelikož MDOS nemá pevný počet sektorů na stopě jako Betadisk není tak snadné používat fyzické adresování sektorů pomocí čísla stopy a čísla sektoru na stopě. Místo toho se používá tzv. logické adresování což je vlastně pořadové číslo sektoru od začátku diskety tj. od sektoru 0 na stopě 0. Sektorů na jedné disketě může být nejvýše 1640=82*10 (82 stop ale nedoporučuju). Omezení je čistě fyzické, ve FAT 12 je ještě značná rezerva (viz. HD diskety na PC).
byty | význam bytů v sektoru |
---|---|
128-191 | systémové proměnné s inf. o formátu - nepřehledné |
192-201 | jméno diskety 10 znaků |
202,203 | náhodně vygenerované 16bitové číslo k rozlišení 2 stejně pojmenovaných disket |
204-207 | text "SDOS", coby označení diskety, aby MDOS poznal svou disketu |
177 | bit 3 = log 1 při formátování na 40 stopé mechanice byl použit dvojitý krok, bit 4 = log 1 oboustranný formát diskety |
178 | počet stop na jedné straně diskety |
179 | počet sektorů na jedné stopě |
180 | nula |
181-183 | ještě jednou to samé jako v bytech 177-179 |
Zbytek BOOT sektoru je nevyužit a můžete si tam zapsat co chcete.
MDOS používá podobně jako MS DOS 12ti bitovou FAT, která umožňuje ukládat soubory i do sektorů na přeskáčku tj. že mezi jednotlivými sektory souboru mohou být umístěny i sektory jiných souborů. Tomu se říká fragmentace souborů (viz. DEFRAG na PC). Fragmentace je způsobena tím, že po smazání souboru, který byl uložen před jiným souborem uložíte soubor delší než smazaný. Aby nový soubor mohl být uložen musí být rozdělen na (nejméně) dvě části. První část zaplní prostor uvolněný smazáním souboru a druhá část volné místo za následujícími soubory (s tou druhou částí se vlastně zachází stejně jako s celým souborem - celý algoritmus je opakován dokud není celý soubor zapsán na disketě). FAT potom slouží k určení sektorů jenž patří k uloženému souboru. Totiž v adresáři je číslo položky ve FAT (to je první sektor), obsahem této položky je číslo další položky (další sektor) ... nakonec položka ve FAT neobsahuje číslo další položky, ale obsahuje kód, který říká, že tento sektor byl poslední. To celé vytváří tzv. cestu ve FAT. Poloha položky ve FAT pak odpovídá konkrétnímu sektoru na disketě (každý sektor na disketě má svou položku ve FAT přičemž nezáleží na jejím obsahu).
Položka ve FAT je 12-bitová, ale byte má 8 bitů, proto se do 3 bytů ukládají 2 položky FAT a to následovně:
1. byte | 2. byte | 3. byte | |||
---|---|---|---|---|---|
bity 7 - 4 | bity 3 - 0 | bity 11 - 8 | bity 11 - 8 | bity 7 - 4 | bity 3 - 0 |
dolní byte | horní půlbyte | horní půlbyte | dolní byte |
Jeden sektor MDOSu má 512 bytů, z toho plyne, že se do něho vejde 341 položek FAT a půl bytu zbyde. Tomu se říká zalomení FAT. Do 4 bitů zalomení FAT se ukládá hodnota 13 viz. malá tabulka (512. byte v sektoru).
512. byte v sektoru | |
---|---|
bity 11 - 8 | vždy kód 1101 |
horní půbyte |
Pevně doufám, že jsem v tom při přepisu a přeformátovávání stránky nenadělal víc chyb, než v tom bylo.
Protože, položka má 12 bitů je možné do ní uložit číslo 0 až 4095. Sektorů na jedné disketě může být nejvýše 1705 (ve skutečnosti při formátu 82 stop x 10 sektorů 1640 sektorů na disketě). Takže čísla větší než 1705 nemohou být číslem položky ve FAT, toho se využívá a některá taková čísla mají zvláštní význam, ale na druhou stranu se tím znemožňuje použití MDOS formátu na větší kapacity disket, což sice neumí HW, ale co kdyby.
horní půlbyte | dolní byte | hodnota | význam |
---|---|---|---|
%1101=13 | %11011101=221 | 3549 | Nedostupný sektor (např. boot sektor, sektory FAT a adresáře, neformátované sektory atd.). |
%1101=13 | %11111111=255 | 3583 | Vadný sektor (označen při formátování). |
%1100=12 | %00000000=0 | 3072 | Prázdný soubor, tento odkaz do FAT je v adresáři pokud příslušný soubor má nulovou délku. |
%0000=0 | %00000000=0 | 0 | Volný sektor, sem mohou být zapsána data. |
Konec neprázdného souboru je označen takto 3584+(délka MOD 512) - pokud od této položky zase odečtete 3584 získáte tak počet bytů v posledním sektoru souboru. To může usnadnit práci při jeho načítání pomocí vlastních rutin.
Adresář je umístěn v sektorech 7 až 14 (jako obvykle číslováno od 0). Adresář je v podstatě jednoduchá tabulka, jehož každá položka má 32 bytů a přesně definovanou strukturu. Protože obsazuje 8 sektorů (tj. 4096 bytů) lze snadno spočítat, že se do něho vejde celkem 128 položek, tj. 128 souborů lze uložit na jednu disketu systému MDOS.
byte | význam |
---|---|
0 | Přípona souboru (viz násl. tabulka) |
1-10 | Jméno souboru, je-li kratší než 10 znaků je doplněno kódem 0 (u Betadisku jsou to vždy mezery - tj. kód 32). |
11,12 | Délka souboru - 0 až 65535. |
13,14 | Počáteční adresa souboru, nebo startovní řádek jedná-li se o BASICový program. |
15,16 | Délka BASICového programu bez proměnných, u binárních souborů (bytes) nemá význam. |
17,18 | Vstupní bod do FAT - jedná se vlastně o log. adresu 1. sektoru, který je souborem obsazen. |
19 | vždy kód 0 |
20 | Atributy, každý bit odpovídá jednomu atributu v pořadí HSPARWED (H-hidden = bit 7 ...) |
21 | Třetí byte pro určení délky souborů je-li delší než 65535 bytů, obvykle soubory typu sekvence. |
22-31 | Zaplněno hodnotou 229 |
Tak to je asi všechno co jsem chtěl napsat. Další podrobnosti se můžete dozvědět z malého sešitu "Rutiny ROM D40" od Proximy z roku 1993, a také z manuálu k D40.
Rutiny ROM D40 od Proximy a nějaké ZX Magazíny. V tomto případě jsem některé informace ověřoval čtením disket MDOSu na Betadisku.
Stránka byla už zobrazena: 177 ×
Aktualizováno: 13. 10. 2018, 18:42
Stránka načtena za 0.00252 sekund.