pondělí 27. března 2000

Keypad - numerická klávesnice pro Spectrum

autor: Zbyněk Vanžura

Keypad Co to vlastně je a existuje to vůbec? Tak to je otázka, kterou jsem si položil, když jsem poprvé četl návod k ZX Spectru +2 - vůbec nic se tam o něm nedozvíte.
Jedná se vlastně o numerickou klávesnici, která je připojena ke Spectru pomocí dvou datových vodičů (bit 1 - out a bit 5 - in) ve 14. datovém registru zvukového čipu AY 3-8912 (zápis nebo čtení tohoto registru se provádí nejprve zápisem registru na port $FFFD (65533) a poté již standardním čtením, nebo zápisem portu $BFFD (49149)), a slouží k jednodušší editaci basicu ve 128 módu a v kalkulátoru. Použitý port je po doplnění nepoužitých bitů 0 a 4 vlastně druhým sériovým portem u počítačů ZX Spectrum 128, +2.
Společost Amstrad po převzetí firmy Sinclair již toto zařízení nepodporovala a tudíž u počítačů +3, +2A a +2B již keypad nefunguje (z ROM byli odstraněny rutiny pro jeho obsluhu), ale naopak je možné uvolněný port používat k sériové komunikaci i za pomoci basicových příkazů. Ovšem i v těchto počítačích zůstali funkce, které zjednodušují editaci 128 basicu a částečně i kalkulátoru, bohužel jsou na standardní klávesnici tak nešikovně rozmístěny, že jsou takřka nepoužitelné.
Přehled funkcí keypadu a jejich vyvolání na standardní klávesnici
Funkce
Kombinace kláves
Kód
Skok na konec programu
ExtMode+T
$A5
Skok na začátek programu
ExtMode+N
$A6
Skok na konec řádku BASIC
ExtMode+M
$A7
Skok na začátek řádku BASIC
ExtMode+SymShift+2
$A8
Skok o 10 řádků dopředu
SymShift+I
$AC
Skok o 10 řádků zpět
ExtMode+P
$AD
Kurzor po slovech vpřed
ExtMode+SymShift+J
$AE
Kurzor po slovech vzad
ExtMode+I
$AF
Vymaže řádku BASIC od kurzoru do konce
ExtMode+J
$B0
Vymaže řádku BASIC od začátku do kurzoru
ExtMode+K
$B1
Vymaže slovo vpravo od kuzoru
ExtMode+W
$B2
Vymaže slovo vlevo od kuzoru
ExtMode+E
$B3
Vymaže znak vlevo od kuzoru
Delete
$0C
Vymaže znak pod kuzorem
ExtMode+SymShift+K
$AA
Přepne do dvouřádkového editoru
ExtMode+SymShift+8
$A9
S vyjímkou kódů $A5, $A6 a $A9 fungují tyto funkce i v kalkulátoru.
Rozložení kláves na keypadu
delete left
/
cursor up
*
delete right
(
TOGGLE
)
cursor left
7
cursor down
8
cursor right
9
CMND
-
del word left
4
del word right
5
page up
6
page down
+
del eol left
1
del eol right
2
top of text
3
fire, =
ENTER
shift, fire
0
bot of text
.
fire, =
ENTER
Rutiny keypadu v ROM
Na adrese $0118 (280) v editor ROM (128 ROM) je umístěna rutina KPSCAN pro obsluhu keypadu. Ovšem jedna rutina pro obsluhu keypadu se dostala i do standardní ROM, a to na adresu $3B01 (15105) - co však má za úkol, to již netuším.
KPSCAN - 0118h (280)
Podprogram sloužící k obsluze přídavné klávesnice (keypad).

Vstupní parametry:
žádné

Výstupní stav:
ROW01, ROW23 a ROW 45 obsahují okamžitý stav keypadu
v pořádku:
   Příznak NZ
   E - kód klávesy (%10000000 - když není stištěna, jinak %0kkkkkkk)
chyba:
   Příznak Z
   není připojen keypad nabo je stištěno více kláves (s vyjímkou 0/Shift)

Tabulka vracených kódů kláves (v registru E)
Klávesa
Samotná klávesa
Klávesa se Shiftem
0 / Shift
$6C

1
$5F
$71
2
$5E
$70
3
$5D
$6F
4
$6B
$7D
5
$6A
$7C
6
$69
$7B
7
$67
$79
8
$66
$78
9
$65
$77
.
$5B
$6D
+
$68
$7A
-
$64
$76
*
$62
$74
/
$63
$75
(
$61
$73
)
$60
$72
Enter
$5C
$6E