Obsah této stránky: |
QUICK DISK MZ-1F11
Vše v následující se vztahuje na Quick disk model MZ-1F11. Nebudeme se zde
blíže zabývat řízením Quick disku z BASICu, protože je dostatečně přesně popsáno
v příručce Sharp. Mnohem více bychom chtěli zdůraznit možnosti použití Quick
disku v programech napsaných ve strojovém kódu.
Všeobecně:
Pomocí od E000H do FFFFH ležící ROM(jen u MZ-800 a MZ-700, když je připojen
Quick disk) můžete nahrát na disk maximálně 34 souborů o max. 64 Kbytů. Systémem
je sice na disk připuštěno až 50 souborů, ale vyrovnávací paměť pro adresář
stačí jen pro 34 souborů.Ale vy se pravděpodobně nikdy nedostanete do situace,
aby jste museli nahrávat více než 34 souborů na jeden Quick disk. Tyto soubory
leží na Quick disku jako v dlouhém řetězu bytů, a ne jako na normálních floppy
discích, kde jsou rozděleny na sektory a stopy. To má, ale bohužel za následek,
že žádné jednotlivé soubory nemohou být smazány nebo přehrány. Máte pouze
možnost Quick disk nově formátovat a tím smazat všechny soubory. Standardní
program E010H provádí kompletní řízení Quick disku ale předtím musí být vždy
zadáno příslušným kódem jakou operaci má Quick disk provádět. Příslušná operace
se vybírá řídícím kódem, který se předává na paměťové buňce 1130H.
Řídící a kontrolní kódy pro rutinu E010H.
01 READY CHECK - kontroluje,zda je Quick disk
připraven k nasazení. Jestliže není, je indikátor pře nosu nastaven na 1.
02 FORMAT - formátuje Quick disk
03 READ - čte blok dat (od záhlaví)
04 SAVE - ukládá blok dat na quick disk (od
záhlaví)
05 HEADPOINTCLEAR - nastavuje bod záhlaví na počáteční hodnotu
(inicializace)
06 Vypíná motor
Tento kód musí být předán na buňku paměti 1130H, než se zavolá startovací
program E010H. Bod záhlaví představuje hexadecimální kód, který se předává na
adrese 113DH, a tzv. označuje bod na quick disku, odkud má číst nebo zapisovat.
Pro READ(kód=3) a SAVE(04) je tento bod interpretován jako počáteční bod a po
čtení/zapsání je nově nastaven. Standardní program předává v indikátoru přenosu
zpět, zda došlo k chybě. Jestliže je Cy=1, je v akumulátoru popsán druh chyby.
Akumulátor Druh chyby
Adr.zprávy
28H not found err(soubor nebyl nalezen)
F290H
39H bad disc err(disk není v pořádku)
F319H
2EH write protect(disk s ochranou proti psaní)
F2D6H
32H not ready err(quick disk není připraven)
F2E7H
35H no file space err(už žádné místo na disku)
F2F4H
36H unformat err(disk není formátován)
F309H
2AH already exit err(jméno souboru již existuje) F2C4H
33H too many files err(příliš mnoho souborů na disku) F2A2H
00H BREAK(přeruší pomocí SHIFT+BREAK)
F329H
Zbytek znamená - hard error
F2B8H
Od příslušné adresy zprávy je v ROM uloženo odpovídající chybové hlášení v ASCII
formátu a může být vytištěno na obrazovku následujícím programem:
LD DE, `adresa zprávy`
CALL 0006H
CALL 0015H
Stavba záhlaví quick disku.
Záhlaví quick disku je velmi podobné záhlaví u startovacích programů pro kazetu,
a leží v oblasti od 10F0H do 112FH.
Význam dat jednotlivě:
10F0H kód souboru: 01H u programů ve strojovém jazyce "OBJ"
02H u programů v BASICu "BTX"
03H u souboru dat v BASICu "BSD"
04H u rozptýlených souborů BASICu "BRD"
05H "RB"
07H "LIB"
0AH "SYS"
0BH "GR"
94H u textových souborů z TEXY "TXT"
95H u souborů LISPu "LSP"
Poznámka:
kódy 94H a 95H adresář monitoru nepozná, ale označuje je jako `???` soubor.
10F1H do 1101H jméno souboru s koncovou značkou(0DH)
1104H délka následujícího souboru
1106H počáteční adresa bloku dat
1108H adresa autostartu programu
Ostatní adresy oblasti záhlaví jsou nevyužity.
Další užitečné podprogramy v ROM.
EF27H READY check odpovídá E010H s (1130H)=01
F25FH Headpoint clear odpovídá E010H s (1130H)=05
E2E8H Vypnutí motoru odpovídá E010H s (1130H)=06
EEF7H Filesearch
Hledá na disku soubor, jeho jméno je stejné jako v adrese 11A3H. Jestliže jméno
v 11A3 začíná 0DH (čili nebylo žádné jméno vloženo), vezme první soubor z disku.
Nastaví se bod záhlaví a záhlaví souboru se uloží od 10F0H po 112FH. Při tomto
se nebere v úvahu kód souboru(stojí v 10F0H). Jestliže potřebujete, můžete ještě
přezkoušet kód souboru. Filesearch musí být inicializován s F25FH (Headpoint
clear). Při novém zavolání filesearch bez nové inicializace se hledá dále od
místa, kde skončilo poslední hledání. Jestliže filesearch narazí na chybu,
zastaví se na Cy=1.
Pozor: Mezi vyvoláním více filesearch nesmí mez nimi uplynout příliš dlouhá
doba, protože by z technických důvodů mohly být některé soubory přeskočeny.Čas
nestačí například k zobrazení jména souboru na obrazovce. Proto je pro adresář
také zapotřebí vyrovnávací paměť.
EFA2H File end search
Hledá konec dat na quick disku,nastavuje bod záhlaví a zkoumá, zda eventuelně
již není soubor s tímto jménem (v záhlaví od 10F1H maximálně 16 znaků + CR),nebo
zda na disku není příliš mnoho souborů (max. 50).Podprogram file end search se
provede úspěšně bez chyby pouze tehdy,je-li nastaven Cy=1 a A=28H (not found).
Nyní k nejdůležitějším programům LOAD a SAVE, které se oba vyvolávají přes
E010H.
LOAD
Jak jsme se již nahoře zmínili, je LOAD inicializováno kódem 03 v (1130H). Mimo
kódu a bodu záhlaví, který byl nastaven pomocí file search, potřebuje LOAD ještě
startovací adresu oblasti, do které má být soubor nahrán, delku souboru k
nahrání a další kód, který je zapotřebí k rozpoznání datového souboru (k
rozlišení od záhlaví).
Data quick disku:
start. adresa na (1132H)
délka na (1134H)
kód 03H na (1130H)
2.kód 01H na (1131H)
SAVE
Save je popsán kódem 04 v 1130H a kódem 04 v 1131H. Kromě toho ještě musí být
předána délka záhlaví 0040H, jeho startovací adresa 10F0H, startovací adresa
oblasti, která má být nahrána a její délka. Následující tabulka popisuje, kde
musí být data předána.
kód na (1130H) = 04
2.kód na (1131H) = 04
zač.záhlaví na (1132H) = 10F0H
délka z. na (1134H) = 0040H
začátek DATA na (1136H)
délka DATA na (1138H)
DATA znamená oblast k nahrání.
Teď ještě příklady k formátování, LOAD a SAVE.
Formátování:
CALL EF27H ;test je-li QD připraven
JP C,ERROR ;jestli Cy=1 error(not ready err)
LD A,02H ;kód pro formátování
LD (1131H),A ;kód odložit
CALL E010H ;hlavní program QD
JP C,ERROR ;je-li Cy=1 tab.chyb.hlášení
LOAD:
CALL EF27H ;test je-li QD připraven
JP C,ERROR ;je-li Cy=1 error(not ready err)
LD DE,EE65H ;text "jméno souboru ? "
CALL 0006H ;posun řádky
CALL 0015H ;výtisk textu
CALL 0006H
LD DE,11A3H ;vyrovnávací pamět pro jméno souboru
CALL 0003H ;vložit řádku
LD A,(DE) ;1 znak ve vyrovnávací paměti
CP 1BH ;je-li break, pak error
CALL F25FH ;headpoint clear
CALL EEF7H ;hledání souboru
LD HL,(1104H) ;délka souboru (v záhlaví)
LD (1134H),HL
LD HL,(1106H) ;počáteční adresa souboru
LD (1132H),HL
LD HL,0103H ;kód 03 a 2. kód 01
LD (1130H),HL
CALL E010H ;hlavní program QD
JP C,ERROR
CALL E2E8H ;vypnutí motoru
RET
SAVE
CALL EF27H ;test zda QD připraven
JP C,ERROR
LD DE,EE65H ;text "jméno souboru ? "
CALL 0006H
CALL 0015H
CALL 0006H
LD DE,11A3H ;vstupní vyrovnávací paměť
CALL 0003H ;vložené řádky
LD A,(DE)
CP 1BH
JP Z,ERROR ;viz nahoře
EX DE,HL ;vyr.paměť 11A3H do HL
LD DE,10F1H ;vyr.paměť pro jméno souboru v záhlaví
LD BC,0010H ;max.délka jména souboru
LDIR ;blokový přenos
LD A,0DH
LD (DE),A ;nastavit konec
LD HL,délka ;do HL vložit délku souboru
LD (1104H),HL ;uložit adresu do záhlaví
LD HL,st.adr. ;do HL vložit startovací adresu souboru
LD (1106H),HL
LD HL,Execute ;do HL vložit adresu aut.startu
LD (1108H),HL
LD A,01H ;kód pro cílový soubor
LD (10F0H),A
CALL F25FH ;headpoint clear
CALL EFA2H ;file end search
JP C,ERROR
CP 28H ;kód pro "not found"
JP NZ,ERROR
LD HL,(1104H) ;délka
LD (1138H),HL
LD HL,(1106H) ;startovací adresa
LD (1136H),HL
LD HL,0404H ;kód 04 pro SAVE a 2. kód 04
LD (1130H),HL
LD HL,0040H ;délka záhlaví
LD (1134H),HL
LD HL,10F0H ;start záhlaví
LD (1132H),HL
CALL EO10H ;hlavní program
JP C,ERROR
CALL E2E8H ;motor vyp.
RET
Zde uvedené programy mohou běžet jako podprogramy. Musí být ale ještě přidán
chybový program, který potom vydává příslušná chybová hlášení.