Rev 109 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
31 | halyavin | 1 | ; |
2 | ; BACKGROUND SET - Compile with fasm |
||
3 | ; |
||
4 | use32 |
||
5 | org 0x0 |
||
6 | db 'MENUET01' ; 8 byte id |
||
7 | dd 0x01 ; version |
||
8 | dd START ; program start |
||
9 | dd I_END ; image size |
||
10 | dd 0x80000 ; reguired amount of memory |
||
11 | dd 0x80000 ; stack pointer |
||
12 | dd I_Param,0 |
||
13 | |||
14 | include 'lang.inc' |
||
15 | include 'macros.inc' |
||
16 | |||
17 | START: |
||
18 | |||
19 | call check_parameters |
||
20 | call draw_window |
||
21 | |||
22 | call load_texture |
||
23 | call draw_image |
||
24 | |||
25 | still: |
||
26 | |||
27 | mov eax,10 ; wait here for event |
||
28 | int 0x40 |
||
29 | cmp eax,1 |
||
30 | jz red |
||
31 | cmp eax,2 |
||
32 | jz key |
||
33 | cmp eax,3 |
||
34 | jz button |
||
35 | jmp still |
||
36 | |||
37 | key: |
||
38 | mov eax,2 |
||
39 | int 0x40 |
||
40 | jmp still |
||
41 | |||
42 | red: |
||
43 | call draw_window |
||
44 | jmp still |
||
45 | |||
46 | button: |
||
47 | mov eax,17 |
||
48 | int 0x40 |
||
49 | |||
50 | shr eax,8 |
||
51 | and eax,255 |
||
52 | |||
53 | cmp eax,101 ; tiled |
||
54 | jne no101 |
||
55 | mov eax,15 |
||
56 | mov ebx,4 |
||
57 | mov ecx,1 |
||
58 | int 0x40 |
||
59 | mov eax,15 |
||
60 | mov ebx,3 |
||
61 | int 0x40 |
||
62 | jmp still |
||
63 | no101: |
||
64 | |||
65 | cmp eax,102 ; stretch |
||
66 | jne no102 |
||
67 | mov eax,15 |
||
68 | mov ebx,4 |
||
69 | mov ecx,2 |
||
70 | int 0x40 |
||
71 | mov eax,15 |
||
72 | mov ebx,3 |
||
73 | int 0x40 |
||
74 | jmp still |
||
75 | no102: |
||
76 | |||
77 | cmp eax,1 ; end program |
||
78 | jnz noproend |
||
79 | or eax,-1 |
||
80 | int 0x40 |
||
81 | noproend: |
||
82 | |||
83 | cmp eax,11 |
||
84 | jz bg |
||
85 | cmp eax,12 |
||
86 | jz bg |
||
87 | cmp eax,13 |
||
88 | jz bg |
||
89 | |||
90 | cmp eax,121 |
||
91 | jb no_bg_select |
||
92 | cmp eax,133 |
||
93 | jg no_bg_select |
||
94 | sub eax,121 |
||
95 | shl eax,2 |
||
96 | add eax,arrays |
||
97 | mov eax,[eax] |
||
98 | mov [usearray],eax |
||
99 | call load_texture |
||
100 | call draw_image |
||
101 | jmp still |
||
102 | no_bg_select: |
||
103 | |||
104 | cmp eax,14+20 |
||
105 | jge bg4 |
||
106 | |||
107 | jmp bg2 |
||
108 | |||
109 | |||
110 | check_parameters: |
||
111 | |||
112 | cmp [I_Param],dword 'BOOT' |
||
113 | je @f |
||
114 | ret |
||
115 | @@: |
||
116 | |||
117 | call load_texture |
||
118 | |||
119 | mov eax,15 |
||
120 | mov ebx,1 |
||
121 | mov ecx,256 |
||
122 | mov edx,256 |
||
123 | int 0x40 |
||
124 | |||
125 | mov eax,15 |
||
126 | mov ebx,5 |
||
131 | diamond | 127 | mov ecx,0x40000 ; <<< 0x40000 for blue, 0x40000+1 for red, |
128 | ; <<< 0x40000+2 for green background at boot |
||
31 | halyavin | 129 | mov edx,0 |
130 | mov esi,256*3*256 |
||
131 | int 0x40 |
||
132 | |||
133 | mov eax,15 |
||
134 | mov ebx,4 |
||
135 | mov ecx,2 |
||
136 | int 0x40 |
||
137 | |||
138 | mov eax,15 |
||
139 | mov ebx,3 |
||
140 | int 0x40 |
||
141 | |||
142 | mov eax,-1 |
||
143 | int 0x40 |
||
144 | |||
145 | |||
146 | |||
147 | set_picture: |
||
148 | |||
149 | mov eax,image+99-3*16 |
||
150 | mov ebx,0x40000+255*3+255*3*256 |
||
151 | newpix: |
||
152 | mov ecx,[eax] |
||
153 | mov [ebx],cx |
||
154 | shr ecx,16 |
||
155 | mov [ebx+2],cl |
||
156 | add eax,3 |
||
157 | sub ebx,3 |
||
158 | cmp ebx,0x40002 |
||
159 | jge newpix |
||
160 | |||
161 | ret |
||
162 | |||
163 | |||
164 | load_texture: |
||
165 | |||
166 | call gentexture |
||
167 | call set_picture |
||
168 | |||
169 | ret |
||
170 | |||
171 | |||
172 | ; set background |
||
173 | |||
174 | bg: |
||
175 | |||
176 | mov edi,0x40000 |
||
177 | |||
178 | cmp eax,12 |
||
179 | jnz bb1 |
||
180 | mov edi,0x40000+1 |
||
181 | bb1: |
||
182 | cmp eax,13 |
||
183 | jnz bb2 |
||
184 | mov edi,0x40000+2 |
||
185 | bb2: |
||
186 | |||
187 | mov eax,15 |
||
188 | mov ebx,1 |
||
189 | mov ecx,256 |
||
190 | mov edx,256 |
||
191 | int 0x40 |
||
192 | |||
193 | mov eax,15 |
||
194 | mov ebx,5 |
||
195 | mov ecx,edi |
||
196 | mov edx,0 |
||
197 | mov esi,256*256*3 |
||
198 | int 0x40 |
||
199 | |||
200 | mov eax,15 |
||
201 | mov ebx,3 |
||
202 | int 0x40 |
||
203 | |||
204 | jmp still |
||
205 | |||
206 | |||
207 | ; colored background |
||
208 | |||
209 | bg2: |
||
210 | |||
211 | push eax |
||
212 | |||
213 | mov eax,15 |
||
214 | mov ebx,1 |
||
215 | mov ecx,8 |
||
216 | mov edx,8 |
||
217 | int 0x40 |
||
218 | |||
219 | mov eax,[esp] |
||
220 | |||
221 | sub eax,14 |
||
222 | shl eax,2 |
||
223 | |||
224 | mov edx,[colors+eax] |
||
225 | |||
226 | mov esi,32*32*4 |
||
227 | mov edi,0 |
||
228 | mov ecx,0 |
||
229 | dbl2: |
||
230 | mov eax,15 |
||
231 | mov ebx,2 |
||
232 | int 0x40 |
||
233 | add ecx,3 |
||
234 | inc edi |
||
235 | cmp edi,esi |
||
236 | jb dbl2 |
||
237 | |||
238 | |||
239 | mov eax,15 |
||
240 | mov ebx,3 |
||
241 | int 0x40 |
||
242 | |||
243 | jmp still |
||
244 | |||
245 | |||
246 | ; shaped background |
||
247 | |||
248 | bg4: |
||
249 | |||
250 | sub eax,14+20 |
||
251 | shl eax,3 |
||
252 | add eax,shape |
||
253 | mov ecx,[eax+0] |
||
254 | mov edx,[eax+4] |
||
255 | |||
256 | mov eax,15 |
||
257 | mov ebx,1 |
||
258 | int 0x40 |
||
259 | |||
260 | mov eax,15 |
||
261 | mov ebx,3 |
||
262 | int 0x40 |
||
263 | |||
264 | jmp still |
||
265 | |||
266 | |||
267 | ; ********************************************* |
||
268 | ; ******* CELLULAR TEXTURE GENERATION ********* |
||
269 | ; **** by Cesare Castiglia (dixan/sk/mfx) ***** |
||
270 | ; ********* dixan@spinningkids.org ********** |
||
271 | ; ********************************************* |
||
272 | ; * the algorythm is kinda simple. the color * |
||
273 | ; * component for every pixel is evaluated * |
||
274 | ; * according to the squared distance from * |
||
275 | ; * the closest point in 'ptarray'. * |
||
276 | ; ********************************************* |
||
277 | |||
278 | gentexture: |
||
279 | |||
280 | mov ecx,0 ; ycounter |
||
281 | mov edi,0 ; pixel counter |
||
282 | |||
283 | mov ebp,[usearray] |
||
284 | |||
285 | ylup: |
||
286 | mov ebx,0 |
||
287 | |||
131 | diamond | 288 | ; call precalcbar |
31 | halyavin | 289 | |
290 | xlup: |
||
291 | push edi |
||
292 | mov edi, 0 |
||
293 | mov esi, 512000000 ; abnormous initial value :) |
||
294 | |||
295 | pixlup: |
||
296 | push esi |
||
297 | ; add edi,4 |
||
298 | mov eax,ebx ; evaluate first distance |
||
299 | sub eax, [ebp+edi] ; x-x1 |
||
300 | call wrappit |
||
301 | imul eax |
||
302 | mov esi, eax ; (x-x1)^2 |
||
303 | mov eax, ecx |
||
304 | add edi,4 |
||
305 | sub eax, [ebp+edi] ; y-y1 |
||
306 | call wrappit |
||
307 | imul eax ; (y-y1)^2 |
||
308 | add eax,esi ; (x-x1)^2+(y-y1)^2 |
||
309 | pop esi |
||
310 | |||
311 | cmp esi,eax |
||
312 | jb ok ; compare and take the smaller one |
||
313 | mov esi,eax |
||
314 | |||
315 | ok: |
||
316 | add edi,4 |
||
317 | cmp [ebp+edi],dword 777 |
||
318 | jne pixlup |
||
319 | |||
320 | mov eax,esi ; now evaluate color... |
||
321 | |||
131 | diamond | 322 | ; cmp eax,255*24 |
323 | ; jbe ok2 |
||
31 | halyavin | 324 | ; imul eax,12 |
131 | diamond | 325 | ; ok2: |
31 | halyavin | 326 | |
327 | mov edi,24 ; 50 = max shaded distance |
||
328 | idiv edi |
||
329 | |||
330 | pop edi |
||
331 | mov [image+51+edi],eax |
||
332 | add edi,3 |
||
333 | |||
334 | add ebx,1 ; bounce x loop |
||
335 | cmp ebx,256 ; xsize |
||
336 | jne xlup |
||
337 | |||
338 | add ecx,1 |
||
339 | cmp ecx,256 ; ysize |
||
340 | jne ylup |
||
341 | |||
342 | ret |
||
343 | |||
344 | wrappit: |
||
345 | cmp eax,0 ; this makes the texture wrap |
||
346 | jg noabs |
||
347 | neg eax |
||
348 | noabs: |
||
349 | cmp eax,128 |
||
350 | jb nowrap |
||
351 | neg eax |
||
352 | add eax,256 |
||
353 | nowrap: |
||
354 | ret |
||
355 | |||
131 | diamond | 356 | ;precalcbar: |
357 | ; pusha |
||
358 | ; mov eax,1 |
||
359 | ; mov ebx,ecx |
||
360 | ; add ebx,18 |
||
361 | ; mov ecx,44 |
||
362 | ; mov edx,0x00000060 |
||
363 | ; bar: |
||
364 | ; add ecx,2 |
||
365 | ; add edx,0x00020100 |
||
31 | halyavin | 366 | ; int 0x40 |
131 | diamond | 367 | ; cmp ecx,298 |
368 | ; jb bar |
||
369 | ; popa |
||
370 | ; ret |
||
31 | halyavin | 371 | |
372 | ; ********************************************* |
||
373 | ; ******* WINDOW DEFINITIONS AND DRAW ********* |
||
374 | ; ********************************************* |
||
375 | |||
376 | |||
377 | draw_image: |
||
378 | |||
379 | mov eax,7 |
||
380 | mov ebx,0x40000 |
||
381 | mov ecx,256*65536+255 |
||
382 | mov edx,19*65536+65;55 |
||
383 | int 0x40 |
||
384 | |||
385 | ret |
||
386 | |||
387 | |||
388 | y_add equ 44 ; 30 |
||
389 | y_s equ 13 |
||
390 | |||
391 | y_add2 equ 340 ;325 |
||
392 | set equ 0 ;15 |
||
393 | |||
394 | button_color equ 0A0A0A0h ; 207090 306090h |
||
395 | wnd_color equ 3B0B0B0h ; 34090B0h |
||
396 | |||
397 | |||
398 | draw_window: |
||
399 | |||
400 | mov eax, 12 ; tell os about draw |
||
401 | mov ebx, 1 |
||
402 | int 0x40 |
||
403 | |||
404 | mov eax, 0 ; define and draw window |
||
405 | mov ebx, 220*65536+293 |
||
406 | mov ecx, 50*65536+408 |
||
407 | mov edx, wnd_color |
||
408 | int 0x40 |
||
409 | |||
410 | call draw_image |
||
411 | |||
412 | mov eax,8 ; Blue button |
||
413 | mov ebx,(set+195+27)*65536+17 |
||
414 | mov ecx,y_add*65536+y_s |
||
415 | mov edx,11 |
||
416 | mov esi,0x004444cc |
||
417 | int 0x40 |
||
418 | mov eax,8 ; Red button |
||
419 | mov ebx,(set+213+27)*65536+17 |
||
420 | mov edx,12 |
||
421 | mov esi,0x00cc4444 |
||
422 | int 0x40 |
||
423 | mov eax,8 ; Green button |
||
424 | mov ebx,(set+258)*65536+17 |
||
425 | mov edx,13 |
||
426 | mov esi,0x0044cc44 |
||
427 | int 0x40 |
||
428 | |||
429 | mov eax, 8 ; tiled |
||
430 | mov ebx, 96*65536+63 |
||
431 | mov ecx, y_add*65536+y_s |
||
432 | mov edx, 101 |
||
433 | mov esi, button_color |
||
434 | int 0x40 |
||
435 | |||
436 | mov eax, 8 ; stretch |
||
437 | mov ebx, 160*65536+61 |
||
438 | mov edx, 102 |
||
439 | int 0x40 |
||
440 | |||
441 | mov eax, 4 ; window header |
||
442 | mov ebx, 8*65536+8 |
||
443 | mov ecx, 0x10ffffff |
||
444 | mov edx, header |
||
445 | mov esi, header.size |
||
446 | int 0x40 |
||
447 | |||
448 | mov ebx, 220*65536+30 |
||
449 | mov ecx, 0 |
||
450 | mov edx, apply_text |
||
451 | mov esi, apply_text.size |
||
452 | int 0x40 |
||
453 | |||
454 | mov ebx, 19*65536+326 |
||
455 | mov edx, image_buttons_text |
||
456 | mov esi, image_buttons_text.size |
||
457 | int 0x40 |
||
458 | |||
459 | mov ebx, 19*65536+(y_add2+27) |
||
460 | mov edx, simple_text |
||
461 | mov esi, simple_text.size |
||
462 | int 0x40 |
||
463 | |||
464 | mov ecx, (y_add2)*65536+20 |
||
465 | mov ebx, (18)*65536+25 |
||
466 | mov edx, 121 |
||
467 | mov esi, button_color |
||
468 | mov edi, 9 |
||
469 | mov eax, 8 |
||
470 | @@: |
||
471 | int 0x40 |
||
472 | add ebx, 29*65536 |
||
473 | inc edx |
||
474 | dec edi |
||
475 | jnz @b |
||
476 | |||
477 | |||
478 | mov edx, 34+4 |
||
479 | mov edi, 4 |
||
480 | mov eax, 8 |
||
481 | mov ebx, 18*65536+18 |
||
482 | mov ecx, y_add*65536+y_s |
||
483 | @@: |
||
484 | int 0x40 |
||
485 | inc edx |
||
486 | add ebx, 19*65536 |
||
487 | dec edi |
||
488 | jnz @b |
||
489 | |||
490 | |||
491 | ;----------------------- |
||
492 | mov edx,14 ; button number |
||
493 | mov ebx,(18)*65536+17 ; button start x & size |
||
494 | mov ecx,(y_add2+40)*65536+14 ; button start y & size |
||
495 | |||
496 | newcb: |
||
131 | diamond | 497 | mov esi,[(edx-14)*4+colors] |
31 | halyavin | 498 | |
499 | mov eax,8 |
||
500 | int 0x40 |
||
501 | |||
502 | inc edx |
||
503 | add ebx,20*65536 |
||
504 | add esi,5*256*256 |
||
505 | |||
506 | cmp edx,27 |
||
507 | jnz newcb |
||
508 | ;----------------------- |
||
509 | |||
510 | mov eax, 4 |
||
511 | mov ebx, 8*65536+4+y_add |
||
512 | mov ecx, 0 |
||
513 | mov edx, la2 |
||
514 | mov esi, la2.size |
||
515 | int 0x40 |
||
516 | |||
517 | mov eax,12 |
||
518 | mov ebx,2 |
||
519 | int 0x40 |
||
520 | |||
521 | ret |
||
522 | |||
523 | |||
524 | |||
525 | ; DATA SECTION |
||
526 | |||
527 | lsz header,\ |
||
528 | ru, "Генератор фона рабочего стола",\ |
||
529 | en, "BACKGROUND" |
||
530 | |||
531 | lsz apply_text,\ |
||
532 | ru, "Применить:",\ |
||
533 | en, "Apply:" |
||
534 | |||
535 | lsz image_buttons_text,\ |
||
536 | ru, "Выберите образец:",\ |
||
537 | en, "Select pattern:" |
||
538 | |||
539 | lsz simple_text,\ |
||
540 | ru, "Одноцветный фон:",\ |
||
541 | en, "Single-color background:" |
||
542 | |||
543 | lsz la2,\ |
||
544 | ru, " ЗАМОСТИТЬ РАСТЯНУТЬ",\ |
||
545 | en, " TILED STRETCH" |
||
546 | |||
547 | |||
548 | xx db 'x' |
||
549 | |||
550 | colors: |
||
551 | dd 0x770000 |
||
552 | dd 0x007700 |
||
553 | dd 0x000077 |
||
554 | dd 0x777700 |
||
555 | dd 0x770077 |
||
556 | dd 0x007777 |
||
557 | dd 0x777777 |
||
558 | dd 0x335577 |
||
559 | dd 0x775533 |
||
560 | dd 0x773355 |
||
561 | dd 0x553377 |
||
562 | dd 0x000000 |
||
563 | dd 0xcccccc |
||
564 | |||
565 | |||
566 | shape: |
||
567 | |||
568 | dd 1024,64 |
||
569 | dd 1024,32 |
||
570 | dd 2048,32 |
||
571 | dd 4096,32 |
||
572 | |||
573 | dd 512,16 |
||
574 | dd 1024,16 |
||
575 | dd 2048,16 |
||
576 | dd 4096,16 |
||
577 | |||
578 | dd 64,32 |
||
579 | dd 64,16 |
||
580 | dd 32,32 |
||
581 | dd 8,8 |
||
582 | dd 16,16 |
||
583 | dd 64,64 |
||
584 | |||
585 | usearray dd ptarray |
||
586 | |||
587 | arrays dd ptarray,ptarray2,ptarray3,ptarray4,ptarray5,ptarray6 |
||
588 | dd ptarray7,ptarray8,ptarray9 |
||
589 | |||
590 | ptarray: |
||
591 | |||
592 | dd 150,50 |
||
593 | dd 120,30 |
||
594 | dd 44,180 |
||
595 | dd 50,66 |
||
596 | dd 27,6 |
||
597 | dd 95,212 |
||
598 | dd 128,177 |
||
599 | dd 201,212 |
||
600 | dd 172,201 |
||
601 | dd 250,100 |
||
602 | dd 24,221 |
||
603 | dd 11,123 |
||
604 | dd 248,32 |
||
605 | dd 34,21 |
||
606 | dd 777 ; <- end of array |
||
607 | |||
608 | ptarray2: |
||
609 | |||
610 | dd 0,0,50,50,100,100,150,150,200,200,250,250 |
||
611 | dd 50,150,150,50,200,100,100,200 |
||
612 | dd 777 |
||
613 | |||
614 | ptarray3: |
||
615 | |||
616 | dd 55,150,150,55,200,105,105,200 |
||
617 | dd 30,30,220,220 |
||
618 | dd 777 |
||
619 | |||
620 | ptarray4: |
||
621 | |||
622 | dd 196,0,196,64,196,128,196,196 |
||
623 | dd 64,32,64,96,64,150,64,228 |
||
624 | dd 777 |
||
625 | |||
626 | ptarray5: |
||
627 | |||
628 | dd 196,0,196,64,196,128,196,196 |
||
629 | dd 64,0,64,64,64,128,64,196 |
||
630 | dd 777 |
||
631 | |||
632 | ptarray6: |
||
633 | |||
634 | dd 49,49,128,50,210,50 |
||
635 | dd 50,128,128,128,210,128 |
||
636 | dd 50,210,128,210,210,210 |
||
637 | |||
638 | dd 777 |
||
639 | |||
640 | ptarray7: |
||
641 | |||
642 | dd 0,0 |
||
643 | dd 196,196,64,64 |
||
644 | dd 128,0 |
||
645 | dd 0,128 |
||
646 | dd 64,64,196,64 |
||
647 | dd 196,196,64,196 |
||
648 | dd 128,128 |
||
649 | |||
650 | dd 777 |
||
651 | |||
652 | ptarray8: |
||
653 | |||
654 | dd 0, 128 |
||
655 | dd 0, 128 |
||
656 | dd 128, 0 |
||
657 | dd 0, 128 |
||
658 | dd 128, 0 |
||
659 | dd 0, 128 |
||
660 | dd 128, 0 |
||
661 | dd 0, 128 |
||
662 | dd 128, 0 |
||
663 | dd 128, 128 |
||
664 | |||
665 | dd 777 |
||
666 | |||
667 | ptarray9: |
||
668 | |||
669 | |||
670 | dd 0,248,64,128,128,64,196,48,160,160,94,224,240,96,5,5,777 |
||
671 | |||
672 | |||
673 | |||
674 | I_Param: |
||
675 | |||
676 | image: |
||
677 | |||
678 | |||
679 | I_END:->><><<>><><<> |