Subversion Repositories Kolibri OS

Rev

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