Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Blame | Last modification | View Log | Download | RSS feed

  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: