; MODULE KEYINTER ;[BEGIN] ;//MODULE: KEYINTER Keyboard Scan Codes: Set 2 ;//CREATE: 19-05-1998 AUTHOR: Denis Parinov ;//UPDATE: 24-10-1999 DNS Restore module ;------------------------------------------------ ;R02 13-04-2023 BAO FIX BUG IN K_CLEAR WITH STACK OVERFLOW ;R01 10-02-2003 DNS Add cursor visualisation ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;KEYBOARD BUFFER _mInfoALIGN 256,0 SBUF: BLOCK 64,0 ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ; _mInfoALIGN 256,0 ;; ; 0 1 2 3 4 5 6 7 8 9 A B C D E F ;; XLAT_T: DB #00,#43,#00,#3F,#3D,#3B,#3C,#46,#00,#44,#42,#40,#3E,#0F,#00,#00 ;00 ;; DB #00,#37,#29,#00,#36,#10,#02,#00,#00,#00,#2A,#1E,#1D,#11,#03,#00 ;10 ;; DB #00,#2C,#2B,#1F,#12,#05,#04,#00,#00,#38,#2D,#20,#14,#13,#06,#00 ;20 ;; DB #00,#2F,#2E,#22,#21,#15,#07,#00,#00,#00,#30,#23,#16,#08,#09,#00 ;30 ;; DB #00,#31,#24,#17,#18,#0B,#0A,#00,#00,#32,#33,#25,#26,#19,#0C,#00 ;40 ;; DB #00,#00,#27,#00,#1A,#0D,#00,#00,#1C,#34,#28,#1B,#00,#35,#00,#00 ;50 ;; DB #00,#00,#00,#00,#00,#00,#0E,#00,#00,#51,#00,#54,#57,#00,#00,#00 ;60 ;; DB #50,#4F,#52,#55,#56,#58,#01,#49,#45,#4D,#53,#4C,#4B,#59,#48,#00 ;70 ;; DB #00,#00,#00,#41,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;80 ;; .Size EQU $-XLAT_T ;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; HEAD DB #00 HOST DB #00 ; K_LOCK EQU $-KEYFLAG LANG_L EQU 7 PAUSE_L EQU 6 RES5_L EQU 5 ; not used ;X_SHIFT RES4_L EQU 4 ; not used NUM_L EQU 3 SCRL_L EQU 2 INS_L EQU 1 CAPS_L EQU 0 KEYFLAG DB #02 ;D0-Key Pressed ; K_SHIFT EQU $-KEYFLAG L_SHIFT EQU 7 R_SHIFT EQU 6 X_CTRL EQU 5 X_ALT EQU 4 L_CTRL EQU 3 L_ALT EQU 2 R_CTRL EQU 1 R_ALT EQU 0 KEYCTRL DB #00 ; KEYFLG EQU $-KEYFLAG FLAG_E0 EQU 7 FLAG_F0 EQU 6 FLAG_E1 EQU 5 FLAG_04 EQU 4 FLAG_03 EQU 3 FLAG_02 EQU 2 FLAG_01 EQU 1 CTRL_SHIFT EQU 0 ; ctrl+shift = change language KEY_FLG DB #00 ; SOUND_K EQU $-KEYFLAG FLAG_S7 EQU 7 FLAG_S6 EQU 6 FLAG_S5 EQU 5 FLAG_S4 EQU 4 FLAG_S3 EQU 3 FLAG_S2 EQU 2 SF_ALT EQU 1 SF_BUFF EQU 0 DB #03 ; UnCODE EQU $-KEYFLAG UNCODE DW 0 ; последняя отжатая клавиша ; D15 - LShift ; D14 - RShift ; D13 - CTRL ; D12 - ALT ; D11 - LCTRL ; D10 - LALT ; D9 - RCTRL ; D8 - RALT ; D7 - Language Lock ; D6 - Pause Lock ; D5 - Reserved ; D4 - Reserved ; D3 - Num Lock ; D2 - Scroll Lock ; D1 - Insert Lock ; D0 - Caps Lock ; D15 - Keystroke ; D14 ; D13 \ ; D12 \ ; D11 -- Position code (0...5Ah) ; D10 / ; D9 / ; D8 ; D7..D0 - ASCII code WAITKEY LD HL,HOST LD A,(HEAD) CP (HL) JR Z,WAITKEY CALL GETSYM LD A,E AND A RET SCANKEY LD HL,HOST LD A,(HEAD) CP (HL) RET Z CALL GETSYM LD A,E RET ; ; IF CLASSIC_CURSOR ;------------------------------; ECHOKEY: ;R01 .CURCOUNT+1: LD A,#FF INC A LD (.CURCOUNT),A AND #FF JR NZ,.NOTUR .CURSYM+1: LD A,#00 XOR #01 LD (.CURSYM),A CALL CURSOR PUSH DE LD A," " JR Z,.CURSKI LD A,"_" .CURSKI: CALL PUTCHAR.NO_SCROLL ;R03; [x] -bug with Vasil's version of cursor POP DE CALL LOCATE ;LD A,8 ; BACKSPACE ;CALL PUTCHAR .NOTUR: CALL SCANKEY JR Z,ECHOKEY PUSH DE PUSH BC PUSH AF CALL CURSOR PUSH DE LD A," " CALL PUTCHAR.NO_SCROLL ;R03; [x] -bug with Vasil's version of cursor ;LD A,8 ; BACKSPACE ;CALL PUTCHAR POP DE POP AF PUSH DE ;R01 [v] CALL PUTCHAR.NO_SCROLL ; [x] -bug with Vasil's version of cursor POP DE CALL LOCATE POP BC POP DE LD A,E AND A RET ELSE ;------------------------------; delay_curs: EQU 11 ; частота мигания курсора INS_CUR_ZG: EQU #19 CURSOR_ZG: EQU #1A NORM_ZG: EQU #1B ECHOKEY: CALL Cursor_On ; вкл. курсор, установить фокус на "Input Line" EI .loop: CALL SCANKEY JR Z,.loop PUSH DE PUSH BC PUSH AF CALL Cursor_Off ; выкл. курсор POP AF OR A ; [x] -bug with Vasil's version of cursor CALL NZ,PUTCHAR.NO_SCROLL ; добавил вывод "a" на экран POP BC POP DE LD A,E AND A RET Cursor: .Flag+1: LD A,0 ; флаг курсора 00-нет/01-есть CPL LD (.Flag),A ; Включить курсор Cursor_On: LD C,BIOS.LP_GET_PLACE ; узнать полож. курсора RST ToBIOS LD (Cursor_Off.pos),DE XOR A LD C,BIOS.WIN_GET_SYM ; получить символ RST ToBIOS LD BC,NORM_ZG*256+BIOS.WIN_PUT_SYM ; b=знакоген., с=символ на экран LD A,(Cursor.Flag) OR A JR Z,.put_ LD B,INS_CUR_ZG ; блок LD A,(KEYFLAG) ; флаги клавы AND 1<","?",#00,"|" DB #00,#00,Spc,#00,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 DB #00,#00,#00,"/","*","-","+",Ent,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 CAPSTAB DB "`",Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs DB Tab,"Q","W","E","R","T","Y","U","I","O","P","[","]" DB Cps,"A","S","D","F","G","H","J","K","L",";","'",Ent DB #00,"Z","X","C","V","B","N","M",#2C,".","/",#00,#5C DB #00,#00,Spc,#00,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 DB #00,#00,#00,"/","*","-","+",Ent,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 SHF2TAB DB "~",Esc,"!","@","#","$","%","^","&","*","(",")","_","+",Bcs DB Tab,"q","w","e","r","t","y","u","i","o","p","{","}" DB Cps,"a","s","d","f","g","h","j","k","l",":",#22,Ent DB #00,"z","x","c","v","b","n","m","<",">","?",#00,"|" DB #00,#00,Spc,#00,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 DB #00,#00,#00,"/","*","-","+",Ent,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;Standart Russian tables NORMRUS DB #F1,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,".",#00,#5C DB #00,#00,Spc,#00,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 DB #00,#00,#00,"/","*","-","+",Ent,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 SHIFRUS DB #F0,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,#2C,#00,"|" DB #00,#00,Spc,#00,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 DB #00,#00,#00,"/","*","-","+",Ent,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 CAPSRUS DB #F0,Esc,"1","2","3","4","5","6","7","8","9","0","-","=",Bcs DB Tab,#89,#96,#93,#8A,#85,#8D,#83,#98,#99,#87,#95,#9A DB Cps,#94,#9B,#82,#80,#8F,#90,#8E,#8B,#84,#86,#9D,Ent DB #00,#9F,#97,#91,#8C,#88,#92,#9C,#81,#9E,".",#00,#5C DB #00,#00,Spc,#00,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 DB #00,#00,#00,"/","*","-","+",Ent,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 SHF2RUS DB #F1,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs DB Tab,#A9,#E6,#E3,#AA,#A5,#AD,#A3,#E8,#E9,#A7,#E5,#EA DB Cps,#E4,#EB,#A2,#A0,#AF,#E0,#AE,#AB,#A4,#A6,#ED,Ent DB #00,#EF,#E7,#E1,#AC,#A8,#E2,#EC,#A1,#EE,#2C,#00,"|" DB #00,#00,Spc,#00,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00,#00 DB #00,#00,#00,"/","*","-","+",Ent,#00 DB #00,#00,#00,#00,#00,#00,#00,#00,#00,#00 ;================================ ;//MODULE: KEYINTER ;[END] ; ENDMODULE