From 54b1e804ba937dd36e441d618e348ba710fc51d3 Mon Sep 17 00:00:00 2001 From: Anatoliy Belyanskiy Date: Sat, 16 Mar 2024 22:55:49 +1000 Subject: [PATCH] =?UTF-8?q?=20=D1=8D=D0=BA=D1=81=D0=BF=D0=B5=D1=80=D0=B8?= =?UTF-8?q?=D0=BC=D0=B5=D0=BD=D1=82=D1=8B=20=D1=81=20SIO?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- DSS/INTMOUSE.ASM | 97 ++++++++++++++++++++++++++++++------------------ DSS/KEYINTER.ASM | 7 +--- DSS/build.txt | 2 +- DSS/defines.inc | 2 +- 4 files changed, 64 insertions(+), 44 deletions(-) diff --git a/DSS/INTMOUSE.ASM b/DSS/INTMOUSE.ASM index 2568a00..017c9a0 100644 --- a/DSS/INTMOUSE.ASM +++ b/DSS/INTMOUSE.ASM @@ -167,27 +167,38 @@ MS_INIT: ; reg 4 - скорость порта первый множитель LD A,4 OUT (PORT_MOUSE.Ctrl),A - LD A,+(7 | MOUSE_BAUD.multiplier_1) + ;LD A,+(5 | MOUSE_BAUD.multiplier_1) ; parity + LD A,+(4 | MOUSE_BAUD.multiplier_1) ; no parity OUT (PORT_MOUSE.Ctrl),A ; reg 3 LD A,3 OUT (PORT_MOUSE.Ctrl),A LD A,#41 + ;LD A,#C1 OUT (PORT_MOUSE.Ctrl),A ; reg 5 LD A,5 OUT (PORT_MOUSE.Ctrl),A 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 + ; reg 1 + LD A,1 + OUT (PORT_MOUSE.Ctrl),A LD A,%0001'1001 + OUT (PORT_MOUSE.Ctrl),A + ; reg 2 + LD A,2 + OUT (PORT_MOUSE.Ctrl),A + LD A,#FF ; вектор прерывания #FF + OUT (PORT_MOUSE.Ctrl),A ELSE + ; reg 1 + LD A,1 + OUT (PORT_MOUSE.Ctrl),A XOR A + OUT (PORT_MOUSE.Ctrl),A ENDIF - OUT (PORT_MOUSE.Ctrl),A ; скорость порта - второй множитель LD A,#55 OUT (Z84.CTC.Ch_0),A @@ -622,22 +633,29 @@ MOUSE: LD A,(MODE_M) RET ;----------------------------------------------------------------------; +CLEAR_MOUSE_BUFFER: + IN A,(Z84.SIO.Ch_B.Data) + IN A,(Z84.SIO.Ch_B.Ctrl) + RRCA + JR C,CLEAR_MOUSE_BUFFER + SCF + RET ;----------------------------------------------------------------------; -READ_M: - ;[ ] 18/02/2024 проверка на переполнение буфера +READ_M: ;[ ] 18/02/2024 проверка на переполнение буфера ; reg 1 LD A,1 OUT (PORT_MOUSE.Ctrl),A IN A,(PORT_MOUSE.Ctrl) AND %0010'0000 ; check receiver overrun error ; JP NZ,.Receiver_Overrun - JR Z,.NEXT + JR Z,.READ_FIRST_BYTE ; reg 0 - error reset LD A,%0011'0000 OUT (Z84.SIO.Ch_B.Ctrl),A -.NEXT: ; + JP CLEAR_MOUSE_BUFFER +.READ_FIRST_BYTE: IN A,(PORT_MOUSE.Ctrl) RRCA RET NC @@ -652,47 +670,52 @@ READ_M: RET Z ;[x] mouse freeeeezzzz - LD BC,MOUSE_READ_PORT_TIMEOUT + ;LD BC,MOUSE_READ_PORT_TIMEOUT ; -.TST_01: +.READ_SECOND_BYTE: IN A,(PORT_MOUSE.Ctrl) RRCA ;[x] mouse freeeeezzzz - JR C,.NXT_1 - DEC BC - LD A,B - OR C - JR NZ,.TST_01 - RET - ;JR NC,TST_01 + ;JR C,.NXT_1 + ;DEC BC + ;LD A,B + ;OR C + ;JR NZ,.TST_01 + ;RET + JR NC,.READ_SECOND_BYTE ; -.NXT_1: IN A,(PORT_MOUSE.Data) +;.NXT_1: + IN A,(PORT_MOUSE.Data) LD E,A - BIT 6,A - CCF + AND %0100'0000 + ;CCF RET NZ ;[x] mouse freeeeezzzz - LD BC,MOUSE_READ_PORT_TIMEOUT + ;LD BC,MOUSE_READ_PORT_TIMEOUT ; -.TST_02: +.READ_LAST_BYTE: IN A,(PORT_MOUSE.Ctrl) RRCA ;[x] mouse freeeeezzzz - JR C,.NXT_2 - DEC BC - LD A,B - OR C - JR NZ,.TST_02 - RET - ;JR NC,TST_02 + ;JR C,.NXT_2 + ;DEC BC + ;LD A,B + ;OR C + ;JR NZ,.READ_LAST_BYTE + ;RET + JR NC,.READ_LAST_BYTE ; -.NXT_2: IN A,(PORT_MOUSE.Data) +;.NXT_2: + IN A,(PORT_MOUSE.Data) LD D,A - BIT 6,A - CCF + ;BIT 6,A + AND %0100'0000 + ;CCF RET NZ + ; все три байта пакета прочитаны + ; LD A,E AND #3F LD E,A @@ -814,7 +837,7 @@ DECY: LD A,E SENSE: LD HL,(SENSEXY) LD A,L - ;!TEST + ; [ ] 15/03/2024 теперь поправки чувствительности по координатам работают корректно ;OR L ;RET Z ;DEC A @@ -840,7 +863,7 @@ SENSE: LD HL,(SENSEXY) LD B,A ; .next: LD E,B - ; !TEST + ; [ ] 15/03/2024 теперь поправки чувствительности по координатам работают корректно .check_Y: LD A,H CP 2 @@ -928,7 +951,7 @@ M_INT: IN A,(SLOT3) M_REFR: CALL CONTROL AND A - RET + RET CONTROL: CALL READ_M @@ -971,7 +994,7 @@ MIN_X: DW 0 MAX_X: DW 319 MIN_Y: DW 0 MAX_Y: DW 255 -SENSEXY: +SENSEXY: ; Сэн Сэкси .X: DB 0 .Y: DB 2 diff --git a/DSS/KEYINTER.ASM b/DSS/KEYINTER.ASM index fdaf57b..9806bb3 100644 --- a/DSS/KEYINTER.ASM +++ b/DSS/KEYINTER.ASM @@ -978,7 +978,7 @@ KEYBOARD_INIT: ; reg 4 LD A,4 OUT (Z84.SIO.Ch_A.Ctrl),A - LD A,#07 ;#05 + ;LD A,5 ; parity OUT (Z84.SIO.Ch_A.Ctrl),A ; reg 3 LD A,3 @@ -996,7 +996,7 @@ KEYBOARD_INIT: IF KEYBOARD_INT_ENABLED LD A,%0001'1001 ELSE - XOR A ;#18 + XOR A ENDIF OUT (Z84.SIO.Ch_A.Ctrl),A ; @@ -1025,9 +1025,6 @@ KBD_Receiver_Overrun: LD (IX+K_SHIFT),0 LD (IX+KEYFLG),0 ; - ; LD A,(HOST) - ; LD (HEAD),A - ; ;AND A RET ;//MODULE: KEYINTER diff --git a/DSS/build.txt b/DSS/build.txt index 5f97bf2..972fd77 100644 --- a/DSS/build.txt +++ b/DSS/build.txt @@ -1 +1 @@ -944 \ No newline at end of file +958 \ No newline at end of file diff --git a/DSS/defines.inc b/DSS/defines.inc index a948e8d..4484ee0 100644 --- a/DSS/defines.inc +++ b/DSS/defines.inc @@ -10,7 +10,7 @@ ; 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 3072 ; Костыльный тайм-аут на ожидание байта от мышки. Просто есть кривые переходники +;DEFINE MOUSE_READ_PORT_TIMEOUT 3072 ; Костыльный тайм-аут на ожидание байта от мышки. Просто есть кривые переходники ; DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A ;