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
use32
2
      org     0x0
3
 
4
	db 'MENUET01'
5
	dd 0x01
6
	dd START
7
	dd I_END
8
	dd 0x100000
9
	dd 0x7fff0
10
	dd 0x0, 0x0
11
 
12
include 'lang.inc'
13
START:
14
 
15
	call draw_window
16
 
17
 mov edi,my_img
18
	mov ecx,64001*3/4
19
	xor eax,eax
20
	rep stosd
21
 
22
	mov esi,my_img
23
	mov [count1],esi
24
 
25
	mov eax,3
26
	int 0x40
27
	mov [curtime],eax
28
 
29
still:
30
 
31
	mov eax,11
32
	int 0x40
33
 
34
	cmp eax,1
35
	je red
36
	cmp eax,2
37
	je key
38
	cmp eax,3
39
	je button
40
	call image
41
	mov eax,3
42
	int 0x40
43
	mov ebx,[curtime]
44
	cmp eax,ebx
45
	jz still
46
	mov [curtime],eax
47
	call print_fps
48
	jmp still
49
 
50
red:
51
	call draw_window
52
	jmp still
53
 
54
key:
55
	mov eax,2
56
	int 0x40
57
	cmp ah,1
58
	jne still
59
	mov eax,0xffffffff
60
	int 0x40
61
	jmp still
62
 
63
button:
64
	mov eax,17
65
	int 0x40
66
 
67
	cmp ah,1
68
	jne still
69
	mov eax,-1
70
	int 0x40
71
	retn
72
 
73
;Window
74
 
75
draw_window:
76
 
77
	mov eax,12
78
	mov ebx,1
79
	int 0x40
80
 
81
	mov eax,0
82
	mov ebx,200*65536+325
83
	mov ecx,150*65536+225
84
	mov edx,0x00000000
85
	mov esi,edx
86
	mov edi,0x00100000
87
	int 0x40
88
 
89
	mov eax,4
90
	mov ebx,8*65536+8
91
	mov ecx,0x00402020
92
	mov edx,fire_label
93
	mov esi,len00
94
	int 0x40
95
 
96
	mov eax,8
97
	mov ebx,(325-19)*65536+12
98
	mov ecx,5*65536+12
99
	mov edx,1
100
	mov esi,0x00400000
101
	int 0x40
102
 
103
	mov eax,12
104
	mov ebx,2
105
	int 0x40
106
 
107
	retn
108
 
109
penta:
110
; Рисуем пентагpамму
111
 
112
	mov edi,my_img
113
	mov ebx,(320)*3
114
DrawP: mov     eax,0x00fc0000
115
       add     edi,0x540*3
116
       push    edi
117
       mov     ecx,0x78
118
ll_3:  mov [edi],eax
119
       mov [edi+3],eax
120
       mov [edi-3],eax
121
       mov [edi+ebx],eax
122
       add edi,6
123
       add     edi,ebx
124
       loop    ll_3
125
       pop     edi
126
       mov     ecx,0x60
127
ll_4:  mov     [ebx+edi],eax
128
       mov [edi],eax
129
       mov [edi+3],eax
130
       mov [edi-3],eax
131
       add edi,3
132
       add     edi,ebx
133
       add     edi,ebx
134
       loop    ll_4
135
       mov     ecx,0x61
136
ll_5:  mov     [ebx+edi],eax
137
       mov [edi],eax
138
       mov [edi+3],eax
139
       mov [edi-3],eax
140
       add edi,3
141
       sub     edi,ebx
142
       sub     edi,ebx
143
       loop    ll_5
144
       add     edi,0x98D1*3
145
       push    edi
146
       mov     ecx,0x78
147
ll_6:  mov [edi],eax
148
       mov [edi+ebx],eax
149
       mov [edi+3],eax
150
       mov [edi-3],eax
151
       add edi,6
152
       sub     edi,ebx
153
       loop    ll_6
154
       pop     edi
155
       mov     ecx,0x8F*2
156
ll_7:  mov [edi],eax
157
       mov [edi+ebx],eax
158
       add edi,3
159
       loop ll_7
160
 
161
       retn
162
 
163
 
164
fire:
165
; _ВHИМАHИЕ_! Здесь самое интеpесное.
166
; Алгоpитм гоpения.
167
	mov esi,[count1]
168
 mov edx,[count2]
169
	mov ebx,320*3
170
	mov ecx,0xffff
171
Flame: cmp     esi,0xFA00*3+my_img       ; Псевдослучайная точка в пpедалах экp
172
       jae     NxtP      ; если HЕТ - беpем следующую.
173
       lodsd
174
       dec esi                   ; Считываем ее цвет.
175
       and      eax,0x00ff0000
176
                                ; Точка чеpная? (гоpеть нечему?)
177
       jz      NxtP      ; если ДА - беpем следующую.
178
       sub     eax,0x00040000
179
                                   ; Цветом на единицу меньшим
180
       mov     [esi-2*3],eax       ;    ставим точку слева,
181
       mov     [esi],eax         ;    спpава,
182
       mov     [ebx+esi-1*3],eax    ;    снизу
183
       mov     [esi-0x141*3],eax ;    и свеpху.
184
NxtP:
185
       add     esi,edx
186
       cmp esi,0xffff*3+my_img
187
       jbe loc_cont
188
       sub esi,0xfffe*3
189
loc_cont:
190
        													          ; Беpем следующую
191
       add     edx,3
192
       cmp edx,0x10000*3
193
       jbe loc_cont2
194
       sub edx,0xfffe*3
195
loc_cont2:
196
                               ;    псевдослучайную точку.
197
       ;jnz     Flame           ; И так 65536 pаз.
198
	loop Flame
199
	mov [count1],esi
200
 mov [count2],edx
201
	retn
202
 
203
image:
204
	call penta
205
	call fire
206
 
207
	mov ebx,my_img
208
	mov ecx,320*65536+200
209
	mov edx,2*65536+23
210
	mov eax,7
211
	int 0x40
212
 
213
	inc [fps]
214
	retn
215
 
216
print_fps:
217
	mov eax,13
218
	mov ebx,(8+27*6)*65536+18
219
	mov ecx,8*65536+8
220
	mov edx,0x00000000
221
	int 0x40
222
	mov eax,47
223
	xor ebx,ebx
224
	mov bx,3
225
	shl ebx,16
226
	mov ecx,[fps]
227
	mov edx,(8+27*6)*65536+8
228
	mov esi,0x00400000
229
	int 0x40
230
	xor eax,eax
231
	mov [fps],eax
232
	retn
233
 
234
;DATA
235
 
236
count1	dd 0
237
count2 dd 0
238
curtime dd 0
239
fps	dd 0
240
fire_label	db 'Pentagramm in FIRE     FPS:'
241
len00=$-fire_label
242
	org 320*3*2
243
my_img:
244
 
245
I_END:
246