Rev 5888 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
2529 | mario79 | 1 | ;------------------------------------------------------------------------------ |
2 | ; @SS - screensaver |
||
3 | ;------------------------------------------------------------------------------ |
||
5888 | pathoswith | 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. |
||
2529 | mario79 | 9 | ;--------------------------------------------------------------------- |
1747 | mario79 | 10 | ; SCREENSAVER APPLICATION by lisovin@26.ru |
11 | ; |
||
12 | ; Compile with FASM for Menuet |
||
13 | ; |
||
2529 | mario79 | 14 | ;------------------------------------------------------------------------------ |
15 | use32 |
||
16 | org 0x0 |
||
1747 | mario79 | 17 | |
2529 | mario79 | 18 | db 'MENUET01' ; 8 byte id |
5888 | pathoswith | 19 | dd 0x01 ; header version |
2529 | mario79 | 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 |
||
2535 | mario79 | 24 | dd I_Param ; boot parameters |
2529 | mario79 | 25 | dd 0x0 ; path |
26 | ;------------------------------------------------------------------------------ |
||
27 | include '..\..\..\macros.inc' |
||
1747 | mario79 | 28 | ;include 'debug.inc' |
2529 | mario79 | 29 | ;------------------------------------------------------------------------------ |
30 | align 4 |
||
1747 | mario79 | 31 | START: |
2529 | mario79 | 32 | mcall 68,11 |
9450 | leency | 33 | mcall 40, EVM_REDRAW + EVM_KEY + EVM_BUTTON + EVM_MOUSE |
2535 | mario79 | 34 | ; boot parameters |
9450 | leency | 35 | cmp [I_Param], dword '@ss' |
36 | setz [screensaver] |
||
2535 | mario79 | 37 | cmp [I_Param],dword 'ZERO' |
38 | jne @f |
||
39 | mov [type],dword 0 |
||
40 | ;-------------------------------------- |
||
3645 | fedesco | 41 | align 4 |
2535 | mario79 | 42 | @@: |
43 | cmp [I_Param],dword 'ASSM' |
||
44 | jne bgr_changed |
||
45 | mov [type],dword 24 |
||
2529 | mario79 | 46 | ;------------------------------------------------------------------------------ |
47 | align 4 |
||
1747 | mario79 | 48 | bgr_changed: |
49 | |||
2529 | mario79 | 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 |
||
9450 | leency | 56 | |
57 | call create_ss |
||
2529 | mario79 | 58 | ;------------------------------------------------------------------------------ |
59 | align 4 |
||
1747 | mario79 | 60 | still: |
2529 | mario79 | 61 | cmp al,2 ; key in buffer? |
62 | jz key |
||
63 | |||
64 | cmp al,5 ; background redraw? |
||
65 | jz bgr_changed |
||
1747 | mario79 | 66 | ; mouse event |
2529 | mario79 | 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 |
||
1747 | mario79 | 77 | key: |
5888 | pathoswith | 78 | mcall ; eax = 2 |
2529 | mario79 | 79 | jmp still |
80 | ;------------------------------------------------------------------------------ |
||
81 | align 4 |
||
1747 | mario79 | 82 | create_ss: |
2529 | mario79 | 83 | mcall 40,100010b |
84 | ;set_new_cursor_skin - transparent cursor |
||
85 | mcall 68,12,32*32*4 ; get memory for own cursor area |
||
1747 | mario79 | 86 | |
2529 | mario79 | 87 | push eax |
88 | mov ecx,eax |
||
5888 | pathoswith | 89 | mcall 37,4,,2 ; load own cursor |
1747 | mario79 | 90 | |
2529 | mario79 | 91 | mov ecx,eax |
92 | mcall 37,5 ; set own cursor |
||
1747 | mario79 | 93 | |
2529 | mario79 | 94 | pop ecx |
95 | mcall 68,13 ; free own cursor area |
||
1747 | mario79 | 96 | |
2529 | mario79 | 97 | cmp [type],dword 0 |
98 | je drawsswin |
||
1747 | mario79 | 99 | |
2529 | mario79 | 100 | cmp [type],dword 24 |
101 | je asminit |
||
1747 | mario79 | 102 | |
2529 | mario79 | 103 | mov dword [delay],1 |
5888 | pathoswith | 104 | mov [lx1],10 ; for "draw line" |
2529 | mario79 | 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 | ;-------------------------------------- |
||
3645 | fedesco | 114 | align 4 |
2529 | mario79 | 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 | ;-------------------------------------- |
||
3645 | fedesco | 134 | align 4 |
2529 | mario79 | 135 | .no_file: |
136 | mov [type],dword 0 |
||
137 | jmp drawsswin |
||
138 | ;-------------------------------------- |
||
3645 | fedesco | 139 | align 4 |
2529 | mario79 | 140 | @@: |
5888 | pathoswith | 141 | mov dword [delay],1 ;25 - old value |
2529 | mario79 | 142 | ;-------------------------------------- |
3645 | fedesco | 143 | align 4 |
2529 | mario79 | 144 | asminit1: |
145 | mov eax,[fileinfo.point] |
||
146 | mov [stringstart],eax |
||
147 | mov dword [stringlen],1 |
||
148 | ;-------------------------------------- |
||
3645 | fedesco | 149 | align 4 |
2529 | mario79 | 150 | newpage: |
5888 | pathoswith | 151 | mov [stringpos],16 |
2529 | mario79 | 152 | ;-------------------------------------- |
3645 | fedesco | 153 | align 4 |
2529 | mario79 | 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 |
||
1747 | mario79 | 161 | |
2529 | mario79 | 162 | xor edx,edx |
163 | mcall 13 |
||
164 | ;-------------------------------------- |
||
3645 | fedesco | 165 | align 4 |
2529 | mario79 | 166 | tstill: |
167 | mcall 23,[delay] |
||
168 | test eax,eax |
||
169 | jnz thr_end |
||
1747 | mario79 | 170 | |
2529 | mario79 | 171 | cmp [type],dword 0 |
172 | je tstill |
||
1747 | mario79 | 173 | |
2529 | mario79 | 174 | cmp [type],dword 24 |
175 | je drawssasm |
||
1747 | mario79 | 176 | |
2529 | mario79 | 177 | call draw_line |
178 | jmp tstill |
||
179 | ;-------------------------------------- |
||
3645 | fedesco | 180 | align 4 |
2529 | mario79 | 181 | thr_end: |
9450 | leency | 182 | cmp [screensaver], 0 |
183 | jz @f |
||
184 | mcall 70, f70 |
||
185 | @@: |
||
2529 | mario79 | 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 |
||
1747 | mario79 | 199 | |
2529 | mario79 | 200 | mov eax,edi |
201 | sub eax,[fileinfo.point] |
||
1747 | mario79 | 202 | |
2529 | mario79 | 203 | cmp eax,[fileinfo.size] |
204 | ja asminit1 |
||
1747 | mario79 | 205 | |
2529 | mario79 | 206 | cmp word [edi],0x0a0d |
207 | je addstring |
||
1747 | mario79 | 208 | |
2529 | mario79 | 209 | cmp byte [edi],0x0a |
210 | jne noaddstring |
||
1747 | mario79 | 211 | |
2529 | mario79 | 212 | dec edi |
213 | ;-------------------------------------- |
||
3645 | fedesco | 214 | align 4 |
2529 | mario79 | 215 | addstring: |
5888 | pathoswith | 216 | add [stringpos],16 |
2529 | mario79 | 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 | ;-------------------------------------- |
||
3645 | fedesco | 225 | align 4 |
2529 | mario79 | 226 | noaddstring: |
5888 | pathoswith | 227 | mov ebx,[stringlen] |
228 | shl ebx,19 |
||
2529 | mario79 | 229 | mov bx,[stringpos] |
5888 | pathoswith | 230 | mov edx,[stringstart] |
231 | add edx,[stringlen] |
||
232 | dec edx |
||
233 | mcall 4,,0x104ba010,,1 |
||
2529 | mario79 | 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] |
||
1747 | mario79 | 243 | |
2529 | mario79 | 244 | mov eax,[addx1] |
245 | add [lx1],eax |
||
246 | mov eax,[addy1] |
||
247 | add [ly1],eax |
||
1747 | mario79 | 248 | |
2529 | mario79 | 249 | mov eax,[addx2] |
250 | add [lx2],eax |
||
251 | mov eax,[addy2] |
||
252 | add [ly2],eax |
||
3645 | fedesco | 253 | |
2529 | mario79 | 254 | cmp [lx1],1 |
255 | jge dl1 |
||
256 | mov [addx1],1 |
||
257 | ;-------------------------------------- |
||
3645 | fedesco | 258 | align 4 |
2529 | mario79 | 259 | dl1: |
260 | cmp [lx2],1 |
||
261 | jge dl2 |
||
1747 | mario79 | 262 | |
2529 | mario79 | 263 | mov [addx2],1 |
264 | ;-------------------------------------- |
||
3645 | fedesco | 265 | align 4 |
2529 | mario79 | 266 | dl2: |
267 | cmp [lx1],esi |
||
268 | jbe dl3 |
||
269 | |||
270 | mov [addx1],0xffffffff |
||
271 | ;-------------------------------------- |
||
3645 | fedesco | 272 | align 4 |
2529 | mario79 | 273 | dl3: |
274 | cmp [lx2],esi |
||
275 | jbe dl4 |
||
276 | |||
277 | mov [addx2],0xffffffff |
||
278 | ;-------------------------------------- |
||
3645 | fedesco | 279 | align 4 |
2529 | mario79 | 280 | dl4: |
281 | cmp [ly1],1 |
||
282 | jge dl5 |
||
283 | mov [addy1],1 |
||
284 | ;-------------------------------------- |
||
3645 | fedesco | 285 | align 4 |
2529 | mario79 | 286 | dl5: |
287 | cmp [ly2],2 |
||
288 | jge dl6 |
||
289 | |||
290 | mov [addy2],1 |
||
291 | ;-------------------------------------- |
||
3645 | fedesco | 292 | align 4 |
2529 | mario79 | 293 | dl6: |
294 | cmp [ly1],edi |
||
295 | jbe dl7 |
||
296 | |||
297 | mov [addy1],-1 |
||
298 | ;-------------------------------------- |
||
3645 | fedesco | 299 | align 4 |
2529 | mario79 | 300 | dl7: |
301 | cmp [ly2],edi |
||
302 | jbe dl8 |
||
303 | |||
304 | mov [addy2],-1 |
||
305 | ;-------------------------------------- |
||
3645 | fedesco | 306 | align 4 |
2529 | mario79 | 307 | dl8: |
308 | mov eax,[lx2] |
||
309 | cmp [lx1],eax |
||
310 | jz dnol |
||
3645 | fedesco | 311 | |
2529 | mario79 | 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] |
||
3645 | fedesco | 319 | |
2529 | mario79 | 320 | mov edx,[lcolor] |
321 | and edx,0xffffff |
||
322 | mcall 38 |
||
323 | ;-------------------------------------- |
||
3645 | fedesco | 324 | align 4 |
2529 | mario79 | 325 | dnol: |
326 | add [lcolor],0x010201 |
||
327 | ret |
||
328 | ;------------------------------------------------------------------------------ |
||
5888 | pathoswith | 329 | align 4 ; DATA AREA |
2529 | mario79 | 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 |
||
1747 | mario79 | 342 | |
5888 | pathoswith | 343 | stringpos dw 16 |
344 | params db 0 ;if bit 0 set-ssaver works if bit 1 set-setup works |
||
1747 | mario79 | 345 | |
346 | fileinfo: |
||
2529 | mario79 | 347 | dd 0 |
348 | dd 0 |
||
349 | dd 0 |
||
350 | .size: dd 0 |
||
5888 | pathoswith | 351 | .point: dd 0 |
2529 | mario79 | 352 | db '/sys/macros.inc',0 |
5888 | pathoswith | 353 | |
9450 | leency | 354 | f70: ; run |
355 | dd 7, 0, 0, 0, 0 |
||
356 | db '/sys/@SS',0 |
||
357 | |||
358 | screensaver db ? |
||
359 | |||
5888 | pathoswith | 360 | ;------------------------------- |
361 | IM_END: ; UNINITIALIZED DATA |
||
362 | top_right_corner rd 1 |
||
2529 | mario79 | 363 | align 4 |
364 | lcolor dd ? |
||
365 | x_max dw ? ; размеры экрана |
||
366 | y_max dw ? |
||
2535 | mario79 | 367 | I_Param: |
2529 | mario79 | 368 | fileinfo_buffer: |
369 | rb 40 |
||
5888 | pathoswith | 370 | ;------------------------------- |
2529 | mario79 | 371 | rb 512 |
372 | stack_top: |
||
373 | I_END: |