5,174 → 5,155 |
dd 0x01 |
dd START |
dd I_END |
dd 0x100000 |
dd 0x7fff0 |
dd mem_end |
dd mem_end |
dd 0x0, 0x0 |
|
include 'lang.inc' |
;include 'lang.inc' |
START: |
|
call draw_window |
|
mov edi,my_img |
mov ecx,64001*3/4 |
mov ecx, 64001*3/4+1 |
xor eax,eax |
rep stosd |
|
mov esi,my_img |
mov [count1],esi |
|
mov eax,3 |
mov al, 3 |
int 0x40 |
mov [curtime],eax |
|
still: |
|
mov eax,11 |
red: |
push 12 |
pop eax |
push 1 |
pop ebx |
int 0x40 |
|
cmp eax,1 |
je red |
cmp eax,2 |
je key |
cmp eax,3 |
je button |
call image |
mov eax,3 |
xor eax, eax |
mov ebx, 200*65536+325 |
mov ecx, 150*65536+225 |
xor edx, edx |
xor esi, esi |
mov edi, 0x00100000 |
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 |
mov al, 8 |
mov ebx, (325-19)*65536+12 |
mov ecx, 5*65536+12 |
inc edx |
mov esi, 0x00400000 |
int 0x40 |
cmp ah,1 |
jne still |
mov eax,0xffffffff |
int 0x40 |
jmp still |
|
button: |
mov eax,17 |
mov al, 4 |
mov ebx, 8*65536+8 |
mov ecx, 0x00FFFFFF;0x00402020 |
mov edx, fire_label |
push len00 |
pop esi |
int 0x40 |
|
cmp ah,1 |
jne still |
mov eax,-1 |
mov al, 12 |
push 2 |
pop ebx |
int 0x40 |
retn |
|
;Window |
still: |
|
draw_window: |
|
mov eax,12 |
mov ebx,1 |
push 11 |
pop eax |
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 |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz button |
|
mov eax,4 |
mov ebx,8*65536+8 |
mov ecx,0x00402020 |
mov edx,fire_label |
mov esi,len00 |
call image |
push 3 |
pop eax |
int 0x40 |
|
mov eax,8 |
mov ebx,(325-19)*65536+12 |
mov ecx,5*65536+12 |
mov edx,1 |
mov esi,0x00400000 |
cmp eax, [curtime] |
jz still |
mov [curtime], eax |
print_fps: |
push 13 |
pop eax |
mov ebx, (8+27*6)*65536+18 |
mov ecx, 8*65536+8 |
xor edx, edx |
int 0x40 |
lea edx, [ebx-10] |
mov al, 47 |
mov ebx, 30000h |
xor ecx, ecx |
xchg ecx, [fps] |
mov esi, 0x00FFFFFF ;0x00400000 |
int 0x40 |
jmp still |
|
mov eax,12 |
mov ebx,2 |
key: |
mov al, 2 |
int 0x40 |
cmp ah, 1Bh ;<Esc> |
jne still |
button: |
; we have only one button, close |
or eax, -1 |
int 0x40 |
|
retn |
image: |
|
; ¨á㥬 ¯¥â £p ¬¬ã |
penta: |
; ¨á㥬 ¯¥â £p ¬¬ã |
|
mov edi,my_img |
mov edi,my_img+0x540*3 |
mov ebx,(320)*3 |
DrawP: mov eax,0x00fc0000 |
add edi,0x540*3 |
mov eax,0x00fc0000 |
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 |
push 0x78 |
pop ecx |
ll_3: |
call put_big_point |
lea edi, [edi+ebx+6] |
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 |
mov cl, 0x60 |
ll_4: |
call put_big_point |
lea edi, [edi+ebx*2+3] |
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 |
mov cl, 0x61 |
ll_5: |
call put_big_point |
sub edi, 2*320*3-3 |
loop ll_5 |
add edi,0x98D1*3 |
mov edi, my_img+0x1D4F6 |
push edi |
mov ecx,0x78 |
ll_6: mov [edi],eax |
mov [edi+ebx],eax |
mov [edi+3],eax |
mov [edi-3],eax |
mov cl, 0x78 |
ll_6: |
call put_big_point |
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 |
ll_7: stosd |
mov [edi+ebx-4],eax |
dec edi |
loop ll_7 |
|
retn |
|
|
fire: |
; _HH
_! ¤¥áì á ¬®¥ ¨â¥p¥á®¥. |
; «£®p¨â¬ £®p¥¨ï. |
mov esi,[count1] |
mov edx,[count2] |
mov ebx,320*3 |
mov ecx,0xffff |
mov ecx, 10000h |
Flame: cmp esi,0xFA00*3+my_img ; ᥢ¤®á«ãç © ï â®çª ¢ ¯p¥¤ « å íªp |
jae NxtP ; ¥á«¨ H
- ¡¥p¥¬ á«¥¤ãîéãî. |
lodsd |
dec esi ; ç¨âë¢ ¥¬ ¥¥ 梥â. |
and eax,0x00ff0000 |
; and eax,0x00ff0000 |
test eax, eax |
; ®çª ç¥p ï? (£®p¥âì ¥ç¥¬ã?) |
jz NxtP ; ¥á«¨ - ¡¥p¥¬ á«¥¤ãîéãî. |
sub eax,0x00040000 |
179,7 → 160,7 |
; ¢¥â®¬ ¥¤¨¨æã ¬¥ì訬 |
mov [esi-2*3],eax ; áâ ¢¨¬ â®çªã á«¥¢ , |
mov [esi],eax ; á¯p ¢ , |
mov [ebx+esi-1*3],eax ; ᨧã |
mov [320*3+esi-1*3],eax ; ᨧã |
mov [esi-0x141*3],eax ; ¨ ᢥpåã. |
NxtP: |
add esi,edx |
198,49 → 179,41 |
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 |
push 7 |
pop eax |
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 |
put_big_point: |
mov [edi], eax |
mov [edi+3], eax |
mov [edi-3], eax |
mov [edi+ebx], eax |
ret |
|
;DATA |
align 4 |
|
count1 dd 0 |
count1 dd my_img |
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: |
|
I_END: |
|
align 16 |
rb 320*3 |
my_img rb 320*200*3 |
rb 320*3 |
|
; stack |
align 256 |
rb 256 |
mem_end: |