Login

Subversion Repositories NedoOS

Rev

Rev 1542 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

INIMOUS
;TODO ╨┤╨╗╤П ATM ╤З╨╕╤В╨░╤В╤М ╨╜╨░╤З╨░╨╗╤М╨╜╤Л╨╡ ╨║╨╛╨╛╤А╨┤╨╕╨╜╨░╤В╤Л ╨╝╤Л╤И╨╕
       if !ATM
;╨┐╤А╨╕ ╨┐╤А╨╛╨▓╨╡╤А╨║╨╡ ╨╜╨░╨╗╨╕╤З╨╕╤П ╨╝╤Л╤И╨╕ ╤В╤А╨╡╨▒╤Г╨╡╤В ╨┐╨░╨╝╤П╤В╤М 0xb8b9..0xbb00
        EI
        HALT
        LD HL,#BA00
        PUSH HL
        POP DE
        INC E
        LD B,E
        ld C,L
        LD (HL),#B9
        LD A,H
        LDIR
        DEC (HL)
        LD HL,#C9AF
        LD (#B9B8),HL
        LD (#B8B9),HL
        LD I,A
        IM 2
        EI
        HALT ;test databus == 0xff
        IM 1
        LD A,#80
        OUT (127),A
        JR NZ,NOMOUSE ;databus != 0xff
       LD A,-1
        LD BC,0xfadf
        IN C,(C)
        LD A,0xfb
        IN A,(#DF)
        LD B,A
        LD (OLDXmouse),A
        LD A,0xff
        IN A,(#DF)
        LD (OLDYmouse),A
        CP B
        RET NZ
        CP C
        RET NZ
;all 3 mouse ports equal => no mouse
NOMOUSE
        ld hl,0x003e
        ld (mouseXportreadpatch),hl
        ld (mouseYportreadpatch),hl
        ;LD A,62
        ;LD (OLDX-2),A
        ;LD (OLDY-2),A
        ;XOR A
        ;LD (OLDX-1),A
        ;LD (OLDY-1),A
       endif
        RET

;onint
MOUSE
nokeytimer=$+1
        ld a,0;-1 ;╤Б╤З╤С╤В╤З╨╕╨║ ╤Д╤А╨╡╨╣╨╝╨╛╨▓, ╨│╨┤╨╡ ╨╜╨╡ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╗╨╛╤Б╤М ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╨╡
        inc a
        jr nz,$+3
        dec a
        ex af,af' ;'
        CALL INKEY
       ld a,b
       ld (cursorkeys),a
        LD A,C
MOUSEx=$+1
        LD HL,maxXwin/2
MOUSEy=$+1
        LD B,waterYwin+4
ARVEL=$+1
        LD DE,0
KEY=$+1
        CP 0
        LD (KEY),A
        call nz,resetnokeytimer
    ;╨║╨╛╤А╤А╨╡╨║╤В╨╕╤А╤Г╨╡╨╝ ╤Б╨║╨╛╤А╨╛╤Б╤В╨╕
        RRA
        RRA
        CPL
        ;JR NZ,MANTORM
        AND 15
        JR NZ,MANnTORMOZ
        LD A,128 ;(a&15) == 0
        CP D
        JR NC,$+3
        INC D
        SRA D
        call nz,resetnokeytimer
        CP E
        JR NC,$+3
        INC E
        SRA E
        call nz,resetnokeytimer
MANnTORMOZ
        RRA
        JR nc,$+3
        dec D
        RRA
        JR nc,$+3
        inc D
        RRA
        JR nc,$+3
        inc E
        RRA
        JR nc,$+3
        dec E
    ;╨║╨╛╤А╤А╨╡╨║╤В╨╕╤А╤Г╨╡╨╝ X
        LD A,0xfb
mouseXportreadpatch=$
        IN A,(#DF)
OLDXmouse=$+1
        LD C,0
        LD (OLDXmouse),A
        SUB C
        call nz,resetnokeytimer
        ADD A,E
        LD E,A
        JP Z,MXQQ
        JP P,MXP
;dx<0
      ; SRA A
       PUSH BC
       LD C,A
       LD B,-1
       ADD HL,BC
       POP BC
       ;ADD A,L
        jr C,MXQ
       CALL MXZRO
       LD HL,0
       ;CALL NC,MXZRO
        JR MXQ
MXP   ; DEC A
      ; SRL A
       ;SUB -8
       PUSH BC
       LD C,A
       LD B,0
       ADD HL,BC
       LD BC,maxXwin
       SBC HL,BC
       ADD HL,BC
       POP BC
       jr C,MXQ ;x<maxXwin
       CALL MXZRO
       LD HL,maxXwin
       ;ADD A,L
       ;CALL C,MXZRO
       ;SUB 8
MXQ    ;LD L,A
MXQQ
    ;╨║╨╛╤А╤А╨╡╨║╤В╨╕╤А╤Г╨╡╨╝ Y
        LD A,0xff
mouseYportreadpatch=$
        IN A,(#DF)
OLDYmouse=$+1
        LD C,0
        LD (OLDYmouse),A
        SUB C
        call nz,resetnokeytimer
        SUB D
        JR Z,MYQQ
        CPL
        JP M,MYP
      ; SRA A
        ADD A,B
        JR C,MYQ
        XOR A
        LD D,A
        JR MYQ
MYP   ; INC A
      ; SRA A
        ADD A,B
        CP maxYwin;/2;64
        JR C,MYQ
        XOR A
        LD D,A
        LD A,maxYwin;/2;64
MYQ     LD B,A
MYQQ    LD A,B
        LD (MOUSEy),A
        LD (ARVEL),DE

       ex af,af' ;' ;a=╤Б╤З╤С╤В╤З╨╕╨║ ╤Д╤А╨╡╨╣╨╝╨╛╨▓, ╨│╨┤╨╡ ╨╜╨╡ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╗╨╛╤Б╤М ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╨╡
       ld (nokeytimer),a ;╤Б╤З╤С╤В╤З╨╕╨║ ╤Д╤А╨╡╨╣╨╝╨╛╨▓, ╨│╨┤╨╡ ╨╜╨╡ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╗╨╛╤Б╤М ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╨╡

       if STICKMOUSEXTOGRID
;TODO ╨╛╤В╨║╨╗╤О╤З╨░╤В╤М ╨▓╨╛ ╨▓╤А╨╡╨╝╤П ╨┐╨╛╨╗╤С╤В╨░ ╤Б╨╜╨░╤А╤П╨┤╨░, ╨╜╨╡ ╨┐╨╛╨╗╤Г╤З╨╕╤В╤Б╤П ╤З╨╡╤А╨╡╨╖ ╨╝╨░╨╜╨╕╨┐╤Г╨╗╤П╤Ж╨╕╤О nokeytimer
        or a
        jr z,Mouse_stickskip ;╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╨╡ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╗╨╛╤Б╤М
        ld a,l
        and 7
        jr z,Mouse_stickskip;Mouse_stickdomoveq ;╤Г╨╢╨╡ ╨┐╤А╨╕╨╗╨╕╨┐╨╗╨╕ ╨║ ╤Б╨╡╤В╨║╨╡
mouse_oldmdx=$+1
        ld a,0 ;╨┐╨╛╤Б╨╗╨╡╨┤╨╜╨╕╨╣ -dx, ╨╜╨╡ ╤А╨░╨▓╨╜╤Л╨╣ 0
        rla
        inc hl
        jr c,Mouse_stickdomoveq ;old dx>=0
        dec hl
        dec hl
Mouse_stickskip ;╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╨╡ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╗╨╛╤Б╤М
        ld a,(MOUSEx)
        sub l
        jr z,Mouse_stickdomoveq
        ld (mouse_oldmdx),a
Mouse_stickdomoveq
       endif

        LD (MOUSEx),HL
        RET

resetnokeytimer
       ex af,af' ;'
        xor a ;╤Б╤З╤С╤В╤З╨╕╨║ ╤Д╤А╨╡╨╣╨╝╨╛╨▓, ╨│╨┤╨╡ ╨╜╨╡ ╨╕╤Б╨┐╨╛╨╗╤М╨╖╨╛╨▓╨░╨╗╨╛╤Б╤М ╤Г╨┐╤А╨░╨▓╨╗╨╡╨╜╨╕╨╡
       ex af,af' ;'
        ret

MXZRO
        XOR A
        SUB E
        JP P,$+4
        INC A
        SRA A
        LD E,A
       ;XOR A
        RET

INKEY
        ld bc,0xffff
        LD A,0xbf
        IN A,(-2)
        RRA
        JR C,$+4
        RES 1,b ;enter
        LD A,0x7f
        IN A,(-2)
        CPL
        AND 31
        jr z,$+4
        RES 0,b ;space
        ld a,0xdf
        IN A,(-2)
        RRA
        JR C,$+4
        RES 4,C ;P
        RRA
        JR C,$+4
        RES 5,C ;O
        LD A,-5
        IN A,(-2)
        RRA
        JR C,$+4
        RES 2,C
        LD A,-3
        IN A,(-2)
        RRA
        JR C,$+4
        RES 3,C
        ld a,0xfe
        in a,(0xfe)
        rra
        jr nc,INKEY_cursor
        ld a,0xef
        IN A,(0xfe)
        RRCA
        RLA
        RLA
        OR #C3
        and c
        LD C,A ;11LRDU11
        ret
INKEY_cursor
        ld a,0xf7
        in a,(0xfe)
        bit 4,a ;5=L
        jr nz,$+4
        res 5,b
        ld a,0xef
        IN A,(0xfe) ;DUR??
        bit 2,a
        jr nz,$+4
        res 4,b
        rra
        or 0xf3
        and b
        ld b,a ;11LRDUef cursor
        ret