параметр компиляции для сочетания клавиш на переключение языка раскладки ctrl+space или shift+ctrl

This commit is contained in:
Anatoliy Belyanskiy 2024-03-28 02:59:48 +10:00
parent 32a1547722
commit ff2f2b9941
10 changed files with 691 additions and 588 deletions

View File

@ -148,7 +148,7 @@ confirm_flag+*: ld a,0
; § ¯à®á¨âì æ¥«¥¢®© ¤¨áª
ld a,(disk) ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
add a,'A'
ld (lett2),a
ld (messages.lett2),a
ld a,5 ; ¨­¤¥ªá áâப¨ "Insert destination disk..."
call print_string
ld bc,3035h ; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨
@ -198,7 +198,7 @@ ok_write1: ;
;
ld a,(disk) ; § ¤ ­­ë© ­®¬¥à ¤¨áª 
add a,'A'
ld (lett1),a
ld (messages.lett1),a
ld a,1 ; ¨­¤¥ªá áâப¨ "System installed on disk "
call print_string
ld a,(confirm_flag)
@ -209,7 +209,7 @@ ok_write1: ;
cp 2
jr nc,exit-1 ; ­¥ ¤¨áª®¢®¤ë
add a,'A'
ld (lett3),a
ld (messages.lett3),a
ld a,6 ; ¨­¤¥ªá áâப¨ "Insert system disk..."
call print_string
ld bc,3035h ; ¦¤¥¬ ­ ¦ â¨ï ª« ¢¨è¨
@ -518,41 +518,39 @@ id_mem: db -1 ;
;
; á®®¡é¥­¨ï
messages: db 0
db 0Dh,0Ah,"Boot and System files Installer v" ;0
db "\r\nBoot and System files Installer v" ;0
db major_version + '0','.'
db (minor_version / 10) + '0',(minor_version % 10) + '0','.'
db 0Dh,0Ah,0Ah
db "Copyright (c) 2006-2022 Vasil Ivanov."
db 0Dh,0Ah,0Ah
db "Copyright (c) 2023 Sprinter Team."
db 0Dh,0Ah,0Ah,0
db "\r\n\nCopyright (c) 2006-2022 Vasil Ivanov."
db "\r\n\nCopyright (c) 2023 Sprinter Team."
db "\r\n\n",0
;
db "System successfully installed on disk " ;1
lett1: db "X:",0Dh,0Ah,0Ah,0
.lett1: db "X:\r\n\n",0
;
db "Installing boot loader...",0Dh,0Ah,0Ah,0 ;2
db "Writing system files...",0Dh,0Ah,0Ah,0 ;3
db "Installing boot loader...\r\n\n",0 ;2
db "Writing system files...\r\n\n",0 ;3
;
db "Syntax: SYS X:",0Dh,0Ah ;4
db " where X: - drive letter (A..Z)",0Dh,0Ah,0Ah,0
db "Syntax: SYS X:\r\n" ;4
db " where X: - drive letter (A..Z)\r\n\n",0
;
db "Insert destination disk in drive " ;5
lett2: db "X:",0Dh,0Ah
db "and strike any key when ready ...",0Dh,0Ah,0Ah,0
.lett2: db "X:\r\n"
db "and strike any key when ready ...\r\n\n",0
;
db "Insert system disk in drive " ;6
lett3: db "X:",0Dh,0Ah
db "and strike any key when ready ...",0Dh,0Ah,0Ah,0
.lett3: db "X:\r\n"
db "and strike any key when ready ...\r\n\n",0
;
db "Can't install boot on this disk",0Dh,0Ah,0Ah,0 ;7
db "Invalid drive specification",0Dh,0Ah,0Ah,0 ;8
db " Error: Can't open file",0Dh,0Ah,0Ah,0 ;9
db " Error: Can't allocate memory",0Dh,0Ah,0Ah,0 ;10
db " Error: Need DOS version 1.70.811 or higher",0Dh,0Ah,0Ah,0 ;11
db " Error: Reading error",0Dh,0Ah,0Ah,0 ;12
db " Error: Can't create file",0Dh,0Ah,0Ah,0 ;13
db " Error: Writing error",0Dh,0Ah,0Ah,0 ;14
endmess: db 0
db "Can't install boot on this disk\r\n\n",0 ;7
db "Invalid drive specification\r\n\n",0 ;8
db " Error: Can't open file\r\n\n",0 ;9
db " Error: Can't allocate memory\r\n\n",0 ;10
db " Error: Need DOS version 1.70.811 or higher\r\n\n",0 ;11
db " Error: Reading error\r\n\n",0 ;12
db " Error: Can't create file\r\n\n",0 ;13
db " Error: Writing error\r\n\n",0 ;14
.endmess: db 0
@ -566,7 +564,7 @@ print_string: call get_string ;
; ¯®¨áª áâப¨ ¯® ¥¥ ¨­¤¥ªáã ¢ 'a'
get_string: ld hl,messages ; ᯨ᮪ ¬¥áá £ ¤«ï ¨­¤¥ªá. ¤®áâ㯠
ld bc,endmess-messages ; à §¬¥à ᯨ᪠
ld bc,messages.endmess - messages ; à §¬¥à ᯨ᪠
inc a
ex af,af'
xor a

View File

@ -67,6 +67,7 @@
include 'API/GSwitch.asm'
include 'API/Environ.ASM'
include 'API/Lib_Sub.asm'
include "API/EXECUTE.ASM"

View File

@ -613,20 +613,24 @@ FREE_PROCESS_FMs:
LD A,(TASK)
.loop: ADD IY,DE
CP (IY+_sFM.TASK_NUM)
CALL Z,.CLOSE
DJNZ .loop
RET
;
.CLOSE: PUSH IY
PUSH DE
JR NZ,.next
; close fm
PUSH AF
XOR A
OR (IY+_sFM.TASK_NUM)
JR Z,.skip
PUSH IY
PUSH DE
LD A,FMCOUNT+1
SUB B
CALL CLOSE_FN
POP AF
POP DE
POP IY
.skip: POP AF
;
.next: DJNZ .loop
RET
;
;-----------------------------------------------------------------------

View File

@ -42,11 +42,32 @@ FM_BUF: _sFM
*/
; ­  ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ­  ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
MACRO _mFM_FIND
CP FMCOUNT+1
JR NC,ABS_FM
PUSH DE
; MACRO _mFM_FIND
; CP FMCOUNT+1
; CCF
; RET C
; PUSH DE
; LD IY,CORE_BUFFERS.FM_BUF
; LD DE,CORE_BUFFERS.FM_BUF.Size
; AND A
; JR Z,.endLoop
; .loop: ADD IY,DE
; DEC A
; JR NZ,.loop
; .endLoop:
; POP DE
; ; A=0
; OR (IY) ;+00 NAME
; RET
; ENDM
////////////////////////////////////////////////////////////////////////
; ­  ¢ë室¥ ¡¥§ ®è¨¡®ª IY 㪠§ë¢ ¥â ­  ä ©«®¢ë© ¬ ­¨¯ã«ïâ®à
FM_FIND: CP FMCOUNT+1
JR NC,.error
;
PUSH DE
LD IY,CORE_BUFFERS.FM_BUF
LD DE,CORE_BUFFERS.FM_BUF.Size
AND A
@ -54,26 +75,33 @@ FM_BUF: _sFM
.loop: ADD IY,DE
DEC A
JR NZ,.loop
.endLoop:
POP DE
.endLoop: POP DE
; A=0
OR (IY) ;+00 NAME
ENDM
////////////////////////////////////////////////////////////////////////
RET
.error: XOR A
LD A,DSS_Error.sys.INVALID_HANDLE
RET
SET_FM: _mFM_FIND
LD A,DSS_Error.sys.NO_ERROR
RET NZ
ABS_FM LD A,DSS_Error.sys.INVALID_HANDLE
SET_FM: CALL FM_FIND
; error
;LD A,DSS_Error.sys.INVALID_HANDLE
; CF = 1
SCF
RET Z
; no error
XOR A ;LD A,DSS_Error.sys.NO_ERROR
; CF = 0
RET
RES_FM: _mFM_FIND
LD A,DSS_Error.sys.INVALID_HANDLE
;EXX
RES_FM: CALL FM_FIND
; error
; LD A,DSS_Error.sys.INVALID_HANDLE
SCF
RET Z
; no error
XOR A
LD (IY + _sFM.FS_REC.NAME),A
RET
@ -92,7 +120,7 @@ GET_FM: LD B,FMCOUNT
SCF
RET
/*
;!TEST CHECK LOCKING 10/11/2023
;!TODO CHECK LOCKING 10/11/2023
GET_FM: LD IY,0
LD (.freeHandle),IY
;

View File

@ -237,7 +237,6 @@ PORTAL.out_MAIN: ;
; = -- = -- = -- = -- = = -- = -- = = -- = -- = = -- = -- = -- = -- = --;
;
;
CLEAR_BUFFER_AND_INIT_PROC:
;------[CLEAR BUFFERS]------;
@ -361,8 +360,7 @@ ADRST10: ;DS 512 ;,0
INCLUDE "FS/FAT/FAT.ASM"
INCLUDE "FS/FAT/FAT_X.ASM"
INCLUDE "DOS_FM.ASM"
INCLUDE "EXECUTE.ASM"
;INCLUDE "EXECUTE.ASM"
INCLUDE "INTMOUSE.ASM"
INCLUDE "Procedures.asm"
INCLUDE "Kernel_Panic.asm"

View File

@ -18,8 +18,8 @@ HOST DB #00
K_LOCK EQU $-KEYFLAG
LANG_L EQU 7
PAUSE_L EQU 6
RES5_L EQU 5
RES4_L EQU 4
LANG_R EQU 5 ; á®ç¥â ­¨¥ ª« ¢¨è ¤«ï ¯¥à¥ª«î祭¨ï ï§ëª  ®â¦ â®
LANG_S EQU 4 ; á®ç¥â ­¨¥ ª« ¢¨è ¤«ï ¯¥à¥ª«î祭¨ï ï§ëª  ­ ¦ â®
NUM_L EQU 3
SCRL_L EQU 2
INS_L EQU 1
@ -58,6 +58,7 @@ FLAG_S2 EQU 2
SF_ALT EQU 1
SF_BUFF EQU 0
DB #03
UNCODE DW 0 ; ¯®á«¥¤­ïï ®â¦ â ï ª« ¢¨è 
; D15 - LShift
; D14 - RShift
@ -87,7 +88,6 @@ SF_BUFF EQU 0
; D7..D0 - ASCII code
UNCODE DW 0
WAITKEY LD HL,HOST
LD A,(HEAD)
@ -360,6 +360,7 @@ K_CLEAR:
JR C,.error
LD C,B
JP RST_10
;
.error: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF
RET
@ -408,6 +409,7 @@ GETSYM: LD HL,HOST
INC L
LD C,(HL)
RET
;
FULL_BF:
EX AF,AF'
@ -429,10 +431,9 @@ FULL_BF:
.E1_KEY:
SET FLAG_E1,(IX+KEYFLG)
JR KEYSCAN.RESCAN
;
KEYSCAN:
LD IX,KEYFLAG
KEYSCAN: LD IX,KEYFLAG
;!TEST SIO INT
IF KEYBOARD_INT_ENABLED
CALL .RESCAN
@ -440,9 +441,7 @@ KEYSCAN:
OUT (Z84.SIO.Ch_A.Ctrl),A
RET
ENDIF
;
.RESCAN:
IN A,(Z84.SIO.Ch_A.Ctrl)
.RESCAN: IN A,(Z84.SIO.Ch_A.Ctrl)
AND 1
RET Z
;[ ] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à 
@ -456,67 +455,98 @@ KEYSCAN:
IN A,(Z84.SIO.Ch_A.Data)
CP #F0
JR Z,FULL_BF.F0_KEY
;
CP #E0
JR Z,FULL_BF.E0_KEY
;
CP #E1
JR Z,FULL_BF.E1_KEY
;
BIT FLAG_F0,(IX+KEYFLG)
JR NZ,UN_KEY
;
LD L,A
CALL XLAT
CALL SHIFTS
RES FLAG_E0,(IX+KEYFLG)
RES FLAG_E1,(IX+KEYFLG)
;[ ] 29/02/2024 ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
JR Z,.RESCAN ;IT'S SHIFT KEY
;[ ] ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
JR Z,.RESCAN
; RET Z ;IT'S SHIFT KEY
;
CALL INPCODE ;L - AT POS. CODE
;PUTCODE
LD HL,#1C00 ;Caps Lock
;Caps Lock
LD HL,#1C00
AND A
SBC HL,DE
CALL Z,CAPS_X
LD HL,#B800 ;Ctrl + Space
IFN CHANGE_LANG_CTRL_SHIFT
;Ctrl + Space
LD HL,#B800
AND A
SBC HL,DE
CALL Z,RUS_X
LD HL,#5000 ;Insert
CALL Z,LANG_X
ENDIF
;Insert
LD HL,#5000
AND A
SBC HL,DE
CALL Z,INS_X
LD HL,#4900 ;Num Lock
;Num Lock
LD HL,#4900
AND A
SBC HL,DE
CALL Z,NUM_X
LD HL,#C900 ;Pause Lock
;Pause Lock
LD HL,#C900
AND A
SBC HL,DE
CALL Z,PAUSE_X
LD HL,#4800 ;Scroll Lock
;Scroll Lock
LD HL,#4800
AND A
SBC HL,DE
CALL Z,SCL_X
;Ctrl + Alt + Del
;[x] small optimization)))
; LD HL,#CF00 ;Ctrl + Alt + Del
; LD HL,#CF00
; AND A
; SBC HL,DE
; CALL Z,RST_X
;
LD BC,(KEYFLAG)
CALL PUTSYM
RET
;[ ] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à 
; .Receiver_Overrun:
; LD (IX+K_SHIFT),0
; LD (IX+KEYFLG),0
; ; reg 0 - reset errors
; LD A,%0011'0000
; OUT (Z84.SIO.Ch_A.Ctrl),A
;[ ] 29/02/2024 ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
JR .RESCAN
;RET
UN_KEY RES FLAG_F0,(IX+KEYFLG)
;
;
IF CHANGE_LANG_CTRL_SHIFT
UN_KEY: RES FLAG_F0,(IX+KEYFLG)
LD L,A
CALL XLAT
CALL UNSHIFT
RES FLAG_E0,(IX+KEYFLG)
LD A,(UNCODE)
LD H,0
LD (UNCODE),HL
CP #36 ;L CTRL
JR Z,.check_shift
CP #29 ;L SHIFT
RET NZ
; check ctrl
LD A,L
SUB #36 ;L CTRL
JR Z,LANG_X
RET
;
.check_shift: LD A,L
SUB #29
JR Z,LANG_X
RET
ELSE
UN_KEY: RES FLAG_F0,(IX+KEYFLG)
LD L,A
CALL XLAT
CALL UNSHIFT
@ -524,14 +554,19 @@ UN_KEY RES FLAG_F0,(IX+KEYFLG)
LD H,0
LD (UNCODE),HL
RET
ENDIF
;
CAPS_X LD A,(IX+K_LOCK)
CAPS_X: LD A,(IX+K_LOCK)
XOR 1<<CAPS_L
LD (IX+K_LOCK),A
RET
;
RUS_X BIT X_CTRL,(IX+K_SHIFT)
LANG_X: IFN CHANGE_LANG_CTRL_SHIFT
BIT X_CTRL,(IX+K_SHIFT)
RET Z
ENDIF
LD A,(IX+K_LOCK)
XOR 1<<LANG_L
LD (IX+K_LOCK),A
@ -543,36 +578,41 @@ RUS_X BIT X_CTRL,(IX+K_SHIFT)
CALL BEEP
EXX
RET
;
INS_X LD A,(IX+K_LOCK)
INS_X: LD A,(IX+K_LOCK)
XOR 1<<INS_L
LD (IX+K_LOCK),A
RET
;
NUM_X LD A,(IX+K_LOCK)
NUM_X: LD A,(IX+K_LOCK)
XOR 1<<NUM_L
LD (IX+K_LOCK),A
RET
;
PAUSE_X BIT X_CTRL,(IX+K_SHIFT)
PAUSE_X: BIT X_CTRL,(IX+K_SHIFT)
RET Z
POP HL ;!!!!! “ ‘ ©¬ ­  ã¡à ­ POP
POP HL ; ¡ « ­á á⥪ 
LD A,(IX+K_LOCK)
XOR 1<<PAUSE_L
LD (IX+K_LOCK),A
BIT PAUSE_L,A
RET Z
EI
PAUSE_ HALT
.loop: HALT
BIT PAUSE_L,(IX+K_LOCK)
JR NZ,PAUSE_
JR NZ,.loop
DI
RET
;
SCL_X LD A,(IX+K_LOCK)
SCL_X: LD A,(IX+K_LOCK)
XOR 1<<SCRL_L
LD (IX+K_LOCK),A
RET
;
;small optimization
; RST_X BIT X_CTRL,(IX+K_SHIFT)
@ -585,90 +625,89 @@ SCL_X LD A,(IX+K_LOCK)
; RET
;;;
UNSHIFT LD A,L
UNSHIFT: LD A,L
CP #37 ;L ALT
JR NZ,USH1
JR NZ,.USH1
RES L_ALT,(IX+K_SHIFT)
BIT R_ALT,(IX+K_SHIFT)
RET NZ
RES X_ALT,(IX+K_SHIFT)
RET
USH1 CP #39 ;R ALT
JR NZ,USH2
;
.USH1: CP #39 ;R ALT
JR NZ,.USH2
RES R_ALT,(IX+K_SHIFT)
BIT L_ALT,(IX+K_SHIFT)
RET NZ
RES X_ALT,(IX+K_SHIFT)
RET
USH2 CP #36 ;L CTRL
JR NZ,USH3
;
.USH2: CP #36 ;L CTRL
JR NZ,.USH3
RES L_CTRL,(IX+K_SHIFT)
BIT R_CTRL,(IX+K_SHIFT)
RET NZ
RES X_CTRL,(IX+K_SHIFT)
RET
USH3 CP #3A ;R CTRL
JR NZ,USH4
;
.USH3: CP #3A ;R CTRL
JR NZ,.USH4
RES R_CTRL,(IX+K_SHIFT)
BIT L_CTRL,(IX+K_SHIFT)
RET NZ
RES X_CTRL,(IX+K_SHIFT)
RET
USH4 CP #29 ;L SHIFT
JR NZ,USH5
;
.USH4: CP #29 ;L SHIFT
JR NZ,.USH5
RES L_SHIFT,(IX+K_SHIFT)
RET
USH5 CP #34 ;R SHIFT
JR NZ,USH6
;
.USH5: CP #34 ;R SHIFT
;JR NZ,.USH6
RET NZ
RES R_SHIFT,(IX+K_SHIFT)
USH6 RET
.USH6: RET
SHIFTS LD A,L
SHIFTS: LD A,L
CP #37 ;L ALT
JR NZ,NSH1
JR NZ,.NSH1
SET L_ALT,(IX+K_SHIFT)
SET X_ALT,(IX+K_SHIFT)
RET
NSH1 CP #39 ;R ALT
JR NZ,NSH2
;
.NSH1: CP #39 ;R ALT
JR NZ,.NSH2
SET R_ALT,(IX+K_SHIFT)
SET X_ALT,(IX+K_SHIFT)
RET
NSH2 CP #36 ;L CTRL
JR NZ,NSH3
;
.NSH2: CP #36 ;L CTRL
JR NZ,.NSH3
SET L_CTRL,(IX+K_SHIFT)
SET X_CTRL,(IX+K_SHIFT)
RET
NSH3 CP #3A ;R CTRL
JR NZ,NSH4
;
.NSH3: CP #3A ;R CTRL
JR NZ,.NSH4
SET R_CTRL,(IX+K_SHIFT)
SET X_CTRL,(IX+K_SHIFT)
RET
NSH4 CP #29 ;L SHIFT
JR NZ,NSH5
;
.NSH4: CP #29 ;L SHIFT
JR NZ,.NSH5
SET L_SHIFT,(IX+K_SHIFT)
RET
NSH5 CP #34 ;R SHIFT
JR NZ,NSH6
;
.NSH5: CP #34 ;R SHIFT
;JR NZ,.NSH6
RET NZ
SET R_SHIFT,(IX+K_SHIFT)
NSH6 RET
.NSH6: RET
;
;;
_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
;
XLAT BIT FLAG_E0,(IX+KEYFLG)
JR Z,W_O_E0
XLAT: BIT FLAG_E0,(IX+KEYFLG)
JR Z,.W_O_E0
CP #11 ;Right ALT
LD L,#39
RET Z
@ -685,15 +724,14 @@ XLAT BIT FLAG_E0,(IX+KEYFLG)
LD L,#47
RET Z
LD L,A
W_O_E0 LD H,high XLAT_T
.W_O_E0: LD H,high XLAT_T
LD L,(HL)
RET
;;
;
;INPCODE BIT 1,(IX+1) ;00110000
; JR NZ,FN_KEY ;LRCAcaRP
INPCODE LD D,L
INPCODE: LD D,L
LD E,0
BIT LANG_L,(IX+K_LOCK)
JP NZ,RUSCODE
@ -708,24 +746,27 @@ INPCODE LD D,L
LD D,L
BIT CAPS_L,(IX+K_LOCK)
LD BC,CAPSTAB
JR NZ,CONVER
JR NZ,CONVER.NO_SET
LD BC,NORMTAB
CONVER LD H,0
ADD HL,BC
LD E,(HL)
RET
JR CONVER.NO_SET
;
; CONVER: LD H,0
; ADD HL,BC
; LD E,(HL)
; RET
SHIFT_L LD BC,SHIFTAB
SHIFT_L: LD BC,SHIFTAB
BIT CAPS_L,(IX+K_LOCK)
JR Z,CONVER5
JR Z,CONVER.SET
LD BC,SHF2TAB
CONVER5 LD H,0
CONVER: ;
.SET: SET 7,D
.NO_SET: LD H,0
ADD HL,BC
LD E,(HL)
SET 7,D
RET
RUSCODE LD A,(IX+K_SHIFT)
RUSCODE: LD A,(IX+K_SHIFT)
AND #C0
JR NZ,SHIFT_R
SET 7,D
@ -736,24 +777,26 @@ RUSCODE LD A,(IX+K_SHIFT)
LD D,L
BIT CAPS_L,(IX+K_LOCK)
LD BC,CAPSRUS
JR NZ,CONVER2
JR NZ,CONVER.NO_SET
LD BC,NORMRUS
CONVER2 LD H,0
ADD HL,BC
LD E,(HL)
RET
JR CONVER.NO_SET
; LD H,0
; ADD HL,BC
; LD E,(HL)
; RET
SHIFT_R LD BC,SHIFRUS
SHIFT_R: LD BC,SHIFRUS
BIT CAPS_L,(IX+K_LOCK)
JR Z,CONVER4
JR Z,CONVER.SET
LD BC,SHF2RUS
CONVER4 LD H,0
ADD HL,BC
LD E,(HL)
SET 7,D
RET
JR CONVER.SET
; .CONVER: SET 7,D
; LD H,0
; ADD HL,BC
; LD E,(HL)
; RET
K_SETUP INC B
K_SETUP: INC B
DEC B
JP Z,KEYMAP
DEC B
@ -763,81 +806,185 @@ K_SETUP INC B
LD A,DSS_Error.sys.INVALID_ACCESS
SCF
RET
;
K_SND_R LD A,(SOUND_K)
K_SND_R: LD A,(SOUND_K)
AND A
RET
;
K_SND_W LD (SOUND_K),A
K_SND_W: LD (SOUND_K),A
AND A
RET
;
KEYMAP LD BC,ENDNORM-NORMTAB
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
_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 ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
KEYMAP: LD BC,ENDNORM-NORMTAB
BIT 7,A
JR NZ,READMAP
;
LD DE,NORMTAB
OR A
JR Z,LTAB
JR Z,.LTAB
LD DE,SHIFTAB
DEC A
JR Z,LTAB
JR Z,.LTAB
LD DE,CAPSTAB
DEC A
JR Z,LTAB
JR Z,.LTAB
LD DE,SHF2TAB
DEC A
JR Z,LTAB
JR Z,.LTAB
LD DE,NORMRUS
DEC A
JR Z,LTAB
JR Z,.LTAB
LD DE,SHIFRUS
DEC A
JR Z,LTAB
JR Z,.LTAB
LD DE,CAPSRUS
DEC A
JR Z,LTAB
JR Z,.LTAB
LD DE,SHF2RUS
DEC A
JR Z,LTAB
JR Z,.LTAB
;
XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ?
SCF
RET
LTAB LDIR
;
.LTAB: LDIR
XOR A
RET
READMAP RES 7,A
READMAP: RES 7,A
LD DE,NORMTAB
OR A
JR Z,RTAB
JR Z,.RTAB
LD DE,SHIFTAB
DEC A
JR Z,RTAB
JR Z,.RTAB
LD DE,CAPSTAB
DEC A
JR Z,RTAB
JR Z,.RTAB
LD DE,SHF2TAB
DEC A
JR Z,RTAB
JR Z,.RTAB
LD DE,NORMRUS
DEC A
JR Z,RTAB
JR Z,.RTAB
LD DE,SHIFRUS
DEC A
JR Z,RTAB
JR Z,.RTAB
LD DE,CAPSRUS
DEC A
JR Z,RTAB
JR Z,.RTAB
LD DE,SHF2RUS
DEC A
JR Z,RTAB
JR Z,.RTAB
XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ?
SCF
RET
RTAB EX DE,HL
;
.RTAB: EX DE,HL
LDIR
XOR A
RET
;
BEEP: LD A,#10
OUT (ZX_Beeper),A
LD B,D
LD C,E
.loop1: DEC BC
LD A,B
OR C
JR NZ,.loop1
XOR A ;LD A,#00
OUT (ZX_Beeper),A
LD B,D
LD C,E
.loop2: DEC BC
LD A,B
OR C
JR NZ,.loop2
DEC HL
LD A,H
OR L
JR NZ,BEEP
RET
;
KEYBOARD_INIT: DI
; reg 0
XOR A
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 4
LD A,4
OUT (Z84.SIO.Ch_A.Ctrl),A
;LD A,5 ; parity
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 3
LD A,3
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#C1
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 5
LD A,5
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#62
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 1
LD A,1
OUT (Z84.SIO.Ch_A.Ctrl),A
IF KEYBOARD_INT_ENABLED
LD A,%0001'1001
ELSE
XOR A
ENDIF
OUT (Z84.SIO.Ch_A.Ctrl),A
;
EI
RET
;
;[x] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à 
KBD_Receiver_Overrun:
; empty the buffer
IN A,(Z84.SIO.Ch_A.Data)
IN A,(Z84.SIO.Ch_A.Ctrl)
RRCA
JR C,KBD_Receiver_Overrun
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_A.Ctrl),A
;!TEST SIO INT
; reg 0 - return from int
IF KEYBOARD_INT_ENABLED
LD A,%0011'1000
OUT (Z84.SIO.Ch_A.Ctrl),A
ENDIF
;
;!TODO ¯à¨ ¤¥â¥ªâ¥ ¯¥à¥¯®«­¥­¨ï ¡ãä¥à  ¯à®æ  á­ïâì ª« ¢¨è¨ ¨§ ¯®àâ  #FE ᯥªâà㬠
;
LD (IX+K_SHIFT),0
LD (IX+KEYFLG),0
;
;AND A
RET
; `
; 0
@ -948,84 +1095,5 @@ SHF2RUS DB #F1,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs
;================================
BEEP: LD A,#10
OUT (ZX_Beeper),A
LD B,D
LD C,E
.loop1: DEC BC
LD A,B
OR C
JR NZ,.loop1
XOR A ;LD A,#00
OUT (ZX_Beeper),A
LD B,D
LD C,E
.loop2: DEC BC
LD A,B
OR C
JR NZ,.loop2
DEC HL
LD A,H
OR L
JR NZ,BEEP
RET
KEYBOARD_INIT:
DI
; reg 0
XOR A
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 4
LD A,4
OUT (Z84.SIO.Ch_A.Ctrl),A
;LD A,5 ; parity
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 3
LD A,3
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#C1
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 5
LD A,5
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#62
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 1
LD A,1
OUT (Z84.SIO.Ch_A.Ctrl),A
IF KEYBOARD_INT_ENABLED
LD A,%0001'1001
ELSE
XOR A
ENDIF
OUT (Z84.SIO.Ch_A.Ctrl),A
;
EI
RET
;[x] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à 
KBD_Receiver_Overrun:
; empty the buffer
IN A,(Z84.SIO.Ch_A.Data)
IN A,(Z84.SIO.Ch_A.Ctrl)
RRCA
JR C,KBD_Receiver_Overrun
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_A.Ctrl),A
;!TEST SIO INT
; reg 0 - return from int
IF KEYBOARD_INT_ENABLED
LD A,%0011'1000
OUT (Z84.SIO.Ch_A.Ctrl),A
ENDIF
;
;!TODO ¯à¨ ¤¥â¥ªâ¥ ¯¥à¥¯®«­¥­¨ï ¡ãä¥à  ¯à®æ  á­ïâì ª« ¢¨è¨ ¨§ ¯®àâ  #FE ᯥªâà㬠
;
LD (IX+K_SHIFT),0
LD (IX+KEYFLG),0
;
;AND A
RET
;//MODULE: KEYINTER
;[END]

View File

@ -1,22 +1,11 @@
MACRO PRINT_LINE_KERNEL_PANIC txtString, txtStringSize, txtColor, coordY
;
MACRO PRINT_LINE_KERNEL_PANIC coordY, txtString, txtStringSize, txtColor
LD HL,txtString
LD DE,#A000
LD BC,txtStringSize
LD A,C
LDIR
LD BC,txtColor*256 + txtStringSize
LD DE,coordY * 256 + (80 - txtStringSize)/2
CALL .PRINT_LINE
ENDM ; 12 bytes
;
LD DE,coordY*256 + (80-txtStringSize)/2 ;X=0, Y=15
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
;
LD HL,#A000
LD DE,0*256 + txtColor
LD B,A
LD C,BIOS.LP_PRINT_LINE3
RST ToBIOS
ENDM
;-----------------------[]
; HL - á®®¡é¥­¨¥
; E - ª®®à¤¨­ â  X ­  ⥪á⮢®¬ íªà ­¥
@ -40,8 +29,8 @@ KERNEL_PANIC:
LD A,1
OUT (SCREEN_SWITCH),A ; set scr-2
;
PRINT_LINE_KERNEL_PANIC .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.RED), 13
PRINT_LINE_KERNEL_PANIC .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE), 18
PRINT_LINE_KERNEL_PANIC 13, .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.RED)
PRINT_LINE_KERNEL_PANIC 18, .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE)
;
POP BC
POP HL
@ -63,9 +52,26 @@ KERNEL_PANIC:
.loop: DI
HALT
JR .loop
.print_line:
RET
;
.PRINT_LINE:
PUSH BC
PUSH DE
LD DE,#A000
LD B,E
LD A,C
LDIR
;
POP DE
LD C,BIOS.LP_SET_PLACE
RST ToBIOS
;
POP DE
LD E,D
LD HL,#A000
LD D,L
LD B,A
LD C,BIOS.LP_PRINT_LINE3
JP ToBIOS
;
.kernel_panic: DZ "KERNEL PANIC!"
.kernel_panic.size EQU $-.kernel_panic

View File

@ -1 +1 @@
947
956

View File

@ -17,9 +17,9 @@
;DEFINE MOUSE_READ_PORT_TIMEOUT 3072 ; Š®áâë«ì­ë© â ©¬- ãâ ­  ®¦¨¤ ­¨¥ ¡ ©â  ®â ¬ë誨. <EFBFBD>à®áâ® ¥áâì ªà¨¢ë¥ ¯¥à¥å®¤­¨ª¨
;
DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A
DEFINE CHANGE_LANG_CTRL_SHIFT 1 ; [x] 0: Ctrl + Space, 1: Ctrl + Shift.
;
;
;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
/////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -1 +1 @@
311
312