Přispěju svou troškou do poklidných vod MDOSu, teprve nedávno rozvířených uvedením D80mini. V roce 2014 (cca rok a půl předtím než jsem se vrhnul na RIDE) jsem se zabýval čitelností disket MDOSu 1.0 pod PC. Zjistil jsem, že to prostě nejde a to hned ze dvou důvodů. Zaprvé tvůrci MDOSu 1.0 v roce 1991 zkrátili mezeru mezi index pulzem a prvním sektorem o více než 80 %, což bylo pro tehdy první D40-ky s řadičem Western Digital zkousnutelné (problémy to začalo dělat až když se přešlo na intelácký řadič). A zadruhé, i kdyby se dnes našlo PC s WD řadičem, většina utilit na jednoduchý dump by diskety stejně nepřečetla, protože tvůrci MDOSu 1.0 udělali další chybu a to v číslování stran – místo obvyklých 0 a 1 jsou strany číslovány jako 0 a 2.
V roce 2014 už jsem se pomalu začínal bát, jestli mé originálky pro didaktik jsou ještě čitelné nebo už ne (když to trochu přeženu, tak dnes vím, že zápis na nich bude dobře čitelný i za dalších 20 let). Pustil jsem se tedy do studování
Komentovaného výpisu MDOSu (děkuji Kvaksoftovi za brilantní práci) s představou vytvořit (jednu) utilitku, která by dokázala obsah diskety MDOSu 1.0 sektorově převést na 3.5" 2DD disketu formátovanou pod PC. Brzy bylo hotovo a utilitka dokázala na Didaktiku Kompakt s jednou vestavěnou mechanikou disketu převést tak, že sektory "zdrojové" diskety MDOSu načetla do paměti "všude kam se dalo" (celkem 97 sektorů) a po stisku libovolného tlačítka je chrstla na "cílovou" disketu PC.
Zkrátím to, nakonec vzniklo několik utilitek na převod disket MDOSu 1.0 na diskety PC, každá pro trochu jiný případ použití, všechny v setu utilitek prostě nazvaného "
MDOS1 to PC" (
GitHub):
※ 1 mechanika, nekomprimovaný přenos (původní návrh); vhodné pro už komprimovaná data (typicky diskety od Proximy),
※ 1 mechanika, přenos komprimovaný metodou LZW; vhodné pro dobře komprimovatelná data (typicky vlastní tvorba v Basicu nebo obrázky)
※ 2 mechaniky, nekomprimovaný přenos.
Od zavedení komprese jsem si sliboval jedinou věc, a to snížení počtu výměn diskety. To se pro dobře komprimovatelná data povedlo (naopak například pro herní kompilace měl komprimovaný přenos malý až žádný efekt). Bohužel jsem nečekal, že komprese bude na Z80 trvat až tak dlouho (dekomprese byla v řádu sekund, ale i tak kompletní přenos 720kB Poster Makeru trval hodinu). Původní naivní sekvenční hledání ve slovníku jsem tedy nahradil binárním hledáním – to zkrátilo dobu komprese o více než polovinu, ale spoustu času pro změnu spoklo udržování slovníku v seřazeném stavu. Nicméně binární cesta pro kompresi se zdála být tou správnou, proto jsem vytvořil ještě třetí verzi, kde jsem slovník bral jako neuspořádaný blob záznamů, nad kterým jsem vytvořil
AVL strom (automaticky vyvažovaný binární strom, viz animace z Wikiny vespod), abych záznamy mohl rychle vyhledávat. To opět snížilo dobu komprese o cca polovinu (teď už tedy v průměru o 75 % vůči původnímu naivnímu návrhu, ale i tak se Poster Maker převáděl přes 20 minut)… Takže poučení z této příhody zní, že komprimovaný přenos není pro obecná nekomprimovaná data nijak vhodný (musí se opravdu jednat o Basic, obrázky nebo jiná dobře komprimovatelná data) a ledaže se objeví nějaká magická čtvrtá cesta, zůstává komprese pomocí LZW v setu utilitek spíše jako kuriozita.
Aktuálně je MDOS1-to-PC vydáno ve
verzi 1.6.1 (
GitHub, kód je v češtině, dokumentace v češtině a ze setrvačnosti i v angličtině). Všechny tři utilitky se nahrávají na a spouští ze začátku VideoRAM (odkud se eventuelně samy přesunou jinam), např.
Kód:
LOAD *"2DRVS" SCREEN$
RANDOMIZE USR 16384
Utilitky pracující na jediné mechanice (
1DRV.B a
LZW*.B) s uživatelem komunikují prostřednictvím změny barvy v borderu a pípnutí, protože obrazovka je během jejich činnosti obsazena daty. Postupně tedy:
※ zelená barva (green) – utilita požaduje vložení "zdrojové" diskety MDOSu a stisknutí libovolné klávesy,
※ azurová barva (cyan) – utilita zobrazila formát zdrojové diskety; má-li "cílová" disketa PC stejnou geometrii, přenos se spustí stiskem klávesy
P, v opačném případě utilita končí,
※ bílá barva (white) – utilita pracuje,
※ černá barva (black) – některý ze sektorů zdrojové nebo cílové diskety je vadný; tady většinou nemá moc cenu pokračovat v přenosu, jedině že se jedná o prázdný sektor ke konci diskety,
※ žlutá barva (yellow) – utilita požaduje vložení cílové diskety PC a stisknutí libovolné klávesy.
Utility se dají "pouknout" a tím např. změnit počet pokusů čtení/zápisu sektoru (předtím než se border změní na černou) nebo "fakenout" počet cylindrů na zdrojové disketě (typicky utilita se nechá přesvědčit, že 40-stopá disketa v D80 má ve skutečnosti 41 stop, čímž se eliminují případné problémy ve standardních rutinách MDOSu, které utilita využívá – 40 stop ideálně v kombinaci s jedinou stranou bylo totiž pro MDOS vždy trochu "fuzzy")
Pro kompletní seznamy adres a hodnot vizte dokumentaci.
Do závorky jsem dal slůvko momentálně. Všechny zmíněné utilitky jsou "nedestruktivní," tj. zdrojovou disketu pouze čtou. Protože mám ale přes 60 disket s herními kompilacemi, které se mi nechce převádět na té jediné D80 mechanice kterou mám, rád bych ještě vyrobil čtvrtou utilitku, která pro účely PC "destruktivně" posune začátek stopy o trochu dál. Pro každou stopu to tedy bude znamenat, že utilitka ji načte, přeformátuje a zapíše – taková levnější alternativa za Kryoflux
Počítám s tím, že utilitka uživatele hned zkraje vyzve, aby ji nepoužíval na originální diskety, které by z historických důvodů měly zůstat zachované v původní podobě pro další generace.
Toliko jsem vám chtěl k tomu říct. Enjoy