Klávesnica

Z PMD 85 Infoserver

(Rozdiel medzi revíziami)
Rombor (Diskusia | príspevky)
(Pridané príklady testovania klávesnice v strojovom kóde)
Djb (Diskusia | príspevky)
(rekat)
Riadok 271: Riadok 271:
 
 
 +
[[Category:Hardvér]]
[[Category:Detaily o PMD 85 a kompatibilných]]
[[Category:Detaily o PMD 85 a kompatibilných]]

Verzia zo dňa a času 10:22, 2. apríl 2012

Klávesnica PMD 85


Obsah


Detail klávesnice PMD 85-1
Detail klávesnice PMD 85-1
Detail klávesnice PMD 85-2, -2A a -3
Detail klávesnice PMD 85-2, -2A a -3
Schéma interfejsu klávesnice PMD 85
Schéma interfejsu klávesnice PMD 85
Schéma klávesnice PMD 85
Schéma klávesnice PMD 85


Klávesnica je zvyčajne základným vstupným zariadením mikropočítačov. Na PMD 85 sa klávesnica skladá zo 77 kláves, ktoré sa delia do troch skupín - znakové, riadiace a programové klávesy. Prototypové PMD 85 a PMD 85-1 má klávesnicu vyskladanú z telefónnych tlačidiel, PMD 85-2, -2A a -3 majú tlačidlá na báze vodivého elastoméru (vodivej gumy).

Zapojenie klávesnice

Klávesnica je umiestnená na samostatnej doske plošného spoja a s centrálnou jednotkou počítača je spojená 20 pinovým FRB konektorom. Interfejs klávesnice je tvorený obvodom MHB 8255A, ktorý je umiestnený ešte na základnej doske. Na doske klávesnice sú umiestnené aj indikačné LED a elektroakustický menič.

Klávesnica je riešená ako matica spínačov s organizáciou 15 stĺpcov a 5 riadkov. Stĺpce sú dekódované obvodom MH 74154, ktorý má výstupy ošetrené diódami. Čítanie stavu klávesnice sa vykonáva výberom stĺpca (port PA) a následne čítaním stavu riadkov (port PB). Z toho je potom možné dekódovať práve stlačenú klávesu. Klávesy SHIFT a STOP sú vyvedené samostatne (bity PB5 a PB6) a ich stav je možné čítať kedykoľvek bez ohľadu na vybratý stĺpec klávesnice. Aktivácia klávesy RST je podmienená stlačením klávesy SHIFT, čo zabraňuje náhodnému resetu počítača.

Dolná polovica portu PC obvodu 8255 je využitá pre riadenie akustického meniča a rozsvecovanie LED. Červená LED je samostatne na bite PC3. Žltá LED je na bite PC2, je však spriahnutá s výstupom na akustický menič. Zmenou stavu bitu PC2 je teda možné, okrem rozsvecovania žltej LED, generovať tóny rôznych frekvencií. Bity PC0 a PC1 sú tiež spriahnuté s akustickým meničom a cez dve hradlá privádzajú na výstup dve frekvencie z rozkladu obrazu - 1kHz a 4kHz.

Časť hornej polovice portu PC je využívaná na PMD 85-2A a PMD 85-3 pre stránkovanie pamäte. Bit PC4 odpája ROM a teda zapína AllRAM režim. Na PMD 85-3 bit PC5 zapína AllROM - 8 kB ROM sa zrkadlí v celom adresnom priestore. To sa využíva po resete, kedy sú všetky porty 8255 inicializované ako vstupné a pull-up odpor na PC5 zabezpečí nastránkovanie ROM od adresy 0 a tým štart Monitora.

Systémový obvod 8255 je vyberaný iba adresným bitom A3 v L, ale vyžaduje sa aj A7=H a A2=H. Adresné bity A1 a A0 vyberajú príslušný register (port) 8255. Používajú sa adresy 0F4h až 0F7h. Programy v BASICu používajú adresu 86h pre zápis na port C pri generovaní tónov a podobne.

Na doske klávesnice PMD 85-2 a nasledujúcich je neosadená časť a vždy som premýšľal, čo tam pôvodne malo byť. Mnohokrát som plošný spoj skúmal a rôzne kombinoval integrované obvody a ďalšie súčiastky, až som na to (snáď) prišiel. I keď ešte čosi zostalo nezodpovedané... Plošný spoj klávesnice PMD 85-1 túto časť nemá a tak moja úvaha vychádzala aj z toho, prečo na novej verzii klávesnice toto pridali, ale nakoniec neosadili. PMD 85-1 nemá akustickú signalizáciu pri stlačení klávesy, keďže telefónne tlačidlá je pri stlačení dostatočne dobre počuť. Tlačidlá na novej klávesnici majú tichý chod a tak sa zrejme uvažovalo o akustickej signalizácii. Neosadený obvod mal teda vygenerovať krátke pípnutie po stlačení klávesy, nie je mi však jasné, čo malo vytvoriť aktivačný impulz. Keďže sa nakoniec akustický signál robí softvérovo, tento obvod bol zo schémy vypustený.

Popis funkcie kláves

Klávesnica obsahuje tri druhy kláves:

  • znakové klávesy
  • riadiace klávesy
  • programové kľúče

Ak budú v nasledujúcom spomínané kódy kláves, tieto zodpovedajú kódom, ktoré vracia štandardná klávesnicová rutina na adrese 84A1h, resp. 0E4A1h na PMD 85-3.

Znakové klávesy

Táto časť klávesnice umožňuje zadávať znaky, ktoré sú priamo zobraziteľné. Jedná sa o písmená, číslice a rôzne symboly.

Písmenové klávesy stlačené samostatne vracajú kódy veľkých písmen. Stlačené s klávesou Shift vracajú kódy malých písmen. Na PMD 85-2, -2A a -3 možno so súčasným stlačením klávesy Stop vkladať znaky s diakritikou v kódovaní KOI-8-čs. Je to dané tým, že pri stlačenej klávese Stop sa ku základnému kódu klávesy pripočíta 128, čo dáva zodpovedajúce kódy znakov s diakritikou.

Číselné klávesy a symboly vracajú štandardné kódy podľa ASCII tabuľky, tiež v závislosti, či bola alebo nebola súčasne stlačená klávesa Shift. Na PMD 85-2, -2A a -3 sa, podobne ako pri znakových klávesách, so súčasným stlačením klávesy Stop vracajú kódy zvýšené o 128.

Na klávesnici PMD 85-1 nie sú zložené zátvorky a opačný apostrof. Neoznačená klávesa (vedľa klávesy INS) bez aj so Shiftom vracia kód 0FFh. Klávesa Shift+'@' vracia kód 0Dh.

Hranaté a zložené zátvorky sú na PMD 85-2 a -2A opačne na rozdiel od PMD 85-1 a PMD 85-3.

Riadiace klávesy

Riadiace klávesy slúžia pre editáciu textu v dialógovom riadku (DR) a vyvolanie rôznych systémových činností. Kódy kláves na PMD 85-1 sa líšia od kódov na ostatných modeloch.

Riadiace klávesy, ich význam a kódy
Klávesa Význam Kód klávesy (HEX)
PMD 85-1 PMD 85-2, -2A, -3
<--- Posun kurzora v DR o jeden znak vľavo. 83 08
---> Posun kurzora v DR o jeden znak vpravo. 85 18
šikmá <--- Posun kurzora na začiatok DR. 84 0C
END Posun kurzora za posledný nemedzerový znak v DR. 87 03
--->| Posun viditeľnej časti DR doprava. 88 19
|<--- Posun viditeľnej časti DR doľava. 86 1A
INS Vloženie medzery na pozícii kurzora v DR. 80 1C
DEL Vymazanie znaku na pozícii kurzora DR. Zvyšok DR vpravo od kurzora sa posunie o jednu pozíciu doľava. 81 1D
CLR vymazanie celého obsahu DR. 8D 1B
Shift + CLR Vymazanie obsahu DR od pozície kurzora do konca. 82 01
EOL Ukončenie vkladania znakov do DR a odoslanie riadku na spracovanie. 89 0D
RCL Do DR sa od pozície kurzora vloží obsah naposledy odoslaného riadku. A2 17
C-D Do DR sa zobrazí posledné systémové hlásenie. 8A 1E
Shift + WRK Zobrazenie znakov, ktoré sa vyskytujú v kódovej tabuľke za znakom, ktorý je práve na pozícii kurzora. Ak stojí kurzor napr. na znaku medzera, tak po opakovanom stláčaní tejto klávesy sa budú postupne zobrazovať znaky !"#$ atď. v poradí, ktoré je dané ich kódom. Týmto spôsobom je možné zadať znaky, ktoré sa nevyskytujú na klávesnici PMD 85 (bez funkcie na PMD 85-1). A3 07
Shift + C-D Prechod do režimu TERMINÁL (bez funkcie na PMD 85-1). 93 06
Shift + DEL Štart programu umiestneného na adrese 0000h. Je ekvivalentný príkazu JUMP 0000. 8C 12
Shift + šikmá <--- Zmazanie obrazovky okrem DR (bez funkcie na PMD 85-1). 8F 1F
Shift + |<--- Zmena podkladu podľa farby DR a súčasné vymazanie obrazovky okrem DR. Pri prvom stlačení je podklad farebý a zobrazované znaky inverzné, pri druhom stlačení naopak (bez funkcie na PMD 85-1). 90 0A
Shift + END Zapnutie alebo vypnutie akustickej signalizácie stlačenia klávesy. Ak je signalizácia vypnutá, svieti žltá LED dióda na klávesnici (bez funkcie na PMD 85-1). 91 10
Shift + RCL Prechod do Monitora (bez funkcie na PMD 85-1). A5 0E
Shift + --->| Prepínač farby písma v DR (bez funkcie na PMD 85-1). 92 09
Shift + INS PTL - prepínač kopírovania obsahu DR na obrazovku. 8B 0F
WRK Vkladanie textu do programových kľúčov. A0 0B
Shift + <--- Bez funkcie. 8E 13
Shift + ---> Bez funkcie. 94 11
Shift Preraďovač, preradenie činnosti, napr. horné znaky klávesnice. Na PMD 85-2, -2A a -3 pozastavenie výpisu alebo programu. - -
STOP Prerušenie výpisu alebo vykonávania programu. - -
Shift + RST RESET - inicializácia systému. - -
STOP + { Na PMD 85-3 zapnutie alebo vypnutie zmeny spôsobu zadávania malých a veľkých písmen (Caps-Lock). Po zapnutí tejto funkcie, stlačenie písmenovej klávesy samostatne vloží malé písmeno a s klávesou Shift vloží veľké písmeno. Zapnutie tejto funkcie je indikované červenou LED diódou na klávesnici. - -

Programové kľúče

Programové kľúče, resp. programové klávesy K0K11 sú určené pre rýchle a pohodlné písanie textov (reťazcov znakov), ktoré sa často opakujú. Vloženie reťazca znakov do programového kľúča sa vykoná pomocou nasledujúcich krokov:

  • príprava textu v DR
  • stlačenie klávesy WRK
  • stlačenie programovej klávesy samostatne alebo s klávesou Shift

Na PMD 85-1 sa ukladá celý obsah DR až po posledný nemedzerový znak. Na ostatných modeloch sa ukladá text od začiatku DR až po kurzor, čo umožňuje vkladať aj texty ukončené ľubovoľným počtom medzier. Vymazanie obsahu programového kľúča sa prevedie rovnako ako vloženie textu s tým, že DR je pred stlačením klávesy WRK prázdny.

Výpis obsahu programového kľúča sa prevedie samotným stlačením programovej klávesy. Celkom je teda možné si "odpamätať" 24 rôznych reťazcov znakov.

Kódy kláves sa na PMD 85-1 opäť líšia od ostaných modelov:

  • PMD 85-1
    • K0K11 => D0 až DB
    • Shift + K0Shift + K11 => E0 až EB
  • Ostatné modely
    • K0K11 => 88 až 93
    • Shift + K0Shift + K11 => 94 až 9F

Rutiny pre test klávesnice

V Monitore PMD 85 je štandardná rutina pre test klávesnice na adrese 84A1h, resp. 0E4A1h na PMD 85-3. Táto rutina čaká na stlačenie ktorejkoľvek klávesy (okrem samostatných Shift a STOP) a vráti jej kód v registri A. Kód klávesy je zároveň uložený do systémovej premennej na adrese 0C134h. Zachováva hodnoty registrov BC, DE a HL.

V Monitore PMD 85-2, -2A a -3 je naviac rutina pre test klávesnice bez čakania. Táto rutina je na adrese 89C0h, resp. 0E9C0h a mení všetky registre. Pokiaľ bola počas testu stlačená nejaká klávesa, jej kód je, rovnako ako v predošlom prípade, v registri A a v systémovej premennej na adrese 0C134h. Ak nebola stlačená žiadna klávesa, vrátená je hodnota 0.

Na adrese 8C74h, resp. 0EC74h je rutina pre test klávesy STOP. Pokiaľ bola v okamihu volania klávesa STOP stlačená, v registri A sa vráti hodnota 03h a je nastavený príznak Z. V opačnom prípade sa v registri A vráti hodnota 40h a príznak Z nie je nastavený.

Testovanie kláves v stojovom kóde ukazujú nasledujúce jednoduché príklady:

       ; test klávesy STOP
       IN   0F5h                ; prečítaj stav klávesnice
       ANI  40h                 ; odmaskuj bit PB6, kde je klávesa STOP
       JZ   IS_KBD_STOP         ; keď je v nule, klávesa STOP je stlačená
       ...                      ; klávesa STOP nie je stlačená
 
 
       ; test klávesy SHIFT
       IN   0F5h                ; prečítaj stav klávesnice
       ANI  20h                 ; odmaskuj bit PB5, kde je klávesa SHIFT
       JZ   IS_KBD_SHIFT        ; keď je v nule, klávesa SHIFT je stlačená
       ...                      ; klávesa SHIFT nie je stlačená
 
 
       ; test klávesy R
       MVI  A,3                 ; klávesa R je v 3. stĺpci
       OUT  0F4h                ; zapíš číslo stĺpca
       IN   0F5h                ; prečítaj stav klávesnice
       ANI  04h                 ; odmaskuj bit PB2, kde je klávesa R
       JZ   IS_KBD_R            ; keď je v nule, klávesa R je stlačená
       ...                      ; klávesa R nie je stlačená
 
 
       ; ak je nutné nezmeniť hornú povicu portu A, je potrebné prečítať
       ; pôvodnú hodnotu portu a pridať požadovaný stĺpec
       ; test klávesy INS
       IN   0F4h                ; prečítaj stav portu A
       ANI  0F0h                ; ponechaj horné bity
       ORI  12                  ; klávesa INS je v 12. stĺpci
       OUT  0F4h                ; zapíš nové číslo stĺpca
       IN   0F5h                ; prečítaj stav klávesnice
       ANI  02h                 ; odmaskuj bit PB1, kde je klávesa INS
       JZ   IS_KBD_INS          ; keď je v nule, klávesa INS je stlačená
       ...                      ; klávesa INS nie je stlačená