Subversion Repositories Kolibri OS

Rev

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