Subversion Repositories Kolibri OS

Rev

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