Subversion Repositories Kolibri OS

Rev

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

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