tiskoviny/mikrobaze/cpm7

(Zdroj: Mikrobaze 08/1989, str.14)

(např. IBM PC). Ty totiž nenalézají stranu 1. K tomuto formátovacímu programu se ještě příležitostně vrátím. Je totiž zajímavý tím, že dokáže nejrůznější formáty záznamu. V jeho menu si můžete vybrat z 22 různých formátů, včetně IBM PC (1 s boot sektorem), všech formátů Robotronu, Amstrad system i Amstrad data a řady dalších.

Co je však hlavni - popsaná úprava Betadisku otevřela možnost napsat zcela nové rutiny pro celou obsluhu řadiče. Zde opět zapracoval Jirka Lamač, který upravil své diskové rutiny, které původně napsal do CP/M pro Sharp. V Mikrobázi jsme o implementaci na Sharp MZ 800 už stručně referovali).

Výsledek je vynikající. Nová verze CP/M pro ZX Spectrum s Betadiskem si v rychlosti a eleganci obsluhy disketových jednotek nijak nezadá s tou na Sharpu a je určitě jednou z nejrychlejších vůbec. Formát záznamu na disku byl při té příležitosti změněn na 9 sektorů po 512 bytech, takže je kompatibilní s CP/M na Sharpu a vlastně i s formátem IBM PC. Dokonce i CCP a BDOS začínají na stejném místě jako u Sharpu, takže je možný REBOOT ze stejné diskety na Sharpu í ZX Spectru. Navíc zároveň stoupla kapacita diskety z 320 na 360KB (resp. z 640 na 720KB při 80 stopách). Je počítáno se současným připojením až čtyř různých mechanik. Mechanické parametry se však nastavují podle té nejpomalejší z nich.

Také způsob zpracování chyb je oproti původnímu Betadisku vylepšen. Pro ilustraci - když Betadísk nenalezne sektor, zkouší ho hledat desetkrát, ale vždy předtím provede HOME a SEEK, tedy vrátí se na stopu 0 a pak znova hledá žádanou stopu. To vše provádí s krokem 30 ms, což trvá dlouho a po tu dobu mechanika silné připomíná starou telefonní ústřednu. Na obranu TR-DOSu musím podotknout, že je to naprosto běžný postup i u jiných systémů. Lamačův BIOS zkouší sice hledání také desetkrát, ale dělá vždy jenom jeden krok stranou a zpět (možná se Jirka v tomhle nechal inspirovat Járou Cimrmanem). Samozřejmě se přitom hlídá zda nejsou hlavy v krajní stopě a podle toho se určuje směr onoho kroku. Takových "chytrostí" je zde celá řada. Ale o tom si povíme jindy.

Určitě by stálo zato použít Lamačovy rutiny pro obsluhu řadiče i v systému Betadisku. Již delší dobu se mi honí hlavou několik námětů na různá vylepšení systému Betadisku, kvůli práci na Mikrobází jsem však neměl zatím čas na jejich realizaci. Možná by pomohla týmová spolupráce. Ostatné, na podrobností také dojde.

Můžeme jen doufat, že se tato verze CP/M objeví co nejdříve v naši programově nabídce.

Musím ještě podotknout, že jsem se samozřejmě zabýval také myšlenkou použít k ovládání neupraveného řadiče jednotlivé příkazy, nebo částí rutín z EPROM. Rozborem obsahu EPROM jsem našel např. kompletní rutiny pro vysláni sektoru do řadiče i pro jeho načtení, které by bylo možné využít. K dispozici je na několika místech též důležitá sekvence OUT (C),A a RET. Nenašel jsem však použítelný způsob načtení stavového registru řadiče a registrů stopy a sektoru. Na druhou stranu z tohoto rozboru vyplývá, že by stačilo do EPROM naprogramovat sekvencí příkazů IN A,(C) a RET, aby byla možná úplná programová obsluha řadiče bez hardwarových úprav. Místa je v EPROM dost. Popravdě řečeno, po bližším rozboru tohoto, na první pohled velice elegantního řešení, docházim stále více k názoru, že vlastně nepřináší téměř žádné výhody proti řešení hardwarovému. Naopak, některé operace s řadíčem se zdají být tímto způsobem obtížnějí řešitelné. Jediná možnost by byla volat přímo některé rutiny, které jsou už v EPROM hotové. Ostatně, některé rutiny TR-Dosu jsou napsány i docela vtipně a není tedy nic špatného je využít.

Pro zajímavost, rutiny pro zápis a čtení sektoru v EPROM TR-DOSu vypadají takto:

WRITE LD B,4 ;Časování pro timeout. INFF1 IN A,(#FF) ;Čtení pomocného portu. AND #CO ;Maskování bitů 0-5. JR NZ,OUTDA ;Je-li DRQ, jdi na zapis. INC DE ;Čitač pro timeout. LD A,E OR D JR NZ.INFF1 ;Další pokus, dokud nevyprší DJNZ INFF1 ;tímeout, jinak RET ;návrat bez zápisu. INFF2 IN A,(#FF) ;Nové čtení pomocného portu. AND #C0 ;Maskování bitů 0-5. JR Z,INFF2 ;Není-li DRQ, zpět. RET M ;Návrat při INTRQ. OUTDA OUTI ;Zapiš bajt. JR INFF2 ;Da1ší. ----------------------------------------------- READ LD B,4 ;Časování pro timeout. INFF3 IN A,(#FF) ;Čtení pomocného portu. AND #C0 ;Maskování bitů O-5. JR NZ,INFF3 ;Je-li DRQ, jdi na čtení. INC DE ;Čitač pro timeout. LD A,E OR D JR NZ,INFF3 ;Další pokus, dokud nevýprší DJNZ INFF3 ;timeout, jinak RET ;návrat bez čtení. INFF4 IN A,(#FF) ;Nové čtení pomocného portu. AND #C0 ;Maskování bitů 0-5. JR Z,INFF4 ;Neni-li DRQ, zpět. RET M ;Návrat při INTRQ. INDA INI ;Načti bajt. JR INFF4 ;Další.

Z výpisu je zřejmé, že se nikde nepočítá délka sektoru. Operace je ukončena řadičem, který výšle INTRQ na konci sektoru a délku si ohlídá sám. Požadovanou délku sektoru zjistí řadič z takzvané adresové oblastí. O jejím uspořádáí si povíme až bude čas. Takto napsané čtecí a záznamové rutiny umožňují čtení a záznam sektorů různé délky v rozsahu 128 až 1024 bajtů. To funguje í při volání služeb TR-DOSu. Jenom není možno použít těchto služeb pro multisektorové operace s jinou délkou sektoru než 256 bajtů, protože DOS tuto délku předpokládá a inkrementuje buffer vždy 0 tuto hodnotu.

Upozorňuji, že se jedná jen o hlavní výkonné rutiny. Před jejich zavoláním musí být již hlava nastavena na správné stopě, v registru sektoru musi být správná hodnota a do příkazového registru musí být výslán příkaz ke čtení, či zápisu sektoru. To všechno není zas tak jednoduché, jak by se na první pohled zdálo. Ale o tom si zase povíme příště.

(Zdroj: Mikrobaze 08/1989, str.14)

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

Stránka byla už zobrazena: 447 ×

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.00204 sekund.