Subversion Repositories Kolibri OS

Rev

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

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