Formát systému MDOS

Co to je?

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.

Stručně u hardwaru D40

  • ROM 16 KB - využito 14KB, 2kB překrývá RAM
  • RAM 2 kB - sem se ukládají systémové proměnné D40
  • řadič WD2797, nová verze v Didaktiku Kompakt obsahuje jiný čip (myslím, že Intel 8xxx)

Stručně o firmware

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í.

Souhrn výhod

  • Má velice pohodlné a snadné ovládání z BASICu, jednoduchá syntaxe příkazů téměř totožná se standardním Basicem.
  • Má vlastní RAM se systémovými proměnnými a tedy prakticky nulové nároky na RAM Spectra, což usnadňuje konverzi mnoha programů z TAP verzí.

Souhrn nevýhod

  • Nemá služby, tj. standardní rozhraní pro přímé ovládání ze strojového kódu
  • Připojuje se pomocí dlouhého kabelu bez dobrých posilovačů sběrnice, což způsobuje vážné problémy u některých počítačů, zvláště u Didaktiku Gama.
  • Není přímo kompatibilní se ZX Spectrem 128kB, což lze napravit drobnou úpravou Spectra (myslím, že koliduje se stránkováním ROM)
  • Lze připojit pouze 2 disketové mechaniky (Diskface, nebo Betadisk umí celkem 4 různé mechaniky).

Formát disket

Kapacita

  • 3 1/2" - standardně 720 kB, maximálně asi 800kB
  • 5 1/4" - standardně 360kB, maximálně asi 410kB

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.

Adresování sektorů

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).

Struktura "BOOT" sektoru č. 0

bytyvýznam bytů v sektoru
128-191systémové proměnné s inf. o formátu - nepřehledné
192-201jméno diskety 10 znaků
202,203náhodně vygenerované 16bitové číslo k rozlišení 2 stejně pojmenovaných disket
204-207text "SDOS", coby označení diskety, aby MDOS poznal svou disketu
177bit 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
178počet stop na jedné straně diskety
179počet sektorů na jedné stopě
180nula
181-183ještě jednou to samé jako v bytech 177-179

Zbytek BOOT sektoru je nevyužit a můžete si tam zapsat co chcete.

FAT - File Allocation Table

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. byte2. byte3. byte
bity 7 - 4bity 3 - 0bity 11 - 8 bity 11 - 8bity 7 - 4bity 3 - 0
dolní bytehorní půlbytehorní půlbytedolní 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 - 8vž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ůlbytedolní bytehodnotavýznam
%1101=13%11011101=2213549Nedostupný sektor (např. boot sektor, sektory FAT a adresáře, neformátované sektory atd.).
%1101=13%11111111=2553583Vadný sektor (označen při formátování).
%1100=12%00000000=03072Prázdný soubor, tento odkaz do FAT je v adresáři pokud příslušný soubor má nulovou délku.
%0000=0%00000000=00Volný 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ář

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.

Struktura jedné položky adresáře

bytevýznam
0Přípona souboru (viz násl. tabulka)
1-10Jmé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,12Délka souboru - 0 až 65535.
13,14Počáteční adresa souboru, nebo startovní řádek jedná-li se o BASICový program.
15,16Délka BASICového programu bez proměnných, u binárních souborů (bytes) nemá význam.
17,18Vstupní bod do FAT - jedná se vlastně o log. adresu 1. sektoru, který je souborem obsazen.
19vždy kód 0
20Atributy, každý bit odpovídá jednomu atributu v pořadí HSPARWED (H-hidden = bit 7 ...)
21Třetí byte pro určení délky souborů je-li delší než 65535 bytů, obvykle soubory typu sekvence.
22-31Zaplněno hodnotou 229

MDOSu známé přípony souborů

  • P - spustitelný program v jazyce BASIC
  • B - bytes, obecný binární soubor
  • N - number array, číselné pole
  • C - character array, znakové pole
  • S - snapshot
  • Q - sequence, sekvence

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.

Použitá literatura: 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.

[ Zpět na hlavní stránku ]

Cygnusova stránka o ZX Spectru a kompatibilních počítačích byla napsána (přepsána) výhradně pomocí svobodného Open Source softwaru. V případě že naleznete chybu, nebo byste rádi cokoliv co se ZX Spectrem souvisí, neváhejte mi napsat na některý z mých emailů, nebo pracovně do zaměstnání. Stručně o mém webu se můžete dočíst zde.