Tastatur mit Raffinessen mit der K 7669 fuer den Z 1013
-------------------------------------------------------
Dipl.-Ing. R. Brosig, BPC 12/89
1. Vorbetrachtung
Seit 1985 befindet sich ein 4-K-Monitor fuer die Tastatur
K 7659 und spaeter auch fuer K 7652 in der Anwendung der
Z-1013-User (2.028 RB). Durch die Entwicklung der Amateur-
tastatur K 7669 wurde es notwendig, diesen 4-K-Monitor auch
fuer diese Tastatur anzupassen. Die groessten Schwierigkeiten
enstanden durch die wesentlich kleinere Matrix und damit
geringere Tastenzahl, da die gleiche Funktionsvielfalt erhalten
bleiben sollte. In der Zwischenzeit erschien auch die Umbauan-
leitung des Z 1013 zur Darstellung von 64 Zeichen/Zeile gekop-
pelt mit einigen anderen Hardwareschaltfunktionen ( 2/4 MHz,
Zeichengeneratorumschaltung ASCII-DIN). Diese Zusatzfunktionen,
die ueber die I/O-Adresse 4 geschaltet werden koennen, fanden
in der folgenden Anpassung des Monitors an die K7669 Berueck-
sichtigung. Leider mussten fast alle Tasten doppelt belegt wer-
den, so auch die Cursor-Tasten, die Space- und auch die
ENTER-Taste.
2. Loesungsprinzip der Tastaturvariante
Es wird eine K 7669 mit einer speziellen Hardwareanpassung ver-
wendet, die an den gleichen Hardwareschnittstellen wie die
Originaltastatur betrieben wird. Dadurch gibt es wenig Pro-
bleme bei Software, die direkt auf die Originalmatrix zu-
greift. Die Tastaturabfrage erfolgt durch ein neues komfor-
tables Programm, welches verstaendlicherweise laenger als
das originale ist und deshalb ausserhalb des 2K-Monitors gene-
riert wird (ab 0F800H). Um Softwarekompatibilitaet zu si-
chern, wurde am Anfang der originalen Tastaturroutine ein
Sprung zum externen Tastaturprogramm eingetragen. Damit ist
verstaendlich, dass der alte Monitor geringfuegig geaendert
werden muss. Auf den durch den Wegfall der Originalroutine frei-
gewordenen Speicherplatz im Monitor wurden kleine Hilfs-
routinen, wie die Ausgabe auf einen Port (mit O padr abyte)
und die Anzeige des Kommandoverteilers auf 0B0H (Z), gelegt.
Weiterhin befindet sich dort eine NMI-Unterbrechungsroutine,
wo, mit Hilfe einer NMI-Taste, ein Maschinenprogramm mit
Registeranzeige abgebrochen werden kann, was sich bisher
als eine ausserordentliche Hilfe bei der Testung von Assembler-
programmen erwiesen hat.
Zur Aenderung des Monitor-EPROMs muss nicht unbedingt ein Ein-
griff auf der orig. Leiterkarte erfolgen, was evtl. Garantiean-
sprueche loeschen koennte. Es besteht die Moeglichkeit, den
Z1013 im Originalzustand zu belassen und den geaenderten Moni-
tor-EPROM von aussen zuzuschalten (mit Hilfe einer
MEMDI-Steuerung). Einfacher ist es aber, den originalen Moni-
tor-EPROM auszuloeten und durch einen anderen EPROM mit
Fassung zu ersetzen. Das Ausloeten kann entweder auf einem
Minischwall, wie er in Elektronikwerkstaetten vorhanden ist
oder mit Hilfe einer Entloetpumpe erfolgen. Letztere gibt es
zu einem Preis von 75 Kronen in Fachgeschaeften der CSSR zu
kaufen. Damit ist ein gefahr loses Arbeiten fuer
Leiterplatte und EPROM moeglich. Derzeitig wird fuer den 4 K-
Monitor ein U 2732 benutzt. Somit kann beim Z1013.16 der
originale EPROM geloescht und wieder neu programmiert einges-
etzt werden. Es muss aber beachtet werden, dass die Adres-
sierung des EPROM's veraendert werden muss. Im neuen Monitor
wurde weiterhin das Headersave sowie ein Sprungverteiler
fuer Peripherie-Schnittstellen untergebracht.
3. Hardware
Die zusaetzliche Hardware beschraenkt sich auf einen
1-aus-16-Decoder, die Statussteuerung und einen 8-auf-4-Coder.
Zur Anzeige von CAPS-lock und Hardcopy werden zwei Anzeige-
Flip-Flops verwendet. Durch die zwei LED's in der Tastatur
ist dabei nur die Status- und CAPS-lock-Funktion anzeigbar.
Ansonsten muesste noch eine LED nachgeruestet werden.
Damit die Statussteuerung funktionieren kann, muss die 4-bit
Spalteninformation neu decodiert werden, da der originale Spal-
tendecoder nur bis 10 decodiert. Dazu ist es erforderlich,
dass die 4-bit-Spalteninformation vom Spaltenlatch A47 ueber
die vier freien Kontakte auf dem Loetkamm bzw. Stecker
des Tastaturanschlusses gefuehrt wird. Sollten auch diese
vier Draehte zu viel Aenderung auf der Platine darstellen,
so kann das Spaltenlatch auch extern ueber den Systemstecker
neu ausdecodiert werden. Die verbleibenden vier Digits vom
1-aus-16-Decoder werden fuer die Ansteuerung der Flip-Flops,
der Status steuerung und des Tastenbeeps (generatorloser
Piezoschwinger o.ae.) genutzt. Die Ausgaenge des Decoders
steuern die Spaltenleitungen der Tastaturmatrix, die ueber
Dioden entkoppelt sind. Diese Entkopplung ist notwendig, um
bei der Betaetigung von zwei Tasten (SHIFT, CTRL, CODE)
keine Spalten kurzzuschliessen. Die Zeilenausgaenge werden
durch einen Coder auf einen negierten binaeren Code gewan-
delt, um wieder die originalen 4-bit-Zeileneingangsleitungen zu
erhalten. Deshalb sind prinzipiell Direktzugriffe auf die Ma-
trix moeglich, die allerdings nicht die gleiche Tastenbele-
gung wie die Originaltastatur aufweist (Korrespondenztabelle
benutzen). An dieser Stelle soll auch darauf hingewiesen wer-
den, dass solch unnoetigen Praktiken, direkt auf die Matrix
zuzugreifen, immer zu Softwareinkompatibilitaeten fuehren und
deshalb zu vermeiden sind.
Das verwendete Abfrageprinzip weist eine Besonderheit auf,
die in einer Statussteuerung liegt. Diese Statussteuerung hat
die Aufgabe, alle Spalten der Tastatur (ausser Spalte 7)
aktiv zu schalten, um einerseits eine schnelle Tastaturab-
frage zu realisieren (der Rechner muss nicht staendig alle
Spaltenleitungen abfragen) und andererseits die Interrupt-
faehigkeit zu ermoeglichen (wird momentan nicht ausgenutzt). Die Abfrage der Tastatur bei unbetaetigten Tasten wird durch
die Statussteuerung etwa 100 mal schneller als bei der
originalen Tastaturroutine (Vers. 2.02). Dieser Zeitvorteil
hat aber nicht nur positive Seiten. Programme, die die Ab-
arbeitungszeit fuer bestimmte Zwecke ausnutzen, laufen dadurch
zu schnell (z.B. blinkender Cursor). Deshalb kann per Tasten-
druck fuer solche Anwendungen eine zusaetzliche Zeitschleife
eingeschaltet werden (Tastenfunktion s/f (slow/fast)).
Die Funktion der Statussteuerung wird mittels LED angezeigt, die damit
die Bereitschaft einer Dateneingabe ueber die Tastatur signali-
siert. Die schaltungstechnische Realisierung kann mit verschie-
denen Mitteln erfolgen. Die einfachste Moeglichkeit besteht
in der Decodierung mit einem 74154, der Codierung mit 2
DL 021 und einem DL 074 fuer die Anzeige. Somit kann die ge-
samte Hardware auf 4 IC's beschraenkt bleiben. Um aber den
arg strapazierten Netzteil nicht noch mehr zu belasten, wurde
eine etwas aufwendigere CMOS-Schaltung entwickelt, die dazu
noch die hoehere Sicherheit gegen unerwuenschte Uebergangswider-
staende aufweist. Eine ebenfalls anwendbare Hardware ist die
von A. Eisenkolb entwickelte Schaltung, die sich zu der be-
schriebenen kompatibel verhaelt, aber andere Bauelemente ver-
wendet (Coder ist mit Dioden realisiert).
Die Spalte 7 (SHIFT, CODE, CTRL) wird durch die Statussteuerung
nicht aktiviert (Fehlen einer Diode), damit beim alleinigen
Druecken von SHIFT, CODE oder CTRL der Tastaturstatus nicht
veraendert wird. Diese Spalte wird erst nach Erkennung einer an-
deren Taste abgefragt, um die SHIFT-Ebene umzuschalten bzw.
eine Control-Maske (1FH) aufzulegen. Da sich die mit CTRL
beschriftete Taste nicht als Einzeltaste mit der Spalte 7 ver-
binden laesst, musste die mit SHIFT-LOCK bezeichnete Taste
zur CTRL-Taste umfunktioniert werden. Entsprechend ist die
CTRL-Taste dann die SHIFT-LOCK (CAPS-LOCK)-Taste. Es ist des-
halb eine Umbeschriftung noetig.
Die geringe Anzahl zur Verfuegung stehender zusaetzlicher
Steuerleitungen macht es erforderlich, fuer die Anzeige der
Funktionen CAPS-LOCK und Hardcopy zusaetzliche Flip-Flops mit
einer gemeinsamen Resetleitung zu verwenden. Bei jeder Neube-
legung eines Flip-Flops werden deshalb durch den Rechner immer
beide Flip-Flops neu gesetzt. An der Resetleitung ist eben-
falls der Tastenklick angeschlossen, wodurch die Flip-Flops
auch nach der Ausgabe des Tones neu gesetzt werden muessen.
Der Tastenklick wird softwaremaessig erzeugt und ist durch
Tastendruck ein- und ausschaltbar.
Die fuer die Tastaturtypen K7659 und K7652 eingesetzten Zusatz-
leiterplatten fuer die Ansteuerschaltung koennen unveraendert
auch fuer die K7669 eingesetzt werden. Die nichtvorhandenen
Spalten werden einfach nicht angeschlossen (Achtung! Die An-
schlussbelegung an den Tastatursteckern ist bei allen Tastaturen
nterschiedlich). Die Spalte 7 der Matrix wird durch die
Verbindung der Tasten SHIFT, CODE und CTRL gebildet, die
Spalte 8 durch die Verbindung der Tasten 59 und 52. Das Layout
der Leiterplatte entspricht dem in MP 7/88 veroeffentlichten.
Vom Computerclub Leipzig bzw. Berlin Hohenschoenhausen kann
versucht werden, eine ungebohrte Leiterplatte zu bekommen.
Fuer die Verbindung der Tastatur mit dem Rechner ist nur
eine 10- adrige flexible Leitung erforderlich, fuer die Tele-
fonkabel Verwendung fand. Bei einer Anschlusslaenge von 5 m
konnten noch keine Fehlefunktionen beobachtet werden.
4. Software
Fuer die Tastaturabfrage wurde ein neues Abfrageprogramm
entwickelt, welches der verwendeten Hardware angepasst ist.
Es hat mit Tabellen eine Laenge von einem 3/4 K und kann
deshalb nicht den originalen Standort beziehen. Durch den
auf der Originalaufrufadresse (F130H) eingetragenen Sprung
zum neuen Standort (F800H) wird die SoftwareKompatibilitaet
zum Originalmonitor erreicht. Es muss aber eingeschraenkt
werden, dass Programme, die in die originale Tastaturrou-
tine hineinspringen (eine laienhafte Unsitte), nicht mehr
fehlerfrei laufen. Darunter faellt auch der originale
10K-BASIC-Interpreter von Robotron. Deshalb ist es ratsam nur
saubere Software (KC-BASIC+ bzw. KC-BASIC m+) zu benutzen.
Bei der Realisierung des Programms wurde ein in jeder Hinsicht
offenes Prinzip verwendet. Das heisst, dass der Nutzer in
der Lage ist, sich die Tastatur nach eigenen Wuenschen
zusammenzustellen. Bis auf zwei Tasten (SHIFT, CTRL, CODE) sind
alle Tasten neu belegbar. Weiterhin kann auch wahlweise ein
String auf beliebige Tasten gelegt werden. Wenn dafuer
keine besonderen Tasten verwendet werden sollen, koennen
Strings auch durch gemeinsames Druecken von SHIFT und CTRL
sowie einer dritten Zeichentaste erzeugt werden. Desweiteren
sind die F-Tasten in Verbindung mit der Taste CODE fuer
diesen Zweck verwend bar. Der Tastaturtreiber erzeugt dazu
intern einen Grafikcode (>80H), mit dem ein mit diesem
Zeichen versehener String in einem Stringfeld gesucht und
ausgegeben wird. Sollte kein String mit diesem Kennzeichen
existieren, wird dieses interne Grafikzeichen ausgegeben. Die
Ausgabe von Grafikzeichen im Grafikmode wird dadurch nicht be-
einflusst.
Fuer die einzelnen Felder (Stringfeld, Tastencodefeld, Funk-
tionstastenfeld und Funktionstastenadressfeld) gibt es ein
Pointerfeld, welches auf dem ehemaligen Tastencodefeld ab 3BH
angelegt wurde.
Damit ist es dem Anwender moeglich, sich durch das Veraendern
dieser Pointer an beliebiger Stelle im RAM ein neues Feld
aufzubauen. Diese Moeglichkeit hat besonders fuer das
Stringfeld grosse Bedeutung, da man dadurch in der Lage ist,
Strings fuer verschiedene Anwendungen zu laden (z.B. BASIC-
Schluesselwoerter, Assemblermnemonik, Briefflos keln u.ae.).
Durch die Moeglichkeit, auch die anderen Felder neu zusam-
menzustellen, kann auch dem Problem begegnet werden, dass
z.B. Programme verschiedene Tastencodes fuer gleiche Steuer-
funktionen benutzen.
Das Pointerfeld wird durch den Monitor beim ersten Reset
auf die Standardwerte gestellt (nochmaliges Reset wird am
C3H auf Adr. 66H erkannt), womit gesichert ist, dass bei
jedem weiteren Reset ein evtl. geaendertes Pointerfeld erhal-
ten bleibt. Das hat aber die Konsequenz, dass ein Programm-
absturz auch dieses Pointerfeld ungewollt zerstoeren kann
und der Rechner trotz Reset nicht mehr bedienbar ist.
Dann hilft nur noch Ausschalten des Rechners! Aendert man
folgende vier Zellen, so kann erreicht werden, dass die Neuini-
tialisierung bei jedem Reset erfolgt.
F02AH 02H --> F2H
F02BH F2H --> F1H
F02DH 43H --> 33H
F030H 0AH --> 1AH
Man sollte dann aber auch darauf achten, dass aus Programmen
nicht mit Reset oder Sprung zu F000H herausgegangen wird,
sondern mit der Monitorrueckkehrtaste (RST 38H).
Ansonsten muss die Pointerinitialisierung neu erfolgen.
Fuer die einzelnen Modes der Tastatur (Grafik, CAPS-lock,
Hardcopy, Stringmode, Beep, Slow/Fast) existieren Flags, die
in der Systemzelle 27H stehen (ehemaliger Schalter
Grafik/Alpha). Ein gesetztes Flag (1) bedeutet darin:
Bit 0 - lange Repeatverzoegerung durchlaufen
1 - Stringmode on
2 - Grafikmode on
3 - Hardcopy on
4 - Shift-lock (gilt nur fuer Buchstaben)
5 - Tastenbeep on
6 - Slow
7 - Taste war betaetigt
Diese Flags werden durch den Tastaturtreiber gesetzt bzw.
rueckgesetzt. Indem man diese Flags anderweitig setzt oder
ruecksetzt, kann die Betriebsart der Tastatur von aussen mani-
puliert werden. Es sollte aber aus Kompatibilitaetsgruenden
aus Anwenderprogrammen heraus vermieden werden, da keine
spezielle Software fuer einen bestimmten Monitor geschrieben
werden sollte. Bei den Tasten gibt es eine Unterscheidung
zwischen Zeichen-, Funktions- und Wahltasten. Zu den Zeichen-
tasten gehoeren alle, bei denen der Tastaturtreiber an den Mo-
nitor ein Druck- oder Steuerzeichen liefert (z.B. A-Z, Cursor-
Tasten, ENTER). Funktionstasten aendern dagegen entweder die
Funktionsweise der Tastatur (CAPS-lock, Grafik,slow/fast),
fuehren Funktionen aus (z.B. Hardcopy-Funktion einschalten,
zum Monitor zurueckkehren (RST 38H), zu Adresse 100H springen),
oder steuern die Funktionsweise der Hardware (z.B. 64
Zeichen/Zeile ein schalten, Taktfrequenz oder Zeichenge-
nerator umschalten). Alle Funktionen funktionieren dabei nur,
wenn die Tastatur durch ein Programm bzw. durch den Monitor
noch abgefragt wird. Zu den Wahltasten gehoeren die Tasten
SHIFT, CTRL und CODE, die gleichzeitig mit anderen Tasten zu
betaetigen sind und diese dadurch spezifizieren.
Bei der Rueckkehr zum Monitor ueber die MON-Taste wird auch
gleichzei tig eine Reinitialisierung des Zusatz-Kommando-
verteilers auf B0H durchgefuehrt, so dass die standard-
maessig auf B0H eingetragenen Kommandos (@L=Headersave-
laden, @S=HS-saven, @D=Drucker-delete, @I=Drucker-ini-
tialisieren) wieder verfuegbar werden.
Bei der Ausfuehrung des Sprungs zu 100H auf Tastendruck zum
Starten eines Programms auf dieser Adresse wird der Stack
jeweils neu auf B0H gesetzt.
Eine weitere wichtige Taste ist die Screen-Copy-Taste
(S-COPY). Mit ihr ist es moeglich, eine Bildschirmkopie auf
dem Drucker zu erzeugen (Druckereinbindung ueber
Sprungverteiler DRAKK), ohne das laufende Programm zu
unterbrechen. Dabei ist zu beachten, dass waehrend der
Bildschirmkopie der Stack des laufenden Programms genutzt
wird (Stackbelastung je nach Druckertreiber). In Abhaengigkeit
der Funktion 64/32 Zeichen pro Zeile erfolgt der Zeilenvor-
schub entsprechend nach 32 oder nach 64 Zeichen. An der
Cursorposition wird die Funktion abgebrochen, um sinnloses
Drucken von Leerzeichen zu vermeiden.
Die Tastenentprellung erfolgt positiv und negativ, d.h.,
damit eine Taste als betaetigt erkannt wird, muss mindestens
15 ms (2 MHz) lang ein prellfreies Signal anliegen (positive
Entprellung). Das gleiche gilt uebertragen fuer das
Loslassen der Taste (negative Entprellung). Dadurch kommt es
nicht vor, dass selbst bei sehr schlechten Kontakten eine
Fehlfunktion auftritt. Wird eine Taste laenger als 0.5 s (2 MHz)
betaetigt, wird die Repeat funktion (Echofunktion) bei Zeichen-
tasten aktiviert. Der Normalaustritt aus der Tastaturroutine
erfolgt kompatibel zur Originalroutine mit dem Zeichen im Akku
und in Zelle 4. Eine "blinde" Tastaturabfrage erfolgt, indem vor
dem Aufruf der Routine die Zelle 4 auf 0 gesetzt wird.
4.1. Standard-Tastenbelegung
Funktionstasten (erzeugen keinen Code):
SHIFT-52 - RST 38H
SHIFT-62 - JMP 100H
SHIFT-54 - SCREEN-COPY
59 - GRAFIK ON/OFF
SHIFT-55 - HARDCOPY ON/OFF
SHIFT-43 - SLOW/FAST
SHIFT-59 - BEEP ON/OFF
54 - CAPS-LOCK ON/OFF
SHIFT-44 - Zeichengenerator umschalten
SHIFT-42 - Umschalten auf 2 MHz Takt
SHIFT-45 - Umschalten auf 4 MHz Takt
SHIFT-64 - Umschalten Bildschirmformat 64 <-> 32 Zeichen/Zeile
Steuerzeichentasten (derzeitige Belegung)
44 - Cursor hoch 0BH
43 - Cursor runter 0AH
42 - Cursor links 08H
45 - Cursor rechts 09H
52 - CTRL-C 03H (BREAK)
55 - DEL 7FH
61 - ENT 0DH
64 - TAB 14H (TAB-Dummy)
62 - Escape 1BH
Diese Steuerzeichen stehen mit in der Tastenbelegungstabelle und koen
nen somit anderen Erfordernissen angepasst werden.
TASTENBELEGUNGSTABELLE
ERSTE SHIFTEBENE ZWEITE SHIFTEBENE
POSITIONSCODE POSITIONSCODE
ZEI TASTE INTERN HEX ZEI TASTE (INTERN HEX)
'1' 1 0 '!' 1 60
'Q' 2 1 'q' 2 61
'A' 3 2 'a' 3 62
'Y' 5 3 'y' 5 63
'2' 4 4 '"' 4 64
'W' 6 5 'w' 6 65
'S' 7 6 's' 7 66
'X' 9 7 'x' 9 67
'3' 8 8 '@' 8 68
'E' 10 9 'e' 10 69
'D' 11 A 'd' 11 6A
'C' 13 B 'c' 13 6B
'4' 12 C '$' 12 6C
'R' 14 D 'r' 14 6D
'F' 15 E 'f' 15 6E
'V' 17 F 'v' 17 6F
'5' 16 10 '%' 16 70
'T' 18 11 't' 18 71
'G' 19 12 'g' 19 72
'B' 21 13 'b' 21 73
'6' 20 14 '&>' 20 74
'Z' 22 15 'z' 22 75
'H' 23 16 'h' 23 76
'N' 25 17 'n' 25 77
'7' 24 18 '/' 24 78
'U' 26 19 'u' 26 79
'J' 27 1A 'j' 27 7A
'M' 29 1B 'm' 29 7B
'8' 28 1C '(' 28 7C
'I' 30 1D 'i' 30 7D
'K' 31 1E 'k' 31 7E
',' 33 1F '<' 33 7F
'9' 32 20 ')' 32 80
'O' 34 21 'o' 34 81
'L' 35 22 'l' 35 82
'.' 37 23 '>' 37 83
'0' 36 24 '=' 36 84
'P' 38 25 'p' 38 85
':' 39 26 '*' 39 86
';' 41 27 '?' 41 87
'-' 40 28 '+' 40 88
08H 42 29 CUR.LINKS 0 42 89 2 MHz
0AH 43 2A CUR.RUNTER 0 43 8A SLOW/FAST
7FH 55 2B DEL 0 55 8B HARDCOPY ON/OFF
0BH 44 2C CUR.HOCH 0 44 8C ZG DIN/ASCII
09H 45 2D CUR.RECHTS 0 45 8D 4 MHz
'@' 46 2E '#' 46 8E
'\' 48 2F '|' 48 8F
'~' 51 30 "'" 51 90
0 54 31 CAPS-LOCK 0 54 91 SCREEN COPY
1BH 62 32 ESCAPE 0 62 92 JP 100
09H 64 33 TAB 0 64 93 32/64 ZEI/ZEILE
'[' 50 34 '{' 50 94
']' 53 35 '}' 53 95
0DH 61 36 ENTER '^' 61 96 SHIFT ENTER = ^
' ' 63 37 SPACE '_' 63 97 SHIFT SPACE = _
0 49.1 38 0 49.1 98
0 49.2 39 0 49.2 99
0 56 3A 0 56 9A
0 3B 0 9B
0 3C 0 9C
0 57 3D CODE-TASTE 0 57 9D CODE-TASTE
0 47/60 3E SHIFT 0 47/60 9E SHIFT
0 58 3F CTRL-TASTE 0 58 9F CTRL-TASTE
0 40 0 A0
0 41 0 A1
0 42 0 A2
0 59 43 GRAFIK 0 59 A3 BEEP ON/OFF
03H 52 44 ^C 0 52 A4 KALTSTART
0 45 0 A5
0 46 0 A6
0 47 0 A7
0 48 0 A8
0 49 0 A9
0 4A 0 AA
0 4B 0 AB
0 4C 0 AC
0 4D 0 AD
0 4E 0 AE
0 4F 0 AF
0 50 0 B0
0 51 0 B1
0 52 0 B2
0 53 0 B3
0 54 0 B4
0 55 0 B5
0 56 0 B6
0 57 0 B7
0 58 0 B8
0 59 0 B9
0 5A 0 BA
0 5B 0 BB
0 5C 0 BC
0 5D 0 BD
0 5E 0 BE
0 5F 0 BF
Den Standort der Tastenbelegungstabelle kann man dem Tastenbe-
legungsfeldpointer (auf 3BH) entnehmen, der auf die Tastenbe-
legungstabelle der ersten SHIFT-Ebene im ROM zeigt (nach Reset).
Die zweite SHIFT- Ebene schliesst sich dahinter an (faengt 60H
weiter hinten an).
Die am Ende auftretenden mit 0 belegten Positionen resultieren
aus der urspruenglichen max. aufruestbaren 8*12 Matrix.
4.2. Aufbau des Pointerfeldes
Das Pointerfeld befindet sich auf dem Platz des jetzt
nicht mehr benoetigten Tastaturcodefeldes und wird vom
Monitor initialisiert. Das originale Tastaturcodefeld beginnt
auf Adresse 35H und wird durch den Monitorsprung RST 38H
unterbrochen. Die ersten drei Zellen werden fuer Zaehlzellen
des Druckertreibers genutzt und sind mit 0 initialisiert. Das
Pointerfeld beginnt erst hinter dem RST 38H auf 3BH mit folgen-
dem Aufbau:
3BH - Tastenbelegungsfeldpointer
3DH - Stringfeldpointer
3FH - Pointer auf naechstes auszug. Stringzeichen
41H - Laenge Funktionstastenpos.-feld
43H - Funktionstastenpositionsfeldpointer
45H - Funktionstastenadressfeldpointer
4.3. Aufbau des Stringfeldes
Das Stringfeld hat einen sehr einfachen und codeeffektiven
Aufbau. Der auszugebende String beginnt mit dem Namen des
Strings, welcher nur aus einem Grafikzeichen besteht. Es
werden solange Zeichen von diesem String ausgegeben, bis
ein neues Grafikzeichen auftritt oder das Ende des
Stringfeldes - gekennzeichnet mit einer 0 - erreicht ist.
Damit ist auch klar, dass sich im String keine Grafikzeichen
befinden duerfen, da diese fuer die Adressierung der Strings
reserviert sind. Die Strings koennen eine beliebige Laenge ha-
ben und in beliebiger Reihenfolge angeordnet sein.
Stringfeldaufbau:
1. Grfk-Z. 1.String
2. erstes Stringz.
.
.
.
n. letztes Stringz.
n+1 Grfk.Z. 2. String
n+2 erstes Zeichen 2. String
.
.
.
0
Ende des Feldes
Guenstig ist es, sich auf Kassette einige Felder vorzuberei-
ten und diese mit einer kleinen Umladeroutine zu versehen,
welche das Eintragen des Stringfeldpointers entsprechend
des Standortes vornimmt. Somit ist das jeweilige
Stringfeld nach einem Autostart sofort nutzbar. Weiterhin kann
auch ein Stringfeld an ein Programm angehaengt werden,
welches sich beim Start des Programms automatisch einbindet.
Die fuer die Adressierung der Strings benoetigten
Grafikzeichen, welche bei Betaetigung der entsprechenden Taste
wirksam werden, koennen in der Tastenbelegungstabelle
stehen, worauf der dazugehoerige String ausgegeben wird.
Eine einfachere Moeglichkeit besteht in der gleichzeitigen
Betaetigung von SHIFT und CTRL sowie einer Zeichentaste,
worauf folgende interne Grafikzeichen erzeugt werden:
SHIFT+CTRL+ CODE-Taste+
Zeichentaste Zeichentaste
------------------- -------------------------
Taste Code Taste Code
A 81H F1 B1H
B 82H F2 B2H
C 83H F3 B3H
D 84H F4 B4H
E 85H F5 B5H
F 88H F6 B6H
G 87H F7 B7H
H 8BH F8 B8H
I 89H .
J 8AH .
K 9CH
L 8CH
M 8DH
N 8BH DOPPELBEL. ZU H
O 8FH
P 90H
Q 91H
R 92H
S 86H
T 94H
U 95H
V 88H DOPPELBEL. ZU F
W 97H
X 86H DOPPELBEL. ZU S
Y 99H
Z 9AH
[ 9BH
\ 9EH
] 9DH
0 90H DOPPELBEL. ZU P
1 91H - " - Q
2 92H - " - R
3 93H
4 94H - " - T
5 95H - " - U
6 96H
7 97H - " - W
8 98H
9 99H - " - Y
Die Unregelmaessigkeiten zu den korrespondierenden
CTRL-Zeichen entstehen beim gleichzeitigen Druecken von
SHIFT und CTRL durch das Kurzschliessen der Matrixzeilen 7
und 8, da diese hardwaremaessig nicht entkoppelt sind. Bei der
Nutzung der CODE-Taste ergibt sich eine regelmaessige Code-
Struktur, da keine Zeilen kurzgeschlossen werden.
Der mit der CODE-Taste erzeugte interne Code zur Adres-
sierung der Strings, die uebrigens auch aus nur einem Zeichen
bestehen koennen (z. B. bestimmte Steuerzeichen oder Folgen
davon), ergibt sich aus dem ASCII-Wert der Taste + 80H.
Zum Beispiel entsteht mit CODE A 41H+80H=C1H.
Im EPROM wurde ein Standardstringfeld mit den am haeufigsten
vorkommenden Basic-Schluesselwoertern eingerichtet. Auf die
ersten F-Tasten (mittels CODE angesprochen) wurden Steuer-
strings fuer die HeadersaveBedienung gelegt (z.B. @LLL, @S:,
@LNN) die die Bedienung des Rechners erleichtern.
4.4. Direktzugriffe auf die Matrix
Obwohl das direkte Zugreifen auf die Tastaturmatrix von einem
Anwenderprogramm aus unnoetig und nur in sehr seltenen Faellen
gerechtfertigt ist, gibt es eine Vielzahl von Programmen (meist
Spielprogramme), die diese Methode anwenden. Um solche Pro-
gramme ohne Aenderung nutzen zu koennen, soll folgende Korres-
pondenztabelle dienen:
orig. neu Pos.
----------------------
@ 1 1
A 3 8
B 5 16
C 7 24
D 9 32
E - 40
F ~ 51
G
H Q 2
I E 10
J T 18
K U 26
L O 34
M <- 42
N CAPS-Lock 54
O
P Y 5
Q C 13
R B 21
S M 29
T . 37
U DEL 55
V TAB 64
W GRAPHIK 59
S1 X 9
S2 V 17
S3 N 25
S4 , 33
<- ; 41
SPACE \ 48
-> SPACE 63
ENT CTRL 58
Zwei Tasten koennen nicht konvertiert werden, da diese
Positionen bei der K 7669 nicht besetzt sind. Die
Korrespondenztabelle kann auch dazu benutzt werden, um die
Hardware mit dem originalen Tastaturprogramm zu testen.
4.5. Aenderungen am originalen Monitorprogramm
Eine der wichtigsten Aenderungen ist das Eintragen des
Aussprunges aus dem originalen Tastaturprogramm und der
veraenderten Initialisie rung des ehemaligen Tastaturcode-
felds. Alles andere koennte original bleiben. Es werden
aber weitere Aenderungen vorgenommen, die die Softwarekompa-
tibilitaet nicht wesentlich verringern.
Solche Veraenderungen sind:
- NMI-Unterbrechung mit Registeranzeige (Init.66H bei Reset)
- Hardcopyfunktion des Bildschirmtreibers
- Beschreiben eines I/O-Ports vom Monitor aus ("O" ehemals "H")
- Auflistung der im Zusatzkommandoverteiler stehenden Kommandos
("Z" ehemals "A")
- Initialisierung des Zusatzkommandoverteilers mit
Standardwerten (@L-->Headersave load, @S-->Headersave
save, @D-->Drucker reset, @I--> Druckerinitialisierung)
Da der zusaetzliche Speicher mit dem Tastaturprogramm noch
nicht ausgelastet ist, wurden auf dem Rest des Speichers das
Headersave, das Screencopyprogramm, die Joystickabfrage sowie
der Sprungverteiler fuer die Systemerweiterung fest installiert.
Fuer die Uebernahme der Software ist es guenstig, die kompletten
4K ab F000H zu uebernehmen. Die umfassende Vorstellung des
Sprungverteilers wuerde hier zu weit fuehren. Deshalb sollen
nur die wichtigsten Spruenge beschrieben werden:
FFF7H - JMP STAT uebergibt Tastaturstatus im Akku
A=0 - keine Taste gedr.
A=FFH - Taste gedr. (ausser SHIFT o. CTRL)
FFF4H - JMP SARUF ruft SAVE-Routine des Headersave
Parameteruebergabe entspr. Beschr. Headersave
FFF1H - JMP LORUF
Parameteruebergabe entspr. Beschr. Headersave
FFEBH - JMP DRDEL setzt den logischen Druckertreiber zurueck
(Zaehlzellen fuer Zeile- und Spaltenposition werden zu 0)
FFE8H - JMP DRAKK uebergibt den Akkuinhalt an den logischen
Druckertreiber
FFE5H - JMP BSDR druckt den Inhalt des BWS bis zur Cursorposit.
und kehrt in das aufrufende Programm zurueck
FFDFH - JMP DRZEL wie DRAKK, nur dass das Zeichen in Zelle 1BH
uebergeben wird (vorgesehen, um im Basic mit POKE Zelle
und CALL 0FFDFH zu drucken)
FFCDH - JMP DRINI Initialisierung des logischen Druckertreibers
FFCAH - JMP ZEIDR uebergibt ein Zeichen im Akku an physischen
Druckertreiber
FFBBH - JMP GETST Abfrage der Joysticks und Uebergabe des Ergeb-
nisses in BC (B-links,C-rechts) mit folgender Bit-Be-
deutung (1)
Bit 0 - links
1 - rechts
2 - runter
3 - hoch
4 - Aktionstaste
Z-Flag=1, wenn keine Betaetigung vorliegt
CY-Flag=1, wenn Spielhebel nicht angeschlossen sind
FFB8H - JMP SOUND Ausgabe einer vollen Periode auf die Tonband-
buchse, sowie auf Bit 7 vom Systemport
Uebergabe der Periodendauer in C mit T=n*33mks+20mks
(2MHz)
Die Routinen DRINI, DRZEL, DRAKK und ZEIDR sind nicht in den oberen
4K realisiert und sind mit JMP 0E800H, 0E803H, 0E806H und E809H
initi alisiert, wo man einen Unterverteiler fuer den verwende-
ten Druckertreiber installieren kann.
5. Zusammenfassung
Es wurde eine alternative Tastaturvariante beschrieben, die
professionellen Anspruechen gerecht wird und durch folgende Vor-
teile gekennzeichnet ist:
- geringer, leistungsarmer Hardwareaufwand
- zwischen Tastatur und Rechner nur 10-adriges Kabel
erforderlich
- Anzeige der Tastaturmodes durch LED's
- schaltbarer Tastenklick
- schnelle und sichere Abfrage
- Interruptfaehigkeit
- hohe Softwarekompatibilitaet
- freie Belegbarkeit der Tasten (ausser SHIFT, CTRL und CODE)
- frei programmierbare Stringausgabe
- Repeatfunktion auf allen Zeichentasten
- einfache Monitorrueckkehr durch RST 38H-Taste
- direkter UP-Aufruf Screencopy aus der Tastaturroutine heraus
- Direktspruenge zu festen Adressen (100H)
- es koennen gegenueber der alten Routine alle Steuerzeichen
erzeugt werden
- Abfrage einer maximal 8*12 Matrix
- einfache Erweiterung der Tastatur auf 96 Tasten, indem die
nicht besetzten Positionen aufgefuellt und in der Belegungs-
tabelle eingetragen werden
Dem gegenueber stehen die Nachteile:
- es wird zusaetzlicher Adressraum des Hauptspeichers benutzt
- es muss eine Aenderung des originalen Monitorprogramms
erfolgen
- nur bedingte Kompatibilitaet bei Direktzugriffen auf die
Matrix und bei Spruengen in die originale Routine hinein
Betrachtet man Vor- und Nachteile, so kann festgestellt werden,
dass es sich lohnt, die Nachteile in Kauf zu nehmen, zumal eine
Aenderung des Monitors nur einmal erfolgen muss. In jedem Fall
stellt diese Tastatur eine echte Alternative zu den bisher vor-
handenen, meist weniger leistungsfaehigen Konzepten dar.