Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  1. include "lang.inc"
  2. include "macros.inc"
  3.  
  4. WND_SIZE_X              = 320
  5. WND_SIZE_Y              = 200
  6.  
  7. VC_DELTA = 1
  8. HC_DELTA = 2
  9.  
  10. MEOS_APP_START
  11. CODE
  12.     fninit
  13.     call init_sinus_table
  14.     call init_background
  15.     call init_palette
  16.     mov eax,40
  17.     mov ebx,101b
  18.     int 0x40
  19.     jmp .paint_window
  20.  
  21. .event_loop:
  22.     mov eax,23
  23.     mov ebx,1
  24.     int 0x40
  25.  
  26.     test eax,eax
  27.     je .draw_screen
  28.     dec eax
  29.     je .paint_window
  30.  
  31.     or  eax,-1
  32.     int 0x40
  33.  
  34. .draw_screen:
  35.     add word [ver_counter],VC_DELTA
  36.     add word [hor_counter],HC_DELTA
  37.     call handle_animation
  38.     mov eax,7
  39.     mov ebx,virtual_screen_32
  40.     mov ecx,(WND_SIZE_X shl 16)+WND_SIZE_Y
  41.     mov edx,(5 shl 16)+23
  42.     int 0x40
  43.     jmp .event_loop
  44.  
  45. .paint_window:
  46.     mov eax,12
  47.     mov ebx,1
  48.     int 0x40
  49.  
  50.     xor eax,eax
  51.     mov ebx,(100 shl 16)+(WND_SIZE_X+9)
  52.     mov ecx,(100 shl 16)+(WND_SIZE_Y+28)
  53.     mov edx,0x03000000
  54.     int 0x40
  55.  
  56.     mov eax,7
  57.     mov ebx,virtual_screen_32
  58.     mov ecx,(WND_SIZE_X shl 16)+WND_SIZE_Y
  59.     mov edx,(5 shl 16)+23
  60.     int 0x40
  61.  
  62.     mov eax,4
  63.     mov ebx,0x00060006
  64.     mov ecx,0x10ffffff
  65.     mov edx,window_title
  66.     mov esi,window_title_len
  67.     int 0x40
  68.  
  69.     mov eax,12
  70.     mov ebx,2
  71.     int 0x40
  72.  
  73.     jmp .event_loop
  74.  
  75. init_palette:
  76.     mov ecx,256
  77.     mov edi,_palette
  78.     xor eax,eax
  79. .next_pal:
  80.     mov al,ah
  81.     shr al,2
  82.     stosb
  83.     stosb
  84.     stosb
  85.     inc edi
  86.     inc ah
  87.     loop .next_pal
  88.     ret
  89.  
  90. init_sinus_table:
  91.     sub esp,4
  92.     mov ecx,256
  93.     mov edi,sinetable
  94. .sin_loop:
  95.     fld dword [esp]
  96.     fld st0
  97.     fsin
  98.     fmul [scale_sin]
  99.     fistp word [edi]
  100.     fadd [delta_angle]
  101.     fstp dword [esp]
  102.     add edi,2
  103.     loop .sin_loop
  104.     add esp,4
  105.     ret
  106.  
  107. init_background:
  108.     mov edi,background
  109.     xor edx,edx
  110. .ib_vertical:
  111.     xor ecx,ecx
  112. .ib_horizontal:
  113.     mov eax,ecx
  114.     xor eax,edx
  115.     stosb
  116.     inc ecx
  117.     cmp ecx,256
  118.     jne .ib_horizontal
  119.     inc edx
  120.     cmp edx,256
  121.     jne .ib_vertical
  122.     ret
  123.  
  124. s_OFFX          = 0
  125. s_OFFY          = 2
  126.  
  127. handle_animation:
  128.     sub esp,4
  129.     mov ebx,[ver_counter]
  130.     and ebx,255
  131.     add ebx,ebx
  132.     mov ax,[sinetable+ebx]
  133.     mov [esp+s_OFFY],ax
  134.     mov ebx,[hor_counter]
  135.     and ebx,255
  136.     add ebx,ebx
  137.     mov ax,[sinetable+ebx]
  138.     mov [esp+s_OFFX],ax
  139.     mov edi,virtual_screen_32
  140.     mov edx,WND_SIZE_Y-1
  141. .a_ver:
  142.     mov ecx,WND_SIZE_X-1
  143.     mov bx,[esp+s_OFFY]
  144.     add bx,dx
  145.     and ebx,255
  146.     shl ebx,8
  147. .a_hor:
  148.     mov ax,[esp+s_OFFX]
  149.     add ax,cx
  150.     and eax,255
  151.     lea esi,[background+ebx+eax]
  152.     mov al,[esi]
  153.     and eax,0xff
  154.     mov eax,[_palette+eax*4]
  155.     stosw
  156.     shr eax,16
  157.     stosb
  158.     dec ecx
  159.     jge .a_hor
  160.     dec edx
  161.     jge .a_ver
  162.     add esp,4
  163.     ret
  164.  
  165. DATA
  166.   delta_angle dd 0.0245436926066                ; pi/128
  167.   scale_sin dd 128.0
  168.  
  169.   window_title:
  170.       db 'MoveBack'
  171.   window_title_len = $ - window_title
  172.  
  173. UDATA
  174.   ver_counter dd ?
  175.   hor_counter dd ?
  176.  
  177.   _palette:     rd 256
  178.  
  179.   virtual_screen_32:
  180.         rb WND_SIZE_X*WND_SIZE_Y*3
  181.  
  182.   background:
  183.         rb 256*256
  184.  
  185.   sinetable:
  186.         rw 256
  187.  
  188. MEOS_APP_END