Cygnus PCOPY

Úvod

Pro všechny uživatele Betadisku je dobře známým faktem, že diskety formátované v TRDOSu jsou na PC většinou zcela nečitelné, nebo čitelné jen s obtížemi (speciální software samozřejmě nutný). Příčinou je ze strany PC nepodporovaná velikost sektorů a absence číslování stran diskety způsobená nedokonalostí TRDOSu. Do určité míry to lze obejít jednak formátováním diskety na PC pomocí specielního programu (např. hofrmt), ten existuje jenom pro DOS a druhak použitím specielního programu (amd, hobeta, zx tools), který takové diskety přečte, což opět funguje většinou jen v DOSu, protože takový program potřebuje přímý přístup k řadiči. Kromě specializovaných utilitek umí TRDOSové diskety číst i emulátor RealSpec a to bez nutnosti diskety přeformátovávat, ale čte je často špatně a s chybami. Ačkoli skutečný Betadisk tutéž disketu přečte zcela bez problémů.

DOS se už nějaký ten rok nepoužívá a díky tomu může být problém nalézt nějaké vhodné PC na němž mohou být výše zmíněné programy spuštěny, je proto lepším řešením na PC zapsat data na FAT12 disketu, což podporuje naprostá většina operačních systémů (nejenom PC) a následně FAT12 diskety číst na ZX Spectru pomocí TRDOSu a získaná data zapisovat na TRDOSovou disketu opět pomocí TRDOSu.

Historie

Jedním z důvodů, proč jsem se tím začal zabývat, byla potřeba na Betadisku vytvářet TRDOSové diskety z TRD imagů, kterých lze z internetu získat spoustu, ale bez možnosti zápisu na skutečnou disketu (např. pod Linuxem to možné není) je takový image použitelný nejvýše v emulátoru, ne však s reálným ZX Spectrem. S programem PCopy je možno image zkopírovat na FAT12 disketu a na ZX Spectru z image udělat skutečnou disketu bez omezení hardwarem PC a instalovaným operačním systémem.

Nadějně vypadal program PCopy od CBM (Miroslav Jelínek). CBM napsal program PCopy před mnoha lety (1993) a díky tomu uměl pracovat jenom s 360kB disketami, hroutil se při načtení diskety s dlouhými názvy souborů a měl ještě pár dalších drobných problémů. Naivně se domnívaje, že program půjde nějak upravit a tím vyřešit aktuální potřebu jsem ho celý disassembloval, zčásti okomentoval a zkusil pozměnit. Nepodařilo se a ukázalo se jednodušším celý program napsat kompletně znovu.

Na čem to běží?

Vše jsem testoval a ladil na svém ZX Spectrum +2 s Betadiskem a TRDOSem 5.05cz, teoreticky by měl program fungovat na libovolném TRDOSu řady 5.xx, protože používá jen nejzákladnější služby a kvůli kompatibilitě jsem se vyhnul např. možnosti použít multisektorové čtení 512 bytových sektorů, které TRDOS 5.05cz podporuje, navzdory tomu, že by to bylo v tomto případě docela užitečné.

Na konfiguraci ZX Spectra by program také neměl být závislý. Rutina obsluhující stránkování RAM je napsána univerzálně a neměl by být problém program snadno modifikovat pro jiné stránkování (Pentagon 512kB - 1024kB), nebo třeba i ZX Spectrum 48k, kde sice bude k dispozici pouhých 16kB volné RAM, nicméně i to by mohlo občas stačit a se dvěma disketovými mechanikami to nemusí být příliš na závadu.

Vzhledem k omezení TRDOSu a kvůli jednoduchosti kódu jsou soubory větší než 16kB rozděleny na 16kB části a uloženy do více souborů.

Ovládání programu

Program má dvě ovládací menu. První je nastavení parametrů mechanik, je nutno vybrat mechaniku zdrojovou, cílovou a určit počet stop mechaniky.

Druhá část je samotný výběr souborů. Kurzor se ovládá Cursor joystickem, resp. klávesami 5,6,7,8, vše je popsáno v nápovědě zobrazující se po stisknutí klávesy H.

screenshot screenshot

Obrázky z provozu programu zatím nemám k dispozici, protože v emulátoru program nefunguje bez vložené FAT12 diskety.

Rozdíly oproti původní verzi

Kromě toho, že program je přepsán a z původního kódu nezbylo téměř nic, tak existuje několik vylepšení.

  • nastavování přepsáno z Basicu do strojového kódu, vše je nyní na jedné obrazovce, přehledné a lze se k nastavení kdykoli vrátit aniž by bylo nutné program ukončovat, nebo znovu načítat
  • je ošetřeno více chybových stavů, některé hlášky programu programu jsou přesnější a detailnější, ale kvůli úspoře místa v RAM není možné chybové stavy odchytávat úplně jako to dělám v jiných programech
  • více možností v ovládání programu
  • nápověda
  • podpora 360kB i 720kB disket, formát FAT12 i VFAT, ačkoli se zobrazují jen krátké názvy program se nehroutí jako stará verze a počítá se všemi možnostmi, které se v adresáři mohou vyskytnout
  • vzhledem k použitému kódu pro výpis znaků a řetězců by narozdíl od původního kódu využívajícího ROM ZX Spectra, neměl nastat žádný problém s libovolným kódováním znaků na FAT12 disketě, mohou se zobrazit nesmyslné znaky, ale program se nezhroutí
  • a spousta drobných detailů, např. lze použít diskety formátované na Linuxu, které mají řetěz FAT12 zakončený sice standardně, ale jinak než Windows a pod.
  • lze zobrazit katalog cílové diskety a tím si ověřit, že opravdu ukládáte na správnou disketu bez ukončení programu
  • program je oproti původnímu výrazně větší, původně byl dlouhý 1753 bytů plus basic, nyní to je cca 3298 bytů plus mnohem kratší Basic

A drobnost na závěr, nezapomeňte před spuštěním inicializovat TRDOS pokud je program načítán z pásky. Postačí RANDOMIZE USR 15616 a RETURN, nebo jen ! a RETURN při použití ISOROM. Program sám inicializaci neprovádí, předpokládá se, že bude načítán z diskety a tudíž k inicializaci dojde vždy automaticky.

Příprava diskety na PC

Sice se to lze dočíst v manuálu, ale jelikož to všem nemusí být vždy zřejmé, následující příkazy jsou v Linuxu potřeba k vytvoření DD diskety formátované FAT12. Samozřejmě předpokládám podporu filesystému zkompilovanou v jádře nebo jako modul, což je obvyklé u všech binárních distribucí.

nastaví disketovou mechaniku jako DD 720kB
setfdprm /dev/fd0 1440 9 2 80 0 0x2A 0x02 0xDF 0x50

nastaví disketovou mechaniku jako HD 1,44MB
setfdprm /dev/fd0 2880 18 2 80 0 0x1B 0x00 0xCF 0x6C

zformátuje disketu v závislosti na předchozím nastavení a verifikuje sektory
fdformat /dev/fd0

vytvoří FAT12 filesystém na disketě, kterou následně přečte program PCopy
mkfs.msdos /dev/fd0

Uživatelé klikacích prostředí si jistě naklikají sami dle potřeby :-).

Download

Opravené chyby a aktualizace

  • 7.1.2007 - Zveřejněna první použitelná verze.
  • 22.7.2007 - Lehce vylepšeno uživatelské rozhraní pro práci na jedné disketové mechanice.
  • 12.10.2007 - Doladěna práce na dvou i jedné mechanice, doplněn CAT cílové diskety.

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