?login_element?

Subversion Repositories NedoOS

Rev

Rev 1499 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. INIMOUS
  2. ;TODO для ATM читать начальные координаты мыши
  3.        if !ATM
  4. ;при проверке наличия мыши требует память 0xb8b9..0xbb00
  5.         EI
  6.         HALT
  7.         LD HL,#BA00
  8.         PUSH HL
  9.         POP DE
  10.         INC E
  11.         LD B,E
  12.         ld C,L
  13.         LD (HL),#B9
  14.         LD A,H
  15.         LDIR
  16.         DEC (HL)
  17.         LD HL,#C9AF
  18.         LD (#B9B8),HL
  19.         LD (#B8B9),HL
  20.         LD I,A
  21.         IM 2
  22.         EI
  23.         HALT ;test databus == 0xff
  24.         IM 1
  25.         LD A,#80
  26.         OUT (127),A
  27.         JR NZ,NOMOUSE ;databus != 0xff
  28.        LD A,-1
  29.         LD BC,0xfadf
  30.         IN C,(C)
  31.         LD A,0xfb
  32.         IN A,(#DF)
  33.         LD B,A
  34.         LD (OLDXmouse),A
  35.         LD A,0xff
  36.         IN A,(#DF)
  37.         LD (OLDYmouse),A
  38.         CP B
  39.         RET NZ
  40.         CP C
  41.         RET NZ
  42. ;all 3 mouse ports equal => no mouse
  43. NOMOUSE
  44.         ld hl,0x003e
  45.         ld (mouseXportreadpatch),hl
  46.         ld (mouseYportreadpatch),hl
  47.         ;LD A,62
  48.         ;LD (OLDX-2),A
  49.         ;LD (OLDY-2),A
  50.         ;XOR A
  51.         ;LD (OLDX-1),A
  52.         ;LD (OLDY-1),A
  53.        endif
  54.         RET
  55.  
  56. ;onint
  57. MOUSE
  58. nokeytimer=$+1
  59.         ld a,-1 ;счётчик фреймов, где не использовалось управление
  60.         inc a
  61.         jr nz,$+3
  62.         dec a
  63.         ex af,af' ;'
  64.         CALL INKEY
  65.        ld a,b
  66.        ld (cursorkeys),a
  67.         LD A,C
  68. MOUSEx=$+1
  69.         LD HL,maxXwin/2
  70. MOUSEy=$+1
  71.         LD B,waterYwin+4
  72. ARVEL=$+1
  73.         LD DE,0
  74. KEY=$+1
  75.         CP 0
  76.         LD (KEY),A
  77.         call nz,resetnokeytimer
  78.     ;корректируем скорости
  79.         RRA
  80.         RRA
  81.         CPL
  82.         JR NZ,MANTORM
  83.         AND 15
  84.         JR NZ,MANNOT
  85. MANTORM LD A,128
  86.         CP D
  87.         JR NC,$+3
  88.         INC D
  89.         SRA D
  90.         CP E
  91.         JR NC,$+3
  92.         INC E
  93.         SRA E
  94. MANNOT  RRA
  95.         JR C,$+3
  96.         INC D
  97.         RRA
  98.         JR C,$+3
  99.         DEC D
  100.         RRA
  101.         JR C,$+3
  102.         DEC E
  103.         RRA
  104.         JR C,$+3
  105.         INC E
  106.     ;корректируем X
  107.         LD A,0xfb
  108. mouseXportreadpatch=$
  109.         IN A,(#DF)
  110. OLDXmouse=$+1
  111.         LD C,0
  112.         LD (OLDXmouse),A
  113.         SUB C
  114.         call nz,resetnokeytimer
  115.         ADD A,E
  116.         LD E,A
  117.         JP Z,MXQQ
  118.         JP P,MXP
  119. ;dx<0
  120.       ; SRA A
  121.        PUSH BC
  122.        LD C,A
  123.        LD B,-1
  124.        ADD HL,BC
  125.        POP BC
  126.        ;ADD A,L
  127.         jr C,MXQ
  128.        CALL MXZRO
  129.        LD HL,0
  130.        ;CALL NC,MXZRO
  131.         JR MXQ
  132. MXP   ; DEC A
  133.       ; SRL A
  134.        ;SUB -8
  135.        PUSH BC
  136.        LD C,A
  137.        LD B,0
  138.        ADD HL,BC
  139.        LD BC,maxXwin
  140.        SBC HL,BC
  141.        ADD HL,BC
  142.        POP BC
  143.        jr C,MXQ ;x<maxXwin
  144.        CALL MXZRO
  145.        LD HL,maxXwin
  146.        ;ADD A,L
  147.        ;CALL C,MXZRO
  148.        ;SUB 8
  149. MXQ    ;LD L,A
  150. MXQQ
  151.     ;корректируем Y
  152.         LD A,0xff
  153. mouseYportreadpatch=$
  154.         IN A,(#DF)
  155. OLDYmouse=$+1
  156.         LD C,0
  157.         LD (OLDYmouse),A
  158.         SUB C
  159.         call nz,resetnokeytimer
  160.         SUB D
  161.         JR Z,MYQQ
  162.         CPL
  163.         JP M,MYP
  164.       ; SRA A
  165.         ADD A,B
  166.         JR C,MYQ
  167.         XOR A
  168.         LD D,A
  169.         JR MYQ
  170. MYP   ; INC A
  171.       ; SRA A
  172.         ADD A,B
  173.         CP maxYwin;/2;64
  174.         JR C,MYQ
  175.         XOR A
  176.         LD D,A
  177.         LD A,maxYwin;/2;64
  178. MYQ     LD B,A
  179. MYQQ    LD A,B
  180.         LD (MOUSEy),A
  181.         LD (MOUSEx),HL
  182.         LD (ARVEL),DE
  183.        ex af,af' ;'
  184.        ld (nokeytimer),a ;счётчик фреймов, где не использовалось управление
  185.         RET
  186.  
  187. resetnokeytimer
  188.        ex af,af' ;'
  189.         xor a ;счётчик фреймов, где не использовалось управление
  190.        ex af,af' ;'
  191.         ret
  192.  
  193. MXZRO
  194.         XOR A
  195.         SUB E
  196.         JP P,$+4
  197.         INC A
  198.         SRA A
  199.         LD E,A
  200.        ;XOR A
  201.         RET
  202.  
  203. INKEY
  204.         ld bc,0xffff
  205.         LD A,0xbf
  206.         IN A,(-2)
  207.         RRA
  208.         JR C,$+4
  209.         RES 1,b ;enter
  210.         LD A,0x7f
  211.         IN A,(-2)
  212.         CPL
  213.         AND 31
  214.         jr z,$+4
  215.         RES 0,b ;space
  216.         ld a,0xdf
  217.         IN A,(-2)
  218.         RRA
  219.         JR C,$+4
  220.         RES 4,C ;P
  221.         RRA
  222.         JR C,$+4
  223.         RES 5,C ;O
  224.         LD A,-5
  225.         IN A,(-2)
  226.         RRA
  227.         JR C,$+4
  228.         RES 2,C
  229.         LD A,-3
  230.         IN A,(-2)
  231.         RRA
  232.         JR C,$+4
  233.         RES 3,C
  234.         ld a,0xfe
  235.         in a,(0xfe)
  236.         rra
  237.         jr nc,INKEY_cursor
  238.         ld a,0xef
  239.         IN A,(0xfe)
  240.         RRCA
  241.         RLA
  242.         RLA
  243.         OR #C3
  244.         and c
  245.         LD C,A ;11LRDU11
  246.         ret
  247. INKEY_cursor
  248.         ld a,0xf7
  249.         in a,(0xfe)
  250.         bit 4,a ;5=L
  251.         jr nz,$+4
  252.         res 5,b
  253.         ld a,0xef
  254.         IN A,(0xfe) ;DUR??
  255.         bit 2,a
  256.         jr nz,$+4
  257.         res 4,b
  258.         rra
  259.         or 0xf3
  260.         and b
  261.         ld b,a ;11LRDUef cursor
  262.         ret
  263.