035
11.10.2026, 12:08 Uhr
HeikoS
|
Auf Seite 39 gibt es dieses Bild:

Volker hatte ja auch einen Emulator geschrieben, kann man von seiter Seite laden. Dort muss man erst einmal CTRL+<irgendeine Taste> und dann noch einmal z.B. "Z" drücken, damit das ausgeführt wird.
Der Quelltext der Tastatur-Routine ist auch auf Volkers Seite zu finden. Dort kann man die Behandlung von SHIFT und CTRL auch mal nachschauen. Wenn ich das richtig sehe, müsste da das gleichzeitige Drücken von CTRL+Taste funktionieren. Aber genau habe ich es noch nicht studiert. Das wird in der CI-Routine und ZYKL-Schleife gemacht.
Grüße, Heiko
EDIT: Da in CI zuerst auf "Taste gedrückt" und dann auf "Taste frei" gewartet wird und erst danach abgefragt wird, ob es "SHIFT" oder "CTRL" ist, ist das Originalverhalten der Tastatur wohl doch so, das man einmal "CTRL" und danach z.B. "Z" drücken muss.
| Quellcode: | ;*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---* ;SUBROUTINE ZUR EINGABE EINES ZEICHENS UEBER DAS TERMINAL ;***IN: - ;**OUT: A...ZEICHEN IN ASCII ;*KILL: A,F CI: EQU $ CALL CI0 BIT 6,A ;UMWANDLUNG KLEIN/GROSS CALL NZ,SH2 OR A RET CI0: PUSH BC PUSH DE PUSH HL LD HL, FLGIO CI2: CALL ZYKL JR Z, CI2 ;TASTE GEDRUECKT LD D, A CALL CVTA ;- ASCII PUSH AF CALL TON CI1: CALL ZYKL JR NZ, CI1 ;TASTE FREI POP AF ;UMSCHALTTASTE ? CP 11H ;DC1=SHIFT JR Z, CI3 CP 12H ;DC2=CONTROL JR Z, CI4 POP HL POP DE POP BC RET CI3: SET 3, (HL) JR CI2 CI4: SET 4, (HL) JR CI2 ;*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---* ;SUBR. FUER EINEN ZYKLUS DER TASTENEINGABE ;***IN: - ;**OUT: A=0...KEINE EINGABE ; A...SONST SPALTENBYTE ; E...ZEILENBYTE ;*KILL: A,B,C,E,F ZYKL: EQU $ LD B, 08H LD C, PIOAD IN A, (C) AND 0F1H ZYK1: LD E, A OUT (C), E CALL ZS IN A, (PIOBD) CP 0FFH JR NZ, ZYK2 ;TASTE GEDRUECKT LD A, E ADD A, 02H DJNZ ZYK1 ;KEINE TASTE GEDRUECKT XOR A RET ZYK2: LD E, 0FEH ZYK3: RRC E DJNZ ZYK3 RET ;*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---*---* ;SUBR. ZUR KONVERTIERUNG TASTENKODE -> ASCII ;***IN: DE...ZEICHEN IM TASTENKODE ;**OUT: A=...ZEICHEN IM ASCII-KODE ;*KILL: A,B,C,D,E,F CVTA: PUSH HL XOR A LD B, A ;B=0 F.ADD HLL,BC ;REL. TAB.PLATZ FUER SPALTE CVTA0: ADD A, 7 RRC D JR C, CVTA0 SUB 7 LD C, A ;REL. TAB.PLATZ FUER ZEILE XOR A CVTA1: INC A RRC E JR C, CVTA1 DEC A ;REL. TAB.PLATZ FUER ZEICHEN IN C ADD A, C LD C, A LD HL, TTAB ADD HL, BC LD A, (HL) ;TEST AUF UMSCHALTUNG LD HL, FLGIO BIT 3, (HL) CALL NZ, SHIFT RES 3, (HL) ;UMSCHALTUNG LOESCHEN ;TEST AUF CONTROL BIT 4, (HL) CALL NZ, CONT RES 4, (HL) POP HL RET SHIFT: EQU $ BIT 6, A ;BUCHST. JR Z, SH1 SH2: RES 5, A ;GROSS:=KLEIN RET SH1: RES 4, A ;ZEICHEN:=ZIFFER RET CONT: AND 1FH RET ;KONVERTIERUNGSTABELLE FUER IMPL. TASTEN ; END OF FUNCTION CONT TTAB: DB 0BH ;VTABULATOR DB 'p' DB 'i' DB 'z' DB 'r' DB 'w' DB 9 ;HTABULATOR ;--------------------------------- DB 8 ;BACKSPACE DB 'o' DB 'u' DB 't' DB 'e' DB 'q' DB ' ' ;SPACE ;--------------------------------- DB ';' DB 7Fh ;DEL DB 'n' DB 'v' DB 'x' DB 0 DB 0 ;--------------------------------- DB '<' DB 'k' DB 'h' DB 'f' DB 's' DB 0 DB 0 ;--------------------------------- DB 3 ;ETX DB 0DH ;CR DB 'm' DB 'b' DB 'c' DB 'y' DB 12h ;DC2=CONTROL ;--------------------------------- DB 11h ;DC1=SHIFT DB 'l' DB 'j' DB 'g' DB 'd' DB 'a' DB '>' ;--------------------------------- DB 0Ah DB "0864" DB "2?" ;--------------------------------- DB ":975" DB "31=" LTTAB: EQU $-TTAB
|
Dieser Beitrag wurde am 11.10.2026 um 12:40 Uhr von HeikoS editiert. |