kolibrios/programs/fire2/trunk/fire2.asm
Andrey Halyavin (halyavin) 065b8d32b2 programs sources added
git-svn-id: svn://kolibrios.org@31 a494cfbc-eb01-0410-851d-a64ba20cac60
2006-01-03 09:43:31 +00:00

246 lines
4.0 KiB
NASM
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

use32
org 0x0
db 'MENUET01'
dd 0x01
dd START
dd I_END
dd 0x100000
dd 0x7fff0
dd 0x0, 0x0
include 'lang.inc'
START:
call draw_window
mov edi,my_img
mov ecx,64001*3/4
xor eax,eax
rep stosd
mov esi,my_img
mov [count1],esi
mov eax,3
int 0x40
mov [curtime],eax
still:
mov eax,11
int 0x40
cmp eax,1
je red
cmp eax,2
je key
cmp eax,3
je button
call image
mov eax,3
int 0x40
mov ebx,[curtime]
cmp eax,ebx
jz still
mov [curtime],eax
call print_fps
jmp still
red:
call draw_window
jmp still
key:
mov eax,2
int 0x40
cmp ah,1
jne still
mov eax,0xffffffff
int 0x40
jmp still
button:
mov eax,17
int 0x40
cmp ah,1
jne still
mov eax,-1
int 0x40
retn
;Window
draw_window:
mov eax,12
mov ebx,1
int 0x40
mov eax,0
mov ebx,200*65536+325
mov ecx,150*65536+225
mov edx,0x00000000
mov esi,edx
mov edi,0x00100000
int 0x40
mov eax,4
mov ebx,8*65536+8
mov ecx,0x00402020
mov edx,fire_label
mov esi,len00
int 0x40
mov eax,8
mov ebx,(325-19)*65536+12
mov ecx,5*65536+12
mov edx,1
mov esi,0x00400000
int 0x40
mov eax,12
mov ebx,2
int 0x40
retn
penta:
; <20>¨á㥬 ¯¥­â £p ¬¬ã
mov edi,my_img
mov ebx,(320)*3
DrawP: mov eax,0x00fc0000
add edi,0x540*3
push edi
mov ecx,0x78
ll_3: mov [edi],eax
mov [edi+3],eax
mov [edi-3],eax
mov [edi+ebx],eax
add edi,6
add edi,ebx
loop ll_3
pop edi
mov ecx,0x60
ll_4: mov [ebx+edi],eax
mov [edi],eax
mov [edi+3],eax
mov [edi-3],eax
add edi,3
add edi,ebx
add edi,ebx
loop ll_4
mov ecx,0x61
ll_5: mov [ebx+edi],eax
mov [edi],eax
mov [edi+3],eax
mov [edi-3],eax
add edi,3
sub edi,ebx
sub edi,ebx
loop ll_5
add edi,0x98D1*3
push edi
mov ecx,0x78
ll_6: mov [edi],eax
mov [edi+ebx],eax
mov [edi+3],eax
mov [edi-3],eax
add edi,6
sub edi,ebx
loop ll_6
pop edi
mov ecx,0x8F*2
ll_7: mov [edi],eax
mov [edi+ebx],eax
add edi,3
loop ll_7
retn
fire:
; _HˆŒ€Hˆ…_! ‡¤¥áì á ¬®¥ ¨­â¥p¥á­®¥.
; €«£®p¨â¬ £®p¥­¨ï.
mov esi,[count1]
mov edx,[count2]
mov ebx,320*3
mov ecx,0xffff
Flame: cmp esi,0xFA00*3+my_img ; <20>ᥢ¤®á«ãç ©­ ï â®çª  ¢ ¯p¥¤ « å íªp
jae NxtP ; ¥á«¨ H… - ¡¥p¥¬ á«¥¤ãîéãî.
lodsd
dec esi ; ‘ç¨â뢠¥¬ ¥¥ 梥â.
and eax,0x00ff0000
; ’®çª  ç¥p­ ï? (£®p¥âì ­¥ç¥¬ã?)
jz NxtP ; ¥á«¨ „€ - ¡¥p¥¬ á«¥¤ãîéãî.
sub eax,0x00040000
; –¢¥â®¬ ­  ¥¤¨­¨æã ¬¥­ì訬
mov [esi-2*3],eax ; áâ ¢¨¬ â®çªã á«¥¢ ,
mov [esi],eax ; á¯p ¢ ,
mov [ebx+esi-1*3],eax ; á­¨§ã
mov [esi-0x141*3],eax ; ¨ ᢥpåã.
NxtP:
add esi,edx
cmp esi,0xffff*3+my_img
jbe loc_cont
sub esi,0xfffe*3
loc_cont:
; <20>¥p¥¬ á«¥¤ãîéãî
add edx,3
cmp edx,0x10000*3
jbe loc_cont2
sub edx,0xfffe*3
loc_cont2:
; ¯á¥¢¤®á«ãç ©­ãî â®çªã.
;jnz Flame ; ˆ â ª 65536 p §.
loop Flame
mov [count1],esi
mov [count2],edx
retn
image:
call penta
call fire
mov ebx,my_img
mov ecx,320*65536+200
mov edx,2*65536+23
mov eax,7
int 0x40
inc [fps]
retn
print_fps:
mov eax,13
mov ebx,(8+27*6)*65536+18
mov ecx,8*65536+8
mov edx,0x00000000
int 0x40
mov eax,47
xor ebx,ebx
mov bx,3
shl ebx,16
mov ecx,[fps]
mov edx,(8+27*6)*65536+8
mov esi,0x00400000
int 0x40
xor eax,eax
mov [fps],eax
retn
;DATA
count1 dd 0
count2 dd 0
curtime dd 0
fps dd 0
fire_label db 'Pentagramm in FIRE FPS:'
len00=$-fire_label
org 320*3*2
my_img:
I_END: