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