
;MOUSE DRIVER (C) 1999 LOKI/CLEVERS/TMH

MOUSDR  RET
        CALL MDRV
.coord  CALL MCOORD
        LD A,(MDIRECT)
        LD (DIRECT),A
        RET
.speed  ld hl,#0000       ; nop:nop  - нормальная скорость  ; установка скорости мыши вход a ;/DA
        or a
       jr z,1F
        ld hl,#3FCB       ; srl a    - медленная скорость
1       ld (M_slowX),hl
        ld (M_slowY),hl
       ret
.res    ld a,#C9          ; a = ret     ; обнуляем смещение мыши
        ld (.coord),a
        call MOUSDR
        ld a,#CD          ; a = call
        ld (.coord),a
        xor a
       jp MBUTT.e

;mdrv   LD A,(MOUSDR)
;       AND A
;       RET NZ
;       LD HL,(MDR1+1)
;       PUSH HL
;       CALL MDRV
;       POP HL
;       LD (MDR1+1),HL
;       LD A,(DIRECT)
;       AND A
;       RET NZ
;       LD A,(MDIRECT)
;       LD (DIRECT),A
;       RET



MDRV    LD HL,#0000
        LD (MSHIFTX),HL
        LD (MSHIFTY),HL
      ;  LD (FIRE),HL

         ld a,#7F      ;проверка SS , при удержании делаем уменьшение скорости в 2 раза /DA
         in a,(#FE)
         rra
         rra
         ld hl,#0000       ;  nop:nop
        jr c,1F
         ld hl,#3FCB       ; srl a    - медленная скорость для SS
1       ld (M_slowX.SS),hl
        ld (M_slowY.SS),hl

MDR1    LD HL,#0000
        LD D,#00
        LD BC,#FBDF
        IN A,(C)
        LD (MDR1+#01),A
        SUB L
    ;    JR Z,DIRY
    ;    JP P,MRIGHT      ; переделка под смену скорости мыши /DA
        bit 7,a
       jr z,1F
        NEG
        res 7,b           ; теперь 7 bit B отвечает за знак инверсно
1
M_slowX nop:nop          ; srl a  ; меняем для смены скорости
.SS     nop:nop          ; srl a  ; меняем для смены скорости SS
         or a
        jr z,DIRY

         bit 7,b
        jr nz,MRIGHT
        SET #01,D              ; LEFT
        LD (MSHIFTX+#00),A
        JR DIRY
MRIGHT  SET #00,D              ; RIGTH
        LD (MSHIFTX+#01),A
DIRY    LD B,#FF
        IN A,(C)
        NEG
        LD (MDR1+#02),A
        SUB H
    ;    JR Z,MBUTT       ; переделка под смену скорости мыши /DA
    ;    JP P,MDOWN
        bit 7,a
       jr z,1F
        NEG
        res 7,b           ; теперь 7 bit B отвечает за знак инверсно
1
M_slowY nop:nop          ; srl a  ; меняем для смены скорости
.SS     nop:nop          ; srl a  ; меняем для смены скорости SS
         or a
        jr z,MBUTT

         bit 7,b
        jr nz,MDOWN
        SET #03,D              ; UP
        LD (MSHIFTY+#00),A
        JR MBUTT
MDOWN   SET #02,D              ; DOWN
        LD (MSHIFTY+#01),A
MBUTT   CALL MBUTTON
        LD A,D
.e      LD (MDIRECT),A
        RET


CHBUTT      ld a,(MB)
            ld c,a
            ld hl,#E2CB    ; [set 4,d]
            ld de,0
            or a
           jr z,1F
            ex de,hl
1           ld (MBUT1),hl
            ld (MBUT2),de
            ld hl,A_MBUT1
            ld de,A_MBUT2
            ld a,c
            or a
           jr z,1F
            ex de,hl
1           ld (ffire_g+1),hl
            ld (ccancel+1),de
           ret

MBUTTON LD A,(MOUSDR)
        AND A
        RET NZ
        ld hl, CANCEL
        ld  a,(flF2cancel)
        or a
       jr nz,1F
        ld a,(MBut2toFire2)
        or a
       jr z,1F
        ld hl,Fire2
1       ld (A_MBUT2),hl
        LD BC,#FADF
BUTDEF  IN A,(C)
        ld b,a
        RRA
        JR C,M04
MBUT1   SET #04,D              ; FIRE
        EX AF,AF'
        LD A,1
ffire_g ld hl,(A_MBUT1) ; FIRE     ; LD (FIRE),A
        or (hl)
        ld (hl),a
        EX AF,AF'
M04     RRA
        JR C,MO4_  ;MO4
MBUT2   DW 0           ; SET #05,D - CANCEL
        ex af,af'
        LD A,1
ccancel ld hl,(A_MBUT2)  ; CANCEL   ; LD (CANCEL),A
        or (hl)
        ld (hl),a
        ex af,af'
MO4_    scf      ; scf / rra  меняем на rra если есть 3-я кнопка мыши
       jr c,MO4
        ld a,3
        ld hl,CANCEL
        or (hl)
        ld (hl),a
MO4    NOP    ; RET/NOP  меняем на nop если есть скроллер.
        ld a,b               ; обслуживание скроллера D не трогаем
        and #F0
        rrca
        rrca
        rrca
        rrca
        ld c,0
.lMwheel EQU $-1
        ld (.lMwheel),a
        sub c
       ret z    ; если колесико не крутилось
        ld de,#0F*256+(15-6)
        ld hl,MWHEEL
       jr c,.Up       ; предположительно вверх
        cp e
       jr nc,.up_
.ad_    add a,(hl)
.ot_    ld (hl),a
       ret

.Up     neg
        cp e
       jr nc,.dn_
1       neg     ; up
       jr .ad_

.up_    neg
        and d
       jr 1B

.dn_    neg
        and d
       jr .ad_

A_MBUT1 DW FIRE
A_MBUT2 DW CANCEL   ; fire2

; MSHIFTX DW #0000; СМЕЩЕНИЕ (LEFT,RIGHT)
; MSHIFTY DW #0000; СМЕЩЕНИЕ (UP,DOWN)

;Тут к координатам стрелки добавляются
;координаты крысы
MCOORD  LD A,(ARWXMX)
        LD C,A
        LD A,(ARWYMX)
        LD B,A
        LD HL,(MSHIFTX)
        LD A,(ARW_X)
        SUB L
        JR NC,$+#03
        XOR A
        ADC A,H
        JR C,$+#05
        CP C
        JR C,$+#03
        LD A,C
        LD (ARW_X),A
MSHIFTY EQU $+1 : ld hl,#0000  ;  LD HL,(MSHIFTY) ; СМЕЩЕНИЕ (UP,DOWN)
        LD A,(ARW_Y)
        SUB L
        JR NC,$+#03
        XOR A
        ADC A,H
        JR C,$+#05
        CP B
        JR C,$+#03
        LD A,B
        LD (ARW_Y),A
           ld hl,(DarwX)     ; работа с длинными координатами X  /DA
MSHIFTX EQU $+1 : ld de,#0000   ; ld de,(MSHIFTX) ; СМЕЩЕНИЕ (LEFT,RIGHT)
           ld c,e
           xor a
           ld b,a
           sbc hl,bc
          jr nc,1F
           ld h,a
           ld l,a   ; hl=0
1          ld c,d
           add hl,bc
MCOORD.check  ld a,h
              or a
          jr z,3F
           ld a,(DarwXM)
           cp #FF          ; #FF - типа использовать до 255
          jr nz,1F
           ld h,a
           inc h
          jr 2F   ; hl=#00FF
1          cp l
          jr nc,3F
2          ld l,a
3          ld (DarwX),hl
         RET

TEST_gui
        LD A,(MICE)
        AND A
        JR Z,NOMO
YESMO   CALL CHBUTT
        XOR A
test    LD (MOUSDR),A
        RET

NOMO
         call zeroMBTF
        JR test

