tiskoviny/mikrobaze/cpm2

Seriál o CP/M - BetaDisku

Postavte si s námi diskový řadič (2)

Jak jsem již slíbil minule, teď potěším hlavně spektristy, protože následující popis systému TR-DOS 5.xx, kterým je Betadisk vybaven, je určen pro ně. Nic zlého se však nestane ani majitelům jiných počítačů, když si následující řádky přečtou. Naopak, mohou se inspirovat pro vlastní vývoj něčeho podobného.

Tak tedy hned úvodem to tajemné zapojení, o němž jste měli od minule přemýšlet. No ovšem, teď už je to jasné i těm, kteří tak trochu váhali. A pro ty, kterým to nic neříká ani teď, doplním vysvětlení. Při normální činnosti ZX Spectra se z paměťové oblasti znakového generátoru čtou jenom data. Pokud v této oblasti voláte podprogram, jsou zde čteny také instrukce procesoru. Přitom procesor generuje vedle /MRQ ještě signál /M1. No a na to právě číhá hradlo 1 v IO3. Jestiže tedy IO2 vydekóduje příslušnou adresu a zmíněné hradlo 1 potvrdí že se čte instrukce, překlopí výstup 6 hradla 2 v IO3 klopný obvod 2 v IO5. Tím dojde k přepnutí EPROM na místo ROM a zárověň se hradlem 2 v IO6 zablokuje signál /IORQ' pro další periférie. Pak je při /IORQ a adresových vodičích A0, nebo Al na ůrovni log. 0 odblokován také řadič. TR-DOS je tedy akceschopný. O odstránkováni se stará zase jiná část zapojení. Pokud je A14, nebo A15 na log. 1 (to pozná hradlo 4 v IO4), stačí už jen číst instrukcí a výstup ll hradla 4 v I03 způsobí zpětně překlopení klopného obvodu 2 v I05. Tim se opět odpojí Eprom, zablokuje se deska řadiče a uvolní se průchod signálu /IORQ na vývod IORQ'. Všimněte si, že i při odstránkování je podmínkou čtení instrukce v oblasti RAM. DOS používá totiž část RAM pro své systémové proměnné a při práci s nimi nesmi dojít k odstránkováni.

Zvlášt pěkné na celé věcí je to, že pokud není přestránkováno a TR-DOS není přímo v činnosti, nemůže program běžící na Spectru poznat, že je něco připojeného. Obsah ROM je původní a na V/V adresách nic nevisí. To je přesně ta správná chvilka, kdy můžeme takový nic netušící běžící program uschovat na disk. ochrana neochrana. Na to je totiž u Betadisku tlačítko (firma TR ho krásné pojmenovala 'Magic button'), které stačí zmáčknout a je to. co že se přitom dějě uvnitř? Při první žádostí procesoru o RAM (/MRQ na nule a adresa A14, nebo A15 na log. 1), je aktivován monostabilní klopný obvod 2 v IO9 a od něho MKO1 v IO9. Tak je jednak přestránkováno na EPROM (překlopený klopný obvod 2 v IO5), a jednak je vyvoláno nemaskovatelné přerušení.

Příslušná rutina v EPROM pak nejprve ze všeho uloží všechny registry a nahraje na disk prvních 512 bajtů obrazové paměti. Protože v tu dobu ještě DOS nedisponuje žádnou RAM pro práci s adresářem, jsou použity sektory 10 a 11 na stopě 0, které jsou vždy vyhraženy pro práci systému. Uvolněnou část VIDEORAM pak DOS používá celkem běžným způsobem pro své účely při uložení obsahu celé RAM na disk. Pochopitelně se po skončení ukládání do vypůjčeně části RAM zase vrátí její původní obsah z disku, takže program pokračuje tam, kde byl přerušen.

Jenže to už máme na disku, pod provizorním názvem '@' jeho kopii. Kdykoli dáme DOSu příkaz GOTO '@' CODE, načte se obdobným způsobem do počitače kompletní obsah RAM, včetně stacku, takže po obnovení obsahu uložených registrů běží uložený program od toho místa, kde byl přerušen stiskem tlačítka. To je vlastně celé to kouzlo.

TR-DOS má ještě jednu příjemnost. Při prvním startu je totiž automaticky spuštěn program v Basicu, nazvaný "boot". Pochopitelně, je-li na disku (když není, systém se nijak nebrání). Program 'boot' je možno spustit z DOSu kdykoli, pouhým RUN. K čemu je to dobré, to snad ani nemusím psát.

Teď také nějakou nevýhodu TR-DOSu. Tak předně jsou v něm chyby. Jenže, ve kterém systemu vlastně nejsou. Ostatně, alespoň je co vylepšovat. Další nevýhodou TR-DOSu je to, že si v RAM potřebuje uložit své systémové proměnné. Udělá to obdobně jako Microdrive - posune začátek Basicu o těch potřebných 112 bajtů nahoru (Basic pak tedy začíná na 23867). Někdy to vadi, někdy ne. Až budu popisovat různě maličkosti a finty kolem Beta- disku, přidám k lepšímu krátkou rutinku, která to po načtení programu zase napraví, takže poběží i 'stroják' v řádku 0. Horší je, že se posunutím Basicu nahoru zmenší prostor pod RAMTOPem. A aby byla v RAM tlačenice pod RAMTOPem ještě větší, využívá TR-DOS 5.xx pro práci s adresářem ještě 256 bajtů ve WORKSPACE, nebo pod Basícem. Je to jen na chvilku při čtení čí zápisu, ale může to vyvolat hlášení "Out of RAM" a příkaz se neprovede. Příkazy LIST a MOVE mají ještě větší nároky na pamět.

Dvoupólový třípolohový přepínač slouží jednak k resetu, jednak umožňuje zvolit druh provozu. Střední poloha je určena pro spolupráci s normálním spectrem 48k. Navíc je v této poloze pomocí R7, R8 a D8 umožněna kompatibilita s programy, upravenými pro starší verze TR-Dosu. Zde je nutná malá odbočka. Verze 5.xx se volá na adresách 15616 a 15619, zatímco předchozí verze používaly adresy 15360 a 15363. Pro zachování alespoň částečně kompatibility programů jsou v nosu 5.xx na starých adresách umístěny skoky na nová adresy. Tento způsob volání však nejde použít ve spojení s některými perífěríemi, které do původně prázdné oblasti ROM vkládají svůj program. V takovém připadě může pomoci už jen hardwarová úprava. Odporem R8 se přes díodu D8 podrží vstup 4 adresověho dekodéru I02 na log. 1. Protože je na tento vstup normálně přiváděna A8, dekódují se adresy vždy, jako by A8 byla na jedničce. Při volání 15360 je dekódováno 15616 atd.

Zbývající krajní poloha přepínače je určena pro provoz ve spojení se spectrem 128. V této poloze je jednak vyřazená výše zmíněná hardwarová ůprava adresování, jednak je při resetu blokováno vyvolání TR-DOSu. System se pak musí volat softwarové.

Při prvním volání si TR-DOS ínicializuje systémové proměnně a testuje si připojenou mechaniku (to způsobuje ty strašlivě zvuky, které při inicializaci vydává mechanika). Je schopen sám určit, zda mechanika má 40, nebo 80 stop. Tento ůdaj si uloží a po srovnání s druhem záznamu na disku (tento údaj si poznamenal na disk při jeho formátování) sám zvolí jednoduchý, nebo dvojitý krok. Dále si sám otestuje nejvyšší použitelnou rychlost krokováni. Jak to všecno dělá, to si povíme pozdějí. Neodpustím si zde k tomu poznámku. Jestliže používání různých automatických funkcí je pro laika požehnání, pro zkušenějšího je to mnohdy hrob. Dáte mi jistě zapravdu, až se dost vyvztekáte například s kombinaci Betadisku a mechaniky, která umožňuje hardwarové přepnutí na dvojitý krok. Když budete používat střídavě 40-ti a 80-ti stopý záznam, uvidíte sami. Pokud po zavolání TR-DOSU máte vyndanou disketu a po jeho přihlášení zadáte 40, nebo 80, ušetříte si mrazení v zádech při části zvuků mechaniky. Já si ve svém Betadisku vyřadil v rámci uprav i to automatické zkoušení rychlosti krokovaní.

TR-DOS má (moderní je teď říkat podporuje) tento formát záznamu na disk:

  • Dvojitá hustota záznamu.
  • Jednostranný i oboustranný záznam.
  • 40, nebo 80 stop.
  • 16 sektorů na stopu.
  • 256 bajtů na sektor.
  • nepoužívá žádné přečíslení sektorů. Aby se dosáhlo urychleného čtení stopy, jsou sektory přečíslovány už při formátování (tzv. skev faktor je zde 2, tzn. že stopa bude čtena na 2 otáčky. Starší verze TR-DOSu měly tento faktor 3).

Z toho vyplývají celkové kapacity diskety 180, 360, nebo 720 KB.

Jak si vysvětlíme později, můžeme pomocí TR-DOSu jednoduše zaznamenávat a číst i sektory jiných délek, ale to už bude ve strojovém kódu. samotný řadič pak unožňuje navíc také jednoduchou hustotu záznamu a dokonce í High density.

TR-DOS 5.xx lze využívat jak z Basícu, tak ze strojového kódu. Jeho funkcí nevadí současně připojení Interface I a Hicrodrive - docela si s nimi rozumí. V Basicu pracuje hlavně jako rychlý magnetofon. Pro jednotlivé příkazy má TR-DOS vlastní interpreter. Následujících několik adres se vztahuje pouze k verzí 5.03. Interpreter začíná na adrese 031AB. Standardní spectrovské tokeny se nejprve převedou do interních kódů. Tabulka pro převedení na interní kódy je na 2PP3H. Tabulka adres jednotlivých rutin je na 3008H. Pro použití se Spectrem 128 je na adrese 3oA9H tokenizační rutina. Její činnost si můžete vyzkoušet, když dáte příkaz např.

THEN list a pak vymažete THEN.

Když nyní vypsaný příkaz list odešlete, je napřed tokenizován a pak normálně zpracován DOSem.

Karolínka sice prý vydala kompletní český překlad návodu k Betadisku, ale přesto nemůže škodit stručný přehled basicových příkazů:

Int.kód BASIC příkaz adr. v.5.03  
1. CAT 0433H Výpis katalogu disku
2. * 1018H *"D:" přepne na disk D
3. FORMAT 1EC2H FORMAT "název" formátuje
4. MOVE 16ABH"setřese" obsah disku
5. NEW 053AHNEW "nový","starý" rename
6. ERASE 0787HERASE "název" vymazání
7. LOAD 1815HJako v Basicu
8. SAVE 1AD0H Jako v Basicu
9. RETURN 1CFBHNávrat do Basicu
10. PEEK 19A5HPEEK "název"adrbuf,sektor
11. POKE 19A9HPOKE "název"ardbuf,sektor
12. MERGE 19B1HJako v Basicu
13. RUN 1D4DHNatáhne a spustí (i CODE)
14. OPEN# 2182HJako v Basicu
15. CLOSE# 2656HJako v Basicu
16. COPY 0690HCOPY "nový","starý"
17. 4 2997H40 nastavení na 40 stop
18. GOTO 2DA1HGOTO "název", CODE magic
19. 8 29AEH80 nastavení na 80 stop
20. LIST 11CEHVypíše rozšířený katalog
21. VERIFY 1810HJako v Basicu
 

Pokud chceme formátovat jednostranně, musí začínat název disku znakem '$'. Příkazy POKE a PEEK umožňují načíst, či uložit sektor daného pořadí v souboru od adresy adrbuf. RUN spouští program s autostartem od řádku autostartu, ostatní od řádku 0. Tímto příkazem je možno spustit í program ve strojovém kódu od jeho počáteční adresy. OPEN# a CLOSE# slouží k sekvenčním přístupu k datům. zde je však v systemu nějaká chyba - při práci s těmito příkazy se systém často hroutí, přičemž dochází mnohdy í k poškození záznamu na disku. COPY slouží ke kopírování z mechaniky na mechaniku. COPY s umožňuje kopírování na jedné mechaníce. LIST vypisuje údaje o délkách, startovacích adresách a autostartech.

Jednotlivé příkazy je možno volat i v programových řádcích Basicu. V takovém případě musí být každý příkaz vždy jako poslední na řádku a musí být předznamenán sekvencí:

RANDOMIZE USR 15619:REM:, nebo
LET ERR = USR 15619:REM:

Druhá varianta volání nám v proměnné ERR vrací chybový kód:

0 - žádná chyba
1 - soubor nenalezen
2 - soubor již existuje
3 - není místo
4 - katalog je plny
5 - počet záznamů překročen
6 - není disk
7 - chyba disku
8 - chyba syntaxe
9 - ---
10 - proud je již otevřen
11 - ???
12 - proud není otevřen

Daniel Meca

(Zdroj: Mikrobaze 06/1989, str.9+10)

 Předchozí část  Pokračováni příště

Stránka byla už zobrazena: 901 ×

Aktualizováno: 6. 4. 2018, 18:05



     psp-ikona.gif, 2 kB    Text to HTML converter and formatter  builder_ikonka.gif, 3 kB
           
  Best Old Games      kabelmanie.gif, 2 kB  root_ico.gif, 2 kB  český diskmag pro počítače ZX Spectrum a kompatibilní
synapse.gif, 4 kB   TuningPC.cz - Vše pro tuning a casemodding vašeho PC        pspad88x31.gif  delphix.gif, 1 kB
sgatlantis_88x31_3.jpg, 4 kB  atlan.gif, 22 kB  arkon.jpg, 12 kB  ico_abeceda.gif, 888B  blog.idnes.cz   
           
       
 
  torry_logo.gif, 4 kB  

Stránka načtena za 0.00218 sekund.