Press "Enter" to skip to content

Ako vznikal HDD patch classic a VDTCreator

Vlastním MB-02+ už dlhé roky a vždy to bolo moje primárne zariadenie na ukladanie dát, hoci sa v priebehu tých rokov objavili aj iné možnosti (divIDE, divMMC a podobne). Vďaka tomu, ako a na čo ZX Spectrum s MBčkom využívam, sa považujem za obyčajného používateľa. Nikdy ma nenapadlo niečo pre MBčko vytvárať, pretože všetko čo som kedy potreboval, už bolo k dispozícii. Pred pár týždňami sa to ale zmenilo a ak máte chuť sa o tom niečo dozvedieť, čítajte ďalej.

Všetko sa začalo s príchodom MB-03+ Ultimate. Ako ich LMN začal postupne dodávať, preletela aspoň tunajšou oblasťou vlna nadšenia, ktorá ani mňa neminula a jedno som si zadovážil. Hneď vznikli drobné utilitky napríklad od Shreka, ktoré využívajú nové možnosti. Ja sa nepovažujem za codera, ale tá vlna chytila aj mňa a prispel som svojou trochou do mlyna v podobe drobných updatov v BSROM a BSDOSe. Začal som sa postupne vŕtať aj v ďalších veciach, keď mi nedávno v mailboxe pristála správa od istého nemeckého spectristu, v ktorom si medzi riadkami povdzychol, že kiež by sa aj MB-02+ oprášilo a občerstvil sa aj vývoj vecí preň.

Jeho ďalšie vety ma celkom prekvapili. Používajú len starý Dronov HDD patch 1.21, ešte bez DMA prenosov. Podľa všetkého ani VDT nevytvárali správne, pretože mali nejaké problémy s formátovaním virtuálnych diskiet. EasyHDD s jeho podpornými utilitami im nesadlo vôbec, tak ho nepoužívajú. Celkovo sa k nim dostalo prekvapivo málo z toho, čo sme tu používali my. Pýtal sa aj na to, či im neviem čosi-kdesi poupravovať, ale veľmi som mu nepomohol. Nakoniec mi to prišlo tak ľúto, že som sa rozhodol im pomôcť aspoň s HDD patchom.

Celkom im rozumiem, prečo im EasyHDD nesadlo. Ja osobne tiež stále používam starý Dronov HDD patch 1.61, pretože zvyk je železná košeľa a hoci klobúk dole aký Hood odviedol s EasyHDD kusisko práce, je aj na môj vkus už príliš “prekombinované”. No a keďže sa mi na disketách roky váľali zdrojáky HDD patchu od Drona, rozhodol som sa, že s tým trocha pohnem a vo viacerých fázach z toho spravím pohodlnú alternatívu k EasyHDD, pre konzervy ako som ja.

Medzi najväčšie výhody EasyHDD patrí, že sa netreba paprať s výrobou VDT (virtual disk table). Preto prvé čo som chcel spraviť, je aspoň poloautomatický generátor VDT, ktorý si sám zdetekuje zariadenie, nájde príslušnú partíciu a z jej geometrie vygeneruje VDT a uloží ju na disk(etu). A tak vznikol VDTCreator. Nakoniec som ho prepracoval tak, že aktuálne vám stačí odpovedať na jednoduché otázky, na základe ktorých vám vygeneruje VDT. Podporuje master aj slave zariadenia, partície vhodné pre HDD patch (typ 47h) vyhľadáva automaticky a automaticky sa rozhoduje či je zariadenie CHS, alebo LBA. VDT tabuliek si viete vytvoriť aj viacero v prípade, že máte na médiu viac partícií 47h. Zatiaľ ich nevie kombinovať, nevie kombinovať ani VDT zloženú z master a slave partícií, ale netreba zúfať. V budúcej verzii to tam plánujem dorobiť. Rovnako aj unattended režim, ktorý bude vhodný pre jedno záznamové médium s jedinou partíciou 47h. Pohodlnosťou používania sa to potom úplne priblíži EasyHDD, len práca s virtuálnymi disketami na peci je trocha odlišná a vyžaduje to iný prístup.

To, čo najviac odrádzalo od HDD patchu, by sme teda mali za sebou. V druhej fáze som sa chcel pozrieť na tie zdrojáky HDD patchu. Tá verzia 1.61, ktorú používam je už predsalen trocha stará a hodili by sa nejaké zmeny. Prelustroval som všetko čo som od Drona mal a najviac použiteľná vyzerala verzia 1.62. Tak som si ju skonvertoval z Promethea do textovej podoby, preniesol na notebook, zosjasmizoval a keď sa mi to už pekne prekladalo, začal som sa v tom vŕtať.

Opravil som DMA sekvenciu, celý zdroják som upratal a prehádzal tak, aby dával zmysel mne a nakoniec som s pomocou Busyho úprav prerobil pevnú geometriu na ľubovoľnú. V reále teda môžete používať aj iné formáty, ako len pôvodný 127×8. Potom som to začal testovať a vyskočil na mňa problém, ktorý je s HDD patchom odjakživa. Vďaka tomu, že používam Dronom navrhnutý formát 127×8, nikdy som na neho nenarazil, a tak som na to zabudol.

BSDOS totiž nikdy nerátal s tým, že by sa na diskete mohol použiť plný 2048sec formát, a tak v svojich interných mechanizmoch počíta s tým, že vo FAT posledná položka určujúca koniec, bude #FFFF. Ak však použijete plných 2048 secs, táto značka tam chýba, koniec vlastne neexistuje a tak sa nesprávne vypočítava voľné miesto na takejto prázdnej virtuálnej diskete. Opäť som vytiahol staršie Busyho úpravy a zmodifikoval som v BSDOSe rutinku na výpočet voľného miesta a zasa som to vytrápil do bludu. Až som odpálil jednu starú 8MB CFkartu. Pravdepodobne som na nej vyčerpal počet zápisov, pretože čítať z nej stále ide, ale zapisovať už sa na ňu nedá 🙂

Pri týchto testoch používam utilitku mbdcheck od Busyho, aby som mal istotu, že čo s patchom na ZXS zapíšem, budem schopný použiť aj na peci. Čím ďalej tým menej sa mi prestávalo páčiť, že na virtuálne diskety s plným 2048sec formátom hlási dvojchybu:
Error: Missing end mark 0xFFFF in FAT 1
Error: Missing end mark 0xFFFF in FAT 2

Po brainstormingu s Busym som sa rozhodol, že to takto v HDD patchi nechcem a vydám sa inou cestou, prirodzenejšou BSDOSu. Úpravu výpočtu voľného miesta som teda vyhodil a namiesto toho som upravil formatter, čo nás privádza k tretej vrstve tohto môjho malého projektu.

Počítal som s tým, že sa nájde software, ktorý nebude chodiť s HDD patchom vôbec, alebo nebude fungovať správne a bude treba ho opraviť, či upraviť. Už zo skúseností s EasyHDD viem, že prvé čo robí problémy, je pôvodná verzia ff17 (F02-30). Nepočíta s HDD patchom a tak bolo potrebné ff17 upraviť.

Prvá veľmi dôležitá úprava je, že treba HDD patchu dať vedieť geometriu, ktorú ideme použiť pri formátovaní. Zmena je veľmi jednoduchá a používa sa na to existujúca premenná DOSu na adrese #2306. Druhá úprava spočívala v pridaní unattended režimu, ktorý vo ff17 v spojení s HDD patchom ukrutne chýba. Takže som zaviedol novú premenú, ktorá umožňuje potláčať všetky nechybové diálogy. Pridaním jednoduchého FOR/NEXT cyklu do existujúceho BASICu tak už môžete formátovať aj rozsahy virtuálnych diskiet, nie len po jednej. Treťou zmenou bolo rozšírenie počtu sektorov na stopu. To odporučil Busy a nemal som dôvod mu neveriť, takže nová verzia podporuje šestnásť sektorov na stopu namiesto dvanástich. Tu už bolo treba väčšiu zmenu, pretože bolo treba kód posunúť čo najvyššie, aby sa pod neho vošla formátovacia sekvencia.

No a dostávame sa k poslednej zmene, ktorá súvisí s plným formátom 2048 sec, ktorý som spomínal vyššie. Riešenie navrhol opäť Busy a je oveľa čistejšie, pretože netreba vôbec upravovať DOS a voľné miesto sa zobrazí správne. Pri formátovaní sa do poslednej položky FAT vždy zapíše hodnota #FFFF, takže ku chybe už nebude dochádzať. V praxi to znamená, že pri 2048 sec formáte sa ukrojí 1kB z kapacity virtuálnej diskety, takže mbdcheck síce opäť vyhodí chybu, ale už je to chyba konzistencie veľkosti disku (Error: Inconsistent disk size. Physical: 2048 kB Logical: 2047 kB). Táto chyba už je však očakávaná a virtuálna disketa je úplne v poriadku. V podstate sa to dá klasifikovať len ako warning a z pohľadu DOSu je to úplne čisté riešenie, na rozdiel od tej prvej varianty. V praxi si to ani nevšimnete.

Podotýkam, že som si vedomý existencie ff20 od Shreka a ff40 od Hooda, ale obom chýba istá konzistencia s tým na čo som zvyknutý (nezabudli ste, že som konzerva?). Preto úprava ff17 so zachovaním jeho dizajnu a funkcionality bola pre mňa logickou voľbou. Zavážilo aj to, že aj nemci sa na tieto úpravy pýtali, takže som to nerobil čisto pre seba.

Počas relatívne masívneho testovania už som nenarazil na iné zádrhele, ale tým samozrejme negarantujem, že tam nejaké nie sú. A aké sú ďalšie plány? Ako som už spomínal, do VDTCreatora chcem dorobiť unattended režim a kombinované VDT. V HDD patchi už bude asi len kozmetika, keďže vyzerá, že funguje spoľahlivo. Plus to celé chcem preniesť aj na MB-03+ Ultimate, keďže plánujem primárne používať to. No a v pláne mám ešte jeden článok, kde spíšem ako sa to celé používa.

Ak hľadáte linku na použiteľné súbory, tak zatiaľ hľadáte márne, pretože som to ešte oficiálne neuvoľnil. Článok som spísal hlavne ako zápisky, kým to mám čerstvo v hlave a bolo mi ľúto ho hneď nevydať, keďže blog masívne zanedbávam. Ak ste niekto nedočkavý, WIP verziu nájdete v mojom github repozitári, môžete si to skompilovať, ale za funkčnosť zatiaľ neručím, keďže nad tým takmer denne niečo robím.

Ale od vydania nie som ďaleko, tak sledujte moju stránku, tam sa release určite objaví 😉

Be First to Comment

Leave a Reply

Your email address will not be published. Required fields are marked *