Subversion Repositories Kolibri OS

Rev

Rev 485 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. ;
  2. ;    FIRE for MENUET  - Compile with FASM
  3. ;
  4.  
  5. use32
  6.  
  7.            org     0x0
  8.            db      'MENUET01'           ; 8 byte id
  9.            dd      1                    ; header version
  10.            dd      START                ; program start
  11.            dd      I_END                ; image size
  12.            dd      mem_end              ; reguired amount of memory
  13.            dd      mem_end
  14.            dd      0,0                  ; no parameters, no path
  15.  
  16. include '..\..\..\macros.inc'
  17.  
  18. START:
  19.  
  20. red:
  21.  
  22. ; ************************************************
  23. ; ********* WINDOW DEFINITIONS AND DRAW **********
  24. ; ************************************************
  25.  
  26. draw_window:
  27.  
  28.     mov  eax,12                    ; tell os about redraw
  29.     mov  ebx,1
  30.     mcall
  31.  
  32.     xor  eax,eax                   ; define and draw window
  33.     mov  ebx,100*65536+321
  34.     mov  ecx,70*65536+222
  35.     mov  edx,0x01000000
  36.     mov  esi,0x00000000
  37.     mov  edi,0x00000000
  38.     mcall
  39.        
  40.         mcall 13,0*65536+321,0*65536+30,0
  41.         mcall   ,0*65536+1  ,0*65536+222
  42.         mcall   ,321*65536+1,0*65536+223
  43.         mcall   ,0*65536+321,222*65536+1
  44.        
  45.  
  46.     mov  al,4      ; 'FIRE FOR KOLIBRI'
  47.     mov  ebx,106*65536+8
  48.     mov  ecx,dword 0x00FFFFFF
  49.     mov  edx,text
  50.     mov  esi,textlen-text
  51.     mcall
  52.  
  53.     mov  al,8
  54.     mov  ebx,(321-19)*65536+12     ; button start x & size
  55.     mov  ecx,5*65536+12            ; button start y & size
  56.     mov  edx,1                     ; button number
  57.     mov  esi,0x009a0000
  58.     mcall
  59.  
  60.     mov  ebx,ecx ;5*65536+12
  61.     inc  edx
  62.     mcall
  63.  
  64.     mov  ebx,18*65536+12
  65.     inc  edx
  66.     mcall
  67.  
  68.     mov  ebx,31*65536+12
  69.     inc  edx
  70.     mcall
  71.  
  72.     mov  al,12                    ; tell os about redraw end
  73.     mov  ebx,2
  74.     mcall
  75.  
  76. sta:                                         ; calculate fire image
  77.  
  78.     mov  esi, FireScreen+0x2300-80
  79.     mov  ecx, 80
  80.     mov  eax, [FireSeed]
  81.  
  82.   NEWLINE:
  83.  
  84.     mul  [RandSeedConst]
  85.     inc  eax
  86.     mov  [esi], dl
  87.     inc  esi
  88.     loop NEWLINE
  89.  
  90.     mov  [FireSeed], eax
  91.  
  92.     mov  ecx, 0x2300-80
  93.     sub  esi, ecx
  94.     xor  edx, edx
  95.     xor  eax, eax
  96.  
  97.   FIRELOOP:
  98.     lodsb
  99.  
  100.     cmp  [type], ah
  101.     jnz  notype1
  102.     mov  dl, [esi + 1]
  103.     add  eax, edx
  104.     mov  dl, [esi]
  105.     add  eax, edx
  106.     mov  dl, [esi + 80]
  107.     jmp  typedone
  108.   notype1:
  109.  
  110. ;    cmp  [type],1
  111. ;    jnz  notype2
  112.     mov  dl, [esi - 2]
  113. ;    add  eax, edx
  114. ;    mov  dl, [esi - 2]
  115. ;    add  eax, edx
  116.     lea  eax, [eax + edx*2]
  117.     mov  dl, [esi + 78]
  118. ;  notype2:
  119.  
  120. ; type 2 is never used
  121. ;    cmp  [type],2
  122. ;    jnz  notype3
  123. ;    mov  dl, [esi - 2]
  124. ;    add  eax, edx
  125. ;    mov  dl, [esi]
  126. ;    add  eax, edx
  127. ;    mov  dl, [esi + 80]
  128. ;  notype3:
  129.  
  130. typedone:
  131.     add  eax, edx
  132.     shr  eax, 2
  133.     jz   ZERO
  134.     dec  eax
  135.  
  136.   ZERO:
  137.  
  138.     mov  [esi - 81], al
  139.     loop FIRELOOP
  140.  
  141.     mov  al, 5              ; in this moment always high 24 bits of eax are zero!
  142.     mov  ebx,[delay]
  143.     mcall
  144.  
  145.     inc  [calc]
  146.     cmp  [calc], byte 2
  147.     jnz  nodrw
  148.  
  149.   pdraw:
  150.  
  151.     mov  byte [calc],ah ;byte 0
  152.  
  153.     mov  edi,ImageData
  154.     push edi     ; pointer for sysfunction 7, draw image
  155.     add  edi,[fcolor]
  156.     mov  esi,FireScreen
  157.     xor  edx,edx
  158.  
  159.   newc:
  160.     xor   eax, eax
  161.     lodsb
  162.  
  163.     mov   ecx,eax
  164.     shr   eax,1
  165.     add   cl,al
  166.     mov   ch,al
  167.  
  168.     mov  [edi+0],ecx
  169.     mov  [edi+3],ecx
  170.     mov  [edi+6],ecx
  171.     mov  [edi+9],cx
  172.     lea  ebx, [edi+320*3]
  173.     mov  [ebx+0],ecx
  174.     mov  [ebx+3],ecx
  175.     mov  [ebx+6],ecx
  176.     mov  [ebx+9],ecx
  177.  
  178.     add  edi,12
  179.     inc  edx
  180.     cmp  edx,80
  181.     jnz  nnl
  182.     xor  edx,edx
  183.     add  edi,320*3
  184.   nnl:
  185.     cmp  esi,FireScreen+8000; 0x2000
  186.     jnz  newc
  187.  
  188.     mov  al,7           ; display image
  189.                         ; high 24 bits of eax are zero!
  190.     pop  ebx
  191.     mov  ecx,4*80*65536+200
  192.     mov  edx,1*65536+22
  193.     mcall
  194.  
  195.   nodrw:
  196.  
  197.     mov  eax,11                  ; check if os wants to talk to us
  198.     mcall
  199.     dec  eax
  200.     jz   red
  201.     cmp  al, 3-1
  202.     jnz  nob4
  203.  
  204.   button:                        ; get button id
  205.     mov  al,17
  206.     mcall
  207.     shr  eax, 8
  208.  
  209.     dec  eax
  210.     jnz  noclose
  211.     or   eax,-1                  ; close this program
  212.     mcall
  213.   noclose:
  214.  
  215.     dec  eax                     ; change fire type
  216.     jnz  nob2
  217.     xor  [type], 1
  218.    nob2:
  219.  
  220.     dec  eax                     ; change delay
  221.     jnz  nob3
  222.     xor  [delay], 1
  223.   nob3:
  224.  
  225.     dec  eax                     ; change color
  226.     jnz  nob4
  227.     mov  eax,[fcolor]
  228.     inc  eax
  229. ;    cmp  al,2
  230. ;    jbe  fcok
  231.     jnp  fcok
  232.     xor  eax,eax
  233.   fcok:
  234.     mov  [fcolor],eax
  235.     mov  edi,ImageData
  236.     mov  ecx,(320*600)/4
  237.     xor  eax,eax
  238.     rep  stosd
  239.  
  240.   nob4:
  241.     jmp  sta
  242.  
  243. ; DATA SECTION
  244. RandSeedConst dd 0x8405
  245. fcolor    dd  2
  246. xx        db  'x'
  247. type      db  0
  248. calc      db  0
  249. delay     dd  0
  250. FireSeed  dd  0x1234
  251. text:     db 'FIRE FOR KOLIBRI'
  252. textlen:
  253.  
  254. I_END:
  255.  
  256. FireScreen:
  257.           rb 0x2300
  258. ImageData:
  259.           rb 320*200*3
  260.  
  261. ; stack
  262.           align 512
  263.           rb 512
  264. mem_end:
  265.