?login_element?

Subversion Repositories NedoOS

Rev

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