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