Subversion Repositories Kolibri OS

Rev

Rev 5888 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;------------------------------------------------------------------------------
  2. ;   @SS - screensaver
  3. ;------------------------------------------------------------------------------
  4. ; last update:  30/03/2012
  5. ; changed by:   Marat Zakiyanov aka Mario79, aka Mario
  6. ; changes:      The program uses only 4 Kb memory is now.
  7. ;               Code refactoring. Using transparent cursor.
  8. ;               Fix bug - using lots of buttons from f.8.
  9. ;---------------------------------------------------------------------
  10. ;   SCREENSAVER APPLICATION by lisovin@26.ru
  11. ;
  12. ;   Compile with FASM for Menuet
  13. ;
  14. ;------------------------------------------------------------------------------
  15.         use32
  16.         org 0x0
  17.  
  18.         db 'MENUET01'   ; 8 byte id
  19.         dd 0x01         ; header version
  20.         dd START        ; start of code
  21.         dd IM_END       ; size of image
  22.         dd I_END        ; memory for app
  23.         dd stack_top    ; esp
  24.         dd I_Param      ; boot parameters
  25.         dd 0x0          ; path
  26. ;------------------------------------------------------------------------------
  27. include '..\..\..\macros.inc'
  28. ;include   'debug.inc'
  29. ;------------------------------------------------------------------------------
  30. align 4
  31. START:
  32.         mcall   68,11
  33.         mcall   40, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE
  34. ; boot parameters
  35.         cmp [I_Param], dword '@ss'
  36.         setz [screensaver]
  37.         cmp     [I_Param],dword 'ZERO'
  38.         jne     @f
  39.         mov     [type],dword 0
  40. ;--------------------------------------
  41. align 4
  42. @@:
  43.         cmp     [I_Param],dword 'ASSM'
  44.         jne     bgr_changed
  45.         mov     [type],dword 24
  46. ;------------------------------------------------------------------------------
  47. align 4
  48. bgr_changed:
  49.  
  50.         mcall   14
  51.         mov     [y_max],ax
  52.         shr     eax,16
  53.         mov     [x_max],ax
  54.         shl     eax,16
  55.         mov     [top_right_corner],eax
  56.        
  57.         call create_ss
  58. ;------------------------------------------------------------------------------
  59. align 4
  60. still:
  61.         cmp     al,2            ; key in buffer?
  62.         jz      key
  63.  
  64.         cmp     al,5            ; background redraw?
  65.         jz      bgr_changed
  66. ; mouse event
  67.         mcall   37,2            ; ¯à®¢¥à¨¬ ª­®¯ª¨
  68.         and     al,3
  69.         cmp     al,3            ; ­ ¦ âë ®¡¥ ª­®¯ª¨ ¬ëè¨?
  70.         jnz     still
  71.  
  72.         mcall   37,0            ; ¯à®¢¥à¨¬ ª®®à¤¨­ âë
  73.         cmp     [top_right_corner],eax
  74.         jnz     still
  75. ;------------------------------------------------------------------------------
  76. align 4
  77. key:
  78.         mcall                   ; eax = 2
  79.         jmp     still
  80. ;------------------------------------------------------------------------------
  81. align 4
  82. create_ss:
  83.         mcall   40,100010b
  84. ;set_new_cursor_skin - transparent cursor
  85.         mcall   68,12,32*32*4   ; get memory for own cursor area
  86.  
  87.         push    eax
  88.         mov     ecx,eax
  89.         mcall   37,4,,2         ; load own cursor
  90.  
  91.         mov     ecx,eax
  92.         mcall   37,5            ; set own cursor
  93.  
  94.         pop     ecx
  95.         mcall   68,13   ; free own cursor area
  96.  
  97.         cmp     [type],dword 0
  98.         je      drawsswin
  99.  
  100.         cmp     [type],dword 24
  101.         je      asminit
  102.  
  103.         mov     dword [delay],1
  104.         mov     [lx1],10         ; for "draw line"
  105.         mov     [lx2],40
  106.         mov     [ly1],50
  107.         mov     [ly2],100
  108.         mov     [addx1],1
  109.         mov     [addx2],1
  110.         mov     [addy1],1
  111.         mov     [addy2],1
  112.         jmp     drawsswin
  113. ;--------------------------------------
  114. align 4
  115. asminit:        ; for "assembler" - assembler sources demo
  116. ; get size of file
  117.         mov     [fileinfo],dword 5
  118.         mov     [fileinfo.point],dword fileinfo_buffer
  119.         mcall   70,fileinfo
  120.         test    eax,eax
  121.         jnz     .no_file
  122. ; get memory for file
  123.         mov     ecx,[fileinfo_buffer+32]
  124.         mov     [fileinfo.size],ecx
  125.         mcall   68,12
  126.         mov     [fileinfo.point],eax
  127. ; load file
  128.         mov     [fileinfo],dword 0
  129.         mcall   70,fileinfo
  130.         test    eax,eax
  131.         jz      @f
  132.         mcall   68,13,[fileinfo.point]
  133. ;--------------------------------------
  134. align 4
  135. .no_file:
  136.         mov     [type],dword 0
  137.         jmp     drawsswin
  138. ;--------------------------------------
  139. align 4
  140. @@:
  141.         mov     dword [delay],1 ;25 - old value
  142. ;--------------------------------------
  143. align 4
  144. asminit1:
  145.         mov     eax,[fileinfo.point]
  146.         mov     [stringstart],eax
  147.         mov     dword [stringlen],1
  148. ;--------------------------------------
  149. align 4
  150. newpage:
  151.         mov     [stringpos],16
  152. ;--------------------------------------
  153. align 4
  154. drawsswin:
  155.         xor     eax,eax
  156.         movzx   ebx,[x_max]
  157.         movzx   ecx,[y_max]
  158.         inc     ebx
  159.         inc     ecx
  160.         mcall   ,,,0x01000000
  161.  
  162.         xor     edx,edx
  163.         mcall   13
  164. ;--------------------------------------
  165. align 4
  166. tstill:
  167.         mcall   23,[delay]
  168.         test    eax,eax
  169.         jnz     thr_end
  170.  
  171.         cmp     [type],dword 0
  172.         je      tstill
  173.  
  174.         cmp     [type],dword 24
  175.         je      drawssasm
  176.  
  177.         call    draw_line
  178.         jmp     tstill
  179. ;--------------------------------------
  180. align 4
  181. thr_end:
  182.     cmp     [screensaver], 0
  183.     jz      @f
  184.     mcall   70, f70
  185. @@:
  186.         cmp     [type],dword 24
  187.         jne     @f
  188.         mcall   68,13,[fileinfo.point]
  189. @@:
  190.         and     [params], not 1
  191.         or      eax,-1
  192.         mcall
  193. ;------------------------------------------------------------------------------
  194. align 4
  195. drawssasm:
  196.         mov     edi,[stringstart]
  197.         add     edi,[stringlen]
  198.         dec     edi
  199.  
  200.         mov     eax,edi
  201.         sub     eax,[fileinfo.point]
  202.  
  203.         cmp     eax,[fileinfo.size]
  204.         ja      asminit1
  205.  
  206.         cmp     word [edi],0x0a0d
  207.         je      addstring
  208.  
  209.         cmp     byte [edi],0x0a
  210.         jne     noaddstring
  211.  
  212.         dec     edi
  213. ;--------------------------------------
  214. align 4
  215. addstring:
  216.         add     [stringpos],16
  217.         add     edi,2
  218.         mov     [stringstart],edi
  219.         mov     dword [stringlen],1
  220.         mov     ax,[stringpos]
  221.         cmp     ax,[y_max]
  222.         jb      tstill
  223.         jmp     newpage
  224. ;--------------------------------------
  225. align 4
  226. noaddstring:
  227.         mov     ebx,[stringlen]
  228.         shl     ebx,19
  229.         mov     bx,[stringpos]
  230.         mov     edx,[stringstart]
  231.         add     edx,[stringlen]
  232.         dec     edx
  233.         mcall   4,,0x104ba010,,1
  234.         inc     dword [stringlen]
  235.         cmp     [edi],byte ' '
  236.         je      drawssasm
  237.         jmp     tstill
  238. ;------------------------------------------------------------------------------
  239. align 4
  240. draw_line:
  241.         movzx   esi,[x_max]
  242.         movzx   edi,[y_max]
  243.  
  244.         mov     eax,[addx1]
  245.         add     [lx1],eax
  246.         mov     eax,[addy1]
  247.         add     [ly1],eax
  248.  
  249.         mov     eax,[addx2]
  250.         add     [lx2],eax
  251.         mov     eax,[addy2]
  252.         add     [ly2],eax
  253.  
  254.         cmp     [lx1],1
  255.         jge     dl1
  256.         mov     [addx1],1
  257. ;--------------------------------------
  258. align 4
  259. dl1:
  260.         cmp     [lx2],1
  261.         jge     dl2
  262.  
  263.         mov     [addx2],1
  264. ;--------------------------------------
  265. align 4
  266. dl2:
  267.         cmp     [lx1],esi
  268.         jbe     dl3
  269.  
  270.         mov     [addx1],0xffffffff
  271. ;--------------------------------------
  272. align 4
  273. dl3:
  274.         cmp     [lx2],esi
  275.         jbe     dl4
  276.  
  277.         mov     [addx2],0xffffffff
  278. ;--------------------------------------
  279. align 4
  280. dl4:
  281.         cmp     [ly1],1
  282.         jge     dl5
  283.         mov     [addy1],1
  284. ;--------------------------------------
  285. align 4
  286. dl5:
  287.         cmp     [ly2],2
  288.         jge     dl6
  289.  
  290.         mov     [addy2],1
  291. ;--------------------------------------
  292. align 4
  293. dl6:
  294.         cmp     [ly1],edi
  295.         jbe     dl7
  296.  
  297.         mov     [addy1],-1
  298. ;--------------------------------------
  299. align 4
  300. dl7:
  301.         cmp     [ly2],edi
  302.         jbe     dl8
  303.  
  304.         mov     [addy2],-1
  305. ;--------------------------------------
  306. align 4
  307. dl8:
  308.         mov     eax,[lx2]
  309.         cmp     [lx1],eax
  310.         jz      dnol
  311.  
  312.         mov     bx,word [lx1]
  313.         shl     ebx,16
  314.         mov     bx,word [lx2]
  315.  
  316.         mov     cx,word [ly1]
  317.         shl     ecx,16
  318.         mov     cx,word [ly2]
  319.  
  320.         mov     edx,[lcolor]
  321.         and     edx,0xffffff
  322.         mcall   38
  323. ;--------------------------------------
  324. align 4
  325. dnol:
  326.         add     [lcolor],0x010201
  327.         ret
  328. ;------------------------------------------------------------------------------
  329. align 4         ; DATA AREA
  330. type    dd 12
  331. delay   dd 100
  332. lx1     dd 10
  333. lx2     dd 40
  334. ly1     dd 50
  335. ly2     dd 100
  336. addx1   dd 1
  337. addx2   dd 1
  338. addy1   dd 1
  339. addy2   dd 1
  340. stringlen       dd 1
  341. stringstart     dd 0
  342.  
  343. stringpos       dw 16
  344. params          db 0    ;if bit 0 set-ssaver works if bit 1 set-setup works
  345.  
  346. fileinfo:
  347.         dd 0
  348.         dd 0
  349.         dd 0
  350. .size:  dd 0
  351. .point: dd 0
  352.         db '/sys/macros.inc',0
  353.  
  354. f70:    ; run
  355.         dd 7, 0, 0, 0, 0
  356.         db '/sys/@SS',0
  357.  
  358. screensaver db ?
  359.  
  360. ;-------------------------------
  361. IM_END:         ; UNINITIALIZED DATA
  362. top_right_corner        rd 1
  363. align 4
  364. lcolor  dd ?
  365. x_max   dw ?    ; à §¬¥àë íªà ­ 
  366. y_max   dw ?
  367. I_Param:
  368. fileinfo_buffer:
  369.         rb 40
  370. ;-------------------------------
  371.         rb 512
  372. stack_top:
  373. I_END:
  374.