Cygnus Boot - pohodlný spouštěč souborů

TRDOS na Betadisku má tu vlastnost, že nalezne-li po resetu a svém spuštění v disketové mechanice A disketu, na ní program boot.B, načte ho a možná i spustí byl-li tak uložen (SAVE "jméno" LINE číslo řádku). To lze využít. V dnešních dobách se tak mimo jiné velmi často dělají distribuční diskety her. Uživatel jen vloží disketu, stiskne reset, nebo resetuje emulátor a hraje. Nemusí zadávat žádné příkazy. Většina emulátorů to celé umí provést automaticky rovnou po vybrání TRD image diskety. Bohužel na reálném hardwaru tento přístup vede k plýtvání čím dál hůř dostupnými disketami, ale to je na jinou diskuzi.

Pokud ovšem máte mnoho disket, každou s mnoha programy, utilitami, hrami atd... tak potřebujete něco, co usnadní výběr. Zadávání jmen ručně se po pár pokusech stane otravným. Například hry upravené pro TRDOS lidmi z Brna v devadesátých letech do značné míry počítají s tím, že budou sdílet prostor na disketě s jinými hrami. I způsob pojmenovávání souborů se snaží kolizi jmen předcházet. Pro takové diskety je booter ideální.

Ačkoli se spouštěný program jmenuje boot.B, nejde o skutečné zavedení (operačního) systému, jako ho známe třeba z PC, Amigy a dalších strojů. Neupravené ZX Spectrum neumí odstránkovat svou ROM s BASICem a nahradit ho jiným jazykem, nebo systémem. Ani TRDOS v Betadisku nelze nahradit bez fyzického vyjmutí čipu. Boot.B na betadisku je pouze BASICový program, který se sám spustí. Ovšem do BASICového programu lze jednoduchým trikem vložit mnohem sofistikovanější program ve strojovém kódu a to právě booter využívá.

Dalším důkazem žádanosti programu usnadňujícího spouštění je i přítomnost file manageru TRDOS Navigator přímo v TRDOSu ESXDOSu. Ten se spustí po resetu, pokud na vloženém TRD boot.B nenajde.

TRDOS Navigator určitě je velmi pěkný a praktický program, ale jako prostý spouštěč, který se má spustit z reálné diskety co možná nejrychleji je poněkud velký a složitý. Většina TRDOSů na reálném hardwaru ani nic takového v sobě neobsahuje a pokud na disketě boot.B není, provedou příkaz CAT - zobrazí jen obsah diskety a přepnou do příkazového řádku. Další kroky jsou na uživateli.

Historie

Inspirací mi byl především Matasoftův Booter, který jsem od Matasofta získal s dalším softwarem. Po nějakém čase jsem začal toužit po vlastním super dokonalém programu podobného druhu, nejspíš mi tehdy přišlo snadné něco takového napsat a zkoušel jsem ho napodobit. Další inspirací mi byl Unirun používaný na MDOSu, ačkoli se nespouštěl po resetu automaticky, sloužil ke stejnému účelu.

screenshot screenshot

Číslování napovídá, že někde existují další verze Matasoftova booteru, ale najít se mi je nepodařilo.

Mým prvním pokusem byl booter využívající Heptauův ovladač AMouse a celý byl napsaný v BASICu kompilovaném IUC88+ kompilerem. Je docela ošklivý, pomalý, dá se ovládat výhradně Amiga myší v Kempston joystick portu, neumí žádné klávesové zkratky, neumí řadit soubory a ještě ke všemu se skládá ze dvou souborů. Zavaděče v BASICu a souboru CODE se strojákem. Proto se i pomalu načítá. Naštěstí nikdy nebyl šířen a tak to doufám zůstane.

Následující verze 2.0 a 2.01 byly už napsané v assembleru, kompilované v Prometheovi a jsou už současné verzi podobné. Stále jsou velmi pomalé a se spoustou nedostatků. Mezi sebou se verze 2.01 od verze 2.0 liší jen rychlostí filtrace souborů.

screenshot screenshot

Cygnus Boot 2.1 (1995)

Další verzi jsem splácal během některých letních prázdnín, protože jsem s předchozí stále nebyl spokojen.

screenshot screenshot screenshot

Program jsem se snažil napsat co možná nejmenší, je o pár set bytů menší než předchozí verze, ale bohužel se přesto nevejde na jednu stopu, tj. do 4096 bytů, takže jeho načítání by mohlo být ještě o něco málo rychlejší. K setřídění je použitý algoritmus bubble sort, protože jsem tenkrát nic lepšího neuměl, což může výrazně zpomalit zobrazení většího počtu souborů, ale to naštěstí nenastává často.

Ovládání programu

Tato verze už je napsána tak, aby booter bylo možno ovládat více způsoby, aniž by bylo potřeba cokoliv nastavovat, nebo aniž by ovládání navzájem kolidovalo. Největší problém byl v kombinaci Kempston Joystick a Amiga myši, protože obě zařízení komunikují na stejném portu. To je řešeno autodetekcí stavu, který nemůže na joysticku nikdy nastat (směr nahoru a dolů, nebo vlevo a vpravo zároveň), zatímco na připojené myši nastává běžně po několika málo cm pohybu. Krom toho lze kurzor samozřejmě ovládat klávesnicí, resp. joystickem, který je na klávesnici mapován.

Čím lze ovládat

  • Sinclair Joystick = 6-vlevo, 7-vpravo, 8-dolu, 9-nahoru, 0-fire
  • Amiga mouse = TTL myš zapojená na port 31 (viz. popis čipu 8255 a myší)
  • klávesa 1 přepne na disk A
  • klávesa 2 přepne na disk B
  • klávesa 3 přepne na disk C
  • klávesa 4 přepne na disk D
  • klávesa enter způsobí znovunačtení a zobrazení obsahu diskety, užitečné při její výměně

Funkce ikonek

  • kliknutím na soubor se nejprve označí (např. pro zobrazení obrázku), druhým kliknutím se označený soubor spustí
  • A,B,C,D - změna mechaniky
  • VIEW - zobrazení obrázku a to i komprimovaného Pressorem (4,5,6 ?), funguje autodetekce
  • SRAM - načte 16kB nebo 32kB ROM do statické RAM, k tomu aby funkce něco provedla je nutné mít vestavěnu kompletní úpravu ISO-ROM 128
  • NEXT PAGE - zobrazí další stránku souborů pokud se tyto nevešly na první
  • D/A OUT - před spuštěním programu inicializuje UR-4, nebo kompatibilní interface s 8255 jako výstup pro přehrávání hudby přes tříkanálový D/A převodník

Známé chyby staré verze 2.1

Drobných nedostatků je víc, ale bohužel dlouho nebyl čas je odstranit a navíc jsem ztratil zdrojové kódy této verze. Zůstala mi pouze verze starší - 2.0, která se výrazně liší.

  • Nefunguje kopie programu při použití tlačítka COPY.
  • Program zamrzne po kliknutí na soubor (i klávesou), pokud není přítomen kempston interface na portu 31, resp. pokud je trvale bit fire v logické 1.
  • Pomalé řazení souborů
  • Nepohodlné zobrazování obrázků a informací o souborech.
  • Neexistuje podpora KMouse, pouze zastaralé AMouse.

Až mnohem později, v průběhu léta 2010, jsem verzi 2.1 disassembloval, s pomocí zdrojáku vytištěného jehličkovou tiskárnou na traktorovém papíru pojmenoval návěští a celý kód zrekonstruoval do kompilovatelného stavu. Tentokrát už jsem ke kompilaci používal AS na linuxovém PC. Zdroják posloužil jako dobrý odrazový můstek k vytvoření další verze, protože Amiga myš se mezitím stala zastaralou a kvůli svým nárokům na čas procesoru nepraktickou zatímco KMouse s možností připojení optických PS/2 myší ji překonávala, stala se díky Velesoftovi dostupnou a mnohem rozšířenější díky nejenom ruskému softwaru.

Cygnus Boot 2.2 - 2010 až ?

Možná jsem neměl verzi zvýšit jen o desetinu. Změn je uvnitř opravdu hodně ačkoli to navenek vidět příliš není, což byl záměr. Původní GUI mi zcela vyhovovalo a měl jsem jen málo důvodů ho měnit.

screenshot screenshot

Nejvýraznější změnou GUI je zvětšení sloupců se jmény souborů o dva řádky, vynechání jména diskety z azurového rámečku nad nimi (je přesunuto do titulku okna). Zrušil jsem i funkci autocopy, protože v praxi byla skoro k ničemu.

Pro zajímavost - jeden řádek výpisu přibyl díky použití vlastního tiskového programu. Původně používaný kód v ROM (RST16) má stejná omezení jako PRINT v BASICu. Za cenu pár desítek bytů navíc je v booteru nyní výrazně odolnější kód, který určitě nebude nežádoucím způsobem interpretovat řídící znaky jako token a pod.

Delší kód některých částí programu jsem si mohl dovolit díky přepsání GUI. Ve verzi 2.1 bylo okno booteru vložené jako komprimovaný obrázek a do něj se zobrazovaly informace. Ve verzi 2.2 se celé GUI kreslí v booteru pomocí výpisu textu a obdélníků. Ve výsledku zabírá asi polovinu RAM a dokonce je vykresleno o trochu rychleji.

Další důležité změny

  • podpora KMouse Turbo včetně práce s kolečkem
  • propracované ovládání klávesnicí, odhadnutelné klávesové zkratky
  • důkladnější ošetření všech chyb, které mohou nastat při práci s disketou
  • rychlejší zpracování souborů a seřazení podle abecedy (heapsort)
  • vylepšený instalátor obsahu ISOROM

Podpora KMouse byla nutnost, AMouse nelze mít trvale připojenou, protože se ve většině poloh clonek spoustě programů jeví jako sepnuté směry Kepston joysticku. Naproti tomu KMouse existuje i v interním provedení zabudovatelném do ZX Spectra a je mnohem více podporována ruskými klony ZX Spectra. Nekoliduje. Lze připojit i relativně moderní optické PS/2 myši, nejenom TTL kuličkové. Volba tedy byla jasná. Ovladač AMouse jsem zcela odstranil a místo něj je ovladač KMouse s kolečkem a dvěma tlačítky.

Ne vždy je myš k dispozici, proto jsem se pokusil usnadnit práci s Booterem pomocí klávesnice použitím mnoha klávesových zkratek, díky kterým není nutné přejíždět šipkou přes celou obrazovku kvůli zobrazení informací o souboru, zobrazení obrázku atd...

screenshot screenshot

Lepší ošetření chyb TRDOSu je jedna z věcí, které nejsou vidět vůbec až do chvíle, kdy se pokoušíte pracovat s vadnou disketou. Nejsem si úplně jistý, jak si booter poradí se všemi chybami adresáře, taková disketa nebude moc použitelná nikde, ale třeba vadný sektor v zobrazovaném obrázku, nebo stisknutá klávesa BREAK v kritický okamžik by určitě problémy způsobit neměly.

screenshot screenshot screenshot

Stejně jako verze předchozí, tak i verze 2.2 umí zobrazovat obrázky z diskety. Rozlišuje obrázky komprimované Pressorem a nekomprimované. Dále stejně jako v předchozích verzích lze instalovat z diskety obsah 16kB, nebo 32kB souboru do SRAM v modulu ISOROM 128. Drobnou změnou je to, že tentokrát by se booter neměl zhroutit, pokud je SRAM prázdná. Doporučovaný RESET je vhodné provést vždy, když je instalována ROM výrazněji odlišná od dosud používané. Počítač se pak může chovat nepředvídatelně po návratu do BASICu.

Při instalaci ISOROM booter stále používá 8 bitové adresování portu i když mě Velesoft upozorňoval, že může kolidovat s jeho Profi interface. Nevidím v tom problém, protože proč by někdo klikal na ikonku ISOROM, když tuto hardwarovou úpravu nemá? Nikde jinde se s portem 239 nepracuje.

Novinkou je možnost zobrazení katalogu disketu, tak jako po zadání příkazu CAT. Bylo snadné tuto funkci přidat a v minulosti jsem ji několikrát postrádal a dokonce zkoušel řešit externím pluginem. Nebylo to praktické.

Ikonka UR-4 má stejnou funkci, jako dříve měla ikonka D/A Out. Při ukončení booteru se nastaví IO 8255 na portech 31, 63, 95, 127 jako výstupní. Je to užitečné při načítání snapshotů hudebních editorů pracujících s D/A převodníkem. Hudební editory inicializují 8255 při svém spuštění, ale v průběhu práce už tuto inicializaci provést nelze, proto je nutné 8255 přepnout před načtěním snapshotu. Neklikejte na ní, nenačítáte-li takový snapshot.

Verze 2.2.3

Ačkoli jsem už s verzí 2.2.1 byl docela spokojen, v průběhu pár let se mi nahromadilo pár drobných detailů, které jsem ještě chtěl opravit, nebo doplnit. Postupně přibyla i možnost vypnout řazení souborů (T), přepínat filtr zobrazených souborů (F), pár oprav chyb a taky možnost znovu překreslit celé GUI klávesou R.

Občas se totiž stane, že TRDOS zobrazí hlášku s dotazem "Retry, Abort, Ignore?". Může se tak stát v emulátoru, pokud není vložena disketa, nebo není-li naformátovaná, může se tak stát na reálném hardwaru, je-li disketa poškozená a nějaký sektor je opravdu nečitelný. Protože však booter nepřekresluje své GUI po každém znovunačtení diskety, buď by kód byl složitější, nebo by to nepěkně, byť velmi krátce, probliklo při každém načtení diskety. Proto jsem problém vyřešil přidáním klávesové zkratky.

screenshot screenshot

Zajímavé je, že na reálném hardwaru, pokusím-li se zobrazit disketu v prázdné disketové mechanice, tak TRDOS správně detekuje nepřítomnost diskety a booter správně ohlásí "NO DISC!" a k žádnému poškození GUI nedochází, nikoli však ve Fuse emulátoru (určitě 1.4.0 a starších).

Po všech úpravách je výsledná verze 2.2.3 větší o pouhý jeden byte a stále se s rezervou vejde alespoň do 17 sektorů na disketě když už ne do 16 (ideálně by boot.B měl být jako první soubor na disketě, aby se načetl opravdu rychle). Kompletní balíček se zdrojovými kódy, pracovní disketou s nástroji k sestavení, návodem jak booter sestavit i disketou obsahující pouze boot.B je ke stažení dole v sekci Download.

Základní ovládání

  • O,P,Q,A - pohyb šipkou - často používané a oblíbené klávesové ovládání
  • 6,7,8,9 - pohyb šipkou - Sinclair Joystick, nebo klávesnice - dle osobních preferencí
  • M,0 - kliknutí jako levým tlačítkem myši
  • N - kliknutí jako pravým tlačítkem myši
  • W,S - klávesová zkratka pro scroll, jako pootočení kolečka myši

Klávesové zkratky

  • 1,2,3,4 - načtení diskety v mechanice A,B,C,D
  • ENTER - znovunačtení diskety
  • C - CAT, zobrazí katalog diskety
  • V - VIEW, pokud je vybrán bytes, nebo snapshot, booter zkusí zobrazit obrázek
  • I - INFO, zobrazí informace o souboru
  • E - Exit, booter se ukončí a zavolá příkazový řádek TRDOSu
  • K - vypne/zapne KMouse pro případ, že by nefungovala správně autodetekce

Ve verzi 2.2.3, kterou lze poznat asi jen podle délky 4322 bytů oproti 4321 bytům verze 2.2.1, protože na informaci o verzi v booteru nezbylo místo, kromě oprav pár drobných chyb, přibyly ještě tyto klávesové zkratky.

  • R - provede kompletní reload a překreslení GUI, blikne, pomalejší než ENTER, ale řeší problém s poškozeným GUI po dotazu TRDOSu
  • F - přepíná filtr, klávesová zkratka ekvivalentní kliknutí myší na filtr BASIC, Snapshot, Bytes.
  • T - vypne/zapne řazení souborů podle abecedy (S jako sort by bylo lepší, ale už je obsazené)

Instalace obsahu ISOROM a přepnutí čipu 8255 jako výstup nemá klávesovou zkratku, protože to nejsou často používané funkce. Naopak chybí ikonka pro CAT, protože se mi do GUI nehodila.

Download

Historie změn článku

  • 2000-xx-xx - zveřejněno
  • 2010-05-09 - drobné aktualizace
  • 2010-06-12 - přepsáno, doplněna zmínka o starých verzích a zveřejněna verze 2.2
  • 2018-12-26 - zveřejněna verze 2.2.3, převážně drobné opravy a doladění

[ Zpět na hlavní stránku ]

Tento web je převážně o ZX Spectru, kompatibilních počítačích a jiném zajímavém hardwaru. Naleznete-li chybu, nebo byste rádi cokoliv co s tímto souvisí, můžete mi napsat email. Stručně o mém webu zde.