?login_element?

Subversion Repositories NedoOS

Rev

Blame | Last modification | View Log | Download

  1. control
  2.         ld hl,(arrx)
  3.         ld (oldarrx),hl
  4.         ld a,(arry)
  5.         ld (oldarry),a
  6. mousebuttons=$+1
  7.         ld a,0
  8.         ld (oldmousebuttons),a
  9.  
  10.         GET_KEY ;OS_GETKEYNOLANG
  11.         ld a,nofocuskey
  12.         ld (key),a
  13.          jr nz,control_nofocus
  14.         ld a,c ;keynolang
  15.         ld (key),a
  16. control_imer_oldmousecoords=$+1
  17.         ld bc,0
  18.         ld (control_imer_oldmousecoords),de
  19.         ld a,b
  20.         sub d
  21.         ld d,a
  22.         ld a,e
  23.         sub c
  24.         ld e,a
  25. control_nofocus
  26.         ld (control_imer_mousecoordsdelta),de
  27.         ld a,l ;hl=(sysmousebuttons)
  28.         push af ;ld (control_imer_buttons),a
  29.  
  30.         OS_GETKEYMATRIX ;out: bcdehlix = полуряды cs...space
  31.         ;ld a,b ;
  32.         ;ld (cur_cs_halfrow),a
  33.        
  34.         ;ld a,0xef
  35.         ;in a,(0xfe)
  36.          ld a,h;l
  37.         rrca
  38.         rla
  39.         rla
  40.         rrca
  41.         rla
  42.         rla
  43.         or 0x86;%10000110
  44.  
  45.         ;ld a,0xfd
  46.         ;in a,(0xfe)
  47.          bit 0,c;d ;A
  48.         ld c,a
  49.         jr nz,$+4
  50.         res 4,c ;down
  51.  
  52. ;c=%1lrdu11L
  53.         ;ld a,0xdf
  54.         ;in a,(0xfe)
  55.          ld a,l;hx
  56.         rra ;P
  57.         jr c,$+4
  58.         res 5,c ;right
  59.         rra ;O
  60.         jr c,$+4
  61.         res 6,c ;left
  62.  
  63.         ;ld a,0xfb
  64.         ;in a,(0xfe)
  65.          ld a,d;e
  66.         rra ;Q
  67.         jr c,$+4
  68.         res 3,c ;up
  69.        
  70.         ;ld a,0x7f
  71.         ;in a,(0xfe)
  72.          ld a,lx;b
  73.         rra ;Space
  74.         jr c,control_nospace
  75.         res 0,c ;Space = LMB
  76.         rra ;SS
  77.         jr c,$+4
  78.         res 2,c ;SS+Space = MMB
  79.         rla ;SS
  80. control_nospace
  81.         rra ;SS
  82.         rra ;M
  83.         jr c,$+4
  84.         res 1,c ;M = RMB
  85.        
  86. ;control_imer_buttons=$+1
  87.         ;ld a,0
  88.         pop af ;mouse buttons
  89.         or 0xf8;%11111000
  90.         and c
  91. ;a=%1lrduMRL
  92.         ld (mousebuttons),a
  93.  
  94. control_curspeed=$+1
  95.         ld de,0
  96. control_curspeedtime=$+1
  97.         ld c,0
  98.        
  99.         call isfirechanged
  100.         ;and 7;%00000111 ;кнопки огня
  101.         ld a,(mousebuttons)
  102.         cpl
  103.         rra
  104.         rra
  105.         rra
  106.         jr nz,control_slower ;клик или анклик тормозит стрелку
  107.         and 0x0f;%00001111 ;кнопки движения
  108.         jr nz,control_noslower ;движемся, не тормозим
  109.         ld d,a ;0
  110.         ld e,a ;0
  111.         ld c,a ;0 ;speedtime
  112. control_slower
  113.         push af
  114.         ld a,128
  115.         cp d
  116.         jr nc,$+3
  117.         inc d
  118.         sra d ;dy
  119.         cp e
  120.         jr nc,$+3
  121.         inc e
  122.         sra e ;dx
  123.         pop af
  124. control_noslower
  125.         rra
  126.         jr nc,$+3
  127.         dec d ;dy
  128.         rra
  129.         jr nc,$+3
  130.         inc d ;dy
  131.         rra
  132.         jr nc,$+3
  133.         inc e ;dx
  134.         rra
  135.         jr nc,$+3
  136.         dec e ;dx
  137.        
  138.         ld (control_curspeed),de
  139.         ld a,d
  140.         call div4signedup
  141.         ld d,a
  142.         ld a,e
  143.         call div4signedup
  144.         ld e,a
  145.  
  146.         or d
  147.         jr z,$+3 ;скорость равна нулю, сбрасываем speedtime
  148.          ld a,c ;speedtime
  149.         inc a
  150.         jr nz,$+3
  151.         dec a
  152.         ld (control_curspeedtime),a
  153. ;1=скорость равна нулю
  154. ;2=только что нажали клавишу движения
  155.         dec a
  156.         jr z,control_keymoveq
  157.         cp 3 ;игнорируем третий фрейм удержания клавиши для точного позиционирования одиночным нажатием клавиши
  158.         jr nz,control_keymoveok
  159. control_keymoveq
  160. control_imer_mousecoordsdelta=$+1
  161.         ld de,0
  162. ;e=dx
  163. ;d=dy        
  164. control_keymoveok
  165.          ld a,d ;dy
  166.          or a
  167. arry=$+1
  168.         ld l,100
  169.         jp p,control_yadd
  170.         add a,l
  171.         jr c,control_yaddq
  172.         xor a ;min
  173.         jr control_yaddq
  174. control_yadd
  175.         add a,256-scrhgt
  176.         add a,l
  177.         jr nc,$+3
  178.         sbc a,a ;max
  179.         sub 256-scrhgt
  180. control_yaddq        
  181.         ld (arry),a
  182. ;e=dx
  183.        
  184.         ld a,e
  185.         rla
  186.         sbc a,a
  187.         ld d,a ;de=dx
  188. arrx=$+1
  189.         ld hl,160
  190.         add hl,de
  191.         ld de,scrwidpix
  192.         xor a
  193.         sbc hl,de
  194.         add hl,de
  195.         jr c,control_xaddq
  196.         ;bit 7,h
  197.         ld h,a
  198.         ld l,a
  199.         ;jr nz,control_xaddq
  200.         jp m,control_xaddq
  201.         ld hl,scrwidpix-1
  202. control_xaddq
  203.         ld (arrx),hl
  204.  
  205.         call isfirechanged
  206.         ret nz
  207.         ld a,(arry)
  208. oldarry=$+1
  209.         cp 0
  210.         ret nz
  211. oldarrx=$+1
  212.         ld de,0
  213.         ;or a
  214.         sbc hl,de
  215.         ret nz
  216.         ld a,(key)
  217.         cp NOKEY
  218.         ret
  219. ;nz=что-то изменилось
  220.  
  221. isfirechanged
  222.         ld a,(mousebuttons)
  223. oldmousebuttons=$+1
  224.         xor 0
  225.         ret
  226. ;a=старые кнопки XOR новые
  227. ;nz=что-то изменилось
  228.  
  229. ;keymatrix
  230.         ;ds 8
  231. ;cur_cs_halfrow
  232. ;        db 0
  233.  
  234. ;oldtimer
  235. ;        dw 0
  236.  
  237.         if 1==0
  238. waitsomething
  239. mainloop_nothing
  240. ;в это время стрелка видна
  241.         YIELD ;halt
  242.         call control
  243.         jr z,mainloop_nothing
  244.         ret
  245.         endif