Obsah této stránky:Hardware Testování klávesnice Řízení kazetového magnetofonu |
HARDWARE
Součást MZ-800 je díl 8255.8255 je zodpovědný za obhospodařování magnetofonu a klávesnice. Obrázek dole představuje
adresování a způsob provozu dílu portů.
____ _____________
C5E0 ------! !-------\ PA
! !-------/ 0...7
A0 ------! !
! !
A1 ------! !
! !/------ PB
D -----\! !\------ 0...7
0...7 -----/! !
! !
! !-------\ PC
! !-------/ 0...3
__ ! !
MW ------! !/------ PC
___ ! !\------ 4...7
EMR ------!____________!
Druh provozu, používaný v MZ-800 zobrazuje obr.1. Port A
je nastaven na výstup, port B na vstup a na portu C jsou čtyři
vedení s nižší hodnotou nastaveny na výstup, čtyři s vyšší
hodnotou jsou nastaveny na vstup. Toto se provede pomocí
CONTROLWORD 8AH (pomocí řídícího slova 8AH). Pomocí tohoto
řídícího bytu musí být nastaven mód (druh provozu), než se
s tímto dílem pracuje. ROM monitor program toto provádí pomocí
standardního programu 073EH.
Úplný výčet druhů provozu najdete v následující tabulce.
Tabulka 1 : Řídící slova pro 8255 v módu 0 (adresa E003H)
A = výstup E = vstup
+ Řídící slovo (bit)+ port A + port B + port C
Hex + 7 6 5 4 3 2 1 0 + všechny b.+všechny b.+4-7.b.+0-3.b.
--------------------------------------------------------------
80 + 1 0 0 0 0 0 0 0 + A + A + A + A
81 + 1 0 0 0 0 0 0 1 + A + A + A + E
82 + 1 0 0 0 0 0 1 0 + A + E + A + A
83 + 1 0 0 0 0 0 1 1 + A + E + A + E
88 + 1 0 0 0 1 0 0 0 + A + A + E + A
89 + 1 0 0 0 1 0 0 1 + A + A + E + E
8A + 1 0 0 0 1 0 1 0 + A + E + E + A
8B + 1 0 0 0 1 0 1 1 + A + E + E + E
90 + 1 0 0 1 0 0 0 0 + E + A + A + A
91 + 1 0 0 1 0 0 0 1 + E + A + A + E
92 + 1 0 0 1 0 0 1 0 + E + E + A + A
93 + 1 0 0 1 0 0 1 1 + E + E + A + E
98 + 1 0 0 1 1 0 0 0 + E + A + E + A
99 + 1 0 0 1 1 0 0 1 + E + A + E + E
9A + 1 0 0 1 1 0 1 0 + E + E + E + A
9B + 1 0 0 1 1 0 1 1 + E + E + E + E
Nyní musíme ještě řídící slovo předat do 8255. Na to
si musíme ještě blíže prohlédnout adresy dílů.
Adresuje se pomocí C5E0, A0 a A1. Tím je detekovatelný adresami
E000H až E003H. Každá z těchto adres má určitý význam (CS =
chip select - výběr chipu)
E000H adresa pro port A
E001H " " " B
E002H " " " C
E003H " " " řídící slovo
Tyto adresy slouží společně s MW pro psaní a s EMR pro čtení.
Psaní znamená výstup, čtení vstup.
Testování klávesnice
Porty A a B slouží k testování klávesnice. K tomu se přes výstup
portu A posílá na sloupce 1 - 10 matice klávesnice (viz.obrázek
klávesnice v dodatku ), postupně L potenciál. Při každém nařízení
řádku se na vedení řádku 1 - 18 zkoumá, zda L potenciál přes matici prošel nebo ne. Z bodu kde se křižuje vedení řádků a sloupců
se dá potom zjistit, která klávesa byla stisknuta. Tento druh
testování klávesnice se též nazývá SCANNEN. Samozřejmě nemusí být vždy testována celá klávesnice,
ale je též možne testovat pouze určité klávesy (nebo též
netestovat) jako v programy monitoru
standardní program 001EH. Vysvětleme si na základě krátkého programu spolupůsobení
hardware a software. Při tom je nutno mít na zřeteli, že zde
uvedená možnost testování klávesnice je realizovatelná, když
E oblast v paměti není zapojena jako RAM ale jako KEY TIMER
v oblasti od E000H až E070H (druh provozu MZ-80K).
Nejprve se na port A nastaví číslo sloupce, který má být
testován (=8) pomocí :
LD A,F8H 3E F8
LD (KEYPA),A 32 00 E0
Pro stabilizaci se přidá NOP. Potom se přes port B vnese zpět
informace o řádkách 11 až 18 pro sloupec 8.
NOP 00
LD A,(KEYPB) 3A 01 E0
Nastaví se počátečná hodnota Carry bitu (bit přenosu) a dolu
na bit 0 (SHIFT)
OR A B7
RRA 1F
JP C,?BRK2 DA 89 09
Je-li stisknuta klávesa SHIFT, nastaví se indikátor přenosu na 0
a pomocí dvojnásobného posunutí doleva se BREAK bit přenese
do indikátoru přenosu a nastane BREAK.
RLA 17
RLA 17
JR NC,?BRK1 30 04 ;SHIFT & BREAK
;CY = 0
Jestliže BREAK nebylo stisknuto, uloží se do akumulátoru hodnoty
pro klávesu SHIFT (bit 6 = 1 ) , nastaven indikátor přenosu
a skočí se zpět.
LD A,40H 3E 40
SCF 37
RET C9
Jestližé bylo stisknuto BREAK, vymaže se indikátor přenosu,
nastaví se Z-flag a skočí se zpět.
XOR A AF
RET C9
Tento program tedy sdělí výsledek testování pomocí stavu flagů
a bitů 4 - 6 v akumulátoru. Při tom znamenají :
a) Z=1 bylo stisknuto SHIFT & BREAK
b) D6=1 & Cy=1 " " SHIFT
c) D5=1 & Cy=1 " " CONTROL (CTRL)
d) D4=1 & Cy=1 " " SHIFT & CONTROL
V předcházejícím oddíle bylo provedeno testování zvláštních
kláves jako např. SHIFT & BREAK pomocí specielního programu.
Výsledek testování byl vyjádřen pomocí flagů. Ve většině
případů ale má být testována celá klávesnice a výsledek testování by měl být jako hodnota v registru. Zde SHARP používá
specielní, pro klávesy upravený kód, zobrazovací kód. Tato tab.
kódů ale bohužel v uživatelské příručce vůbec není otištěna.
V dodatku této knihy najdete tab. zobrazovacích kódů.
Vlastní testování klávesnice se provádí
standardním programem
monitoru 0A50H. Výsledek testování je k dispozici v registru BC.
Při tom registr B obsahuje stav zvláštních kláves, tj. byla-li
stisknuta klávesa SHIFT, BREAK, CTRL atd. To odpovídá zobrazení
výsledných hodnot našeho posledního programu, čili když Z = 1,
bylo stisknuto SHIFT & BREAK atd. Registr C obsahuje bod křížení
čili řádku a sloupec, kde bylo zjištěno stisknutí klávesy. Obsah
C se dá interpretovat jako následující:
X X S S S Z Z Z
X = nepoužito
S = číslo sloupce
Z = číslo řádku
Přitom dává např. testování stisknuté klávesy "A" v registru
C hodnotu 20H nebo při stisknutí klávesy "B" hodnotu 21H.
Program testování klávesnice monitoru nebere v úvahu sloupec
10 = F9H. Tím nemohou být z monitoru testovány klávesy funkcí.
Následující program ve strojovém jazyce testuje klávesy funkcí
F1 až F5 a potom provádí skok na předem naprogramovanou adresu.
FKLAVESA: LD A,F9H
LD (KEYPA),A
NOP
LD A,(KEYPB)
CPL
OR A
RET Z
EXX
LD D,00H
LD B,00H
FT1: INC B
RLCA
JR NC,FT1
LD A,B
RLCA
LD E,A
LD HL,FLEI-2 ;od adresy FLEI leží tab.
skoků pro F1 až F5. Adresu a data skoků musíte zvolit sami
ADD HL,DE
LD C,(HL)
INC HL
LD B,(HL)
POP AF
PUSH BC
EXX
RET
Dejte pozor na to, že při provádění tohoto navrženého programu
má testování F klávesy funkci GET. Program tedy proběhne pouze
jednou, t.zn. že se nečeká na stisknutí klávesy. Jestliže nebyla stisknuta žádná F klávesa, vrátí řízení programu na hlavní
program se Z-flag = 0.
Řízení kazetového magnetofonu
Kazetový magnetofon je řízen přes C port 8255. Tím má
adresu E002H. Port C se nastavuje řídícím slovem 8AH pro 8255.
Bity 0-3 pracují pro směr výstupu, bity 4-7 pro vstup.
Než mohou být data vydána ev. přečtena z magnetofonu, musí se
spustit motor. To se může udělat pouze ručně stisknutím
PLAY nebo RECORD & PLAY. Procesor se ale ptá programem monitoru
'MOTOR' z adresy 069FH přes 4.bit portu C, zda motor běží.
Tento program monitoru potom zkouší spustit motor řídícím impulsem
na 3.bit portu C. Tento pokus má ale úspěch pouze tehdy, je-li
PLAY a RECORD & PLAY ještě stisknuto a motor byl zastaven podprogramem 'MSTOP' na 0700H.Tím se dá motor pomocí software
pustit a zastavit. To je důležité zvláště tehdy, když programy
ev. bloky dat musejí být nejprve zpracovány, než může být přečten další blok dat. Vlastní nahrání bitů na magnetofon se provádí
vždy přes bit 1 portu C. Nahrání programu je tedy vždy ve dvou
dílech, informačním díle a v datech. Data jsou vlastní obsah
programu,informační díl (označovaný též jako záhlaví) se skládá z:
1.kód souboru 1 byt pro rozlišení druhu programu
2.jméno programu 16 bytů+1 byt označení konce
3.délka dat 2 byty
4.počáteční adresa dat 2 byty
5.prováděcí adresa 2 byty (startovací adresa)
6.komentář 104 bytů
(bez praktického významu)
Program pro zapsání z pracovní paměti se podle toho skládá vždy
ze dvou dílů.
1.Zapsání informační části (záhlaví). Tuto úlohu provádí
standardní program monitoru "WRI" na adrese 0021H
2.Zapsání dat. Tuto úlohu vyřizuje program monitoru "WRD" na adrese 0024H.
Než se odstartuje program pro zápis na kazetu, musí tedy být
v oblasti paměti 10F0H až 116FH připravena data pro informační
část. Tato data se potom
standardního programu monitoru "WRI"
zapíší na pásek jako záhlaví. Pro čtení z kazety přes 5.bit
portu C se nejprve do této oblasti paměti nahraje informační
část (záhlaví) a z něj se potom převezmou řídící data
pro čtení dat.