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

View File

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

View File

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

View File

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

View File

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

View File

@ -18,8 +18,8 @@ HOST DB #00
K_LOCK EQU $-KEYFLAG K_LOCK EQU $-KEYFLAG
LANG_L EQU 7 LANG_L EQU 7
PAUSE_L EQU 6 PAUSE_L EQU 6
RES5_L EQU 5 LANG_R EQU 5 ; á®ç¥â ­¨¥ ª« ¢¨è ¤«ï ¯¥à¥ª«î祭¨ï ï§ëª  ®â¦ â®
RES4_L EQU 4 LANG_S EQU 4 ; á®ç¥â ­¨¥ ª« ¢¨è ¤«ï ¯¥à¥ª«î祭¨ï ï§ëª  ­ ¦ â®
NUM_L EQU 3 NUM_L EQU 3
SCRL_L EQU 2 SCRL_L EQU 2
INS_L EQU 1 INS_L EQU 1
@ -58,6 +58,7 @@ FLAG_S2 EQU 2
SF_ALT EQU 1 SF_ALT EQU 1
SF_BUFF EQU 0 SF_BUFF EQU 0
DB #03 DB #03
UNCODE DW 0 ; ¯®á«¥¤­ïï ®â¦ â ï ª« ¢¨è 
; D15 - LShift ; D15 - LShift
; D14 - RShift ; D14 - RShift
@ -87,7 +88,6 @@ SF_BUFF EQU 0
; D7..D0 - ASCII code ; D7..D0 - ASCII code
UNCODE DW 0
WAITKEY LD HL,HOST WAITKEY LD HL,HOST
LD A,(HEAD) LD A,(HEAD)
@ -360,6 +360,7 @@ K_CLEAR:
JR C,.error JR C,.error
LD C,B LD C,B
JP RST_10 JP RST_10
;
.error: LD A,DSS_Error.sys.INVALID_FUNCTION .error: LD A,DSS_Error.sys.INVALID_FUNCTION
SCF SCF
RET RET
@ -408,6 +409,7 @@ GETSYM: LD HL,HOST
INC L INC L
LD C,(HL) LD C,(HL)
RET RET
;
FULL_BF: FULL_BF:
EX AF,AF' EX AF,AF'
@ -429,10 +431,9 @@ FULL_BF:
.E1_KEY: .E1_KEY:
SET FLAG_E1,(IX+KEYFLG) SET FLAG_E1,(IX+KEYFLG)
JR KEYSCAN.RESCAN JR KEYSCAN.RESCAN
;
KEYSCAN: LD IX,KEYFLAG
KEYSCAN:
LD IX,KEYFLAG
;!TEST SIO INT ;!TEST SIO INT
IF KEYBOARD_INT_ENABLED IF KEYBOARD_INT_ENABLED
CALL .RESCAN CALL .RESCAN
@ -440,9 +441,7 @@ KEYSCAN:
OUT (Z84.SIO.Ch_A.Ctrl),A OUT (Z84.SIO.Ch_A.Ctrl),A
RET RET
ENDIF ENDIF
; .RESCAN: IN A,(Z84.SIO.Ch_A.Ctrl)
.RESCAN:
IN A,(Z84.SIO.Ch_A.Ctrl)
AND 1 AND 1
RET Z RET Z
;[ ] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à  ;[ ] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à 
@ -456,67 +455,98 @@ KEYSCAN:
IN A,(Z84.SIO.Ch_A.Data) IN A,(Z84.SIO.Ch_A.Data)
CP #F0 CP #F0
JR Z,FULL_BF.F0_KEY JR Z,FULL_BF.F0_KEY
;
CP #E0 CP #E0
JR Z,FULL_BF.E0_KEY JR Z,FULL_BF.E0_KEY
;
CP #E1 CP #E1
JR Z,FULL_BF.E1_KEY JR Z,FULL_BF.E1_KEY
;
BIT FLAG_F0,(IX+KEYFLG) BIT FLAG_F0,(IX+KEYFLG)
JR NZ,UN_KEY JR NZ,UN_KEY
;
LD L,A LD L,A
CALL XLAT CALL XLAT
CALL SHIFTS CALL SHIFTS
RES FLAG_E0,(IX+KEYFLG) RES FLAG_E0,(IX+KEYFLG)
RES FLAG_E1,(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 ; RET Z ;IT'S SHIFT KEY
; ;
CALL INPCODE ;L - AT POS. CODE CALL INPCODE ;L - AT POS. CODE
;PUTCODE ;PUTCODE
LD HL,#1C00 ;Caps Lock ;Caps Lock
LD HL,#1C00
AND A AND A
SBC HL,DE SBC HL,DE
CALL Z,CAPS_X CALL Z,CAPS_X
LD HL,#B800 ;Ctrl + Space IFN CHANGE_LANG_CTRL_SHIFT
;Ctrl + Space
LD HL,#B800
AND A AND A
SBC HL,DE SBC HL,DE
CALL Z,RUS_X CALL Z,LANG_X
LD HL,#5000 ;Insert ENDIF
;Insert
LD HL,#5000
AND A AND A
SBC HL,DE SBC HL,DE
CALL Z,INS_X CALL Z,INS_X
LD HL,#4900 ;Num Lock ;Num Lock
LD HL,#4900
AND A AND A
SBC HL,DE SBC HL,DE
CALL Z,NUM_X CALL Z,NUM_X
LD HL,#C900 ;Pause Lock ;Pause Lock
LD HL,#C900
AND A AND A
SBC HL,DE SBC HL,DE
CALL Z,PAUSE_X CALL Z,PAUSE_X
LD HL,#4800 ;Scroll Lock ;Scroll Lock
LD HL,#4800
AND A AND A
SBC HL,DE SBC HL,DE
CALL Z,SCL_X CALL Z,SCL_X
;Ctrl + Alt + Del
;[x] small optimization))) ;[x] small optimization)))
; LD HL,#CF00 ;Ctrl + Alt + Del ; LD HL,#CF00
; AND A ; AND A
; SBC HL,DE ; SBC HL,DE
; CALL Z,RST_X ; CALL Z,RST_X
; ;
LD BC,(KEYFLAG) LD BC,(KEYFLAG)
CALL PUTSYM CALL PUTSYM
;[ ] 29/02/2024 ¢ë£à¥¡á⨠¢¥áì ¡ãä¥à
JR .RESCAN
;RET
;
;
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 RET
;[ ] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à  ;
; .Receiver_Overrun: .check_shift: LD A,L
; LD (IX+K_SHIFT),0 SUB #29
; LD (IX+KEYFLG),0 JR Z,LANG_X
; ; reg 0 - reset errors RET
; LD A,%0011'0000 ELSE
; OUT (Z84.SIO.Ch_A.Ctrl),A UN_KEY: RES FLAG_F0,(IX+KEYFLG)
; RET
UN_KEY RES FLAG_F0,(IX+KEYFLG)
LD L,A LD L,A
CALL XLAT CALL XLAT
CALL UNSHIFT CALL UNSHIFT
@ -524,14 +554,19 @@ UN_KEY RES FLAG_F0,(IX+KEYFLG)
LD H,0 LD H,0
LD (UNCODE),HL LD (UNCODE),HL
RET RET
ENDIF
;
CAPS_X LD A,(IX+K_LOCK) CAPS_X: LD A,(IX+K_LOCK)
XOR 1<<CAPS_L XOR 1<<CAPS_L
LD (IX+K_LOCK),A LD (IX+K_LOCK),A
RET RET
;
RUS_X BIT X_CTRL,(IX+K_SHIFT) LANG_X: IFN CHANGE_LANG_CTRL_SHIFT
BIT X_CTRL,(IX+K_SHIFT)
RET Z RET Z
ENDIF
LD A,(IX+K_LOCK) LD A,(IX+K_LOCK)
XOR 1<<LANG_L XOR 1<<LANG_L
LD (IX+K_LOCK),A LD (IX+K_LOCK),A
@ -543,36 +578,41 @@ RUS_X BIT X_CTRL,(IX+K_SHIFT)
CALL BEEP CALL BEEP
EXX EXX
RET RET
;
INS_X LD A,(IX+K_LOCK) INS_X: LD A,(IX+K_LOCK)
XOR 1<<INS_L XOR 1<<INS_L
LD (IX+K_LOCK),A LD (IX+K_LOCK),A
RET RET
;
NUM_X LD A,(IX+K_LOCK) NUM_X: LD A,(IX+K_LOCK)
XOR 1<<NUM_L XOR 1<<NUM_L
LD (IX+K_LOCK),A LD (IX+K_LOCK),A
RET RET
;
PAUSE_X BIT X_CTRL,(IX+K_SHIFT) PAUSE_X: BIT X_CTRL,(IX+K_SHIFT)
RET Z RET Z
POP HL ;!!!!! “ ‘ ©¬ ­  ã¡à ­ POP POP HL ; ¡ « ­á á⥪ 
LD A,(IX+K_LOCK) LD A,(IX+K_LOCK)
XOR 1<<PAUSE_L XOR 1<<PAUSE_L
LD (IX+K_LOCK),A LD (IX+K_LOCK),A
BIT PAUSE_L,A BIT PAUSE_L,A
RET Z RET Z
EI EI
PAUSE_ HALT .loop: HALT
BIT PAUSE_L,(IX+K_LOCK) BIT PAUSE_L,(IX+K_LOCK)
JR NZ,PAUSE_ JR NZ,.loop
DI DI
RET RET
;
SCL_X LD A,(IX+K_LOCK) SCL_X: LD A,(IX+K_LOCK)
XOR 1<<SCRL_L XOR 1<<SCRL_L
LD (IX+K_LOCK),A LD (IX+K_LOCK),A
RET RET
;
;small optimization ;small optimization
; RST_X BIT X_CTRL,(IX+K_SHIFT) ; RST_X BIT X_CTRL,(IX+K_SHIFT)
@ -585,90 +625,89 @@ SCL_X LD A,(IX+K_LOCK)
; RET ; RET
;;; ;;;
UNSHIFT LD A,L UNSHIFT: LD A,L
CP #37 ;L ALT CP #37 ;L ALT
JR NZ,USH1 JR NZ,.USH1
RES L_ALT,(IX+K_SHIFT) RES L_ALT,(IX+K_SHIFT)
BIT R_ALT,(IX+K_SHIFT) BIT R_ALT,(IX+K_SHIFT)
RET NZ RET NZ
RES X_ALT,(IX+K_SHIFT) RES X_ALT,(IX+K_SHIFT)
RET RET
USH1 CP #39 ;R ALT ;
JR NZ,USH2 .USH1: CP #39 ;R ALT
JR NZ,.USH2
RES R_ALT,(IX+K_SHIFT) RES R_ALT,(IX+K_SHIFT)
BIT L_ALT,(IX+K_SHIFT) BIT L_ALT,(IX+K_SHIFT)
RET NZ RET NZ
RES X_ALT,(IX+K_SHIFT) RES X_ALT,(IX+K_SHIFT)
RET RET
USH2 CP #36 ;L CTRL ;
JR NZ,USH3 .USH2: CP #36 ;L CTRL
JR NZ,.USH3
RES L_CTRL,(IX+K_SHIFT) RES L_CTRL,(IX+K_SHIFT)
BIT R_CTRL,(IX+K_SHIFT) BIT R_CTRL,(IX+K_SHIFT)
RET NZ RET NZ
RES X_CTRL,(IX+K_SHIFT) RES X_CTRL,(IX+K_SHIFT)
RET RET
USH3 CP #3A ;R CTRL ;
JR NZ,USH4 .USH3: CP #3A ;R CTRL
JR NZ,.USH4
RES R_CTRL,(IX+K_SHIFT) RES R_CTRL,(IX+K_SHIFT)
BIT L_CTRL,(IX+K_SHIFT) BIT L_CTRL,(IX+K_SHIFT)
RET NZ RET NZ
RES X_CTRL,(IX+K_SHIFT) RES X_CTRL,(IX+K_SHIFT)
RET RET
USH4 CP #29 ;L SHIFT ;
JR NZ,USH5 .USH4: CP #29 ;L SHIFT
JR NZ,.USH5
RES L_SHIFT,(IX+K_SHIFT) RES L_SHIFT,(IX+K_SHIFT)
RET 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) RES R_SHIFT,(IX+K_SHIFT)
USH6 RET .USH6: RET
SHIFTS LD A,L SHIFTS: LD A,L
CP #37 ;L ALT CP #37 ;L ALT
JR NZ,NSH1 JR NZ,.NSH1
SET L_ALT,(IX+K_SHIFT) SET L_ALT,(IX+K_SHIFT)
SET X_ALT,(IX+K_SHIFT) SET X_ALT,(IX+K_SHIFT)
RET RET
NSH1 CP #39 ;R ALT ;
JR NZ,NSH2 .NSH1: CP #39 ;R ALT
JR NZ,.NSH2
SET R_ALT,(IX+K_SHIFT) SET R_ALT,(IX+K_SHIFT)
SET X_ALT,(IX+K_SHIFT) SET X_ALT,(IX+K_SHIFT)
RET RET
NSH2 CP #36 ;L CTRL ;
JR NZ,NSH3 .NSH2: CP #36 ;L CTRL
JR NZ,.NSH3
SET L_CTRL,(IX+K_SHIFT) SET L_CTRL,(IX+K_SHIFT)
SET X_CTRL,(IX+K_SHIFT) SET X_CTRL,(IX+K_SHIFT)
RET RET
NSH3 CP #3A ;R CTRL ;
JR NZ,NSH4 .NSH3: CP #3A ;R CTRL
JR NZ,.NSH4
SET R_CTRL,(IX+K_SHIFT) SET R_CTRL,(IX+K_SHIFT)
SET X_CTRL,(IX+K_SHIFT) SET X_CTRL,(IX+K_SHIFT)
RET RET
NSH4 CP #29 ;L SHIFT ;
JR NZ,NSH5 .NSH4: CP #29 ;L SHIFT
JR NZ,.NSH5
SET L_SHIFT,(IX+K_SHIFT) SET L_SHIFT,(IX+K_SHIFT)
RET 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) SET R_SHIFT,(IX+K_SHIFT)
NSH6 RET .NSH6: RET
;
;; XLAT: BIT FLAG_E0,(IX+KEYFLG)
_mInfoALIGN 256,0 JR Z,.W_O_E0
; 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
CP #11 ;Right ALT CP #11 ;Right ALT
LD L,#39 LD L,#39
RET Z RET Z
@ -685,15 +724,14 @@ XLAT BIT FLAG_E0,(IX+KEYFLG)
LD L,#47 LD L,#47
RET Z RET Z
LD L,A LD L,A
W_O_E0 LD H,high XLAT_T .W_O_E0: LD H,high XLAT_T
LD L,(HL) LD L,(HL)
RET RET
;;
; ;
;INPCODE BIT 1,(IX+1) ;00110000 ;INPCODE BIT 1,(IX+1) ;00110000
; JR NZ,FN_KEY ;LRCAcaRP ; JR NZ,FN_KEY ;LRCAcaRP
INPCODE LD D,L INPCODE: LD D,L
LD E,0 LD E,0
BIT LANG_L,(IX+K_LOCK) BIT LANG_L,(IX+K_LOCK)
JP NZ,RUSCODE JP NZ,RUSCODE
@ -708,24 +746,27 @@ INPCODE LD D,L
LD D,L LD D,L
BIT CAPS_L,(IX+K_LOCK) BIT CAPS_L,(IX+K_LOCK)
LD BC,CAPSTAB LD BC,CAPSTAB
JR NZ,CONVER JR NZ,CONVER.NO_SET
LD BC,NORMTAB LD BC,NORMTAB
CONVER LD H,0 JR CONVER.NO_SET
ADD HL,BC ;
LD E,(HL) ; CONVER: LD H,0
RET ; ADD HL,BC
; LD E,(HL)
; RET
SHIFT_L LD BC,SHIFTAB SHIFT_L: LD BC,SHIFTAB
BIT CAPS_L,(IX+K_LOCK) BIT CAPS_L,(IX+K_LOCK)
JR Z,CONVER5 JR Z,CONVER.SET
LD BC,SHF2TAB LD BC,SHF2TAB
CONVER5 LD H,0 CONVER: ;
.SET: SET 7,D
.NO_SET: LD H,0
ADD HL,BC ADD HL,BC
LD E,(HL) LD E,(HL)
SET 7,D
RET RET
RUSCODE LD A,(IX+K_SHIFT) RUSCODE: LD A,(IX+K_SHIFT)
AND #C0 AND #C0
JR NZ,SHIFT_R JR NZ,SHIFT_R
SET 7,D SET 7,D
@ -736,24 +777,26 @@ RUSCODE LD A,(IX+K_SHIFT)
LD D,L LD D,L
BIT CAPS_L,(IX+K_LOCK) BIT CAPS_L,(IX+K_LOCK)
LD BC,CAPSRUS LD BC,CAPSRUS
JR NZ,CONVER2 JR NZ,CONVER.NO_SET
LD BC,NORMRUS LD BC,NORMRUS
CONVER2 LD H,0 JR CONVER.NO_SET
ADD HL,BC ; LD H,0
LD E,(HL) ; ADD HL,BC
RET ; LD E,(HL)
; RET
SHIFT_R LD BC,SHIFRUS SHIFT_R: LD BC,SHIFRUS
BIT CAPS_L,(IX+K_LOCK) BIT CAPS_L,(IX+K_LOCK)
JR Z,CONVER4 JR Z,CONVER.SET
LD BC,SHF2RUS LD BC,SHF2RUS
CONVER4 LD H,0 JR CONVER.SET
ADD HL,BC ; .CONVER: SET 7,D
LD E,(HL) ; LD H,0
SET 7,D ; ADD HL,BC
RET ; LD E,(HL)
; RET
K_SETUP INC B K_SETUP: INC B
DEC B DEC B
JP Z,KEYMAP JP Z,KEYMAP
DEC B DEC B
@ -763,81 +806,185 @@ K_SETUP INC B
LD A,DSS_Error.sys.INVALID_ACCESS LD A,DSS_Error.sys.INVALID_ACCESS
SCF SCF
RET RET
;
K_SND_R LD A,(SOUND_K) K_SND_R: LD A,(SOUND_K)
AND A AND A
RET RET
;
K_SND_W LD (SOUND_K),A K_SND_W: LD (SOUND_K),A
AND A AND A
RET 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 BIT 7,A
JR NZ,READMAP JR NZ,READMAP
;
LD DE,NORMTAB LD DE,NORMTAB
OR A OR A
JR Z,LTAB JR Z,.LTAB
LD DE,SHIFTAB LD DE,SHIFTAB
DEC A DEC A
JR Z,LTAB JR Z,.LTAB
LD DE,CAPSTAB LD DE,CAPSTAB
DEC A DEC A
JR Z,LTAB JR Z,.LTAB
LD DE,SHF2TAB LD DE,SHF2TAB
DEC A DEC A
JR Z,LTAB JR Z,.LTAB
LD DE,NORMRUS LD DE,NORMRUS
DEC A DEC A
JR Z,LTAB JR Z,.LTAB
LD DE,SHIFRUS LD DE,SHIFRUS
DEC A DEC A
JR Z,LTAB JR Z,.LTAB
LD DE,CAPSRUS LD DE,CAPSRUS
DEC A DEC A
JR Z,LTAB JR Z,.LTAB
LD DE,SHF2RUS LD DE,SHF2RUS
DEC A DEC A
JR Z,LTAB JR Z,.LTAB
;
XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ? XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ?
SCF SCF
RET RET
LTAB LDIR ;
.LTAB: LDIR
XOR A XOR A
RET RET
READMAP RES 7,A READMAP: RES 7,A
LD DE,NORMTAB LD DE,NORMTAB
OR A OR A
JR Z,RTAB JR Z,.RTAB
LD DE,SHIFTAB LD DE,SHIFTAB
DEC A DEC A
JR Z,RTAB JR Z,.RTAB
LD DE,CAPSTAB LD DE,CAPSTAB
DEC A DEC A
JR Z,RTAB JR Z,.RTAB
LD DE,SHF2TAB LD DE,SHF2TAB
DEC A DEC A
JR Z,RTAB JR Z,.RTAB
LD DE,NORMRUS LD DE,NORMRUS
DEC A DEC A
JR Z,RTAB JR Z,.RTAB
LD DE,SHIFRUS LD DE,SHIFRUS
DEC A DEC A
JR Z,RTAB JR Z,.RTAB
LD DE,CAPSRUS LD DE,CAPSRUS
DEC A DEC A
JR Z,RTAB JR Z,.RTAB
LD DE,SHF2RUS LD DE,SHF2RUS
DEC A DEC A
JR Z,RTAB JR Z,.RTAB
XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ? XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ?
SCF SCF
RET RET
RTAB EX DE,HL ;
.RTAB: EX DE,HL
LDIR LDIR
XOR A XOR A
RET 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 ; 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 ;//MODULE: KEYINTER
;[END] ;[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 HL,txtString
LD DE,#A000 LD BC,txtColor*256 + txtStringSize
LD BC,txtStringSize LD DE,coordY * 256 + (80 - txtStringSize)/2
LD A,C CALL .PRINT_LINE
LDIR 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 - á®®¡é¥­¨¥ ; HL - á®®¡é¥­¨¥
; E - ª®®à¤¨­ â  X ­  ⥪á⮢®¬ íªà ­¥ ; E - ª®®à¤¨­ â  X ­  ⥪á⮢®¬ íªà ­¥
@ -40,8 +29,8 @@ KERNEL_PANIC:
LD A,1 LD A,1
OUT (SCREEN_SWITCH),A ; set scr-2 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 13, .kernel_panic, .kernel_panic.size, +(COLORS.CGA.FLASH + COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.RED)
PRINT_LINE_KERNEL_PANIC .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE), 18 PRINT_LINE_KERNEL_PANIC 18, .press_CAD, .press_CAD.size, +(COLORS.CGA.PAPER.BLUE + COLORS.CGA.INC.WHITE)
; ;
POP BC POP BC
POP HL POP HL
@ -63,9 +52,26 @@ KERNEL_PANIC:
.loop: DI .loop: DI
HALT HALT
JR .loop JR .loop
;
.print_line: .PRINT_LINE:
RET 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: DZ "KERNEL PANIC!"
.kernel_panic.size EQU $-.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 MOUSE_READ_PORT_TIMEOUT 3072 ; Š®áâë«ì­ë© â ©¬- ãâ ­  ®¦¨¤ ­¨¥ ¡ ©â  ®â ¬ë誨. <EFBFBD>à®áâ® ¥áâì ªà¨¢ë¥ ¯¥à¥å®¤­¨ª¨
; ;
DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A 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 ¤¨áª®¢ ¢ á¨á⥬¥ ;LD_DSK EQU 16 ; ¬ ªá¨¬ «ì­®¥ ª®«¨ç¥á⢮ «®£¨ç¥áª¨å HDD ¤¨áª®¢ ¢ á¨á⥬¥
///////////////////////////////////////////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////////////////////////////////////////

View File

@ -1 +1 @@
311 312