эксперименты с SIO

This commit is contained in:
Anatoliy Belyanskiy 2024-03-16 22:55:49 +10:00
parent 63c527ace8
commit 54b1e804ba
4 changed files with 64 additions and 44 deletions

View File

@ -167,27 +167,38 @@ MS_INIT:
; 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,+(5 | MOUSE_BAUD.multiplier_1) ; parity
LD A,+(4 | MOUSE_BAUD.multiplier_1) ; no parity
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
; reg 3 ; reg 3
LD A,3 LD A,3
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
LD A,#41 LD A,#41
;LD A,#C1
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
; reg 5 ; reg 5
LD A,5 LD A,5
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
LD A,1
OUT (PORT_MOUSE.Ctrl),A
IF MOUSE_INT_ENABLED IF MOUSE_INT_ENABLED
; reg 1
LD A,1
OUT (PORT_MOUSE.Ctrl),A
LD A,%0001'1001 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 ELSE
; reg 1
LD A,1
OUT (PORT_MOUSE.Ctrl),A
XOR A XOR A
OUT (PORT_MOUSE.Ctrl),A
ENDIF ENDIF
OUT (PORT_MOUSE.Ctrl),A
; ᪮à®áâì ¯®àâ  - ¢â®à®© ¬­®¦¨â¥«ì ; ᪮à®áâì ¯®àâ  - ¢â®à®© ¬­®¦¨â¥«ì
LD A,#55 LD A,#55
OUT (Z84.CTC.Ch_0),A OUT (Z84.CTC.Ch_0),A
@ -622,22 +633,29 @@ MOUSE: LD A,(MODE_M)
RET 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: READ_M: ;[ ] 18/02/2024 ¯à®¢¥àª  ­  ¯¥à¥¯®«­¥­¨¥ ¡ãä¥à 
;[ ] 18/02/2024 能恥丞<E681A5> <20> 砲鄍祚垠平言 <EFBD9E>
; reg 1 ; reg 1
LD A,1 LD A,1
OUT (PORT_MOUSE.Ctrl),A OUT (PORT_MOUSE.Ctrl),A
IN A,(PORT_MOUSE.Ctrl) IN A,(PORT_MOUSE.Ctrl)
AND %0010'0000 ; check receiver overrun error AND %0010'0000 ; check receiver overrun error
; JP NZ,.Receiver_Overrun ; JP NZ,.Receiver_Overrun
JR Z,.NEXT JR Z,.READ_FIRST_BYTE
; reg 0 - error reset ; reg 0 - error reset
LD A,%0011'0000 LD A,%0011'0000
OUT (Z84.SIO.Ch_B.Ctrl),A OUT (Z84.SIO.Ch_B.Ctrl),A
.NEXT: ; JP CLEAR_MOUSE_BUFFER
.READ_FIRST_BYTE:
IN A,(PORT_MOUSE.Ctrl) IN A,(PORT_MOUSE.Ctrl)
RRCA RRCA
RET NC RET NC
@ -652,47 +670,52 @@ READ_M:
RET Z RET Z
;[x] mouse freeeeezzzz ;[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) IN A,(PORT_MOUSE.Ctrl)
RRCA RRCA
;[x] mouse freeeeezzzz ;[x] mouse freeeeezzzz
JR C,.NXT_1 ;JR C,.NXT_1
DEC BC ;DEC BC
LD A,B ;LD A,B
OR C ;OR C
JR NZ,.TST_01 ;JR NZ,.TST_01
RET ;RET
;JR NC,TST_01 JR NC,.READ_SECOND_BYTE
; ;
.NXT_1: IN A,(PORT_MOUSE.Data) ;.NXT_1:
IN A,(PORT_MOUSE.Data)
LD E,A LD E,A
BIT 6,A AND %0100'0000
CCF ;CCF
RET NZ RET NZ
;[x] mouse freeeeezzzz ;[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) IN A,(PORT_MOUSE.Ctrl)
RRCA RRCA
;[x] mouse freeeeezzzz ;[x] mouse freeeeezzzz
JR C,.NXT_2 ;JR C,.NXT_2
DEC BC ;DEC BC
LD A,B ;LD A,B
OR C ;OR C
JR NZ,.TST_02 ;JR NZ,.READ_LAST_BYTE
RET ;RET
;JR NC,TST_02 JR NC,.READ_LAST_BYTE
; ;
.NXT_2: 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 AND %0100'0000
;CCF
RET NZ RET NZ
; ¢á¥ âਠ¡ ©â  ¯ ª¥â  ¯à®ç¨â ­ë
;
LD A,E LD A,E
AND #3F AND #3F
LD E,A LD E,A
@ -814,7 +837,7 @@ DECY: LD A,E
SENSE: LD HL,(SENSEXY) SENSE: LD HL,(SENSEXY)
LD A,L LD A,L
;!TEST ; [ ] 15/03/2024 ⥯¥àì ¯®¯à ¢ª¨ çã¢á⢨⥫쭮á⨠¯® ª®®à¤¨­ â ¬ à ¡®â îâ ª®à४⭮
;OR L ;OR L
;RET Z ;RET Z
;DEC A ;DEC A
@ -840,7 +863,7 @@ SENSE: LD HL,(SENSEXY)
LD B,A LD B,A
; ;
.next: LD E,B .next: LD E,B
; !TEST ; [ ] 15/03/2024 ⥯¥àì ¯®¯à ¢ª¨ çã¢á⢨⥫쭮á⨠¯® ª®®à¤¨­ â ¬ à ¡®â îâ ª®à४⭮
.check_Y: .check_Y:
LD A,H LD A,H
CP 2 CP 2
@ -928,7 +951,7 @@ M_INT: IN A,(SLOT3)
M_REFR: CALL CONTROL M_REFR: CALL CONTROL
AND A AND A
RET RET
CONTROL: CONTROL:
CALL READ_M CALL READ_M
@ -971,7 +994,7 @@ MIN_X: DW 0
MAX_X: DW 319 MAX_X: DW 319
MIN_Y: DW 0 MIN_Y: DW 0
MAX_Y: DW 255 MAX_Y: DW 255
SENSEXY: SENSEXY: ; ‘í­ ‘íªá¨
.X: DB 0 .X: DB 0
.Y: DB 2 .Y: DB 2

View File

@ -978,7 +978,7 @@ KEYBOARD_INIT:
; reg 4 ; 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,5 ; parity
OUT (Z84.SIO.Ch_A.Ctrl),A OUT (Z84.SIO.Ch_A.Ctrl),A
; reg 3 ; reg 3
LD A,3 LD A,3
@ -996,7 +996,7 @@ KEYBOARD_INIT:
IF KEYBOARD_INT_ENABLED IF KEYBOARD_INT_ENABLED
LD A,%0001'1001 LD A,%0001'1001
ELSE ELSE
XOR A ;#18 XOR A
ENDIF ENDIF
OUT (Z84.SIO.Ch_A.Ctrl),A OUT (Z84.SIO.Ch_A.Ctrl),A
; ;
@ -1025,9 +1025,6 @@ KBD_Receiver_Overrun:
LD (IX+K_SHIFT),0 LD (IX+K_SHIFT),0
LD (IX+KEYFLG),0 LD (IX+KEYFLG),0
; ;
; LD A,(HOST)
; LD (HEAD),A
;
;AND A ;AND A
RET RET
;//MODULE: KEYINTER ;//MODULE: KEYINTER

View File

@ -1 +1 @@
944 958

View File

@ -10,7 +10,7 @@
; ;
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 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
; ;