diff --git a/DSS/API/ScanDRV.asm b/DSS/API/ScanDRV.asm index bc0b42e..3f2fca4 100644 --- a/DSS/API/ScanDRV.asm +++ b/DSS/API/ScanDRV.asm @@ -49,4 +49,4 @@ SCANDRV: RET ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -; ;/////////////////////////////////////////////////////////////////////// -; +; \ No newline at end of file diff --git a/DSS/DSS-MAIN.ASM b/DSS/DSS-MAIN.ASM index f7e7440..0a21c52 100644 --- a/DSS/DSS-MAIN.ASM +++ b/DSS/DSS-MAIN.ASM @@ -287,7 +287,7 @@ F_START: DI .good: CALL DEPLOY ;R07 ;эта процедура затрётся после исполнения RET C ;R10 - CALL KINIT + CALL KEYBOARD_INIT CALL PRINT_INIT LD C,Dss.Mouse.Init RST ToDSS.Mouse diff --git a/DSS/INTMOUSE.ASM b/DSS/INTMOUSE.ASM index ba6bc48..c53eeb1 100644 --- a/DSS/INTMOUSE.ASM +++ b/DSS/INTMOUSE.ASM @@ -156,44 +156,42 @@ M_RESR LD A,DSS_Error.mouse.INVALID_COMMAND RET ;!TODO на биос. -MS_INIT DI - ;!TEST mouse - ;LD A,#55 - ;OUT (#10),A - ;LD A,#2D - ;OUT (#10),A - ; - XOR A ;LD A,0 +MS_INIT: + DI + ; reg 0 + XOR A ;LD A,0 OUT (PORT_MOUSE.Ctrl),A - INC A ;LD A,1 + ; reg 4 + LD A,4 OUT (PORT_MOUSE.Ctrl),A - DEC A ;LD A,0 + LD A,+(7 | MOUSE_BAUD.multiplier_1) ; первый множитель OUT (PORT_MOUSE.Ctrl),A + ; reg 3 LD A,3 OUT (PORT_MOUSE.Ctrl),A LD A,#41 OUT (PORT_MOUSE.Ctrl),A - LD A,4 - OUT (PORT_MOUSE.Ctrl),A - ;!TEST mouse - LD A,MOUSE_BAUD.multiplier_1 ; первый множитель - OUT (PORT_MOUSE.Ctrl),A - ; + ; reg 5 LD A,5 OUT (PORT_MOUSE.Ctrl),A - ; [ ] для корректного инита Sega джойстика в порту кемпстон джойстика - LD A,%1110'0000 - ;LD A,%0110'0000 - ; + LD A,%1110'0000 ; bit7 для корректного инита Sega джойстика в порту кемпстон джойстика + OUT (PORT_MOUSE.Ctrl),A + ; + ; reg 1 + LD A,1 + OUT (PORT_MOUSE.Ctrl),A + IF MOUSE_INT_ENABLED + LD A,%0001'1001 + ELSE + XOR A + ENDIF OUT (PORT_MOUSE.Ctrl),A - ;!TEST mouse LD A,#55 OUT (Z84.CTC.Ch_0),A LD A,MOUSE_BAUD.multiplier_2 ; второй множитель OUT (Z84.CTC.Ch_0),A ; - EI XOR A RET @@ -516,7 +514,7 @@ MOUSE: LD A,(MODE_M) JR SET_RESTORE_EXIT ; ;set gfx-mode -.GFX: CP #82 ;640x256x16 +.GFX: CP Dss.SetVMod.grf640x256 JR NZ,.NOFIX_640 SRL H RR L diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index b502e82..e9553bb 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -435,8 +435,16 @@ KEYSCAN: LD IX,KEYFLAG .RESCAN: IN A,(Z84.SIO.Ch_A.Ctrl) - BIT 0,A + AND 1 RET Z + ;[ ] 18/02/2024 проверка на переполнение буфера + ; A = 1 + ; reg 1 + OUT (Z84.SIO.Ch_A.Ctrl),A + IN A,(Z84.SIO.Ch_A.Ctrl) + AND %0010'0000 ; check receiver overrun error + JP NZ,Receiver_Overrun + ; IN A,(Z84.SIO.Ch_A.Data) CP #F0 JR Z,FULL_BF.F0_KEY @@ -451,10 +459,10 @@ KEYSCAN: CALL SHIFTS RES FLAG_E0,(IX+KEYFLG) RES FLAG_E1,(IX+KEYFLG) - RET Z ;IT'S SHIFT KEY - + ;RET Z ;IT'S SHIFT KEY + ; CALL INPCODE ;L - AT POS. CODE -PUTCODE: + ;PUTCODE LD HL,#1C00 ;Caps Lock AND A SBC HL,DE @@ -479,16 +487,24 @@ PUTCODE: AND A SBC HL,DE CALL Z,SCL_X - -;small optimization - ; LD HL,#CF00 ;Ctrl + Alt + Del - ; AND A - ; SBC HL,DE - ; CALL Z,RST_X -;;; + ;[x] small optimization))) + ; LD HL,#CF00 ;Ctrl + Alt + Del + ; 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 +; RET + UN_KEY RES FLAG_F0,(IX+KEYFLG) LD L,A @@ -922,29 +938,30 @@ SHF2RUS DB #F1,Esc,"!",#22,"#","$",":",#2C,".",";","?","%","_","+",Bcs ;================================ -BEEP LD A,#10 - OUT (#FE),A +BEEP: LD A,#10 + OUT (ZX_Beeper),A LD B,D LD C,E -BPP DEC BC +.loop1: DEC BC LD A,B OR C - JR NZ,BPP - LD A,#00 - OUT (#FE),A + JR NZ,.loop1 + XOR A ;LD A,#00 + OUT (ZX_Beeper),A LD B,D LD C,E -BPP2 DEC BC +.loop2: DEC BC LD A,B OR C - JR NZ,BPP2 + JR NZ,.loop2 DEC HL LD A,H OR L JR NZ,BEEP RET - -KINIT XOR A ;LD A,0 + +KEYBOARD_INIT: + XOR A ;LD A,0 OUT (Z84.SIO.Ch_A.Ctrl),A INC A ;LD A,1 OUT (Z84.SIO.Ch_A.Ctrl),A @@ -964,5 +981,24 @@ KINIT XOR A ;LD A,0 OUT (Z84.SIO.Ch_A.Ctrl),A RET +;[ ] 18/02/2024 проверка на переполнение буфера +Receiver_Overrun: + ; empty the buffer + IN A,(Z84.SIO.Ch_A.Data) + IN A,(Z84.SIO.Ch_A.Ctrl) + RRCA + JR C,Receiver_Overrun + ; reg 0 - reset errors + LD A,%0011'0000 + OUT (Z84.SIO.Ch_A.Ctrl),A + ; + LD (IX+K_SHIFT),0 + LD (IX+KEYFLG),0 + ; + ; LD A,(HOST) + ; LD (HEAD),A + ; + AND A + RET ;//MODULE: KEYINTER ;[END] \ No newline at end of file diff --git a/DSS/build.txt b/DSS/build.txt index da77ca6..2b15d82 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -912 \ No newline at end of file +926 \ No newline at end of file diff --git a/DSS/defines.inc b/DSS/defines.inc index a74de48..3ad3a3f 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -3,17 +3,18 @@ ; ; - DEFINE SHORT_RSTx10_TABLE 0 ; укороченная таблица функций rst #10. 96 функций. + DEFINE SHORT_RSTx10_TABLE 0 ; укороченная таблица функций rst #10. 96 функций. DEFINE COMPILE_UNUSED_CODE 0 ; ; - DEFINE MOUSE_COM_BAUD 0 ; 1 - 2404, 2 - 4807, else - 1215 (default) + DEFINE MOUSE_COM_BAUD 0 ; 1 - 2485, 2 - 4807, else - 1215 (default) + DEFINE MOUSE_INT_ENABLED 0 DEFINE MOUSE_READ_PORT_TIMEOUT 1280 ; ; -;LD_DSK EQU 16 ; максимальное количество логических HDD дисков в системе +;LD_DSK EQU 16 ; максимальное количество логических HDD дисков в системе ///////////////////////////////////////////////////////////////////////////////////////////////////////////// define _bit (1