-bug: некорректно работала функция обработки чувствительности мышки MS_SENT

This commit is contained in:
Anatoliy Belyanskiy 2024-03-15 00:38:21 +10:00
parent 00e9cb59f0
commit 63c527ace8
6 changed files with 239 additions and 111 deletions

View File

@ -154,6 +154,38 @@ A0038: ;
; POP AF ; ; POP AF ;
; EX AF,AF' ; ; EX AF,AF' ;
; POP AF ; ; POP AF ;
;!TEST SIO INT
; reg 0 - error reset
IF KEYBOARD_INT_ENABLED && MOUSE_INT_ENABLED == 0
PUSH AF
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 0 - return from int
LD A,%0011'1000
OUT (Z84.SIO.Ch_A.Ctrl),A
POP AF
ELSEIF MOUSE_INT_ENABLED && KEYBOARD_INT_ENABLED == 0
PUSH AF
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_B.Ctrl),A
; reg 0 - return from int
LD A,%0011'1000
OUT (Z84.SIO.Ch_B.Ctrl),A
POP AF
ELSEIF MOUSE_INT_ENABLED && KEYBOARD_INT_ENABLED
PUSH AF
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_A.Ctrl),A
OUT (Z84.SIO.Ch_B.Ctrl),A
; reg 0 - return from int
LD A,%0011'1000
OUT (Z84.SIO.Ch_A.Ctrl),A
OUT (Z84.SIO.Ch_B.Ctrl),A
POP AF
ENDIF
EI ; EI ;
RETI ; RETI ;
;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' '; ;' ' ' ' ' ' ' ' ' ' ' ' ' ' ' ';

View File

@ -151,8 +151,6 @@ INT_: PUSH AF
PUSH IX PUSH IX
PUSH IY PUSH IY
CALL KEYSCAN CALL KEYSCAN
; LD C,Dss.Mouse.GetPackets
; RST ToDSS.Mouse
CALL M_INT CALL M_INT
IFN CLASSIC_CURSOR IFN CLASSIC_CURSOR
CALL cursor_interrupt; ¢¥ªâ®à ®¡á«ã¦. ªãàá®à  ;!!!!! VASIL CALL cursor_interrupt; ¢¥ªâ®à ®¡á«ã¦. ªãàá®à  ;!!!!! VASIL

View File

@ -102,7 +102,8 @@ PORT_MOUSE.Data EQU Z84.SIO.Ch_B.Data
; 4 - CURSOR OFF (UZHE) ; 4 - CURSOR OFF (UZHE)
; 5 - CURSOR IMAGE VERY BIG ; 5 - CURSOR IMAGE VERY BIG
INTMOUS BIT 7,C INTMOUS:
BIT 7,C
JR NZ,EMOUSE JR NZ,EMOUSE
INC C INC C
DEC C DEC C
@ -116,9 +117,9 @@ INTMOUS BIT 7,C
DEC C DEC C
JP Z,MS_GOTO ; 4 JP Z,MS_GOTO ; 4
DEC C DEC C
JR Z,MS_RESR ; 5 JR Z,.RESERVED ; 5
DEC C DEC C
JR Z,MS_RESR ; 6 JR Z,.RESERVED ; 6
DEC C DEC C
JP Z,MS_VERT ; 7 JP Z,MS_VERT ; 7
DEC C DEC C
@ -130,28 +131,30 @@ INTMOUS BIT 7,C
DEC C DEC C
JP Z,MS_BCUR ; 11 JP Z,MS_BCUR ; 11
DEC C DEC C
JR Z,MS_RESR ; 12 JR Z,.RESERVED ; 12
DEC C DEC C
JR Z,MS_RESR ; 13 JR Z,.RESERVED ; 13
DEC C DEC C
JP Z,MS_GSEN ; 14 JP Z,MS_GSEN ; 14
DEC C DEC C
JP Z,MS_SENT ; 15 JP Z,MS_SENT ; 15
MS_RESR LD A,DSS_Error.mouse.INVALID_COMMAND .RESERVED:
LD A,DSS_Error.mouse.INVALID_COMMAND
SCF SCF
RET RET
EMOUSE RES 7,C EMOUSE: RES 7,C
INC C INC C
DEC C DEC C
JP Z,M_INT JP Z,M_INT
DEC C DEC C
JP Z,M_MODE JP Z,M_MODE
DEC C DEC C
JR Z,M_RESR JR Z,.RESERVED
DEC C DEC C
JP Z,M_REFR JP Z,M_REFR
M_RESR LD A,DSS_Error.mouse.INVALID_COMMAND .RESERVED:
LD A,DSS_Error.mouse.INVALID_COMMAND
SCF SCF
RET RET
@ -159,12 +162,12 @@ M_RESR LD A,DSS_Error.mouse.INVALID_COMMAND
MS_INIT: MS_INIT:
DI DI
; reg 0 ; reg 0
XOR A ;LD A,0 XOR A
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
; reg 4 ; reg 4 - ᪮à®áâì ¯®àâ  ¯¥à¢ë© ¬­®¦¨â¥«ì
LD A,4 LD A,4
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
LD A,+(7 | MOUSE_BAUD.multiplier_1) ; ¯¥à¢ë© ¬­®¦¨â¥«ì LD A,+(7 | MOUSE_BAUD.multiplier_1)
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
; reg 3 ; reg 3
LD A,3 LD A,3
@ -176,7 +179,6 @@ MS_INIT:
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
LD A,%1110'0000 ; bit7 ¤«ï ª®à४⭮£® ¨­¨â  Sega ¤¦®©á⨪  ¢ ¯®àâã ª¥¬¯áâ®­ ¤¦®©á⨪  LD A,%1110'0000 ; bit7 ¤«ï ª®à४⭮£® ¨­¨â  Sega ¤¦®©á⨪  ¢ ¯®àâã ª¥¬¯áâ®­ ¤¦®©á⨪ 
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
;
; reg 1 ; reg 1
LD A,1 LD A,1
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
@ -186,17 +188,18 @@ MS_INIT:
XOR A XOR A
ENDIF ENDIF
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
;!TEST mouse ; ᪮à®áâì ¯®àâ  - ¢â®à®© ¬­®¦¨â¥«ì
LD A,#55 LD A,#55
OUT (Z84.CTC.Ch_0),A OUT (Z84.CTC.Ch_0),A
LD A,MOUSE_BAUD.multiplier_2 ; ¢â®à®© ¬­®¦¨â¥«ì LD A,MOUSE_BAUD.multiplier_2
OUT (Z84.CTC.Ch_0),A OUT (Z84.CTC.Ch_0),A
; ;
EI EI
XOR A XOR A
RET RET
MS_SHOW PUSH IX MS_SHOW:
PUSH IX
PUSH HL PUSH HL
PUSH DE PUSH DE
EX AF,AF' EX AF,AF'
@ -216,7 +219,8 @@ MS_SHOW PUSH IX
XOR A XOR A
RET RET
MS_HIDD PUSH IX MS_HIDD:
PUSH IX
PUSH HL PUSH HL
PUSH DE PUSH DE
EX AF,AF' EX AF,AF'
@ -234,13 +238,15 @@ MS_HIDD PUSH IX
XOR A XOR A
RET RET
MS_READ LD HL,(PIX_X) MS_READ:
LD HL,(PIX_X)
LD DE,(PIX_Y) LD DE,(PIX_Y)
LD A,(MB) LD A,(MOUSE_BUTTONS)
AND A AND A
RET RET
MS_GOTO PUSH IX MS_GOTO:
PUSH IX
PUSH HL PUSH HL
PUSH DE PUSH DE
LD (PIX_X),HL LD (PIX_X),HL
@ -258,7 +264,8 @@ MS_GOTO PUSH IX
XOR A XOR A
RET RET
MS_CURS PUSH BC MS_CURS:
PUSH BC
PUSH DE PUSH DE
PUSH HL PUSH HL
PUSH IX PUSH IX
@ -278,9 +285,9 @@ MS_CURS PUSH BC
LD B,0 LD B,0
LD A,(M_YSIZE) LD A,(M_YSIZE)
LD HL,0 LD HL,0
MSCURS1 ADD HL,BC .loop: ADD HL,BC
DEC A DEC A
JR NZ,MSCURS1 JR NZ,.loop
PUSH HL PUSH HL
LD BC,M_IMAGE.Size+1 LD BC,M_IMAGE.Size+1
AND A AND A
@ -290,27 +297,29 @@ MSCURS1 ADD HL,BC
POP BC POP BC
POP HL POP HL
LD A,5 LD A,5
JR C,NOLOADM JR C,.NOLOADM
LD DE,M_IMAGE LD DE,M_IMAGE
DI DI
LDIR LDIR
XOR A XOR A
NOLOADM POP HL .NOLOADM:
POP HL
POP DE POP DE
POP BC POP BC
EI EI
RET RET
MS_BCUR PUSH IX MS_BCUR:
PUSH IX
EXX EXX
LD A,(M_XSIZE) LD A,(M_XSIZE)
LD C,A LD C,A
LD B,0 LD B,0
LD A,(M_YSIZE) LD A,(M_YSIZE)
LD HL,0 LD HL,0
MSBCUR1 ADD HL,BC .loop: ADD HL,BC
DEC A DEC A
JR NZ,MSBCUR1 JR NZ,.loop
PUSH HL PUSH HL
LD BC,M_IMAGE.Size+1 LD BC,M_IMAGE.Size+1
AND A AND A
@ -335,22 +344,23 @@ MSBCUR1 ADD HL,BC
LD D,C LD D,C
LD BC,0 LD BC,0
XOR A XOR A
NOSAVEM EI NOSAVEM:
EI
RET RET
MS_HORZ MS_HORZ:
LD (MIN_X),HL LD (MIN_X),HL
LD (MAX_X),DE LD (MAX_X),DE
XOR A XOR A
RET RET
MS_VERT MS_VERT:
LD (MIN_Y),HL LD (MIN_Y),HL
LD (MAX_Y),DE LD (MAX_Y),DE
XOR A XOR A
RET RET
MS_MASK MS_MASK:
LD (ANDXORS),HL LD (ANDXORS),HL
LD (ANDXORA),DE LD (ANDXORA),DE
XOR A XOR A
@ -358,13 +368,12 @@ MS_MASK
; H - VERTICAL SENSITIVE ; H - VERTICAL SENSITIVE
; L - HORIZONTAL SENSITIVE ; L - HORIZONTAL SENSITIVE
MS_SENT:
MS_SENT
LD (SENSEXY),HL LD (SENSEXY),HL
XOR A XOR A
RET RET
MS_GSEN MS_GSEN:
LD HL,(SENSEXY) LD HL,(SENSEXY)
XOR A XOR A
RET RET
@ -616,13 +625,30 @@ MOUSE: LD A,(MODE_M)
;----------------------------------------------------------------------; ;----------------------------------------------------------------------;
READ_M: IN A,(PORT_MOUSE.Ctrl) 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
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_B.Ctrl),A
.NEXT: ;
IN A,(PORT_MOUSE.Ctrl)
RRCA RRCA
RET NC RET NC
; AND 1
; RET Z
IN A,(PORT_MOUSE.Data) IN A,(PORT_MOUSE.Data)
LD L,A LD L,A
BIT 6,A AND %0100'0000
CCF ;BIT 6,A
;CCF
RET Z RET Z
;[x] mouse freeeeezzzz ;[x] mouse freeeeezzzz
@ -632,7 +658,7 @@ READ_M: IN A,(PORT_MOUSE.Ctrl)
IN A,(PORT_MOUSE.Ctrl) IN A,(PORT_MOUSE.Ctrl)
RRCA RRCA
;[x] mouse freeeeezzzz ;[x] mouse freeeeezzzz
JR C,.NXT JR C,.NXT_1
DEC BC DEC BC
LD A,B LD A,B
OR C OR C
@ -641,7 +667,7 @@ READ_M: IN A,(PORT_MOUSE.Ctrl)
;JR NC,TST_01 ;JR NC,TST_01
; ;
.NXT: IN A,(PORT_MOUSE.Data) .NXT_1: IN A,(PORT_MOUSE.Data)
LD E,A LD E,A
BIT 6,A BIT 6,A
CCF CCF
@ -650,18 +676,19 @@ READ_M: IN A,(PORT_MOUSE.Ctrl)
;[x] mouse freeeeezzzz ;[x] mouse freeeeezzzz
LD BC,MOUSE_READ_PORT_TIMEOUT LD BC,MOUSE_READ_PORT_TIMEOUT
; ;
TST_02: IN A,(PORT_MOUSE.Ctrl) .TST_02:
IN A,(PORT_MOUSE.Ctrl)
RRCA RRCA
;[x] mouse freeeeezzzz ;[x] mouse freeeeezzzz
JR C,.NXT JR C,.NXT_2
DEC BC DEC BC
LD A,B LD A,B
OR C OR C
JR NZ,TST_02 JR NZ,.TST_02
RET RET
;JR NC,TST_02 ;JR NC,TST_02
; ;
.NXT: IN A,(PORT_MOUSE.Data) .NXT_2: IN A,(PORT_MOUSE.Data)
LD D,A LD D,A
BIT 6,A BIT 6,A
CCF CCF
@ -696,45 +723,66 @@ TST_02: IN A,(PORT_MOUSE.Ctrl)
.STBU: RLCA .STBU: RLCA
RLCA RLCA
AND #03 AND #03
LD (MB),A LD (MOUSE_BUTTONS),A
CALL SENSE CALL SENSE
LD A,E LD (MOUSE_COORDINATES),DE
LD (MX),A ; LD A,E
LD A,D ; LD (MX),A
LD (MY),A ; LD A,D
; LD (MY),A
SCF SCF
RET RET
;[ ] 14/03/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à 
/*
.Receiver_Overrun:
; empty the buffer
IN A,(Z84.SIO.Ch_B.Data)
IN A,(Z84.SIO.Ch_B.Ctrl)
RRCA
JR C,.Receiver_Overrun
; reg 0 - error reset
LD A,%0011'0000
OUT (Z84.SIO.Ch_B.Ctrl),A
;!TEST
; reg 0 - return from int
; LD A,%0011'1000
; OUT (Z84.SIO.Ch_B.Ctrl),A
;
RET
*/
MCORECT LD HL,(PIX_X)
LD DE,(MX) MCORECT:
LD HL,(PIX_X)
LD DE,(MOUSE_COORDINATES)
LD D,0 LD D,0
BIT 7,E BIT 7,E
JR NZ,DECX JR NZ,.DECX
ADD HL,DE ADD HL,DE
LD (PIX_X),HL LD (PIX_X),HL
EX DE,HL EX DE,HL
LD HL,(MAX_X) LD HL,(MAX_X)
AND A AND A
SBC HL,DE SBC HL,DE
JR NC,YCOO JR NC,.YCOO
LD HL,(MAX_X) LD HL,(MAX_X)
LD (PIX_X),HL LD (PIX_X),HL
JP YCOO JP .YCOO
DECX LD A,E .DECX: LD A,E
NEG NEG
LD E,A LD E,A
AND A AND A
SBC HL,DE SBC HL,DE
LD (PIX_X),HL LD (PIX_X),HL
JR C,YCOO2 JR C,.YCOO2
LD DE,(MIN_X) LD DE,(MIN_X)
SBC HL,DE SBC HL,DE
JR NC,YCOO JR NC,.YCOO
YCOO2 LD HL,(MIN_X) .YCOO2: LD HL,(MIN_X)
LD (PIX_X),HL LD (PIX_X),HL
YCOO LD HL,(PIX_Y) .YCOO: LD HL,(PIX_Y)
LD DE,(MY) LD DE,(MOUSE_COORDINATES.Y)
LD D,0 LD D,0
BIT 7,E BIT 7,E
JR NZ,DECY JR NZ,DECY
@ -750,77 +798,90 @@ YCOO LD HL,(PIX_Y)
LD (PIX_Y),HL LD (PIX_Y),HL
RET RET
DECY LD A,E DECY: LD A,E
NEG NEG
LD E,A LD E,A
AND A AND A
SBC HL,DE SBC HL,DE
LD (PIX_Y),HL LD (PIX_Y),HL
JR C,XCOO JR C,.XCOO
LD DE,(MIN_Y) LD DE,(MIN_Y)
SBC HL,DE SBC HL,DE
RET NC RET NC
XCOO LD HL,(MIN_Y) .XCOO: LD HL,(MIN_Y)
LD (PIX_Y),HL LD (PIX_Y),HL
RET RET
SENSE LD HL,(SENSEXY) SENSE: LD HL,(SENSEXY)
LD A,L LD A,L
OR L ;!TEST
RET Z ;OR L
DEC A ;RET Z
RET Z ;DEC A
;RET Z
CP 2
CCF
JR NC,.check_Y
;
LD A,E LD A,E
BIT 7,A BIT 7,A
LD B,#FF LD B,#FF
JR Z,SEN1 JR Z,.loop
LD B,#7F LD B,#7F
NEG NEG
SEN1 INC B .loop: INC B
SUB L SUB L
JR NC,SEN1 JR NC,.loop
BIT 7,B BIT 7,B
JR Z,SEN2 JR Z,.next
LD A,B LD A,B
RES 7,A RES 7,A
NEG NEG
LD B,A LD B,A
SEN2 LD E,B ;
.next: LD E,B
; !TEST
.check_Y:
LD A,H
CP 2
CCF
RET NC
;
LD A,D LD A,D
BIT 7,A BIT 7,A
LD B,#FF LD B,#FF
JR Z,SEN3 JR Z,.loop2
LD B,#7F LD B,#7F
NEG NEG
SEN3 INC B .loop2: INC B
SUB H SUB H
JR NC,SEN3 JR NC,.loop2
BIT 7,B BIT 7,B
JR Z,SEN4 JR Z,.skip2
LD A,B LD A,B
RES 7,A RES 7,A
NEG NEG
LD B,A LD B,A
SEN4 LD D,B .skip2: LD D,B
RET RET
M_MODE LD (MODE_M),A M_MODE: LD (MODE_M),A
OR A OR A
JR Z,UNKMODE JR Z,.UNKMODE
CP 1 CP 1
JR Z,UNKMODE JR Z,.UNKMODE
CP 2 CP 2
JR Z,S320256 JR Z,S320256
CP 3 CP 3
JR Z,S640256 JR Z,S640256
BIT 7,A BIT 7,A
JR Z,UNKMODE JR Z,.UNKMODE
RES 7,A RES 7,A
CP 1 CP 1
JR Z,S320256 JR Z,S320256
CP 2 CP 2
JR Z,S640256 JR Z,S640256
UNKMODE: .UNKMODE:
XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ? XOR A ; ????? ¬®¦¥â âãâ ­ ¤® .INVALID_COMMAND ?
SCF SCF
RET RET
@ -858,13 +919,19 @@ M_INT: IN A,(SLOT3)
OUT (SLOT3),A OUT (SLOT3),A
LD A,C LD A,C
OUT (PORT_Y),A OUT (PORT_Y),A
;!TEST SIO INT
IF MOUSE_INT_ENABLED
LD A,%0011'1000 ; return from int
OUT (Z84.SIO.Ch_B.Ctrl),A
ENDIF
RET RET
M_REFR CALL CONTROL M_REFR: CALL CONTROL
AND A AND A
RET RET
CONTROL CALL READ_M CONTROL:
CALL READ_M
RET NC RET NC
CALL MCORECT CALL MCORECT
;LD A,#00 ;LD A,#00
@ -894,9 +961,11 @@ MODE_M: DB #03
PIX_X: DW 160 PIX_X: DW 160
PIX_Y: DW 128 PIX_Y: DW 128
MX: DB #00 MOUSE_COORDINATES:
MY: DB #00 .X: DB #00
MB: DB #00 .Y: DB #00
MOUSE_BUTTONS: DB #00
;MB_OLD DB #00 ; !FIXIT - ­¥ ­ã¦­®? ;MB_OLD DB #00 ; !FIXIT - ­¥ ­ã¦­®?
MIN_X: DW 0 MIN_X: DW 0
MAX_X: DW 319 MAX_X: DW 319
@ -904,7 +973,7 @@ MIN_Y: DW 0
MAX_Y: DW 255 MAX_Y: DW 255
SENSEXY: SENSEXY:
.X: DB 0 .X: DB 0
.Y: DB 0 .Y: DB 2
XHOT_SP: DW 0 XHOT_SP: DW 0
YHOT_SP: DW 0 YHOT_SP: DW 0

View File

@ -433,6 +433,14 @@ FULL_BF:
KEYSCAN: KEYSCAN:
LD IX,KEYFLAG LD IX,KEYFLAG
;!TEST SIO INT
IF KEYBOARD_INT_ENABLED
CALL .RESCAN
LD A,%0011'1000 ; return from int
OUT (Z84.SIO.Ch_A.Ctrl),A
RET
ENDIF
;
.RESCAN: .RESCAN:
IN A,(Z84.SIO.Ch_A.Ctrl) IN A,(Z84.SIO.Ch_A.Ctrl)
AND 1 AND 1
@ -443,7 +451,7 @@ KEYSCAN:
OUT (Z84.SIO.Ch_A.Ctrl),A OUT (Z84.SIO.Ch_A.Ctrl),A
IN A,(Z84.SIO.Ch_A.Ctrl) IN A,(Z84.SIO.Ch_A.Ctrl)
AND %0010'0000 ; check receiver overrun error AND %0010'0000 ; check receiver overrun error
JP NZ,Receiver_Overrun JP NZ,KBD_Receiver_Overrun
; ;
IN A,(Z84.SIO.Ch_A.Data) IN A,(Z84.SIO.Ch_A.Data)
CP #F0 CP #F0
@ -963,36 +971,55 @@ BEEP: LD A,#10
RET RET
KEYBOARD_INIT: KEYBOARD_INIT:
XOR A ;LD A,0 DI
OUT (Z84.SIO.Ch_A.Ctrl),A ; reg 0
INC A ;LD A,1 XOR A
OUT (Z84.SIO.Ch_A.Ctrl),A
XOR A ;LD A,0 ;#18
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,3
OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#C1
OUT (Z84.SIO.Ch_A.Ctrl),A OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 4
LD A,4 LD A,4
OUT (Z84.SIO.Ch_A.Ctrl),A OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#07 ;#05 LD A,#07 ;#05
OUT (Z84.SIO.Ch_A.Ctrl),A 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 LD A,5
OUT (Z84.SIO.Ch_A.Ctrl),A OUT (Z84.SIO.Ch_A.Ctrl),A
LD A,#62 LD A,#62
OUT (Z84.SIO.Ch_A.Ctrl),A 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 ;#18
ENDIF
OUT (Z84.SIO.Ch_A.Ctrl),A
;
EI
RET RET
;[ ] 18/02/2024 能恥丞<E681A5> <20> 砲鄍祚垠平言 <EFBD9E> ;[x] 18/02/2024 能恥丞<E681A5> <20> 砲鄍祚垠平言 <EFBD9E>
Receiver_Overrun: KBD_Receiver_Overrun:
; empty the buffer ; empty the buffer
IN A,(Z84.SIO.Ch_A.Data) IN A,(Z84.SIO.Ch_A.Data)
IN A,(Z84.SIO.Ch_A.Ctrl) IN A,(Z84.SIO.Ch_A.Ctrl)
RRCA RRCA
JR C,Receiver_Overrun JR C,KBD_Receiver_Overrun
; reg 0 - reset errors ; reg 0 - error reset
LD A,%0011'0000 LD A,%0011'0000
OUT (Z84.SIO.Ch_A.Ctrl),A 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 ᯥªâà㬠 ;!TODO ¯à¨ ¤¥â¥ªâ¥ ¯¥à¥¯®«­¥­¨ï ¡ãä¥à  ¯à®æ  á­ïâì ª« ¢¨è¨ ¨§ ¯®àâ  #FE ᯥªâà㬠
; ;
LD (IX+K_SHIFT),0 LD (IX+K_SHIFT),0
@ -1001,7 +1028,7 @@ Receiver_Overrun:
; LD A,(HOST) ; LD A,(HOST)
; LD (HEAD),A ; LD (HEAD),A
; ;
AND A ;AND A
RET RET
;//MODULE: KEYINTER ;//MODULE: KEYINTER
;[END] ;[END]

View File

@ -1 +1 @@
943 944

View File

@ -10,7 +10,9 @@
; ;
DEFINE MOUSE_COM_BAUD 0 ; 1 - 2485, 2 - 4807, else - 1215 (default) DEFINE MOUSE_COM_BAUD 0 ; 1 - 2485, 2 - 4807, else - 1215 (default)
DEFINE MOUSE_INT_ENABLED 0 ; INT from SIO ch. B DEFINE MOUSE_INT_ENABLED 0 ; INT from SIO ch. B
DEFINE MOUSE_READ_PORT_TIMEOUT 1280 ; Š®áâë«ì­ë© â ©¬- ãâ ­  ®¦¨¤ ­¨¥ ¡ ©â  ®â ¬ë誨. <EFBFBD>à®áâ® ¥áâì ªà¨¢ë¥ ¯¥à¥å®¤­¨ª¨ DEFINE MOUSE_READ_PORT_TIMEOUT 3072 ; Š®áâë«ì­ë© â ©¬- ãâ ­  ®¦¨¤ ­¨¥ ¡ ©â  ®â ¬ë誨. <EFBFBD>à®áâ® ¥áâì ªà¨¢ë¥ ¯¥à¥å®¤­¨ª¨
;
DEFINE KEYBOARD_INT_ENABLED 0 ; INT from SIO ch. A
; ;
; ;