 ZX.SPECTRUM (2:5090/31.7)  ZX.SPECTRUM 
 Msg  : 998 of 1014 -832                                                        
 From : Konstantin Samoylov                 2:5050/33.2     25 Aug 98  13:33:20 
 To   : Pavel Scherbinin                                    26 Aug 98  20:58:40 
 Subj : driver kmpstn-mouse                                                     

.Location: : , yp
.Real: Name:  ⠭⨭
p Pavel!

23  98 10:29, Pavel Scherbinin -> All:

 PS>    y ?

, p... pp p  p,   p묨 pﬨ - 
py ᮪p饭   y祭 p⢨(ᮢᥬ y-y).


;MOUSE DRIVER WITH FIRE BUTTON AUTOCONFIG
;(C) Andrey Rachkin'95

        JR      MDRV
DIRECTZ NOP             ;FIRE
        NOP             ;UP
        NOP             ;DOWN
        NOP             ;RIGHT
        NOP             ;LEFT
        NOP             ;CANCEL

MCOORD  DEFW    0       ;LAST CURSOR COORDS
                        ;IN PIXELZ
MPORTS  DEFW    0       ;LAST READED MAUSY COORDS

NONDEF  AND     3       ;HERE COMEZ BUTTONZ
                        ;CONTROL IF FIRE BUTTON
                            ;NOT DEFINED
        JR      Z,MDRV4     ;IF NONE BUTTON
                            ;PUSHED
        DEC     A
        JR      Z,NONDEF_
        XOR     A
        LD      (MDRV3+2),A
        LD      A,5
        LD      (MDRV2+2),A
NONDEF_ LD      HL,0
        LD      (MDRV1),HL

; ***** MAIN PROC OF MOUSEDRIVER *****
MDRV
        LD      HL,DIRECTZ
        PUSH    HL
        POP     IX
        XOR     A
        LD      (HL),A  ;CLEARING
        INC     HL      ;OF
        LD      (HL),A  ;DIRECTZ
        INC     HL      ;BUFER
        LD      (HL),A
        INC     HL
        LD      (HL),A
        INC     HL
        LD      (HL),A
        INC     HL
        LD      (HL),A
        INC     HL
        LD      BC,#FADF    ;BUTTONZ CONTROL
        IN      A,(C)       ;READING FROM PORT
                            ;OF BUTTONS
        CPL
MDRV1   JR      NONDEF      ;JR UNTIL FIRE
                            ;BUTTON NOT DEFINED
        RRA
MDRV2   RL      (IX+0)      ;FIRE
        RRA
MDRV3   RL      (IX+5)      ;CANCEL

; ***** COORDS CONTROL *****

MDRV4   LD      HL,(MCOORD) ;FROM LAST
                            ;CURSOR COORDS
        LD      DE,(MPORTS) ;FROM LAST
                            ;READED MOUSE
                            ;COORDS
        LD      BC,#FBDF
        IN      A,(C)       ;READING FROM
                            ;PORT X-COORDS (0-#FF)
        LD      (MPORTS),A
        SUB     E
        JR      Z,MDRV9
        JP      P,MDRV6
        LD      (IX+4),1    ;MOVE LEFT
        ADD     A,L
        JR      C,MDRV5
        XOR     A           ;MIN X-COORD
MDRV5   LD      L,A
        JR      MDRV9
MDRV6   ADD     A,L
        LD      (IX+3),1    ;MOVE RIGHT
        JR      C,MDRV7
        CP      #FE         ;MAX X-COORD
        JR      C,MDRV8
MDRV7   LD      A,#FE       ;MAX X-COORD
MDRV8   LD      L,A
MDRV9   LD      B,#FF
        IN      A,(C)       ;READING FROM
                            ;PORT Y-COORD (0-#FF)
        LD      (MPORTS+1),A
        SUB     D
        JR      Z,MDRV14
        NEG
        JP      P,MDRV11
        LD      (IX+1),1    ;MOVE UP
        ADD     A,H
        JR      C,MDRV10
        XOR     A           ;MIN Y-COORD
MDRV10  LD      H,A
        JR      MDRV14
MDRV11  ADD     A,H
        LD      (IX+2),1    ;MOVE DOWN
        JR      C,MDRV12
        CP      #BF         ;MAX Y-COORD
        JR      C,MDRV13
MDRV12  LD      A,#BF       ;MAX Y-COORD
MDRV13  LD      H,A
MDRV14  LD      (MCOORD),HL ;NEW CURSOR
                            ;POSITION
                            ;IN PIXELZ
        RET

                                                          y SP/PoS.
---
 * Origin:  (2:5050/33.2)

