Subversion Repositories Kolibri OS

Rev

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

  1. ; Originally written by Jarek Pelczar
  2. include "lang.inc"
  3. include "macros.inc"
  4.  
  5. WND_SIZE_X              = 320
  6. WND_SIZE_Y              = 200
  7.  
  8. MEOS_APP_START
  9. CODE
  10.     fninit
  11.     mov al,40
  12.     mov bl,101b
  13.     int 0x40
  14.     call init_palette
  15.     call init_texture
  16.     jmp .paint_window
  17. .event_loop:
  18.     mov al,23
  19.     mov ebx,1
  20.     int 0x40
  21.     test eax,eax
  22.     je .draw_screen
  23.     dec eax
  24.     je .paint_window
  25.  
  26.     or  eax,-1
  27.     int 0x40
  28.  
  29. .draw_screen:
  30.     call blit_8_to_32
  31.     mov al,7
  32.     mov ebx,virtual_screen_32
  33.     mov ecx,(WND_SIZE_X shl 16)+WND_SIZE_Y
  34.     mov edx,(4 shl 16)+24
  35.     int 0x40
  36.     call rotate_pal
  37.     jmp .event_loop
  38.  
  39. .paint_window:
  40.     mov al,12
  41.     push eax
  42.     xor ebx,ebx
  43.     inc ebx
  44.     int 0x40
  45.  
  46.     xor eax,eax
  47.     mov ebx,(100 shl 16)+(WND_SIZE_X+8)
  48.     mov ecx,(100 shl 16)+(WND_SIZE_Y+28)
  49.     mov edx,0x03000000
  50.     int 0x40
  51.  
  52.     mov al,7
  53.     mov ebx,virtual_screen_32
  54.     mov ecx,(WND_SIZE_X shl 16)+WND_SIZE_Y
  55.     mov edx,(4 shl 16)+24
  56.     int 0x40
  57.  
  58.     mov al,4
  59.     mov ebx,0x00060006
  60.     mov ecx,0x10ffffff
  61.     mov edx,window_title
  62.     mov esi,window_title_len
  63.     int 0x40
  64.  
  65.     pop eax
  66.     and ebx,2 ; bit 1 is set
  67.     int 0x40
  68.  
  69.     jmp .event_loop
  70.  
  71. init_palette:
  72.     mov edi,_palette
  73.     mov ecx,64
  74.     xor eax,eax
  75. .color1:
  76.     inc ah
  77.     mov al,ah
  78.     stosb
  79.     xor al,al
  80.     stosb
  81.     stosb
  82.     inc edi
  83.     loop .color1
  84.     mov ecx,64
  85.     push ecx
  86.     xor eax,eax
  87. .color2:
  88.     mov al,63
  89.     stosb
  90.     mov al,ah
  91.     stosb
  92.     xor al,al
  93.     stosb
  94.     inc ah
  95.     inc edi
  96.     loop .color2
  97.     pop ecx
  98.     push ecx
  99.     xor eax,eax
  100. .color3:
  101.     mov al,63
  102.     stosb
  103.     stosb
  104.     mov al,ah
  105.     stosb
  106.     inc ah
  107.     inc edi
  108.     loop .color3
  109.     pop ecx
  110.     mov eax,0x003f3f3f
  111.     rep stosd
  112.     ret
  113.  
  114. init_texture:
  115.     fldpi
  116.     mov [_fpom16],180
  117.     fidiv [_fpom16]
  118.     fstp [_st_rad]
  119.     mov edi,virtual_screen_8
  120.     cdq
  121. .itex_vertical:
  122.     xor ecx,ecx
  123.     fld [_st_rad]
  124.     mov [_fpom16],5
  125.     fimul [_fpom16]
  126.     mov [_fpom16],dx
  127.     fimul [_fpom16]
  128.     fsin
  129.     fmul [_multiplier]
  130.     fstp [_fpom32]
  131. .itex_horizontal:
  132.     fld [_st_rad]
  133.     mov [_fpom16],3
  134.     fimul [_fpom16]
  135.     mov [_fpom16],cx
  136.     fimul [_fpom16]
  137.     fsin
  138.     fmul [_multiplier]
  139.     fadd [_fpom32]
  140.     mov [_fpom16],127
  141.     fiadd [_fpom16]
  142.     fistp [_fpom16]
  143.     mov ax,[_fpom16]
  144.     inc eax
  145.     stosb
  146.     inc ecx
  147.     cmp ecx,WND_SIZE_X
  148.     jne .itex_horizontal
  149.     inc edx
  150.     cmp edx,WND_SIZE_Y
  151.     jne .itex_vertical
  152.     ret
  153.  
  154. rotate_pal:
  155.     mov ebx,[_palette+4]
  156.     mov edi,_palette+4
  157.     mov esi,_palette+8
  158.     xor ecx,ecx
  159.     mov cl,255
  160. ;    cld
  161.     rep movsd
  162.     mov [_palette+1020],ebx
  163.     ret
  164.  
  165. include "graph8.inc"
  166.  
  167. DATA
  168.   _multiplier   dd 63.5
  169.  
  170.   window_title:
  171.       db 'Plasma'
  172.   window_title_len = $ - window_title
  173.  
  174. UDATA
  175.   _fpom32               rd 1
  176.   _fpom16               rw 1
  177.   _st_rad               rd 1
  178.   _palette:     rd 256
  179.  
  180.   virtual_screen_8:
  181.         rb WND_SIZE_X*WND_SIZE_Y
  182.  
  183.   virtual_screen_32:
  184.         rb WND_SIZE_X*WND_SIZE_Y*3
  185.  
  186. MEOS_APP_END
  187.