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