Subversion Repositories NedoOS

Rev

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

  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,C
  66. MOUSEx=$+1
  67.         LD HL,maxXwin/2
  68. MOUSEy=$+1
  69.         LD B,waterYwin+4
  70. ARVEL=$+1
  71.         LD DE,0
  72. KEY=$+1
  73.         CP 0
  74.         LD (KEY),A
  75.         call nz,resetnokeytimer
  76.     ;корректируем скорости
  77.         RRA
  78.         RRA
  79.         CPL
  80.         JR NZ,MANTORM
  81.         AND 15
  82.         JR NZ,MANNOT
  83. MANTORM LD A,128
  84.         CP D
  85.         JR NC,$+3
  86.         INC D
  87.         SRA D
  88.         CP E
  89.         JR NC,$+3
  90.         INC E
  91.         SRA E
  92. MANNOT  RRA
  93.         JR C,$+3
  94.         INC D
  95.         RRA
  96.         JR C,$+3
  97.         DEC D
  98.         RRA
  99.         JR C,$+3
  100.         DEC E
  101.         RRA
  102.         JR C,$+3
  103.         INC E
  104.     ;корректируем X
  105.         LD A,0xfb
  106. mouseXportreadpatch=$
  107.         IN A,(#DF)
  108. OLDXmouse=$+1
  109.         LD C,0
  110.         LD (OLDXmouse),A
  111.         SUB C
  112.         call nz,resetnokeytimer
  113.         ADD A,E
  114.         LD E,A
  115.         JP Z,MXQQ
  116.         JP P,MXP
  117. ;dx<0
  118.       ; SRA A
  119.        PUSH BC
  120.        LD C,A
  121.        LD B,-1
  122.        ADD HL,BC
  123.        POP BC
  124.        ;ADD A,L
  125.         jr C,MXQ
  126.        CALL MXZRO
  127.        LD HL,0
  128.        ;CALL NC,MXZRO
  129.         JR MXQ
  130. MXP   ; DEC A
  131.       ; SRL A
  132.        ;SUB -8
  133.        PUSH BC
  134.        LD C,A
  135.        LD B,0
  136.        ADD HL,BC
  137.        LD BC,maxXwin
  138.        SBC HL,BC
  139.        ADD HL,BC
  140.        POP BC
  141.        jr C,MXQ ;x<maxXwin
  142.        CALL MXZRO
  143.        LD HL,maxXwin
  144.        ;ADD A,L
  145.        ;CALL C,MXZRO
  146.        ;SUB 8
  147. MXQ    ;LD L,A
  148. MXQQ
  149.     ;корректируем Y
  150.         LD A,0xff
  151. mouseYportreadpatch=$
  152.         IN A,(#DF)
  153. OLDYmouse=$+1
  154.         LD C,0
  155.         LD (OLDYmouse),A
  156.         SUB C
  157.         call nz,resetnokeytimer
  158.         SUB D
  159.         JR Z,MYQQ
  160.         CPL
  161.         JP M,MYP
  162.       ; SRA A
  163.         ADD A,B
  164.         JR C,MYQ
  165.         XOR A
  166.         LD D,A
  167.         JR MYQ
  168. MYP   ; INC A
  169.       ; SRA A
  170.         ADD A,B
  171.         CP maxYwin;/2;64
  172.         JR C,MYQ
  173.         XOR A
  174.         LD D,A
  175.         LD A,maxYwin;/2;64
  176. MYQ     LD B,A
  177. MYQQ    LD A,B
  178.         LD (MOUSEy),A
  179.         LD (MOUSEx),HL
  180.         LD (ARVEL),DE
  181.        ex af,af' ;'
  182.        ld (nokeytimer),a ;счётчик фреймов, где не использовалось управление
  183.         RET
  184.  
  185. resetnokeytimer
  186.        ex af,af' ;'
  187.         xor a ;счётчик фреймов, где не использовалось управление
  188.        ex af,af' ;'
  189.         ret
  190.  
  191. MXZRO
  192.         XOR A
  193.         SUB E
  194.         JP P,$+4
  195.         INC A
  196.         SRA A
  197.         LD E,A
  198.        ;XOR A
  199.         RET
  200.  
  201. INKEY
  202.         LD A,239
  203.         IN A,(-2)
  204.         RRCA
  205.         RLA
  206.         RLA
  207.         OR #C2
  208.         LD C,A
  209.         LD A,#DF
  210.         IN A,(-2)
  211.         RRA
  212.         JR C,$+4
  213.         RES 4,C
  214.         RRA
  215.         JR C,$+4
  216.         RES 5,C
  217.         LD A,-5
  218.         IN A,(-2)
  219.         RRA
  220.         JR C,$+4
  221.         RES 2,C
  222.         LD A,-3
  223.         IN A,(-2)
  224.         RRA
  225.         JR C,$+4
  226.         RES 3,C
  227.         LD A,-2
  228.         IN A,(-2)
  229.         RRA
  230.         JR C,$+4
  231.         RES 0,C
  232.         LD A,#7F
  233.         IN A,(-2)
  234.         CPL
  235.         AND 31
  236.         RET Z
  237.         RES 1,C
  238.         RET
  239.