KEY MANAGERDie Tastatur-Routinen BB00: KM INITIALIZEInitialisieren der Tastatur-Routinen Eingaben: keine Ausgaben: keine Unverändert: IX,IY Komplette Initialisierung des KEY MANAGERs: Alle Unterprogramme: VariablenVariablen, Puffer und Überblick: Die Indirections der Firmware-Packs Betroffen sind: - Die Indirections der Firmware-Packs: BDEE: IND KM TEST BREAKIND KM TEST BREAK - Tastenpuffer - Expansion-Puffer und -Datentypen: StringsStrings - Tasten-Übersetzungstabellen - Repeat-Verzögerung und Geschwindigkeit - SHIFT- und CAPS LOCK - BREAKs werden ignoriert BB03: KM RESETZurücksetzen der Tastatur-Routinen. Eingaben: keine Ausgaben: keine Unverändert: IX,IY 'kleine' Initialisierung des KEY MANAGERS: Die Puffer und Überblick: Die Indirections der Firmware-Packs Betroffen sind: - Die Indirections der Firmware-Packs: BDEE: IND KM TEST BREAKIND KM TEST BREAK - Tastatur-Puffer - Expansion-Puffer und -Datentypen: StringsStrings - BREAKs werden ignoriert BB06: KM WAIT CHARWarte auf ein (expandiertes) Zeichen von der Tastatur. Eingaben: keine
Ausgaben: CY=1 und Operationen: BD5B / 349A / 349A: FLO SUBA=Zeichen
Unverändert: BC,DE,HL,IX,IY
Warte so lange, bis ein Zeichen von der Tastatur verfügbar ist. Die Tastatur: ErweiterungszeichenErweiterungszeichen und werden ausgewertet, zurückgegebene Zeichen ebenfalls. BB09: KM READ CHARHole ein (expandiertes) Zeichen von der Tastatur (falls eins vorhanden ist). Eingaben: keine
Ausgaben: wenn CY=1 dann Operationen: BD5B / 349A / 349A: FLO SUBA=Zeichen sonst CY=0
Unverändert: BC,DE,HL,IX,IY
Erklärung der Anschlussbelegung: TestTeste, ob ein Zeichen von der Tastatur verfügbar ist (-> CY). Wenn ja, hole es. Die Routine wartet nicht. Die Tastatur: ErweiterungszeichenErweiterungszeichen werden ausgewertet, ein zurückgegebenes Zeichen ebenfalls. BB0C: KM CHAR RETURNGebe ein Zeichen an den MAIN FIRMWARE JUMPBLOCK: KEY MANAGER Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA=Zeichen
Ausgaben: keine
Unverändert: AF,BC,DE,HL,IX,IY
Man kann Die Abteilungen des Betriebssystems: Der Key Managerdem KEY MANAGER ein einziges Zeichen zurückgeben. Beim nächsten Versuch, ein expandiertes Zeichen von der Tastatur abzuholen wird dann dieses Zeichen ausgegeben. Es wird dabei nie expandiert, auch wenn es ein Die Tastatur: ErweiterungszeichenErweiterungszeichen ist. Außerdem werden die Die Tastatur: Steuerzeichen des Key Managers und des ZeileneditorsSteuerzeichen des MAIN FIRMWARE JUMPBLOCK: KEY MANAGER BB0F: KM SET EXPANDOrdne einem Die Tastatur: ErweiterungszeichenErweiterungszeichen ein Datentypen: StringsString zu. Eingaben: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Die Die Tastatur: ErweiterungszeichenErweiterungszeichen 128 bis 159 können mit Zeichenketten (Datentypen: StringsStrings) belegt werden. Dafür müssen die Datentypen: StringsStrings in einem Puffer gespeichert werden. Der Datentypen: StringsString darf überall im RAM liegen, aber nicht in einem Erläuterung zu den Anschlüssen 40 bis 45: 42 - ROMEN (0)ROM. Ein Der Linien-Algorithmus: Fehler 3Fehler (CY=0) tritt dann auf, wenn im Puffer kein Platz mehr ist, oder LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL BB12: KM GET EXPANDHole ein Zeichen aus einem Erweiterungs-String. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Die Tastatur: ErweiterungszeichenErweiterungszeichen L = Zeichennummer im Erweiterungs-String Ausgaben: wenn CY=1 dann Operationen: BD5B / 349A / 349A: FLO SUBA=Zeichen Unverändert: BC,HL,IX,IY Die Zeichen sind beginnend mit 0 durchnummeriert. Ein Der Linien-Algorithmus: Fehler 3Fehler (CY=0) tritt auf, wenn Operationen: BD5B / 349A / 349A: FLO SUBA keinen gültigen Code enthält oder der Datentypen: StringsString kürzer als durch L verlangt ist. BB15: KM EXP BUFFERLege den Speicherbereich fest, in dem der MAIN FIRMWARE JUMPBLOCK: KEY MANAGER Eingaben: DE = Adresse für den Puffer HL = Länge Ausgaben: CY=1 -> alles o.k. Unverändert: IX,IY Der Puffer wird entsprechend DE und HL übernommen und mit den Standard-Expansionstrings initialisiert. Ein Der Linien-Algorithmus: Fehler 3Fehler (CY=0) tritt auf, wenn der Puffer dafür zu kurz ist. Dann wird der alte Puffer nicht freigegeben! Der neue Puffer muss deshalb mindestens 44 Zeichen lang sein. Der Puffer darf nur im zentralen RAM liegen. BB18: KM WAIT KEYWarte auf ein (nicht expandiertes) Zeichen von der Tastatur. Eingaben: keine
Ausgaben: CY=1 und Operationen: BD5B / 349A / 349A: FLO SUBA=Zeichen
Unverändert: BC,DE,HL,IX,IY
Die Routine wartet so lange, bis ein Zeichen von der Tastatur verfügbar ist. Die Tastatur: ErweiterungszeichenErweiterungszeichen werden dabei nicht expandiert, zurückgegebene Zeichen werden nicht berücksichtigt. BB1B: KM READ KEYHole ein (nicht expandiertes) Zeichen von der Tastatur. Eingaben: keine
Ausgaben: wenn CY=1 dann Operationen: BD5B / 349A / 349A: FLO SUBA=Zeichen
Unverändert: BC,DE,HL,IX,IY
Hole nur dann ein Zeichen von der Tastatur, wenn eins verfügbar ist (CY=1). Diese Routine wartet nicht. Die Tastatur: ErweiterungszeichenErweiterungszeichen werden nicht expandiert, zurückgegebene Zeichen werden nicht berücksichtigt. BB1E: KM TEST KEYErklärung der Anschlussbelegung: TestTeste, ob eine bestimmte Taste gedrückt ist. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Tastennummer Ausgaben: Z=0 -> Taste ist gedrückt sonst Z=1 CY=0 und C = Zustand von [SHIFT] und [CTRL] Unverändert: LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Datenbreite: Bits BB21: KM GET STATEErfrage den Status der Shift- und Caps-Locks. Eingaben: keine Ausgaben: L = Shift-Lock-Status H = Caps-Lock-Status Unverändert: BC,DE,IX,IY &00 bedeutet, dass das entsprechende Lock nicht eingeschaltet ist. &FF bedeutet, dass es eingeschaltet ist. BB24: KM GET JOYSTICKErklärung der Anschlussbelegung: TestTeste den Schalt-Zustand der Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joysticks. Eingaben: keine Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA und H enthalten den Status vom Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joystick 0 L enthält den Status von Schaubilder der Tastatur: Erster Joystick 0 und zweiter Joystick 1Joystick 1 Unverändert: BC,DE,IX,IY Die einzelnen Datenbreite: Bits 0 - hoch 4 - Feuer 1 1 - runter 5 - Feuer 2 2 - links 6 - Pin 5 des Joystick-Anschlusses (n.c.) 3 - rechts 7 - immer 0 BB27: KM SET TRANSLATELege das Zeichen fest, das eine Taste erzeugen soll, wenn sie ohne 'CTRL' oder 'SHIFT' gedrückt wird. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Tastennummer LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Wenn die Tastennummer größer oder gleich 80 ist, wird nichts unternommen. Folgende Zeichen werden vom MAIN FIRMWARE JUMPBLOCK: KEY MANAGER &FD = 253 -> CAPS LOCK Schalter &FE = 254 -> SHIFT LOCK Schalter &FF = 255 -> Ignorier-Zeichen BB2A: KM GET TRANSLATEErfrage die Belegung einer Taste ohne 'CTRL' und 'SHIFT'. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Tastennummer Ausgaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Zeichen, das durch diese Taste erzeugt wird Unverändert: BC,DE,IX,IY Siehe KEY MANAGER: BB27: KM SET TRANSLATEBB27 - KM SET TRANSLATE wegen Zeichencodes, die der MAIN FIRMWARE JUMPBLOCK: KEY MANAGER BB2D: KM SET SHIFTBestimme das Zeichen einer Taste für 'SHIFT'. Wie &KEY MANAGER: BB27: KM SET TRANSLATEBB27 KM SET TRANSLATE, nur für 'mit SHIFT'. BB30: KM GET SHIFTErfrage die Die Tastatur: Die Standard-Tasten-ÜbersetzungTasten-Übersetzung mit 'SHIFT'. Wie &KEY MANAGER: BB2A: KM GET TRANSLATEBB2A KM GET TRANSLATE, nur für 'mit SHIFT'. BB33: KM SET CONTROLBestimme das Zeichen einer Taste für 'CTRL'. Wie &KEY MANAGER: BB27: KM SET TRANSLATEBB27 KM SET TRANSLATE, nur für 'mit CTRL'. BB36: KM GET CONTROLErfrage die Die Tastatur: Die Standard-Tasten-ÜbersetzungTasten-Übersetzung mit 'CTRL'. Wie &KEY MANAGER: BB2A: KM GET TRANSLATEBB2A KM GET TRANSLATE, nur für 'mit CTRL'. BB39: KM SET REPEATLege fest, ob eine Taste 'Der Key Manager: Repeatrepeaten', sich also automatisch wiederholen darf, wenn man sie lange genug drückt. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Tastennummer LOW KERNEL JUMPBLOCK: 000B: LOW KL LOW PCHL Wenn die Tastennummer in Operationen: BD5B / 349A / 349A: FLO SUBA größer oder gleich 80 ist, wird nichts eingetragen. BB3C: KM GET REPEATErfrage, ob eine Taste 'Der Key Manager: Repeatrepeaten' darf. Eingaben: Operationen: BD5B / 349A / 349A: FLO SUBA = Tastennummer Ausgaben: Z=0 -> die Taste darf Der Key Manager: Repeatrepeaten, Z=1 -> sie darf nicht Unverändert: BC,DE,IX,IY BB3F: KM SET DELAYLege die Verzögerungszeiten beim 'Der Key Manager: RepeatRepeaten' fest. Eingaben: H = Wartezeit bis zum ersten Der Key Manager: RepeatRepeat. L = Wartezeit zwischen weiteren Der Key Manager: RepeatRepeats. Ausgaben: keine Unverändert: BC,DE,HL,IX,IY Die Verzögerungszeiten beziehen sich auf die Der Key Manager: Tastatur-AbfrageTastatur-Abfragen und Einleitung: Die Tastatur Die Standardwerte sind 30 (0.6 sek.) für die erste, und 2 (0.04 sek.) für die folgenden Wartezeiten. Wenn der Tastaturpuffer nicht leer ist, werden Der Key Manager: RepeatRepeats so lange hinausgezögert, bis das laufende Programm den Puffer geleert hat. Dadurch wird verhindert, dass der Tastaturpuffer sich unbemerkt durch Der Key Manager: RepeatRepeats füllt, wenn das Programm mit der Abarbeitung nicht nachkommt. BB42: KM GET DELEAYErfrage die Verzögerungszeiten beim 'Der Key Manager: RepeatRepeaten'. Eingaben: keine Ausgaben: H = Wartezeit bis zum ersten Der Key Manager: RepeatRepeat L = Wartezeit zwischen folgenden Der Key Manager: RepeatRepeats. Unverändert: BC,DE,IX,IY Siehe auch Queues als verkettete Liste: Anmerkung:Anmerkungen bei &KEY MANAGER: BB3F: KM SET DELAYBB3F KM SET DELAY. BB45: KM ARM BREAKAktiviere den Break-Mechanismus. Eingaben: DE = Adresse der Break-Behandlungsroutine C = Benötigte ROM-Select-Adresse Ausgaben: keine Unverändert: IX,IY Das BREAK Der Kernel - Software-Interrupts: EventsEVENT ist immer SYNCHRON, EXPRESS mit der Priorität 0 und mit FAR ADDRESS. BB48: KM DISARM BREAKSchalte den Break-Mechanismus aus. Eingaben: keine Ausgaben: keine Unverändert: BD,DE,IX,IY BB4B: KM BREAK EVENTLöse ein Break-Event aus, wenn der Mechanismus aktiv ist. Eingaben: keine Ausgaben: keine Unverändert: BC,DE,IX,IY Wenn der Break-Mechanismus ausgeschaltet ist, geschieht nichts. Sonst wird der Break-Eventblock in die 'synchronous pending queue' eingehängt und das BREAK Der Kernel - Software-Interrupts: EventsEVENT Basic: Die Token des Locomotive-BasicTOKEN (&EF=139) in den Tastenpuffer eingefügt (außer, wenn dieser voll ist) und der Break-Mechanismus wieder ausgeschaltet. Diese Routine ist dafür vorgesehen, vom Interruptpfad aus aufgerufen zu werden. Sie lässt also keine Alle noch folgenden Anschlüsse fallen unter die Rubrik STEUER- oder auch CONTROLBUS:: INT - InterruptInterrupts zu. Wohl aber der Vektor KEY MANAGER: BB4B: KM BREAK EVENTBB4B, da dieser ja mit einem LOW MAIN FIRMWARE JUMPBLOCK: JUMPER BD3A: KM SET LOCKSNur CPC 664 und 6128. Lege den Shift- und den Caps-Lock-Status neu fest. Eingaben: H = neuer Caps Lock Status L = neuer Shift Lock Status Ausgaben: keine Unverändert: BC,DE,HL,IX,IY Der Zustand von Caps Lock (Grossbuchstaben-Arretierung) und Shift Lock (Arretierung der SHIFT-Taste für alle Zeichen) wird entsprechend H und L neu gesetzt. Dabei gilt folgende Vereinbarung: &00 -> ausschalten &FF -> einschalten BD3D: KM FLUSHnur CPC 664 und 6128. Lösche alle bisher aufgelaufenen Zeichen im Tastaturpuffer. Eingaben: keine Ausgaben: keine Unverändert: BC,DE,HL,IX,IY Der Tastatur-Puffer wird komplett gelöscht, ein eventuell angefangenes Die Tastatur: ErweiterungszeichenErweiterungszeichen oder ein Put Back Character werden vergessen. Besitzer des CPC 464 können als Ersatz folgende Routinen benutzen: Einleitung: BASIC WHILE INKEY$<>"":WEND Assembler: LOOP12: Maschinencode über HIMEM: CALLCALL #BB09 ; KEY MANAGER: BB09: KM READ CHARKM READ CHAR JR NC,LOOP12 RET |