Subversion Repositories Kolibri OS

Rev

Rev 109 | Rev 485 | Go to most recent revision | Blame | Compare with Previous | 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.     xor edx,edx
  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+25)
  49.     mov edx,0x33000000
  50.     mov edi,header
  51.     int 0x40
  52.  
  53.     mov al,7
  54.     mov ebx,virtual_screen_32
  55.     mov ecx,(WND_SIZE_X shl 16)+WND_SIZE_Y
  56.     xor edx,edx
  57.     int 0x40
  58.  
  59.     pop eax
  60.     and ebx,2 ; bit 1 is set
  61.     int 0x40
  62.  
  63.     jmp .event_loop
  64.  
  65. init_palette:
  66.     mov edi,_palette
  67.     mov ecx,64
  68.     xor eax,eax
  69. .color1:
  70.     inc ah
  71.     mov al,ah
  72.     stosb
  73.     xor al,al
  74.     stosb
  75.     stosb
  76.     inc edi
  77.     loop .color1
  78.     mov ecx,64
  79.     push ecx
  80.     xor eax,eax
  81. .color2:
  82.     mov al,63
  83.     stosb
  84.     mov al,ah
  85.     stosb
  86.     xor al,al
  87.     stosb
  88.     inc ah
  89.     inc edi
  90.     loop .color2
  91.     pop ecx
  92.     push ecx
  93.     xor eax,eax
  94. .color3:
  95.     mov al,63
  96.     stosb
  97.     stosb
  98.     mov al,ah
  99.     stosb
  100.     inc ah
  101.     inc edi
  102.     loop .color3
  103.     pop ecx
  104.     mov eax,0x003f3f3f
  105.     rep stosd
  106.     ret
  107.  
  108. init_texture:
  109.     fldpi
  110.     mov [_fpom16],180
  111.     fidiv [_fpom16]
  112.     fstp [_st_rad]
  113.     mov edi,virtual_screen_8
  114.     cdq
  115. .itex_vertical:
  116.     xor ecx,ecx
  117.     fld [_st_rad]
  118.     mov [_fpom16],5
  119.     fimul [_fpom16]
  120.     mov [_fpom16],dx
  121.     fimul [_fpom16]
  122.     fsin
  123.     fmul [_multiplier]
  124.     fstp [_fpom32]
  125. .itex_horizontal:
  126.     fld [_st_rad]
  127.     mov [_fpom16],3
  128.     fimul [_fpom16]
  129.     mov [_fpom16],cx
  130.     fimul [_fpom16]
  131.     fsin
  132.     fmul [_multiplier]
  133.     fadd [_fpom32]
  134.     mov [_fpom16],127
  135.     fiadd [_fpom16]
  136.     fistp [_fpom16]
  137.     mov ax,[_fpom16]
  138.     inc eax
  139.     stosb
  140.     inc ecx
  141.     cmp ecx,WND_SIZE_X
  142.     jne .itex_horizontal
  143.     inc edx
  144.     cmp edx,WND_SIZE_Y
  145.     jne .itex_vertical
  146.     ret
  147.  
  148. rotate_pal:
  149.     mov ebx,[_palette+4]
  150.     mov edi,_palette+4
  151.     mov esi,_palette+8
  152.     xor ecx,ecx
  153.     mov cl,255
  154. ;    cld
  155.     rep movsd
  156.     mov [_palette+1020],ebx
  157.     ret
  158.  
  159. include "graph8.inc"
  160.  
  161. DATA
  162.   _multiplier   dd 63.5
  163.  
  164.   header          db 'Plasma',0
  165.  
  166. UDATA
  167.   _fpom32               rd 1
  168.   _fpom16               rw 1
  169.   _st_rad               rd 1
  170.   _palette:     rd 256
  171.  
  172.   virtual_screen_8:
  173.         rb WND_SIZE_X*WND_SIZE_Y
  174.  
  175.   virtual_screen_32:
  176.         rb WND_SIZE_X*WND_SIZE_Y*3
  177.  
  178. MEOS_APP_END
  179.