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