OldComp.cz

Komunitní diskuzní fórum pro fanoušky historických počítačů


Právě je 28.03.2024, 13:20

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]




Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 
Autor Zpráva
PříspěvekNapsal: 25.10.2019, 09:53 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
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.

Obrázek


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.

Obrázek

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

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
PříspěvekNapsal: 25.10.2019, 11:06 
Offline
Óm Nejvyšší

Registrován: 22.05.2013, 21:14
Příspěvky: 3642
Bydliště: Bratislava
Has thanked: 371 times
Been thanked: 788 times
Klobuk dole a velka poklona aj odo mna ! :god2:
A to hned z dvoch dovodov:
- Za snahu zahranit kopec diskiet ich "digitalizaciou" - prevodom na disk image suboru na PeCedle (teda, niezeby tie diskety uz same o sebe neboli digitalny zaznam, hehe)
- Za pokus o pouzitie LZ kompresie pre znizenie poctu vymen diskiet.

Mam ale zopar pripomienok a tipov.
tomascz píše:
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.
Je pravda ze cislovanie stran 0 a 2 nie je zrovna korektne, ale podobne ako s malou pauzou po indexe, ani s tymto WD radice problem nemaju, takze ak by sa naslo PeCedlo s WD radicom (existuje vobec take ??) tak ani tam nebude vadit strana cislo 2.
tomascz píše:
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
Ja osobne by som celu tuto "digitalizaciu" riesil ovela jednoduchsie - pomocou EI Managera by som vsetky programy priamo skopiroval na PeCedlovu disketu a hotovo :)
Samozrejme v pripade, ak chces zachovat nielen subory, ale aj samotny image diskety, tak potom by som tiez neprogramoval specialnu utilitku na kopirovanie diskiet po sektoroch (btw. nejde to aj v basicu prikazmi READ * a RESTORE * ?), ale korektne by som naformatoval novu D40/D80 disketu a vsetko na nu normalne skopiroval existujucimi utilitkami. Tym by som ziskal taku istu disketu, ale uz citatelnu na PeCi.
MDOS2 uz formatuje korektne, ale ak by si povedzme mal iba MDOS1, tak tam zase mozes vyuzit utilitku EI Format (sucast EI managera) ktora ide priamo na radic WD a formatuje D40/D80 diskety korektne.
tomascz píše:
přenos komprimovaný metodou LZW
Tak toto ma zaujalo asi zo vsetkeho najviac, pretoze kompresie typu LZ su moje najoblubenejsie a tato tema mi je velmi blizka - vid napriklad moj LzxPacker:)
Mas pravdu v tom, ze pre nase osembity je skomprimovanie niecoho pomocou LZ kompresie obcas velmi tazky oriesok, ale zase pri dobre napisanom algoritme to nie je az tak hrozne. V ramci pisania LzxPackera som si pre porovnanie vyskusal aj to ako rychlo by vedelo komprimovat ZX Spektrum. Originalnu ZX romku som dokazal skomprimovat za tri a pol sekundy, 40kB samych nul (akoze prazdne sektory) pod sekundu a 40kB absolutne nepakovatelnych dat (napr. nieco uz spakovane) mi trvalo kusok pod 12 sekund. Ziadny specialny slovnik fraz som nepouzival, prehladaval som priamo pakovane data tak, ako to robia programy ako spektracky TurboImploder, alebo znamy ZX7.

Ale napriek vsetkym vyhodam LZ kompresie, myslim si ze na taketo ucely by mohla uplne dobre postacit aj klasicka RLE kompresia - pakovanie rovnakych bajtov (wordov, dwordov) za sebou. Prazdne nulove sektory to spakne rovnako dobre, nepakovatelne sektory to tiez nespakuje, a aj na grafiku (kde sa opakuje vela rovnakych bajtov za sebou) je to tiez velmi dobre pouzitelne. Je pravda, ze taky basic je typicky priklad kde je LZ kompresia ovela ucinnejsia, ale zase velkost basicov nie je voci celkovej velkosti diskety az tak vyznamna, hlavne pokial su to hry / dema / aplikacie kde basic tvori len zopariadkovy loader.


Nahoru
 Profil  
 
PříspěvekNapsal: 25.10.2019, 11:40 
Offline
Pan Štábní
Uživatelský avatar

Registrován: 08.07.2013, 00:28
Příspěvky: 1554
Has thanked: 485 times
Been thanked: 634 times
Busy píše:
Samozrejme v pripade, ak chces zachovat nielen subory, ale aj samotny image diskety, tak potom by som tiez neprogramoval specialnu utilitku na kopirovanie diskiet po sektoroch (btw. nejde to aj v basicu prikazmi READ * a RESTORE * ?), ale korektne by som naformatoval novu D40/D80 disketu a vsetko na nu normalne skopiroval existujucimi utilitkami. Tym by som ziskal taku istu disketu, ale uz citatelnu na PeCi.
READ* a RESTORE* jsem zkusil jako první. Jenže hlava je po každém čtení poslaná "domů," což je na poškození mechaniky jako dělaný :suicide:

Tyhle jednoúčelový utilitky jsem si začal psát, protože jsem tehdy nevěděl o lepším způsobu. Věděl jsem, že existuje proximácký Tools Copy nebo Tools 80, které dokážou diskety kopírovat po sektorech, ale v paměti zabírají nějaký místo. Svýma utilitkama jsem do 48k dokázal sektorů vecpat o několik víc a snížit tak počet výměn disket.

Busy píše:
V ramci pisania LzxPackera som si pre porovnanie vyskusal aj to ako rychlo by vedelo komprimovat ZX Spektrum. Originalnu ZX romku som dokazal skomprimovat za tri a pol sekundy, 40kB samych nul (akoze prazdne sektory) pod sekundu a 40kB absolutne nepakovatelnych dat (napr. nieco uz spakovane) mi trvalo kusok pod 12 sekund. Ziadny specialny slovnik fraz som nepouzival, prehladaval som priamo pakovane data tak, ako to robia programy ako spektracky TurboImploder, alebo znamy ZX7.
Tohle já vědět dřív, tak se na LZW vyprdnu :-D Ty necelý 4 sekundy na 16kB jsou velmi lákavý, doufal jsem že podobnýho výsledku dosáhnu taky - jenže manažování slovníku sebere překvapivě moc času. 40kB samých nul (resp. stejných bajtů) za sekundu jsem dosáhnul v první sekvenční verzi LWZ (slovník se prohledával "od konce," takže poslední symbol se našel okamžitě). Teď jsem si stáhnul zdrojáky ZX7, po novém roce zkusím téma otevřít (možná se jedná o hledanou čtvrtou cestu?) :-)

_________________
より良い競争相手からソフトウェアを購入する (。◕‿‿◕。)
Ďábel se skrývá v detailu (staré technické rčení)


Nahoru
 Profil  
 
Zobrazit příspěvky za předchozí:  Seřadit podle  
Odeslat nové téma Odpovědět na téma  [ Příspěvků: 3 ] 

Všechny časy jsou v UTC + 1 hodina [ Letní čas ]


Kdo je online

Uživatelé procházející toto fórum: Žádní registrovaní uživatelé a 4 návštevníků


Nemůžete zakládat nová témata v tomto fóru
Nemůžete odpovídat v tomto fóru
Nemůžete upravovat své příspěvky v tomto fóru
Nemůžete mazat své příspěvky v tomto fóru
Nemůžete přikládat soubory v tomto fóru

Hledat:
Přejít na:  
cron
Založeno na phpBB® Forum Software © phpBB Group
Český překlad – phpBB.cz