Мышь

; (c) Denis Parinov
CMOUSE EQU #1B
DMOUSE EQU #1A
VSIZEX EQU 256 ;X SIZE SCREEN
VSIZEY EQU 192 ;Y SIZE SCREEN

;INTERUPT
 CALL READ_M
 CALL C,MCORECT
 RET

;READING MOUSE
; HL - X COORD
; DE - Y COORD
;  A - BUTTONS
; D0 - LEFT
; D1 - RIGHT

MS_READ LD HL,(PIX_X)
 LD DE,(PIX_Y)
 LD A,(MB)
 RET

;INITIALIZING COM PORT
MS_INIT DI
 LD A,85
 OUT (#10),A
 LD A,45
 OUT (#10),A
 LD A,0
 OUT (CMOUSE),A
 LD A,1
 OUT (CMOUSE),A
 LD A,0
 OUT (CMOUSE),A
 LD A,3
 OUT (CMOUSE),A
 LD A,#41
 OUT (CMOUSE),A
 LD A,4
 OUT (CMOUSE),A
 LD A,#47
 OUT (CMOUSE),A
 LD A,5
 OUT (CMOUSE),A
 LD A,#E0
 OUT (CMOUSE),A
 EI
 RET

READ_M IN A,(CMOUSE)
 RRCA
 RET NC
 IN A,(DMOUSE)
 LD L,A
 BIT 6,A
 CCF
 RET Z
TST_01 IN A,(CMOUSE)
 RRCA
 JP NC,TST_01
 IN A,(DMOUSE)
 LD E,A
 BIT 6,A
 CCF
 RET NZ
TST_02 IN A,(CMOUSE)
 RRCA
 JP NC,TST_02
 IN A,(DMOUSE)
 LD D,A
 BIT 6,A
 CCF
 RET NZ
 LD A,E
 AND #3F
 LD E,A
 LD A,L
 AND #03
 RRCA
 RRCA
 OR E
 LD E,A
 LD A,D
 AND #3F
 LD D,A
 LD A,L
 AND #0C
 RRCA
 RRCA
 RRCA
 RRCA
 OR D
 LD D,A
 LD A,L
 RLCA
 RLCA
 RLCA
 RES 6,A
 JR NC,STBU
 SET 6,A
STBU RLCA
 RLCA
 AND #03
 LD (MB),A
 LD A,E
 LD (MX),A
 LD A,D
 LD (MY),A
 SCF
 RET

MCORECT LD HL,(PIX_X)
 LD DE,(MX)
 LD D,0
 BIT 7,E
 JP NZ,DECX
 ADD HL,DE
 LD (PIX_X),HL
 EX DE,HL
 LD HL,VSIZEX-1
 AND A
 SBC HL,DE
 JP NC,YCOO
 LD HL,VSIZEX-1
 LD (PIX_X),HL
 JP YCOO
DECX LD A,E
 NEG
 LD E,A
 AND A
 SBC HL,DE
 LD (PIX_X),HL
 JP NC,YCOO
LD HL,0
 LD (PIX_X),HL
YCOO LD HL,(PIX_Y)
 LD DE,(MY)
 LD D,0
 BIT 7,E
 JP NZ,DECY
 ADD HL,DE
 LD (PIX_Y),HL
 EX DE,HL
 LD HL,VSIZEY-1
 AND A
 SBC HL,DE
 RET NC
 LD HL,VSIZEY-1
 LD (PIX_Y),HL
 RET

DECY LD A,E
 NEG
 LD E,A
 AND A
 SBC HL,DE
 LD (PIX_Y),HL
 RET NC
 LD HL,0
 LD (PIX_Y),HL
 RET

PIX_X DEFW 128
PIX_Y DEFW 96

MX DEFB #00
MY DEFB #00
MB DEFB #00