Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. ;
  2. ; Работа с картинками или их образами
  3. ;
  4. ; Author:   Trans
  5. ; Date:     08.03.2005
  6. ; Compiler: FASM
  7. ; Target:   Hunter - MeOS game
  8. ;
  9.  
  10. ;
  11. ; In:  DS:ESI - указатель на образ картинки в RGB
  12. ;      EAX - X координата * 65536 + Y координата
  13. ;      //EBX - Z координата
  14. ; Out:
  15. draw_pict:
  16.         pusha
  17.         mov edx,eax
  18.         shr edx,16
  19.         xor edi,edi
  20.         mov di,ax
  21.         shl di,3        ; *8
  22.         shl ax,1        ; *2
  23.         add ax,di       ; = *10
  24.         shl ax,5        ; = *320
  25.         mov di,ax
  26.         shr eax,16
  27.         add di,ax       ; di=Y*320+X
  28.         mov eax,edi
  29.         shl eax,1       ; = *2
  30.         add edi,eax     ; = (Y*320+X)*3
  31.         add edi,buffer00
  32.         lodsw
  33.         shl eax,16
  34.         lodsw
  35.         ror eax,16
  36.         xor ecx,ecx
  37.         mov cx,320
  38.         sub cx,dx
  39.         xor edx,edx
  40.         cmp cx,ax
  41.         jae dp_loc_00
  42.         sub ax,cx
  43.         mov dx,ax
  44.         shl ax,1
  45.         add dx,ax       ; invisible part for X
  46.         mov ax,cx
  47. dp_loc_00:
  48.         mov cx,ax
  49.         xor ebx,ebx
  50.         mov bx,320
  51.         sub bx,ax
  52.         mov ax,bx
  53.         shl ax,1
  54.         add bx,ax       ; additional offset for X
  55.         shr eax,16
  56.         xchg ecx,eax
  57. dp_loc_01:
  58.         push ecx
  59.         push eax
  60.         mov ecx,eax
  61. dp_loc_02:
  62.         mov eax,[esi]
  63.         and eax,00FFFFFFh
  64.         cmp eax,00FFFFFFh
  65.         jnz dp_loc_03_next
  66.         add esi,3
  67.         add edi,3
  68.         jmp dp_loc_04
  69. dp_loc_03_next:
  70.         movsb
  71.         movsw
  72. dp_loc_04:
  73.         loop dp_loc_02
  74.         add esi,edx
  75.         add edi,ebx
  76.         pop eax
  77.         pop ecx
  78.         loop dp_loc_01 
  79.         popa
  80.         retn
  81.  
  82. ;
  83. ; In:  DS:ESI - указатель на образ картинки в RGB
  84. ;      EAX - X координата * 65536 + Y координата
  85. ;      //EBX - Z координата
  86. ; Out:
  87. draw_pict_scale_div_2:
  88.         pusha
  89.         mov edi,buffer01
  90.         lodsd
  91.         xor ebx,ebx
  92.         xor ebp,ebp
  93.         mov bx,ax
  94.         mov bp,ax
  95.         shl ebp,1
  96.         add ebp,ebx
  97.         shr ax,1
  98.         stosw
  99.         mov bx,ax
  100.         shr eax,17
  101.         stosw
  102.         xor ecx,ecx
  103.         mov cx,ax
  104. dpsd2_loc_00:
  105.         push ecx
  106.         mov ecx,ebx
  107. dpsd2_loc_01:
  108.         push ecx
  109.         mov ecx,3
  110. dpsd2_loc_02:
  111.         xor eax,eax
  112.         mov edx,eax
  113.         mov al,[esi]
  114.         mov dl,[esi+3]
  115.         add eax,edx
  116.         mov dl,[esi+ebp]
  117.         add eax,edx
  118.         mov dl,[esi+ebp+3]
  119.         add eax,edx
  120.         shr eax,2
  121.         stosb
  122.         inc esi
  123.         loop dpsd2_loc_02
  124.         add esi,3
  125.         pop ecx
  126.         loop dpsd2_loc_01
  127.         add esi,ebp
  128.         pop ecx
  129.         loop dpsd2_loc_00
  130.         popa
  131.         pusha
  132.         mov esi,buffer01
  133.         call draw_pict
  134.         popa
  135.         retn
  136.  
  137.  
  138. ;
  139. ; In:
  140. ; Out:
  141. draw_backside:
  142.         pusha
  143.         mov edi,buffer00
  144.         mov ecx,50
  145.         mov eax,00FFFFFFh
  146. dbs_loc_00:
  147.         push ecx
  148.         mov ecx,320
  149. dbs_loc_01:
  150.         mov ebx,eax
  151.         stosw
  152.         shr eax,16
  153.         stosb
  154.         mov eax,ebx
  155.         stosw
  156.         shr eax,16
  157.         stosb
  158.         mov eax,ebx
  159.         loop dbs_loc_01
  160.         sub eax,00010100h
  161.         pop ecx
  162.         loop dbs_loc_00
  163.         mov ecx,100
  164.         mov eax,0000C000h
  165. dbs_loc_02:
  166.         push ecx
  167.         mov ecx,320
  168. dbs_loc_03:
  169.         mov ebx,eax
  170.         stosw
  171.         shr eax,16
  172.         stosb
  173.         mov eax,ebx
  174.         loop dbs_loc_03
  175.         add eax,00010001h
  176.         pop ecx
  177.         loop dbs_loc_02
  178.         popa
  179.         retn
  180.  
  181. ;
  182. ; In:
  183. ; Out:
  184. buffer_scale_on_2:
  185.         pusha
  186.         mov esi,buffer00
  187.         mov edi,buffer02
  188.         mov ecx,200
  189. bso2_loc_00:
  190.         push ecx
  191.         mov ecx,2
  192. bso2_loc_01:
  193.         push ecx
  194.         push esi
  195.         mov ecx,320
  196. bso2_loc_02:
  197.         mov eax,[esi]
  198.         and eax,00FFFFFFh
  199.         mov ebx,eax
  200.         stosw
  201.         shr eax,16
  202.         stosb
  203.         mov eax,ebx
  204.         stosw
  205.         shr eax,16
  206.         stosb
  207.         add esi,3
  208.         loop bso2_loc_02
  209.         pop esi
  210.         pop ecx
  211.         loop bso2_loc_01
  212.         add esi,320*3
  213.         pop ecx
  214.         loop bso2_loc_00
  215.         popa
  216.         retn
  217.  
  218.  
  219. ;
  220. ; In:  EAX = X coordinate * 65536 + Y coordinate
  221. ;      EBX = Number
  222. ; Out:
  223. number_print:
  224.         pusha
  225.         mov edi,buf_local
  226.         mov ebp,eax
  227.         mov eax,ebx
  228.         or eax,eax
  229.         jz np_loc_null
  230.         mov ebx,100
  231.         mov ecx,5
  232. np_loc_00:
  233.         xor edx,edx
  234.         div ebx
  235.         xchg eax,edx
  236.         aam
  237.         stosw
  238.         mov eax,edx
  239.         loop np_loc_00
  240.         dec edi
  241.         mov eax,ebp
  242.         mov ecx,10
  243. np_loc_01:
  244.         cmp byte [edi],0
  245.         jnz np_loc_02
  246.         dec edi
  247.         loop np_loc_01 
  248. np_loc_02:
  249.         xor ebx,ebx
  250.         mov bl,[edi]
  251.         shl ebx,2
  252.         add ebx,pointer_digit_table
  253.         mov esi,[ebx]
  254.         call draw_pict
  255.         add eax,10*65536+0
  256.         dec edi
  257.         loop np_loc_02
  258.         popa
  259.         retn
  260. np_loc_null:
  261.         mov eax,ebp
  262.         mov esi,[pointer_digit_table]
  263.         call draw_pict
  264.         popa
  265.         retn
  266. pointer_digit_table:
  267.         dd buf_num0, buf_num1, buf_num2, buf_num3, buf_num4
  268.         dd buf_num5, buf_num6, buf_num7, buf_num8, buf_num9
  269. buf_local:
  270.         times 12 db 0
  271.  
  272.  
  273. ;
  274. ; In:  EAX = X*65536+Y
  275. ; Out:
  276. draw_lives:
  277.         pusha
  278.         mov esi,buf_heart
  279.         xor ecx,ecx
  280.         mov cl,[lives_count]
  281.         cmp cl,0
  282.         jz dl_loc_01
  283. dl_loc_00:
  284.         call draw_pict
  285.         add eax,16*65536+0
  286.         loop dl_loc_00
  287. dl_loc_01:
  288.         popa
  289.         retn
  290.  
  291. ;
  292. ; In:
  293. ; Out:
  294. draw_mushka:
  295.         mov esi,buf_mushka
  296.         mov eax,[mouse_coord]
  297.         ror eax,16
  298.         cmp ax,16
  299.         jae dm_loc_00
  300.         mov ax,16
  301. dm_loc_00:
  302.         sub ax,16
  303.         rol eax,16
  304.         cmp ax,16
  305.         jae dm_loc_01
  306.         mov ax,16
  307. dm_loc_01:
  308.         sub ax,16
  309.         call draw_pict
  310.         retn
  311.  
  312. ;
  313. ; In:   eax - hole coordinate
  314. ; Out:
  315. draw_hole:
  316.         mov esi,buf_hole
  317. ;       mov eax,[current_hole]
  318.         cmp eax,0
  319.         jz dh_loc_02
  320.         ror eax,16
  321.         cmp ax,8
  322.         jae dh_loc_00
  323.         mov ax,8
  324. dh_loc_00:
  325.         sub ax,8
  326.         rol eax,16
  327.         cmp ax,8
  328.         jae dh_loc_01
  329.         mov ax,8
  330. dh_loc_01:
  331.         sub ax,8
  332.         call draw_pict_scale_div_2
  333. dh_loc_02:
  334.         retn
  335.  
  336. ;
  337. ;
  338. ;
  339. draw_promakh:
  340.         mov esi,buf_hole
  341.         xor ecx,ecx
  342.         mov cl,[promakh_count]
  343.         cmp cl,0
  344.         jz dpr_loc_exit
  345.         mov ebx,current_hole
  346.         mov eax,dword [ebx]  ;300*65536+180
  347. dpr_loc_00:
  348.         call draw_hole
  349. ;       call draw_pict_scale_div_2
  350. ;       sub ax,16
  351.         add ebx,4
  352.         mov eax,dword [ebx]
  353.         loop dpr_loc_00
  354. dpr_loc_exit:
  355.         retn
  356.  
  357.  
  358. ;
  359. ; In:
  360. ; Out:
  361. clear_buffer:
  362.         push eax
  363.         push ecx
  364.         push edi
  365.         mov edi,buffer00
  366.         mov ecx,(320*201*3)/4
  367.         xor eax,eax
  368.         rep stosd
  369.         pop edi
  370.         pop ecx
  371.         pop eax
  372.         retn
  373.  
  374. ;
  375. ; In:  AX - X координата [0,639]
  376. ;      BX - Y координата [0,479]
  377. ; Out:
  378. refresh_screen:
  379.         pusha
  380.         popa
  381.         retn
  382.  
  383.  
  384. ;
  385. ; In:
  386. ; Out:
  387. smooth_filter:
  388.         pusha
  389.         mov ecx,320*200*3
  390.         mov edi,buffer00
  391. sf_loc_00:
  392.         xor ax,ax
  393.         xor dx,dx       ;счетчик
  394.         mov al,[edi]
  395.         shl ax,2        ;*4
  396.         mov dx,ax
  397.         xor ax,ax
  398.         mov al,[edi-320*3]
  399.         add dx,ax
  400.         mov al,[edi-3]
  401.         add dx,ax
  402.         mov al,[edi+3]
  403.         add dx,ax
  404.         mov al,[edi+320*3]
  405.         add dx,ax
  406.         xchg dx,ax
  407.         shr ax,3        ;/8
  408.         mov byte [edi],al
  409.         inc edi
  410.         loop sf_loc_00
  411.         popa
  412.         retn
  413. ;smooth_matrix:
  414. ;       db  0, 1, 0      /
  415. ;       db  1, 4, 1    /   8
  416. ;       db  0, 1, 0  /
  417.  
  418.  
  419.