Subversion Repositories Kolibri OS

Rev

Go to most recent revision | Details | 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
8
           db      'MENUET00'           ; 8 byte id
9
           dd      38                   ; required os
10
           dd      START                ; program start
11
           dd      I_END                ; image size
12
           dd      0x80000               ; reguired amount of memory
13
           dd      0x80000
14
           dd      0x00000000           ; reserved=no extended header
15
 
16
include 'lang.inc'
17
include 'macros.inc'
18
 
19
START:
20
 
21
    call draw_window
22
 
23
    mov  edi,0x40000
24
    mov  ecx,320*600+100
25
    mov  eax,0
26
    cld
27
    rep  stosb
28
 
29
sta:                                         ; calculate fire image
30
 
31
    mov  esi, FireScreen
32
    add  esi, 0x2300
33
    sub  esi, 80
34
    mov  ecx, 80
35
    xor  edx, edx
36
 
37
  NEWLINE:
38
 
39
    mov  eax,dword [FireSeed]                ; New number
40
    mov  edx, 0x8405
41
    mul  edx
42
    inc  eax
43
    mov  dword [FireSeed], eax               ; Store seed
44
 
45
    mov  [esi], dl
46
    inc  esi
47
    dec  ecx
48
    jnz  NEWLINE
49
 
50
    mov  ecx, 0x2300
51
    sub  ecx, 80
52
    mov  esi, FireScreen
53
    add  esi, 80
54
 
55
  FIRELOOP:
56
 
57
    xor  eax,eax
58
 
59
    cmp  [type],0
60
    jnz  notype1
61
    mov  al, [esi]
62
    add  al, [esi + 2]
63
    adc  ah, 0
64
    add  al, [esi + 1]
65
    adc  ah, 0
66
    add  al, [esi + 81]
67
    adc  ah, 0
68
  notype1:
69
 
70
    cmp  [type],1
71
    jnz  notype2
72
    mov  al, [esi]
73
    add  al, [esi - 1]
74
    adc  ah, 0
75
    add  al, [esi - 1]
76
    adc  ah, 0
77
    add  al, [esi + 79]
78
    adc  ah,0
79
  notype2:
80
 
81
    cmp  [type],2
82
    jnz  notype3
83
    mov  al, [esi]
84
    add  al, [esi - 1]
85
    adc  ah,0
86
    add  al, [esi + 1]
87
    adc  ah, 0
88
    add  al, [esi + 81]
89
    adc  ah,0
90
  notype3:
91
 
92
    shr  eax, 2
93
    jz   ZERO
94
    dec  eax
95
 
96
  ZERO:
97
 
98
    mov  [esi - 80], al
99
    inc  esi
100
    dec  ecx
101
    jnz  FIRELOOP
102
 
103
    pusha
104
 
105
    mov  eax,5
106
    mov  ebx,[delay]
107
    int  0x40
108
 
109
    mov  al,byte [calc]
110
    inc  al
111
    mov  byte [calc],al
112
    cmp  al,byte 2
113
    jz   pdraw
114
 
115
    jmp  nodrw
116
 
117
  pdraw:
118
 
119
    mov  byte [calc],byte 0
120
 
121
    mov  edi,0x40000
122
    add  edi,[fcolor]
123
    mov  esi,FireScreen
124
    xor  edx,edx
125
 
126
  newc:
127
 
128
    movzx eax,byte [esi]
129
    mov   ebx,eax
130
    mov   ecx,eax
131
    shl   ax,8
132
    shr   bx,1
133
    mov   al,bl
134
    add   ecx,eax
135
    shl   ax,8
136
    mov   ch,ah
137
 
138
    mov  [edi+0],cx
139
    mov  [edi+3],cx
140
    mov  [edi+6],cx
141
    mov  [edi+9],cx
142
    mov  [edi+0+320*3],cx
143
    mov  [edi+3+320*3],cx
144
    mov  [edi+6+320*3],cx
145
    mov  [edi+9+320*3],cx
146
 
147
    add  edi,12
148
    inc  edx
149
    cmp  edx,80
150
    jnz  nnl
151
    xor  edx,edx
152
    add  edi,320*3
153
  nnl:
154
    inc  esi
155
    cmp  esi,FireScreen+0x2000
156
    jnz  newc
157
 
158
    mov  eax,dword 0x00000007           ; display image
159
    mov  ebx,0x40000
160
    mov  ecx,4*80*65536+200
161
    mov  edx,1*65536+22
162
    int  0x40
163
 
164
  nodrw:
165
 
166
    popa
167
 
168
    mov  eax,11                  ; check if os wants to talk to us
169
    int  0x40
170
    cmp  eax,1
171
    jz   red
172
    cmp  eax,3
173
    jz   button
174
 
175
    jmp  sta
176
 
177
  red:                           ; draw window
178
    call draw_window
179
    jmp  sta
180
 
181
  button:                        ; get button id
182
    mov  eax,17
183
    int  0x40
184
 
185
    cmp  ah,1
186
    jnz  noclose
187
    mov  eax,-1                  ; close this program
188
    int  0x40
189
  noclose:
190
 
191
    cmp  ah,2                    ; change fire type
192
    jnz  nob2
193
    mov  eax,[type]
194
    add  eax,1
195
    and  eax,1
196
    mov  [type],eax
197
   nob2:
198
 
199
    cmp  ah,3                    ; change delay
200
    jnz  nob3
201
    mov  eax,[delay]
202
    sub  eax,1
203
    and  eax,1
204
    mov  [delay],eax
205
  nob3:
206
 
207
    cmp  ah,4                    ; change color
208
    jnz  nob4
209
    mov  eax,[fcolor]
210
    add  eax,1
211
    cmp  eax,2
212
    jbe  fcok
213
    mov  eax,0
214
  fcok:
215
    mov  [fcolor],eax
216
    mov  eax,0
217
    mov  ecx,0x10000
218
    mov  edi,0x40000
219
    cld
220
    rep  stosd
221
 
222
  nob4:
223
 
224
    jmp  sta
225
 
226
 
227
 
228
; ************************************************
229
; ********* WINDOW DEFINITIONS AND DRAW **********
230
; ************************************************
231
 
232
 
233
draw_window:
234
 
235
    pusha
236
 
237
    mov  eax,12                    ; tell os about redraw
238
    mov  ebx,1
239
    int  0x40
240
 
241
    mov  eax,0                     ; define and draw window
242
    mov  ebx,100*65536+321
243
    mov  ecx,70*65536+222
244
    mov  edx,0x00000000
245
    mov  esi,0x00000000
246
    mov  edi,0x00000000
247
    int  0x40
248
 
249
    mov  eax,dword 0x00000004      ; 'FIRE FOR MENUET'
250
    mov  ebx,110*65536+8
251
    mov  ecx,dword 0x00FFFFFF
252
    mov  edx,text
253
    mov  esi,textlen-text
254
    int  0x40
255
 
256
    mov  eax,8
257
    mov  ebx,(321-19)*65536+12     ; button start x & size
258
    mov  ecx,5*65536+12            ; button start y & size
259
    mov  edx,1                     ; button number
260
    mov  esi,0x009a0000
261
    int  0x40
262
 
263
    mov  eax,8
264
    mov  ebx,5*65536+12
265
    mov  ecx,5*65536+12
266
    mov  edx,2
267
    int  0x40
268
 
269
    mov  eax,8
270
    mov  ebx,18*65536+12
271
    mov  ecx,5*65536+12
272
    mov  edx,3
273
    int  0x40
274
 
275
    mov  eax,8
276
    mov  ebx,31*65536+12
277
    mov  ecx,5*65536+12
278
    mov  edx,4
279
    int  0x40
280
 
281
    mov  eax,12                    ; tell os about redraw end
282
    mov  ebx,2
283
    int  0x40
284
 
285
    popa
286
 
287
    ret
288
 
289
 
290
; DATA SECTION
291
 
292
calc      dd  0
293
fcolor    dd  2
294
xx        db  'x'
295
type      dd  0
296
delay     dd  0
297
FireSeed  dd  0x1234
298
text:     db 'FIRE FOR MENUET'
299
textlen:
300
 
301
FireScreen:
302
 
303
I_END:
304