Subversion Repositories NedoOS

Rev

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