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 =====