Subversion Repositories Kolibri OS

Rev

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: