BASIC-W

Basic-W vznikl tak, že se upravil Basic-F. Z Basicu-F byly odebrány určité funkce (pro FD-5 a tak), čímž vznikl prostor pro vložení rutin pro obsluhu řadiče floppy mechanik WD2797B. Tuto stránku budu postupně doplňovat. Cílem je dostat sem vše relevantní, včetně zdrojových kódů programů, detailního popisu formátu diskety SKW a tak dále. Prozatím sem vkládám původní texty bez úprav.

 

Stručná informace o bejzicích FW

-------------------------------------------------------------------------------- BFWDnavod - 1 - Předně co je to BFw a BFWD ************************** Studenti (dnes již inženýři) Robert Hernády a Zbyšek Vojíř vymysleli a realizovali svého času pro SORDa připojení disketovémechaniky 5,25" přes řadič WD2797B. Robert pak napsal potřebný software pro oživení. JVznikl tak Basic-F, který komunikuje s disketovou mechanikou bez prostřednictví zařízení FD-5. Tento Basic-F nazývejme dále BFw. Já jsem v BFw opravil chybu v zařízení PRI a doplnil kontrolní test na součet nula (v původním Basiku-F je tento test také) a na kazetě ho mám pod názvem BasicFw. Původní Basic-F umožňoval mít na jedné FD-5ce otevřené naráz 4 soubory, ke kterým bylo možné přistupovat také přímo (APPEND). BFw již toto neumožňuje. Otevřený může být v jednom okamžiku pouze jeden soubor a to buď pro čtení (INPUT) nebo zápis (OUTPUT). Přidávání a přímý přístup do souboru již použít nelze (APPEND a RECORD). Z dalších funkcí BF bylo zrušeno RENUM. Původní Robertův záměr byl, že rutina RENUM se v okamžiku jejího zavolání nahraje z diskety do volného bafru a tam se vykoná. K tomuto se Robert pravděpodobně již nedostal a BFw to tedy neumí. Dále BFw neumí grafický tisk na tiskárně (GCOPY hlásí Err 2), bylo zrušeno zařízení SIO a FX. Příkaz FX nyní zobrazuje jména souborů na disketě. BFw se při tisku na PRI zacyklil a postupně přepsal celou paměť. Basic-Fw má zařízení PRI shodné s PRT. Všechna omezení, týkající se BFw, vyplývají z toho, že program pro mechaniku je dlouhý asi 1,5 KB a někde se to místo muselo "vzít." BFw používá 80ti stopé oboustranné diskety formátované v režimu FM po 13ti sektorech na jedné straně jedné stopy o délce 256 bajtů. Basikem využitá kapacita je 256 KB. Na konci roku '91 jsem napsal na základě BFw nový Basic-F, který nazývám BFWD. Z toho vzniklo také označení Basic-W. K tomuto mě vedla především potřeba zvětšit využitelný prostor na disketě a snaha o zachování co největšího počtu funkcí původního Basiku-F. BFWD již používá diskety formátované v režimu MFM s 28mi sektory na jedné straně jedné stopy, ostatní parametry zůstavají shodné s BFw, kapacita diskety je 576 KB. BFWD zná příkaz RENUM, příkaz FX zobrazí kromě seznamu souborů i volnou kapacitu na disketě. Soubory na disketě je možné označit jako neviditelné (HIDDEN) a chráněné proti smazání (PROTECT). -------------------------------------------------------------------------------- <FF> -------------------------------------------------------------------------------- BFWDnavod - 2 - Programy pro BFw **************** Program FORMATER ================ Program FORMATER.BF a formater.CM slouží k formátování a inicializaci disket. Diskety naformátuje na 256KB a zavádí na ně systém. Program se na vše dotazuje, všechny jednotlivé akce lze vynechat. Takže je například možné změnit již naformátovanou systémovou disketu na datovou (samozřejmě bez ztráty souborů). Na každou disketu je zaveden do nulté stopy do prvního sektoru program. Při natahování systému z diskety je tento vždy nahrán a spuštěn. Na datové disketě je pouze hlášení, že z této diskety systém natahovat nelze. Na systémové disketě je program, který si natáhne zaváděcí program (ze sektorů 2 až 8). Zaváděcí program již umí natáhnout z diskety systémový soubor. Jméno systémového souboru se zadává v programu FORMATER. Pokud je jako systémový program zvolen Basic-F, FORMATER jej na disketu hned nakopíruje. Je-li zvolen jiný program, musí si uživatel sám zajistit jeho nakopírování na disketu. Program BOOTSTRAP ================= Umožňuje natáhnout z diskety systém do paměti RAM. Tento program zastává funkci BOOT EPROM u počítačů, které jí nemají. Soubor BOOTdoROM ================ Je to v podstatě program BOOTSTRAP. Tento soubor je určen do BOOT EPROM. Tato EPROM by se měla připnout do adresního prostoru CPU po zapnutí počítače na adresu ????H. Program MSX a MSX_1D/fm ======================= Jedná se o emulátor systému MSX. Spolupracuje s disketou 256 KB. Viz níže. Programy pro BFWD ***************** Program TOOLS ============= Jedná se o sadu univerzálních programových nástrojů pro speciální práci s disketami. Program umožňuje prohlížet diskety několika různými způsoby (mapa alokačních bloků, úplný direktorář, sektory, ...), měnit na nich informace v direktoráři a formátovat je. -------------------------------------------------------------------------------- <FF> -------------------------------------------------------------------------------- BFWDnavod - 3 - Program *BOOT* ============== Tento program je po odstartování (CALL 0 nebo RESET) nahrán Basikem-W z diskety automaticky. *BOOT* může být jakýkoli program, jen se musí jmenovat *BOOT*. Na disketě označené jako SLUŽEBNÍ, je *BOOT* program, který nabízí MENU, na disketě TASWORD program *BOOT* rovnou spouští TASWORD, na disketě Basic-D zase *BOOT* rovnou spouští Basic-D atd. Program MSX a MSX_1D ==================== Viz MSX_1D/fm pro kapacitu 576 KB. Programy pro BFw i BFWD *********************** Program COPY ============ Slouží ke kopírování souborů z diskety na disketu nebo na magnetofon nebo obráceně. Program nabízí tři režimy práce: kopírování z disku na disk, z disku na magnetofon a z magnetofonu na disk. Tyto režimy se od sebe liší pouze tím, že reagují jinak na odeslání prázdného jména (zadá-li se při dotazu pouze <RETURN>). Při prvním dotazu "Jméno souboru:" se v režimu čtení z disku zobrazí direktorář, aby jsme si mohli soubor vybrat, zatím co v režimu čtení z magnetofonu se načte první nalezený soubor. Při prázdném odeslání druhého dotazu "Nové jméno:" se zapíše soubor se stejným názvem a to buď na disketu nebo magnetofon, záleží na zvoleném režimu. Chceme-li při některém dotazu zadat jméno, musí se před tímto jménem uvést i jméno zařízení, se kterým chceme pracovat, jinak je soubor hledán (nebo zapisován) na implicitní zařízení (kterým je DSK: u BFw a FD: u BFWD). Tedy pro magnetofon je potřeba uvádět CMT:jméno. Chceme-li před zkopírováním změnit atribut, počáteční adresu nebo adresu autostartu, stiskneme během dotazu "Nové jméno:" CTRL/RESET a po odeslání (vypíše se Stop at nn) zadáme: POKE &7120,atribut:POKEW &712A,začátek:POKEW &712E,start:CONT V podstatě napoukujeme nové údaje přímo do hlavičky kopírovaného souboru. A nakonec to nejdůležitější: kopírovat nelze soubory delší než &???? bajtů. Program DPRINT a DF =================== Program DF.CM zobrazuje kompletní direktorář disku. Tedy hlavičky souborů včetně adres a volnou kapacitu disku. Je-li nastaven režim robrazování TEXT, vejde se na obrazovku i informace o délce souboru, která se v ostatních režimech vynechává. Program DPRINT umožňuje vytisknout totéž na tiskárně. -------------------------------------------------------------------------------- <FF> -------------------------------------------------------------------------------- BFWDnavod - 4 - Program WIEW-DISK ================= Tento program slouží k prohlížení jakkoli naformátované diskety, nicméně pouze SD, nikoli HD (1,2MB a 1,4MB), to už Z80A nezvládá. Disketa může být naformátována doslova jakkoli, tzn. každá stopa může být na formátována jinak (FM/MFM, jiný počet a délka sektorů). Program se vždy nad danou stopou (pohyb pomocí kláves @ a /) snáží zachytit ID pole, ze kterého si načte potřebné informace, které zobrazí na obrazovce. Je-li nalezen žádaný sektor, je jeho obsah přenesen na obrazovku (pouze sektory o délce jeden KB se na obrazovku nevejdou, takže nejsou zobrazovány celé). Klávesy ; a : slouží ke zmenšování a zvětšování čísla sektoru o 1, tytéž s CTRL o 5. CTRL/@ a CTRL/? slouží k posunu na stopu 0 a 79. Klávesa E ukončuje běh programu a jakákoli jiná klávesa přepne na opačnou stranu diskety. Program READ ============ Načte do paměti od zvolené adresy zadaný soubor. Pokud je soubor s autostartem a je-li zároveň kratší než 15 KB (u BFw) nebo ???? KB (u BFWD), tak jej neodstartuje. Program MSX_1D ============== Je to známý emulátor systému MSX 1.0. Tentokrát vylepšený o styk s disketovou mechanikou. Bylo zrušeno zařízení magnetofon a nahrazeno bylo zařízením "DSK:" u BFw a "FDD:" u BFWD. Program pro disketu byl doslova nacpán do horní poloviny znakového generátoru (tím vznikl prostor 1KB), takže místo některých grafických znaků se zobrazují bláboly. Z diskety lze pouze číst (a to jak programy ve strojovém kódu, tak i basické programy, včetně jejich ASCII formy). Program COPMSX ============== Slouží ke kopírování programů a her pro MSX_1C na disketu. Tímto se stávají přístupné pro MSX_1D. Z programů ve formě ASCII jsou odstraněny grafické symboly. Existuje samozřejmě ještě celá řada programů, které používám ve spojení s mechanikou, ale tyto mi slouží hlavně jako pracovní nástroje. Tyto programy lze používat i ve spojení s magnetofonem nebo RAM DISKem. Roman Štec Kladno, 23. září 1991 ( BFw ), 20. prosince 1991 ( BFWD ) -------------------------------------------------------------------------------- Konec souboru BFWDnavod --------------------------------------------------------------------------------
Obecná práce s BFWD ******************* S disketami se v BFWD pracuje stejně jako s kazetami, dá se říci, že mechanika a magnetofon jsou si "rovny", co se týče používání příkazů BFWD. Přesto však zde určité rozdíly jsou. Není potřeba zde rozebírat výhody a nevýhody diskety před kazetou, ty jsou dostatečně známy. První co se musí s disketou udělat, pokud je úplně nová, je to, že se musí inicializovat, aby s ní BFWD mohl pracovat. Inicializace spočívá v tom, že se disketa zformátuje. V praxi to znamená, že se na disketu zapíše 81 stop, přičemž na každé stopě je zapsáno 29 sektorů. To se udělá z obou stran diskety, přičemž platí, že na straně 0 každé stopy jsou sektory 1 až 29 a na straně 1 pak sektory 30 až 58. K tomuto účelu slouží speciální formátovací program. Po inicializaci se disketa jeví jako čistá, nejsou na ní žádné soubory. Soubory lze na disketu zapisovat stejnými příkazy, jaké se používají pro magnetofon. Oproti pásce však platí určitá omezení. Na pásku je totiž možné zapsat soubory v libovolném pořadí a s libovolnými názvy a jeden název je možné použít víckrát. Už ale nelze vložit mezi dva soubory třetí, nový soubor se musí zpravidla nahrát za poslední uložený soubor. Oproti tomu umístění souboru na disketě prakticky ovlivnit nelze, vždy se totiž zapisuje do prvních volných prostor. Jedno jméno lze použít pouze jednou, nelze mít tedy dva soubory téhož jména ( byť rozdílného typu ) na jedné disketě. Soubor by neměl mít ve svém názvu otazník a znak CHR$(&E5). Z pásky se soubory načítají za sebou, tak jak na ní byly zapsány. Proto stačí napsat příkaz pro načtení souboru i bez uvedení jména. V takovém případě se načte první nalezený soubor vhodného typu. U diskety nic takového provádět nelze, vždy se musí uvést jméno souboru, který má být načten. Aby to bylo jednodušší, lze používat otazníkovou konvenci ( lze jí používat obecně, tedy i pro magnetofon ). Otazníková konvence spočívá v tom, že se z žádaného jména napíše jen tolik znaků, kolik je nutné pro bezpečné rozlišení souboru a ukončí se otazníkem. Soubor uložený na pásce se zruší tím, že je jednoduše přepsán jiným souborem, nebo že se páska smaže. Na disketě se však soubor musí smazat příkazem KILL "jméno souboru". Pokud se použije při specifikaci souboru otazníková konvence, je smazán pouze jeden soubor, pro který tato specifikace vyhovuje. Rozšíření možností BFWD *********************** Basic-D ======= Basic-D rozšiřuje BFWD o příkazy Basiku-G a o některé zcela nové příkazy ( WHILE, WEND, DEF FN, FILES... ). Pro BFWD bylo nutné původní dBASIC upravit. Princip úpravy spočívá v tom, že po spuštění dBASIC ( soubor Basic-D.MC ) sám sebe modifikuje. Pokud je spuštěn v Basiku-F, tak své vektory nemění, pokud je ale spuštěn v BFWD, tak se patřičně "přepoukuje". Aby nedocházelo ke zbytečným komplikacím, je na disketě SKW označené BASIC-D soubor *BOOT*, který rovnou spustí dBASIC. Ten si pak sám načte a spustí soubor *BOOTU*. SKW DISC TOOLS ================ TOOLS je balík programů, které usnadňují práci s disketou. Po spuštění TOOLS zobrazí menu, ze kterého si lze vybrat jednu z šesti nabízených funkcí. Volba se provádí stiskem inverzně zobrazeného písmena. TOOLS vždy zobrazuje na poslední řádce obrazovky pokyn, co je možné stisknout za klávesy a vždy infor- muje i o tom, čeho se tím dosáhne. Volba ABM --------- Zobrazí Alocation Block Map - mapu obsazení jednotlivých alokačních bloků na disketě. Zeleně jsou na mapě zobrazeny volné bloky, červeně pak obsazené, přičemž tmavě červená označuje alokační bloky zabrané direktorářem ( standardně jsou dva, ale jejich počet lze měnit ) a světle červená bloky obsazené daty. Alokačních bloků je 256. Soubory se ukládají na disketu "rozsekané" do volných alokačních bloků. Díry vznikají mazáním souborů. Volba BLOCK ----------- Slouží k prohlížení diskety pro Blocích. Zobrazují se jed- notlivé sektory každé stopy. Pohybovat se lze stiskem kurzorový- ch šipek v kombinaci se SHIFT nebo CTRL (nebo jen samotné). Volba CHANGE ------------ Umožňuje měnit informace v hlavičkách souborů. Změnit lze jméno souboru, typ souboru, počáteční adresu, startovací adresu a příznaky PROTECT a HIDDEN. Volba DIR --------- Viz program DF.MC Volba EXIT ---------- Ukončí práci programu TOOLS. Volba FORMAT ------------ Slouží k prvotní inicializaci diskety, nebo její opětovné inicializaci. Formátování lze přerušit přidržením klávesy <RESET> ( nikoli <SHIFT>+<RESET>! ). Programy DF.MC a DPRINT.BF ============================ Slouží k zobrazení direktoráře diskety na obrazovce ( DF ) a na tiskárně ( DPRINT ). Zobrazují se všechny soubory, tedy i ty, které mají nastavený attribut HIDDEN. DF zobrazuje v režimu TEXT pořadové číslo souboru, jméno, typ, attribut typu, počáteční adresu, koncovou adresu, adresu autostartu a délku souboru. V ostatních režimech vynechává pořadové číslo a délku. Pokud jsou v direktoráři prázdné hlavičky, je jejich počet průběžně oznamován. Na konci výpisu je oznámen počet zabraných a volných sektorů. MSX version 1.D ================= Ze systému CP/M lze odstartovat obě páskové verze emulátoru systému MSX. Programy MSX1B.COM a MSX1C.COM jsou emulátory MSX verze 1.B a verze 1.C. Program MSX.COM umožňuje spouštět z CP/M ty MSX programy, které ke své činnosti nepotřebují MSX basic. Tyto MSX programy jsou na CP/M disketě uloženy v souborech s příponou MSX. Aby bylo možné nahrávat z diskety libovolné MSX programy, byla napsána nová verze emulátoru MSX. Emulátor MSX verze 1.D umí číst libovolné MSX soubory ze SKW diskety, zapisovat je však neumí. Vzhledem k rozsahu úprav neumožňuje používat ani magneto- fon. Nový emulátor předpokládá, že se na SKW disketě nacházejí soubory "jméno.BN.CM", "jméno.MX.CM" a "jméno.AS.DAT", které po- cházejí z emulátoru MSX verze 1.C. Tyto se pak načítají příkazy BLOAD "jméno",R nebo RUN "jméno" nebo CLOAD "jméno". Na CP/M disketě je emulátor verze 1.D uložen v souboru MD.COM. Po natažení MD je uživatel vyzván, aby vložil do drivru SKW disketu a stiskl mezerník. Aby nebylo nutné pokaždé před natažením 1.D startovat CP/M, lze 1.D spustit i z Basiku-W příkazem RUN "MSX". Na SKW disketě je MSX verze 1.D uložen v souboru MSX_1D.CM. ====== napsal LZR Soft, datum poslední editace: 2. 1. 1992 =====
Popis programu BW.COM pod CP/M ****************************** Program BW.COM v sobě skrývá program BFWD, což je intepretr jazyka Basic-F, který byl upraven pro spolupráci s disketovou mechanikou uskutečňovanou prostřednictvím řadiče WD2797B. Po odeslání příkazu BW v prostředí CP/M je uživatel vyzván, aby vložil do mechaniky A: disketu SKW a stiskl klávesu <SPACE>. Po stisku této klávesy je BFWD odstartován jako běžný cartridge program pro počítač SORD M5. BFWD se po spuštění nebo restartování ( CALL 0 ) ohlásí jako Basic-W a stejně tak jako Basic-F zjistí připravenost mechaniky ( mechanika hlásí připravenost, pokud je v ní zasunutá disketa ). Pokud mechanika není připravena nebo není-li připojena vůbec, nastaví se jako implicitní zařízení CMT: ( magnetofon ) a tiskne se prompt Ready. V opačném případě je nastaveno jako implicitní zařízení FD: ( disketa SKW ). Poté je z diskety načten a spuštěn program *BOOT* ( pokud se na disketě nachází ). Program *BOOT* může být jakýkoli soubor ( basic, strojový kód, obrazovka! ... ) a je zcela na libovůli uživatele, co bude obsahovat. Standardně je s programem BFWD dodáván *BOOT*, který nabízí uživateli možnost spustit služební program MENU, nebo odejít do basiku. Program MENU umožňuje spouštět stiskem jedné klávesy různé služební programy, které umožňují kopírovat soubory, měnit jejich attributy, prohlížet disketu, formátovat disketu a tak podobně. Velkou předností BFWD je to, že umožňuje používat téměř libovolně naformátovanou disketu ( při formátování musí být splněna pouze jedna podmínka ), musí se mu ale sdělit, kolik je sektorů na stopě a kolik sektorů zabírá jeden alokační blok ( obojí musí být sudé číslo ). Ostatní už si vypočítá sám. Standardně předpokládá SKW disketu s 58 sektory na stopě po obou stranách a s 81 stopami. Alokační blok má 18 sektorů po 128mi bajtech. Celková kapacita 360 KB diskety je proto 587.25 KB. Nultou stopu BFWD nijak nevyužívá, předpokládá se, že na ní bude bootstrap, jméno diskety a podobně. Proto je využitelná kapacita "pouhých" 571.5 KB pro soubory. Do direktoráře se vejde 144 hlaviček jejichž nedostatek se projeví pouze tehdy, pokud všechny soubory mají méně než 2.25 KB. Zapsat lze soubor libovolné délky. Disketu lze chránit před zápisem klasicky nastavením write protect ( u 3.5 palcové diskety odkrytím okénka, u 5.25 palcové diskety jeho zalepením ). Na "zaprotektorované" disketě nelze sice smazat žádný soubor ( ani omylem ), ale také na ní nelze nic zapsat. Proto je umožněno označovat soubory jako chráněné před smazáním ( attribut PROTECT v hlavičce souboru ). V takovém případě disketa nemusí být protektorována, je možné na ní normálně zapisovat, lze mazat nepotřebné soubory a tak dále, pouze soubory s nastaveným bitem PROTECT smazat nelze. Rovněž tak je možné označovat soubory jako skryté ( attribut HIDDEN v hlavičce souboru ), což znamená, že takto označné soubory se výpisu direktoráře příkazem BFWD nezobrazují ( zbytečně neodvádějí pozornost ). Pochopitelně v BFWD existují různá omezení oproti "plnokrevnému" Basiku-F. Na disketě může být otevřen v jednom okamžiku pouze jeden soubor a je-li otevřen, nelze použítvat příkazy KILL a FX. Soubor nelze otevřít pro APPEND, tím pádem nemá význam příkaz RECORD. Zrušeny byly také příkazy NOLIST a GCOPY. Nyní se v LISTingu sice zobrazí jako známé příkazy ( tzn. malými písmeny ), ale jinak hlásí Err 130. BFWD nezná zařízení FX: a SIO: , zařízení PRI: sice formálně existuje, ale chová se stejně jako zařízení PRT:. Obecně platí, že BFWD vypisuje shodná chybová hlášení jako originální Basic-F, ke kterému je připojeno zařízení FD-5. Příkaz KILL "jméno" slouží ke smazání specifikovaného souboru. Smazat nelze soubor s nastaveným bitem PROTECT. Při specifikaci souboru lze použít otazníkovou konvenci. Příkaz FX vypíše seznam souborů a volnou kapacitu na disketě. Výpis lze přerušit stiskem klávesy <RETURN>. Volná kapacita je uvedena v sektorech. Vydělením osmi vyjde kapacita v KB a vydělením osmnácti vyjde v alokačních blocích. To má také význam, protože i ten nejkratší soubor obsahující pouhý jeden bajt zabírá na disketě celý alokační blok ( tedy 2.25 KB ). V příkazech OLD, SAVE, VSAVE, VERIFY, OPEN, LIST a KILL lze uvést plnou specifikaci jména: "DEVXY:NAME", kde "DEV" je jméno zařízení, "X" je označení drajvru A až H, "Y" je značení mechaniky 0 až 9 a "NAME" je jméno souboru. "DEV" může mít 1 až 3 znaky ( standardně zná BFWD zařízení CNS, GRP, PRT, CMT a FD ) a "NAME" musí mít 1 až 9 znaků. Parametry drajvr a mechanika měly význam pouze u zařízení FX v originálním Basiku-F, v BFWD na ně není brán zřetel. Poté, co je při příkazu OLD nebo OPEN nalezena hlavička nějakého souboru, je vypsáno hlášení Find "jméno.TYP", nebo Skip "jméno.TYP", kde TYP označuje typ souboru a může být: CMI - souvislý datový soubor určený do RAM ( z Basiku-I ) CM - souvislý soubor určený do RAM ( zpravidla strojový kód ) MCN - strojový kód, který se má po načtení odstartovat MC - strojový kód, který se má po načtení odstartovat DAT - nesouvislý datový soubor ( vytvořený přes OPEN ) VM - souvislý datový soubor určený do VIDEO RAM BI - program v jazyce Basic-I FC - tabulka procesoru FALC BG - program v jazyce Basic-G LSG - listing programu v jazyce Basic-G SC - informace o opačné obrazovce ( generuje Basic-G ) BF - program v jazyce Basic-F BFS - program v Basiku-F, který se má po načtení odstartovat LSF - listing programu v jazyce Basic-F EXT - program ve FORTHu nebo PASCALu ??? - neznámý typ souboru Před zapsáním jakéhokoli souboru na disk ( příkazy SAVE, VSAVE, OPEN ... FOR OUTPUT ) lze příkazem POKE &73DA,X určit attributy souboru. Bit 7 čísla X určuje PROTECT a bit 6 čísla X určuje HIDDEN. Toto nastavení zůstává platné až do stisku <SHIFT>+<RESET> nebo nového "přepoukování". Zbývající bity jsou bez významu. Protože LIST využívá pro své potřeby stejný bafr jako zařízení FD, dochází zde ke kolizi, díky které nelze zapsat a poté zpětně přečíst z disku listing basického programu ( nelze tedy načíst soubor uložený příkazem LIST "FD:jméno" ). Chybová hlášení související se zařízením FD ******************************************* 23 - mechanika neohlásila připravenost ve stanoveném čase 105 - nevhodný přístup k zařízení, nesprávný směr transferu dat 106 - nevhodný typ souboru ( OPEN nelze pro souvislé soubory ) 130 - příkaz nelze vykonat, chybí jeho rutina 132 - není dovoleno prázdné jméno souboru 152 - pokus o čtení dat za koncem souboru 154 - na disku není dost místa pro zapisovaný soubor 155 - plný direktorář, není místo pro další hlavičku souboru 160 - zařízení FD je aktivní, při OPEN nelze použít FX a KILL 170 - žádaný soubor není na disku 172 - jedno jméno souboru nemůže být použito dvakrát 182 - soubor je chráněn před smazáním, nelze na něho použít KILL 202 - na disk nelze zapisovat, má nastavený write protect 205 - chyba při hledání sektoru, nebyl na disku nalezen 206 - chyba kontrolního součtu sektoru 207 - ztráta dat, CPU nestačí předávat/přebírat data od řadiče 214 - chyba při zápisu sektoru nebo ztráta signálu ready Systémové proměnné ****************** 73D2 SECALB 18T počet sektorů v jednom alokačním bloku 73D3 SECTRK 58T počet sektorů na jedné stopě z obou stran 73D4 ADRBUF 7751 adresa bafru pro uložení sektoru 73D6 ADRBIT 760D adresa bafru pro vytváření bitové mapy ABM 73D8 DIRALB 02 počet alokačních bloků vyhražených pro DIR 73D9 DRIVER 01 povel pro selekci disku - OUT (7C),DRIVER 73DA PROHID 00 atributy PROTECT a HIDDEN pro zápis IDT Tyto proměnné BFWD nastavuje na uvedené hodnoty vždy při stisku kombinace kláves <SHIFT>+<RESET>. Pracovní proměnné zařízení FD: se nachází od adresy 73DB až do adresy 73ED. Dojde-li k situaci, že je hlášena chyba Err 160, přestože zařízení FD: není aktivní, je potřeba vynulovat systémovou proměnnou INFO na adrese 73E5. Čísla uvedená v systémových proměnných, za kterými je písmeno T jsou dekadická, ostatní čísla jsou hexadecimální. ===== napsal LZR Soft, datum poslední editace: 10. 1. 1992 =====
Řadič/formátovač SAB 2797 ************************* ateriál sestaven podle firemních materiálu Siemens AG. připojení kanálu pro výstup a vstup: CH OUT INP VYZNAM 80 - Command - Status Příkazový registr / Šťávovy registr 81 - Track - Track Stopa 82 - Sector - Sector Sektor 83 - Data - Data Data 84 - Dříve - not ušed Přímé řízení mechaniky / nevyužito Command register: ================= Slouží pro zadávání 8mi příkazů pro řadič. Bity 7 až 5 obsahují číslo příkazu (tím je dán zároveň i typ příkazu I až IV, viz níže), v ostatních bitech jsou pak předávány parametry příkazu. Je-li nějaký příkaz právě vykonáván, je nastaven bit BUSY stavového registru a do příkazového registru nemůže být zapisován jiný příkaz. Příkaz 0a - hledání home stopy - I ---------------------------------- bity: 4 3 2 1 0 Provede vyhledání nulté stopy. 0 h V r1 r0 Příkaz 0b - hledání stopy - I ----------------------------- 4 3 2 1 0 Provede vyhledání stopy podle registru Data. 1 h V r1 r0 Příkaz 1 - krok o stopu - I --------------------------- 4 3 2 1 0 Provede jeden krok naposledy uvedeným směrem. T h V r1 r0 Příkaz 2 - krok ke středu - I ----------------------------- 4 3 2 1 0 Provede jeden krok směrem k vyšší stopě. T h V r1 r0 Příkaz 3 - krok od středu - I ----------------------------- 4 3 2 1 0 Provede jeden krok směrem k nižší stopě. T h V r1 r0 Příkaz 4 - cti sektor - II -------------------------- 4 3 2 1 0 Provede načtení sektoru podle registru Sector. m L E U 0 Příkaz 5 - zápis sektor - II ---------------------------- 4 3 2 1 0 Provede zápis do sektoru podle registru Sector. m L E U a Příkaz 6a - čtení adresy - III ------------------------------ 4 3 2 1 0 Provede načtení informačních bajtů z datového pole. 0 0 E U 0 Příkaz 6b - nucené přerušení - IV --------------------------------- 4 3 2 1 0 Způsobí přerušení vykonávání příkazu. 1 I3 I2 I1 I0 Příkaz 7a - čtení stopy - III ----------------------------- 4 3 2 1 0 Provede načtení celé jedné stopy bez kontrol. 0 0 E U 0 Příkaz 7b - zápis stopy - III ----------------------------- 4 3 2 1 0 Provede naformátování jedné stopy. 1 0 E U 0 význam bitů parametrů: h=0 na počátku operace hlavička není usazená na disketě, při h=1 usazená je V=1 verifikace čísla stopy, kontrola CRC, při V=0 bez verifikace r1 r0 rychlost krokového motorku. Uvedené hodnoty platí pro 1 MHz, pro 2 MHz jsou poloviční. Pulsy: 00 - 6 ms, 01 - 12 ms, 10 - 20 ms, 11 - 30 ms T=0 po ukončení kroku neobnovovat registr stopy, při T=1 obnovit a=0 adresová značka dat DAM je FB ( Data Address Mark ), při a=1 je adresová značka dat vynechána - DAM je F8 U=0 nastavení strany 0 ( SSO, Šidě Select Output), při U=1 nastavení na stranu jedna E=1 zpoždění vykonání příkazu pro ustavení hlavičky o 15 ms, při E=0 bez zpozdění L - délka sektoru v závislosti na délce uvedené v ID poli ID 00 01 10 11 L=0 256 512 1024 128 L=1 128 256 512 1024 m=0 jednotlivý záznam, m=1 mnohonásobný záznam I0=1 přerušení při přechodu z NOT READY do READY I1=1 přerušení při přechodu z READY do NOT READY I2=1 přerušení u následujícího indexového pulsu I3=1 okamžitě přerušení vyžadující reset Je-li I3 až I0 na 0 - ukončení bez přerušení INTRQ Bližší specifikace jednotlivých příkazů: ---------------------------------------- Při posunu hlavičky na novou stopu je při nastaveném bitu verifikace po ukončení kroku generována prodleva 15 ms (nebo 30 ms u 1 MHz). Jsou-li prováděny příkazy typu I s požadavkem verifikace, pak 15 ms po ustavení hlavičky je započteno hledání ID pole na právě nastavené stopě. Číslo stopy z prvního nalezeného ID pole je porovnáno s obsahem registru stopy a pokud souhlasí a souhlasí-li i cyklická redundantní kontrola, je příkaz ukončen bez generování chyby. Pokud souhlasí jen číslo, je nastaven bit chyby CRC a hledá se další ID pole. Pokud není nenalezeno bezchybné ID pole během 5 otáček diskety, je příkaz ukončen s nastaveným bitem SEEK ERROR. Výstup SSO není během příkazu typu I ovlivňován a porovnání stran se při verifikaci neprovádí. Při hledání stopy stopový registr obsahuje číslo stopy, na které se nachází hlavička a datový registr obsahuje číslo požadované stopy, na kterou se má najet. Při hledání nulté stopy je provedeno maximálně 255 kroku směrem od středu diskety. Při nenalezení žádané stopy je nastaven bit chyby SEEK ERROR. Je-li při příkazu pro krok hlavičky parametr T=1, pak je stopový registr po ukončení kroku zmenšen nebo zvětšen o 1 podle směru pohybu. U příkazu typu II je kontrolováno číslo stopy, číslo sektoru a správnost CRC ID pole a teprve poté je prováděn zápis nebo čtení datového pole. Při nastaveném příznaku mnohonásobného záznamu řadič po přečtení nebo zapsání požadovaného sektoru zvětší hodnotu sektorového registru a pokusí se sektor s tímto číslem na disketě najít a opět jej přečíst nebo do něho zapsat. Příkaz je ukončen nenalezením sektoru nebo nuceným přerušením. Je-li požadavek na SSO, porovnává řadič číslo požadované strany s číslem uvedeným v ID poli. Parametr L dovoluje ve spojením s bytem délky sektoru v ID poli implementovat různé bytové délky sektoru. Při čtení adresy se načte nejbližší ID pole a informace z něj se přenesou do datového registru v pořadí: číslo stopy, číslo strany, číslo sektoru, délka sektoru, CRC 1 a CRC 2. Číslo stopy se zároveň přepíše do sektorového registru. Při čtení celé stopy začne řadič předávat data od náběžné hrany prvního indexového impulsů, přičemž pro každý byte je generováno DRQ. Není prováděna kontrola CRC, byty načtené v mezerách mohou být přeneseny nesprávně, vzhledem k synchronizaci. Při formátování stopy se zapisují byty na disketu od náběžné hrany prvního indexového impulsu, tak jak přicházejí do řadiče z počítače. Byty 00 až F4 a FF jsou zapsány normálně, byty F5 až FE jsou interpretovány jinak (viz níže) a nesmí být zapisovány do mezer, datových a identifikačních poli. Provádění příkazu typu I probíhá nezávisle na stavu READY disku. Příkazy typu II a III naopak připravenost disku vyžadují. Význam bytů při formátování: ---------------------------- byte FM MFM 00 až F4 - 00 až F4 s CLK FF 00 až F4 F5 - není dovoleno zapíše A1 s PCRC F6 - není dovoleno zapíše C2 F7 - vygeneruje 2 CRC byty vygeneruje 2 CRC byty F8 až FB - F8 až FB s CLK C7 a PCRC F8 až FB FC - FC s CLK D7 FC FD - FD s CLK FF FD FE - FE s CLK C7 a PCRC FE FF - FF s CLK FF FF PCRC znamená, že od tohoto bajtů se začne počítat CRC. Status register: ================ Bity stavového registru obsahují informace o právě prováděném příkazu. Po zadání kakehokoli příkazu kromě typu IV je aktivován bit BUSY a ostatní bity jsou inicializovany. Při přijmutí příkazu typu IV je bit BUSY shozen a ostatní bity zůstávají beze změny. Po přečtení stavového registru jsou resetovány signály INTRQ a DRQ a bit DATA REQUEST. Jednotlivé bity mají různý význam v závislosti na typu prováděného příkazu. Bit nastavený na hodnotu 1 oznamuje, že je daný příznak aktivní. Názvy příznaků pro jednotlivé příkazy ------------------------------------- bit příkazy typu I - čtení adresy - čtení sektoru - čtení stopy 7 - NOT READY - NOT READY - NOT READY - NOT READY 6 - WRITE PROTECT - 0 - 0 - 0 5 - HEAD LOADED - 0 - RECORD TYPE - 0 4 - SEEK ERROR - RNF - RNF - 0 3 - CRC ERROR - CRC ERROR - CRC ERROR - 0 2 - TRACK 0 - LOST DATA - LOST DATA - LOST DATA 1 - INDEX - DRQ - DRQ - DRQ 0 - BUSY - BUSY - BUSY - BUSY bit zapiš sektor - zapiš stopu 7 - NOT READY - NOT READY 6 - WRITE PROTECT - WRITE PROTECT 5 - WRITE FAULT - WRITE FAULT 4 - RNF - 0 3 - CRC ERROR - 0 2 - LOST DATA - LOST DATA 1 - DRQ - DRQ 0 - BUSY - BUSY Význam příznaků: ---------------- NOT READY řadič není v pohotovosti WRITE PROTECT na disketě je nastven zákaz zápisu HEAD LOADED hlavička je usazená na médiu SEEK ERROR požadavaná stopa není verifikována CRC ERROR v poli ID je zjištěno CRC TRACK 0 hlavička se nachází na nulté stopě INDEX byla nalezena indexová značka RECORD TYPE označuje kód typu záznamu, při =1 je vynechána DAM, při =0 je DAM použita WRITE FAULT vždy nulový (Poznámka: pak to ale nemá smysl!!!) RNF (RECORD NOT FOUND) požadovaná strana, sektor nebo stopa nebyla nalezena CRC ERROR při nastaveném bitů RNF je chyba v poli ID, jinak je v datech LOST DATA data nebyla včas počítačem odebrána nebo zapsána DRQ (DATA REQUEST) při čtení: data lze číst, při zápisu: lze zapsat BUSY řadič právě zpracovává příkaz Vzhledem k vnitřním synchronizačním cyklům je nutno dodržovat určitá zpoždění při provozu s programovanými vstupy/výstupy: probíhající operace následující operace potřebné zpoždění FM / MFM zápis do Command reg. čtení bitů 0 12 / 6 microsec zápis do Command reg. čtení bitů 1 až 7 28 / 14 microsec zápis do lib. registru čtení z jiného reg. 0 / 0 microsec Časy platí pro CLK 2 MHz, při použití 1 MHz se zdvojnásobují. Track register: =============== Obsahuje číslo stopy (0 až 255), nad kterou se nachází hlavička mechaniky. Je-li nastaven parametr T, mění se automaticky hodnota registru při kroku hlavy k jiné stopě, přičemž se obsah registru neporovnává s číslem stopy na disketě. Je-li požadavek na čtení, zápis nebo verifikaci, pak se obsah registru se porovnává s číslem stopy, které je zaznamenané v ID poli na disketě. Je-li řadič ve stavu BUSY, nesmí být registr naplňován. Sector register: ================ Obsahuje číslo požadovaného sektoru (0 až 255). Obsah registru se porovnává s číslem sektoru, které je zaznamenané v ID poli na disketě, je-li požadavek na čtení nebo zápis. Je-li řadič ve stavu BUSY, nesmí být registr naplňován. Data register: ============== Tento registr je používán pro zachycení dat, při operacích čtení a zápisu. Při provádění příkazu hledání je v datovém registru adresa požadované stopy. Drive register: =============== Slouží k přímému ovládání mechaniky bez prostřednictví řadiče. Jednotlivé bity mají tento význam: bit 1/0 7 - HI/NOR - high / normal 6 - OFF/ON - LED lamp, select 5 - ON/OFF - wait 4 - ON/OFF - motor 3 - FM/MFM - density 2 - 8"/5.25" - drive 1 - 1/0 - not used (později se použije pro přepínání drajvru 0 a 1) 0 - 2/1 - frequency MHz Aby mohl řadič ohlásit DISC READY, musí být nastaven bit SELECT. SELECT lze zrušit pouze v okamžiku, kdy je hlavička nadzdvižena. Toto je dáno nastavením propojek (jumperů) na mechanice. Formáty disket ************** IBM 3740 IBM 34 FM mini MFM mini 8 palců 8 palců diskette diskette Gap I - 40 x FF - 80 x 4E - 40 x FF - 60 x 4E - 6 x 00 - 12 x 00 - - - - 3 x F6 - - Index Mark - 1 x FC - 1 x FC - - - 26 x FF - 50 x 4E - - ----------------------------------------------------. - 6 x 00 - 12 x 00 - 6 x 00 - 12 x 00 | - - 3 x F5 - - 3 x F5 | ID Address Mark - 1 x FE - 1 x FE - 1 x FE - 1 x FE | Track Number - 1 x nn - 1 x nn - 1 x nn - 1 x nn | Side Number - 1 x nn - 1 x nn - 1 x nn - 1 x nn | Sector Number - 1 x nn - 1 x nn - 1 x nn - 1 x nn ` Sector Lenght - 1 x 00 - 1 x 01 - 1 x 00 - 1 x 01 \ Writes 2 CRCs - 1 x F7 - 1 x F7 - 1 x F7 - 1 x F7 > 26 x Gap II - 11 x FF - 22 x 4E - 11 x FF - 22 x 4E / - 6 x 00 - 12 x 00 - 6 x 00 - 12 x 00 ' Writes A1 - - 3 x F5 - - 3 x F5 | Data Address Mark - 1 x FB - 1 x FB - 1 x FB - 1 x FB | Data Field - 128 x E5 - 256 x E5 - 128 x E5 - 256 x E5 | Writes 2 CRCs - 1 x F7 - 1 x F7 - 1 x F7 - 1 x F7 | Gap III - 27 x FF - 54 x 4E - 10 x FF - 24 x 4E | ----------------------------------------------------' Gap IV - 247 x FF - 598 x 4E - 369 x FF - 718 x 4E U nestandardních formátů lze délky mezer změnit: FM MFM Gap I - 16 x FF - 32 x 4E Gap II - 11 x FF - 22 x 4E 6 x 00 12 x 00 Gap III - 10 x FF - 24 x 4E 4 x 00 8 x 00 3 x F5 (zapíše A1) Gap IV - 16 x FF - 16 x 4E SKEW (čti: skju) faktor - logické číslování sektorů Kapacity diskety při 80 tps (tracks per side), 2 stranach a maximálním počtu zapsaných sektorů: FM / MFM bps spt KB / spt KB bps - bytes per sector 128 - 18 360 / 29 580 spt - sectors per track 256 - 10 400 / 18 720 tps - tracks per side 512 - 5 400 / 10 800 1024 - 2 320 / 5 800 Maximum je 83 tps. Standardní formáty disket: IBM PC 360 KB - MFM, 512 bps, 9 spt, 40 tps, 2 sides IBM PC 720 KB - MFM, 512 bps, 9 spt, 80 tps, 2 sides CP/M86 720 KB - MFM, 512 bps, 9 spt, 80 tps, 2 sides Datum poslední editace: 27. 4. 1992 ============== Napsal Roman Štec z teamu LZR Soft ==============