Subversion Repositories Kolibri OS

Rev

Rev 485 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

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