diff --git a/DSS/DRV-MAIN.ASM b/DSS/DRV-MAIN.ASM index 9217369..9a1091a 100644 --- a/DSS/DRV-MAIN.ASM +++ b/DSS/DRV-MAIN.ASM @@ -115,36 +115,7 @@ RST_30: JP MOUSE_DRV.API //////////////////////////////////////////////////////////////////////// ; <[MAIN INT]> ; BLOCK #38-$,#C7 ; -A0038: ; -; JP RST_38 ; -; RST_38: ; -; INT_: PUSH AF ; -; EX AF,AF' ; -; PUSH AF ; -; PUSH BC ; -; PUSH DE ; -; PUSH HL ; -; EXX ; -; PUSH BC ; -; PUSH DE ; -; PUSH HL ; -; PUSH IX ; -; PUSH IY ; -; CALL KEYSCAN ; -; LD C,#80 ; -; RST ToDSS.Mouse ; -; POP IY ; -; POP IX ; -; POP HL ; -; POP DE ; -; POP BC ; -; EXX ; -; POP HL ; -; POP DE ; -; POP BC ; -; POP AF ; -; EX AF,AF' ; -; POP AF ; +/* ;!TEST SIO INT ; reg 0 - error reset IF KEYBOARD_INT_ENABLED && MOUSE_INT_ENABLED == 0 @@ -179,6 +150,15 @@ A0038: ; ENDIF EI ; RETI ; +*/ +RST_38_DRV: JP .Portal + BLOCK RST_38_IM1.Portal - $,0 +.Portal: PUSH AF + LD A,(DRV_PAGE.MAIN_PAGE_NUMBER) + OUT (SLOT0),A + POP AF + EI + RETI //////////////////////////////////////////////////////////////////////// diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index 116b6cd..20360f7 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -139,53 +139,31 @@ RST_0x30: PUSH AF //////////////////////////////////////////////////////////////////////// ; <[MAIN INT]> _mInfoBLOCK #38-$,#FF -RST_38: ;для того, чтоб софты могли менять обработчик на свой. - JP RST_0x38 -RST_0x38: -INT_: PUSH AF - EX AF,AF' - PUSH AF - PUSH BC - PUSH DE - PUSH HL - EXX - PUSH BC - PUSH DE - PUSH HL - PUSH IX - PUSH IY - CALL KEYSCAN - LD C,Dss.Mouse.GetPackets - RST ToDSS.Mouse - ;CALL M_INT - IFN CLASSIC_CURSOR - CALL cursor_interrupt; вектор обслуж. курсора ;!!!!! VASIL - ENDIF - POP IY - POP IX - POP HL - POP DE - POP BC - EXX - POP HL - POP DE - POP BC - POP AF - EX AF,AF' - POP AF - EI - RETI + ;для того, чтоб софты могли менять обработчик на свой. +RST_38_IM1: JP .Handler +.Handler: CALL INTx38_Handler + EI + RETI + ; +.Portal: PUSH AF + LD A,(RST_0x30.drv_page) + OUT (SLOT0),A + POP AF + CALL INTx38_Handler + JR .Portal + ; + //////////////////////////////////////////////////////////////////////// ; -NMI: RETN +;NMI: RETN ; ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; <[ NMI ]> ; _mInfoBLOCK #66-$,#FF ; -NMI_0x66: JP NMI ; +NMI_0x66: RETN ;JP NMI ; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ; @@ -278,6 +256,39 @@ CLEAR_BUFFER_AND_INIT_PROC: JP VERSION + +INTx38_Handler: PUSH AF + EX AF,AF' + PUSH AF + PUSH BC + PUSH DE + PUSH HL + EXX + PUSH BC + PUSH DE + PUSH HL + PUSH IX + PUSH IY + CALL KEYSCAN + LD C,Dss.Mouse.GetPackets + RST ToDSS.Mouse + ;CALL M_INT + IFN CLASSIC_CURSOR + CALL cursor_interrupt; вектор обслуж. курсора ;!!!!! VASIL + ENDIF + POP IY + POP IX + POP HL + POP DE + POP BC + EXX + POP HL + POP DE + POP BC + POP AF + EX AF,AF' + POP AF + RET ;R03 ;R07Allocate memory ; LD BC,#03C2 diff --git a/DSS/defines.inc b/DSS/defines.inc index db6a0e6..f53305f 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -7,24 +7,24 @@ ; ; - DEFINE SHORT_RSTx10_TABLE 0 ; укороченная таблица функций rst #10. 96 функций. + DEFINE SHORT_RSTx10_TABLE 0 ; укороченная таблица функций rst #10. 96 функций. DEFINE COMPILE_UNUSED_CODE 0 ; ; MOUSE - DEFINE MOUSE_COM_BAUD 0 ; 1 - 2485, 2 - 4807, else - 1215 (default) - DEFINE MOUSE_INT_ENABLED 0 ; INT from SIO ch. B - DEFINE MOUSE_READ_PORT_TIMEOUT 16*1024 ; Костыльный тайм-аут на ожидание байта от мышки. + DEFINE MOUSE_COM_BAUD 0 ; 1 - 2485, 2 - 4807, else - 1215 (default) + DEFINE MOUSE_INT_ENABLED 0 ; INT from SIO ch. B + DEFINE MOUSE_READ_PORT_TIMEOUT 5*512 ; Костыльный тайм-аут на ожидание байта от мышки. Если = 0, то лишний код не компилится ; KEYBOARD - DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A - DEFINE CHANGE_LANG_CTRL_SHIFT 1 ; [x] 0: Ctrl + Space, 1: Ctrl + Shift. - DEFINE BREAK_PROCESS_CODE #AC00 ; CTRL+C + DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A + DEFINE CHANGE_LANG_CTRL_SHIFT 1 ; [x] 0: Ctrl + Space, 1: Ctrl + Shift. + DEFINE BREAK_PROCESS_CODE #AC00 ; CTRL+C DEFINE USE_E1_SCANCODE 0 DEFINE CLASSIC_CURSOR 0 ; -;LD_DSK EQU 16 ; максимальное количество логических HDD дисков в системе +;LD_DSK EQU 16 ; максимальное количество логических HDD дисков в системе ///////////////////////////////////////////////////////////////////////////////////////////////////////////// DEFINE CHANGE_FREE_CLU_AFTER_DEL 1 diff --git a/DSS/drivers/Input/MOUSE.ASM b/DSS/drivers/Input/MOUSE.ASM index 60a978b..93dda3a 100644 --- a/DSS/drivers/Input/MOUSE.ASM +++ b/DSS/drivers/Input/MOUSE.ASM @@ -14,20 +14,25 @@ PORT_MOUSE.Data EQU Z84.SIO.Ch_B.Data RRCA RET NC ELSE - ;[x] mouse freeeeezzzz - ;LD BC,MOUSE_READ_PORT_TIMEOUT + IF MOUSE_READ_PORT_TIMEOUT != 0 + ;[x] mouse bug + LD BC,MOUSE_READ_PORT_TIMEOUT ; + ENDIF .READ_BYTE: IN A,(PORT_MOUSE.Ctrl) RRCA - ;[x] mouse freeeeezzzz - ;JR C,.NEXT - ;DEC BC - ;LD A,B - ;OR C - ;JR NZ,.READ_BYTE - ;RET - JR NC,.READ_BYTE + IF MOUSE_READ_PORT_TIMEOUT != 0 + ;[x] mouse bug + JR C,.NEXT + DEC BC + LD A,B + OR C + JR NZ,.READ_BYTE + RET .NEXT: ; + ELSE + JR NC,.READ_BYTE + ENDIF ENDIF ENDM //////////////////////////////////////////////////////////////////////// @@ -678,7 +683,7 @@ CLEAR_MOUSE_BUFFER: ;----------------------------------------------------------------------; -READ_M: /*;[ ] 18/02/2024 проверка на переполнение буфера +READ_M: ;[ ] 18/02/2024 проверка на переполнение буфера ; reg 1 LD A,1 OUT (PORT_MOUSE.Ctrl),A @@ -698,7 +703,6 @@ READ_M: /*;[ ] 18/02/2024 ; JR CLEAR_MOUSE_BUFFER ; -*/ IF MOUSE_INT_ENABLED .Prepare: LD HL,.Step LD A,(HL) @@ -722,8 +726,8 @@ READ_M: /*;[ ] 18/02/2024 LD L,A ENDIF AND %0100'0000 - RET Z - ;JP Z,CLEAR_MOUSE_BUFFER + ;RET Z + JP Z,CLEAR_MOUSE_BUFFER ; IF MOUSE_INT_ENABLED INC (HL) @@ -745,10 +749,10 @@ READ_M: /*;[ ] 18/02/2024 LD E,A AND %0100'0000 ;!TEST - RET NZ - ;JR Z,.READ_THIRD_BYTE - ;LD L,E - ;JR .READ_SECOND_BYTE + ;RET NZ + JR Z,.READ_THIRD_BYTE + LD L,E + JR .READ_SECOND_BYTE ENDIF ; .READ_THIRD_BYTE: @@ -769,10 +773,10 @@ READ_M: /*;[ ] 18/02/2024 LD D,A AND %0100'0000 ;!TEST - RET NZ - ;JR Z,.packet_end - ;LD L,D - ;JR .READ_SECOND_BYTE + ;RET NZ + JR Z,.packet_end + LD L,D + JR .READ_SECOND_BYTE .packet_end: ; ENDIF ; @@ -901,9 +905,9 @@ SENSE: LD HL,(SENSEXY) RET Z DEC A RET Z - ; CP 2 - ; CCF - ; JR NC,.check_Y + ; CP 2 + ; CCF + ; JR NC,.check_Y ; LD A,E BIT 7,A @@ -924,10 +928,10 @@ SENSE: LD HL,(SENSEXY) .next: LD E,B ; [x] 15/03/2024 теперь поправки чувствительности по координатам работают корректно .check_Y: - LD A,H - CP 2 - CCF - RET NC + ; LD A,H + ; CP 2 + ; CCF + ; RET NC ; LD A,D BIT 7,A @@ -1055,7 +1059,7 @@ MIN_Y: DW 0 MAX_Y: DW 255 SENSEXY: ; Сэн Сэкси .X: DB 0 -.Y: DB 2 +.Y: DB 0 XHOT_SP: DW 0 YHOT_SP: DW 0 diff --git a/Shared_Includes b/Shared_Includes index 399bf41..1cb8eb1 160000 --- a/Shared_Includes +++ b/Shared_Includes @@ -1 +1 @@ -Subproject commit 399bf41c5cbd12d2866204ee3ff1cc357a3d3a99 +Subproject commit 1cb8eb13fb8e8b20bba324a5ab9f4e18d6bf8b3c