/programs/pong3/trunk/ascgl.inc |
---|
0,0 → 1,624 |
lang equ ru |
; |
; Assembler |
; SMALL |
; CODE |
; Graphics |
; Libary |
; |
; Ver 0.10 By Pavlushin Evgeni (RUSSIA) |
; www.waptap@mail.ru |
;InfoList |
;0.01 LoadImage |
;0.02 SetBmp |
;0.03 Bmptoimg, Setimg ~01.03.2004 |
;0.04 Bug deleted, copyimg ~03.05.2004 |
;0.05 fullimg, collimg ~05.05.2004 |
;0.06 getimg ~09.05.2004 |
;0.07 convbmp ~13.05.2004 |
;0.08 fps ~14.05.2004 |
;0.09 drawfbox ~03.06.2004 |
;0.10 all macros optimized by halyavin, add at ~07.06.2004 |
;DrawBox |
macro drawfbox x,y,xs,ys,color |
{ |
mov ecx,y |
mov ebx,x |
shl ebx,16 |
add ebx,xs |
shl ecx,16 |
add ecx,ys |
mov edx,color |
mov eax,13 |
int 0x40 |
} |
; FPS - Set Frame Per Second Display |
fps_show_frequency=40 |
macro fps x,y,color,delcolor |
{ |
local spdat,savetime,new_time,fps,fps_cntr,out_fps,new_time,ttt |
local no_out_fps |
jmp spdat |
savetime dd 0 |
fps_cntr dd 0 |
fps dd 0 |
ttt dd 0 |
spdat: |
get_time: |
mov eax,3 |
int 0x40 |
cmp eax,[savetime] |
jne new_time |
inc [fps_cntr] |
cmp dword [ttt],0 |
je out_fps |
dec dword [ttt] |
jmp no_out_fps |
new_time: |
mov [savetime],eax |
mov ebx,[fps_cntr] |
mov [fps],ebx |
mov [fps_cntr],0 |
out_fps: |
if ~(delcolor eq ) |
mov ebx,x*65536+30 |
mov ecx,y*65536+7 |
mov edx,delcolor |
mov eax,13 |
int 0x40 |
end if |
mov dword [ttt],fps_show_frequency |
mov eax,47 |
mov ebx,5*65536 |
; mov bl,0 |
mov edx,x*65536+y |
mov esi,color |
mov ecx,[fps] |
int 0x40 |
no_out_fps: |
} |
; COLLIMG - Collusion image's |
_1dbounce_count=0; |
macro collimg img1_off,x1,y1,img2_off,x2,y2,otv |
{ |
local bounce,exit,anot,bc,nbc |
mov esi,[img1_off] ;xs1 |
mov edi,[img2_off] ;ys2 |
mov eax,x1 ; |
mov ebx,x2 ; |
call _1dbounce |
mov edx,ecx |
mov esi,[img1_off+4] ;ys1 |
mov edi,[img2_off+4] ;ys2 |
mov eax,y1 ; |
mov ebx,y2 ; |
call _1dbounce |
add edx,ecx |
cmp edx,2 |
je bounce |
mov otv,0 |
jmp exit |
_1dbounce_count=_1dbounce_count+1 |
if (_1dbounce_count = 1) |
_1dbounce: |
cmp ebx,eax |
jnae anot |
add eax,esi |
cmp eax,ebx |
jna nbc |
jmp bc |
anot: |
add ebx,edi |
cmp ebx,eax |
jna nbc |
bc: |
mov ecx,1 |
ret |
nbc: |
mov ecx,0 |
ret |
end if |
bounce: |
mov otv,1 |
exit: |
} |
; SETBMP - Set bmp to window |
; (SYNTAX) SETBMP dd xstart ,dd ystart ,BMP_offset,dd soi |
; (SAMPLE) SETBMP dword [xt],dword [yt],I_END,dword [tsoi] |
; SETBMP 15,10,I_END,dword [tsoi] |
; ( NOTE ) SOI - Start of image |
macro setbmp arg1,arg2,arg3,arg4 |
{ |
local nodi |
cmp word [arg3],word 'BM' |
jne nodi |
mov eax,7 |
mov ebx,arg4 ;[soi] |
mov ecx,dword [arg3+18] |
shl ecx,16 |
add ecx,dword [arg3+22] |
if (arg1 eqtype 0) & (arg2 eqtype 0) |
mov edx,arg1*65536+arg2 |
else |
mov edx,arg1 |
shl edx,16 |
add edx,arg2 |
end if |
int 0x40 |
nodi: |
} |
macro setimg arg1,arg2,arg3 |
{ |
local nodi |
mov eax,7 |
mov ebx,arg3 |
add ebx,8 |
mov ecx,dword [arg3] |
shl ecx,16 |
add ecx,dword [arg3+4] |
if (arg1 eqtype 0) & (arg2 eqtype 0) |
mov edx,arg1*65536+arg2 |
else |
mov edx,arg1 |
shl edx,16 |
add edx,arg2 |
end if |
int 0x40 |
} |
;Not optimiz |
macro getimg imgsrc,x,y,xs,ys,imgdest |
{ |
local cyc |
mov eax,xs |
mov dword [imgdest],eax |
mov eax,ys |
mov dword [imgdest+4],eax |
mov eax,dword [imgsrc] ;getx size |
mov edi,eax |
mov ebx,y |
mul ebx |
add eax,x |
mov ebx,3 |
mul ebx ;eax=offset on imsrc |
mov ecx,0 |
mov ebx,0 |
mov ebp,eax |
mov esi,0 |
add esi,8 |
add ebp,8 |
cyc: |
mov al,byte [imgsrc+ebp] |
mov [imgdest+esi],al |
mov al,byte [imgsrc+ebp+1] |
mov [imgdest+esi+1],al |
mov al,byte [imgsrc+ebp+2] |
mov [imgdest+esi+2],al |
add esi,3 |
add ebp,3 |
inc ecx |
cmp ecx,xs |
jne cyc |
add ebp,edi |
add ebp,edi |
add ebp,edi |
sub ebp,xs |
sub ebp,xs |
sub ebp,xs |
mov ecx,0 |
inc ebx |
cmp ebx,ys |
jne cyc |
} |
; |
macro bmptoimg bmp_off,soi,img_off |
{ |
local nodix,conv |
cmp word [bmp_off],word 'BM' |
jne nodix |
mov eax,dword [bmp_off+18] |
mov ebx,dword [bmp_off+22] |
mov dword [img_off],eax |
mov dword [img_off+4],ebx |
mul ebx |
lea ecx,[eax+2*eax] |
lea edi,[img_off+8] |
mov esi,dword [soi] |
cld |
rep movsb |
nodix: |
} |
macro copyimg img2_off,img1_off |
{ |
local cop |
mov eax,dword [img1_off] |
mov ebx,dword [img1_off+4] |
mul ebx |
lea ecx,[eax+2*eax] |
lea esi,[img1_off+8] |
lea edi,[img2_off+8] |
cld |
rep movsb |
} |
macro fullimg img_off,xs,ys,color |
{ |
local cop |
mov eax,xs |
mov ebx,ys |
mov dword [img_off],eax |
mov dword [img_off+4],ebx |
mul ebx |
lea ebp,[eax+2*eax] |
mov esi,color |
if color eqtype 0 |
mov ecx,color/65536 |
else |
mov ecx,esi |
shr ecx,16 |
end if |
xor edi,edi |
cop: |
mov word [img_off+8+edi],si |
add edi,2 |
mov byte [img_off+8+edi],cl |
inc edi |
cmp edi,ebp |
jne cop |
} |
macro convbmp bmp_load_area,bmp_soi |
{ |
local status,bps,dwps,soi,sop,eop,eos,process,fileinfo,string,end_bmp |
local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2 |
local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize |
local noaddword |
;local qwe,bmpfn |
; convert: |
movzx eax,word [bmp_load_area+28] |
mul dword [bmp_load_area+18] |
mov ebx,32 |
div ebx |
test edx,edx |
je noaddword |
inc eax |
noaddword: |
mov dword [dwps],eax ;dwps-doublewords per string |
shl eax,2 |
mov dword [bps],eax ;bps-bytes per string |
cmp dword [bmp_load_area+34],0 |
jne yespicsize ;if picture size is defined |
mul dword [bmp_load_area+22] |
mov dword [bmp_load_area+34],eax |
yespicsize: |
mov eax,bmp_load_area |
mov ebx,eax |
add ebx, [bmp_load_area+2];file size |
inc ebx |
mov dword [bmp_soi],ebx ;soi-start of image area for drawing |
add eax, [bmp_load_area+10] |
mov dword [sop],eax ;sop-start of picture in file |
add eax, [bmp_load_area+34] |
mov dword [eop],eax ;eop-end of picture in file |
mov eax, [bmp_load_area+18] |
lea eax,[eax+2*eax] ;3x pixels in eax |
mov edi,dword [bmp_soi] ;initializing |
mov esi,dword [eop] |
sub esi,dword [bps] |
nextstring: |
push edi |
cmp word [bmp_load_area+28],24 |
jne convertno32 |
mov ecx,[dwps] |
cld |
rep movsd |
convert1: |
pop edi |
sub esi,dword [bps] |
sub esi,dword [bps] |
cmp esi,dword [sop] |
jb end_bmp;nomorestring |
add edi,eax |
jmp nextstring |
; nomorestring: |
; jmp end_bmp |
convertno32: |
mov ebx,bmp_load_area |
add ebx, [bmp_load_area+14] |
add ebx,14 ;start of color table |
push esi |
add esi,dword [bps] |
mov dword [eos],esi |
pop esi |
nextelem: |
push eax |
movzx eax,byte [esi] |
cmp word [bmp_load_area+28],4 |
je convert4bpp |
cmp word [bmp_load_area+28],1 |
je convert1bpp |
call converttable |
convert2: |
pop eax |
inc esi |
cmp esi,dword [eos] |
jae convert1 |
add edi,3 |
jmp nextelem |
convert4bpp: |
shl ax,4 |
shr al,4 |
push ax |
movzx eax,ah |
call converttable |
add edi,3 |
pop ax |
movzx eax,al |
call converttable |
jmp convert2 |
convert1bpp: |
mov ecx,eax |
mov edx,7 |
nextbit: |
xor eax,eax |
bt ecx,edx |
jnc noaddelem |
inc eax |
noaddelem: |
push edx |
call converttable |
pop edx |
dec edx |
cmp edx,0xffffffff |
je convert2 |
add edi,3 |
jmp nextbit |
converttable: |
shl eax,2 |
add eax,ebx |
mov edx, dword [eax] |
mov dword [edi],edx |
ret |
; DATA AREA |
;status dd 0 ;bit0=1 if file thread is created |
bps dd 0 |
dwps dd 0 |
;soi dd 0 |
sop dd 0 |
eop dd 0 |
eos dd 0 |
;process dd 0 |
end_bmp: |
; mov eax,dword [soi] |
; mov dword [bmp_soi],eax |
} |
; LOADBMP - Load bmp image from file |
; (SYNTAX) LOADBMP 'file_path',temp_area(rb 0x10000),load_area,dd soi |
; (SAMPLE) LOADBMP '/rd/1/menuet.bmp',temp_area,I_END,tsoi |
; ( NOTE ) Macros create on Base of |
; Picture browser by lisovin@26.ru & Ivan Poddubny |
; SOI - Start of image |
macro loadbmp bmp_file_name,bmp_temp_area,bmp_load_area,bmp_soi |
{ |
local status,bps,dwps,soi,sop,eop,eos,process,fileinfo,string,end_bmp |
local converttable,noaddelem,nextbit,convert1bpp,convert4bpp,convert2 |
local nextelem,convertno32,nomorestring,convert1,nextstring,yespicsize |
local noaddword |
;local qwe,bmpfn |
mov dword [fileinfo+8],1 ; how many blocks to read (1) |
mov eax,58 |
mov ebx,fileinfo |
int 0x40 |
mov eax,[bmp_load_area+2] |
shr eax,9 ; ¯®¤¥«¨¬ 512 ¨ ¯à¨¡ ¢¨¬ 1 - ¯®«ã稬 ç¨á«® ¡«®ª®¢ |
inc eax |
mov dword [fileinfo+8],eax |
mov eax,58 |
mov ebx,fileinfo |
int 0x40 |
; jmp qwe |
;bmpfn db bmp_file_name |
;qwe: |
; mov eax,6 |
; mov ebx,bmpfn |
; mov ecx,0 |
; mov edx,0xFFFFFF |
; mov esi,bmp_load_area |
; mov edi,0 |
; int 0x40 |
; convert: |
movzx eax,word [bmp_load_area+28] |
mul dword [bmp_load_area+18] |
mov ebx,32 |
div ebx |
test edx,edx |
je noaddword |
inc eax |
noaddword: |
mov dword [dwps],eax ;dwps-doublewords per string |
shl eax,2 |
mov dword [bps],eax ;bps-bytes per string |
cmp dword [bmp_load_area+34],0 |
jne yespicsize ;if picture size is defined |
mul dword [bmp_load_area+22] |
mov dword [bmp_load_area+34],eax |
yespicsize: |
mov eax,bmp_load_area |
push eax |
add eax, [bmp_load_area+2];file size |
inc eax |
mov dword [soi],eax ;soi-start of image area for drawing |
pop eax |
add eax, [bmp_load_area+10] |
mov dword [sop],eax ;sop-start of picture in file |
add eax, [bmp_load_area+34] |
mov dword [eop],eax ;eop-end of picture in file |
mov eax, [bmp_load_area+18] |
mov ebx,3 |
mul ebx ;3x pixels in eax |
mov edi,dword [soi] ;initializing |
mov esi,dword [eop] |
sub esi,dword [bps] |
nextstring: |
push edi |
cmp word [bmp_load_area+28],24 |
jne convertno32 |
mov ecx,[dwps] |
cld |
rep movsd |
convert1: |
pop edi |
sub esi,dword [bps] |
sub esi,dword [bps] |
cmp esi,dword [sop] |
jb nomorestring |
add edi,eax |
jmp nextstring |
nomorestring: |
jmp end_bmp |
convertno32: |
mov ebx,bmp_load_area |
add ebx, [bmp_load_area+14] |
add ebx,14 ;start of color table |
push esi |
add esi,dword [bps] |
mov dword [eos],esi |
pop esi |
nextelem: |
push eax |
movzx eax,byte [esi] |
cmp word [bmp_load_area+28],4 |
je convert4bpp |
cmp word [bmp_load_area+28],1 |
je convert1bpp |
call converttable |
convert2: |
pop eax |
inc esi |
cmp esi,dword [eos] |
jae convert1 |
add edi,3 |
jmp nextelem |
convert4bpp: |
shl ax,4 |
shr al,4 |
push ax |
movzx eax,ah |
call converttable |
add edi,3 |
pop ax |
movzx eax,al |
call converttable |
jmp convert2 |
convert1bpp: |
mov ecx,eax |
mov edx,7 |
nextbit: |
xor eax,eax |
bt ecx,edx |
jnc noaddelem |
inc eax |
noaddelem: |
push edx |
call converttable |
pop edx |
dec edx |
cmp edx,0xffffffff |
je convert2 |
add edi,3 |
jmp nextbit |
converttable: |
shl eax,2 |
add eax,ebx |
mov edx, dword [eax] |
mov dword [edi],edx |
ret |
; DATA AREA |
;status dd 0 ;bit0=1 if file thread is created |
bps dd 0 |
dwps dd 0 |
soi dd 0 |
sop dd 0 |
eop dd 0 |
eos dd 0 |
;process dd 0 |
; DATA AREA |
fileinfo: |
dd 0 |
dd 0 |
dd 1 ;number of blocks of 512 bytes |
dd bmp_load_area |
dd bmp_temp_area |
string: |
db bmp_file_name,0 |
db ' ' |
db ' ' |
db ' ' |
db ' ',0 |
end_bmp: |
mov eax,dword [soi] |
mov dword [bmp_soi],eax |
} |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/pong3/trunk/ascgml.inc |
---|
0,0 → 1,49 |
lang equ ru |
; |
; Assembler |
; SMALL |
; CODE |
; GaMe |
; Libary |
; |
; Ver 0.03 By Pavlushin Evgeni (RUSSIA) |
; www.waptap@mail.ru |
;InfoList |
;0.01 correct |
;0.02 control ~14.05.2004 |
;0.03 all macros optimized by halyavin, add at ~07.06.2004 |
; corectiryemoe,corectnoe,step |
macro correct arg1,arg2,arg3 |
{ |
local plus,minus,equal |
mov eax,arg2 |
cmp arg1,eax |
je equal |
mov eax,arg3 |
ja minus |
plus: |
add arg1,eax |
jmp equal |
minus: |
sub arg1,eax |
equal: |
} |
macro control min,max,arg |
{ |
local gr,low,norm |
mov eax,max |
cmp arg,eax |
jg gr |
mov eax,min |
cmp arg,eax |
jnl norm |
gr: |
low: |
mov arg,eax |
norm: |
} |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/pong3/trunk/ascl.inc |
---|
0,0 → 1,499 |
lang equ ru ; ru en fr ge fi |
; |
; Assembler |
; SMALL |
; CODE |
; Libary |
; |
; Ver 0.09 By Pavlushin Evgeni (RUSSIA) |
; www.waptap@mail.ru |
;InfoList |
;0.01 scank,putpix,puttxt |
;0.02 label,random,colors |
;0.03 window,startwd,endwd,attributes |
;0.04 close,delay,scevent ~30.04.2004 |
;0.05 small random, ~04.05.2004 |
;0.06 wtevent ~09.05.2004 |
;0.07 timeevent ~23.05.2004 |
;0.08 txtput ~14.06.2004 |
;0.09 opendialog,savedialog ~20.06.2004 |
macro opendialog redproc,openoff,erroff,path,testtime |
{ |
local still, dlg_file, clip_file, redwait |
local button, key, red, zzz, still, zzz2, incf, file_is_open, zzz3 |
mov ecx,200 |
zzz3: |
mov byte [path+ecx-1],0 |
loop zzz3 |
dec byte [clip_file+7] |
incf: |
inc byte [clip_file+7] |
mov eax,6 |
mov ebx,clip_file |
mov ecx,0 |
mov edx,-1 |
mov esi,path |
int 0x40 |
cmp byte [clip_file+7],'Z' |
je erroff |
cmp eax,0xffffffff |
jne incf |
mov ecx,200 |
zzz2: |
mov byte [path+ecx],0 |
loop zzz2 |
mov ebx,clip_file |
mov ecx,path |
mov edx,100 |
mov esi,0 |
mov eax,33 |
int 0x40 |
mov ebx,dlg_file |
mov ecx,clip_file |
mov eax,19 |
int 0x40 |
still: |
scevent red,key,button |
cmp byte [path],0 |
jne file_is_open |
cmp dword [redwait],testtime ;20 |
jnae zzz |
mov eax,6 |
mov ebx,clip_file |
mov ecx,0 |
mov edx,-1 |
mov esi,path |
int 0x40 |
cmp eax,0xffffffff |
je erroff ;errexit |
mov dword [redwait],0 |
zzz: |
delay 5 |
inc dword [redwait] |
jmp still |
file_is_open: |
mov eax,32 |
mov ebx,clip_file |
int 0x40 |
jmp openoff |
key: ; key |
int 0x40 ; read (eax=2) |
jmp still |
button: ; button |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jne still |
mov eax,-1 ; close this program |
int 0x40 |
red: |
call redproc |
jmp still |
dlg_file db 'SYSXTREE ' |
clip_file db 'OPENCLPACLP' |
db 'O' ;Dialog type O-open S-save |
db 0 ;Marker |
redwait dd 0 |
} |
macro savedialog redproc,openoff,erroff,path,testtime |
{ |
local still, dlg_file, clip_file, redwait, zzz3 |
local button, key, red, zzz, still, zzz2, incf, file_is_open |
mov ecx,200 |
zzz3: |
mov byte [path+ecx-1],0 |
loop zzz3 |
dec byte [clip_file+7] |
incf: |
inc byte [clip_file+7] |
mov eax,6 |
mov ebx,clip_file |
mov ecx,0 |
mov edx,-1 |
mov esi,path |
int 0x40 |
cmp byte [clip_file+7],'Z' |
je erroff |
cmp eax,0xffffffff |
jne incf |
mov ecx,200 |
zzz2: |
mov byte [path+ecx],0 |
loop zzz2 |
mov ebx,clip_file |
mov ecx,path |
mov edx,100 |
mov esi,0 |
mov eax,33 |
int 0x40 |
mov ebx,dlg_file |
mov ecx,clip_file |
mov eax,19 |
int 0x40 |
still: |
scevent red,key,button |
cmp byte [path],0 |
jne file_is_open |
cmp dword [redwait],testtime ;20 |
jnae zzz |
mov eax,6 |
mov ebx,clip_file |
mov ecx,0 |
mov edx,-1 |
mov esi,path |
int 0x40 |
cmp eax,0xffffffff |
je erroff ;errexit |
mov dword [redwait],0 |
zzz: |
delay 5 |
inc dword [redwait] |
jmp still |
file_is_open: |
mov eax,32 |
mov ebx,clip_file |
int 0x40 |
jmp openoff |
key: ; key |
int 0x40 ; read (eax=2) |
jmp still |
button: ; button |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jne still |
mov eax,-1 ; close this program |
int 0x40 |
red: |
call redproc |
jmp still |
dlg_file db 'SYSXTREE ' |
clip_file db 'SAVECLPACLP' |
db 'S' ;Dialog type O-open S-save |
db 0 ;Marker |
redwait dd 0 |
} |
; RANDOM - generate random count (small) |
; (SYNTAX) RANDOM MaxCount,OutArgument |
; (SAMPLE) RANDOM 10000,eax |
; ( NOTE ) Maxint<65536 ; use random 65536,eax for more combinations |
randomuse = 0 |
macro random arg1,arg2 |
{ |
local rxproc |
randomuse = randomuse + 1 |
jmp rxproc |
if defined randomuse & randomuse = 1 |
randomproc: |
jmp rnj |
rsx1 dw 0x4321 |
rsx2 dw 0x1234 |
rnj: |
; mov eax,arg1 |
push bx |
push cx |
push dx |
push si |
push di |
mov cx,ax |
mov ax,word ptr rsx1 |
mov bx,word ptr rsx2 |
mov si,ax |
mov di,bx |
mov dl,ah |
mov ah,al |
mov al,bh |
mov bh,bl |
xor bl,bl |
rcr dl,1 |
rcr ax,1 |
rcr bx,1 |
add bx,di |
adc ax,si |
add bx,0x62e9 |
adc ax,0x3619 |
mov word ptr rsx1,bx |
mov word ptr rsx2,ax |
xor dx,dx |
cmp ax,0 |
je nodiv |
cmp cx,0 |
je nodiv |
div cx |
nodiv: |
mov ax,dx |
pop di |
pop si |
pop dx |
pop cx |
pop bx |
; mov arg2,0 |
; mov arg2,eax |
ret |
end if |
rxproc: |
mov eax,arg1 |
call randomproc |
mov arg2,0 |
mov arg2,eax |
} |
macro scank |
{ |
mov eax,10 |
int 0x40 |
} |
macro putpix x,y,color |
{ |
mov ebx,x |
mov ecx,y |
mov edx,color |
mov eax,1 |
int 0x40 |
} |
macro puttxt x,y,offs,size,color |
{ |
mov ebx,x |
shl ebx,16 |
add ebx,y |
mov ecx,color |
mov edx,offs |
mov esi,size |
mov eax,4 |
int 0x40 |
} |
;_ equ '____' |
;macro libtest x,y,color |
;{ |
;if x = as dword |
; mov ebx,x |
;end if |
; mov ecx,y |
; mov edx,color |
; mov eax,1 |
; int 0x40 |
;} |
macro outcount data, x, y, color, numtype |
{ |
mov ecx,data |
mov ebx,numtype |
mov bl,0 |
mov edx,x*65536+y |
mov esi,color |
mov eax,47 |
int 0x40 |
} |
; SCEVENT - Scan event |
macro scevent red,key,but |
{ |
mov eax,11 |
int 0x40 |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
; WTEVENT - Wait event |
macro wtevent red,key,but |
{ |
mov eax,10 |
int 0x40 |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
; TIMEEVENT - Wite for event with timeout |
macro timeevent xfps,noevent,red,key,but |
{ |
mov eax,23 |
mov ebx,xfps |
int 0x40 |
cmp eax,0 |
je noevent |
dec eax |
jz red |
dec eax |
jz key |
dec eax |
jz but |
} |
; CLOSE - Close program |
macro close |
{ |
mov eax,-1 |
int 0x40 |
} |
; DELAY - Create delay 1/100 sec |
; (SYNTAX) Delay time |
; (SAMPLE) Delay 100 ;delay 2 sec 1/100*200=2 sec |
macro delay arg1 |
{ |
mov eax,5 |
mov ebx,arg1 |
int 0x40 |
} |
; WINDOW - Draw window |
; (SYNTAX) WINDOW Xstart,Ystart,'Text',Color |
; (SAMPLE) WINDOW 10,10,640+8,480+24,window_Skinned |
macro window arg1,arg2,arg3,arg4,arg5 |
{ |
mov ebx,arg1*65536+arg3 |
mov ecx,arg2*65536+arg4 |
mov edx,arg5 |
mov eax,0 |
int 0x40 |
} |
macro colorwindow arg1,arg2,arg3,arg4,arg5,arg6,arg7 |
{ |
mov ebx,arg1*65536+arg3 |
mov ecx,arg2*65536+arg4 |
mov edx,arg5 |
mov esi,arg6 |
mov edi,arg7 |
mov eax,0 |
int 0x40 |
} |
; STARTWD - Start of window draw |
macro startwd |
{ |
mov eax,12 |
mov ebx,1 |
int 0x40 |
} |
; ENDWD - End window draw |
macro endwd |
{ |
mov eax,12 |
mov ebx,2 |
int 0x40 |
} |
; LABEL - Put text to frame |
; (SYNTAX) LABEL Xstart,Ystart,'Text',Color |
; (SAMPLE) LABEL 10,12,'Hello World!',cl_Green+font_Big |
macro label arg1,arg2,arg3,arg4 |
{ |
local asd,lab |
jmp asd |
lab db arg3 ;arg label |
asd: |
mov ebx,arg1 ;arg1=y arg2=x |
shl ebx,16 |
add ebx,arg2 |
mov ecx,arg4 ;arg4 color |
mov edx,lab |
mov esi,asd-lab ;calc size |
mov eax,4 |
int 0x40 |
} |
;Key's |
key_Up equ 178 |
key_Down equ 177 |
key_Right equ 179 |
key_Left equ 176 |
key_Esc equ 27 |
key_Space equ 32 |
key_Enter equ 13 |
key_Bspace equ 8 |
key_F1 equ 50 |
key_F2 equ 51 |
key_F3 equ 52 |
key_F4 equ 53 |
key_F5 equ 54 |
key_F6 equ 55 |
key_F7 equ 56 |
key_F8 equ 57 |
key_F9 equ 48 |
key_F10 equ 49 |
key_F11 equ 68 |
key_F12 equ 255 |
key_Home equ 180 |
key_End equ 181 |
key_PgUp equ 184 |
key_PgDown equ 183 |
;Attributes |
;Window Attributes |
window_Skinned equ 0x03000000 |
window_Type2 equ 0x02000000 |
window_Type1 equ 0x00000000 |
window_Reserve equ 0x01000000 |
;Font Attributes |
font_Big equ 0x10000000 |
;Colors |
cl_White equ 0x00ffffff |
cl_Black equ 0x00000000 |
cl_Grey equ 0x00888888 |
cl_Red equ 0x00ff0000 |
cl_Lime equ 0x0000ff00 |
cl_Green equ 0x0000af00 |
cl_Blue equ 0x000000ff |
cl_Purple equ 0x008080ff |
cl_Violet equ 0x008040ff |
cl_Cyan equ 0x0040e0ff |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/pong3/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm pong3.asm pong3 |
@pause |
/programs/pong3/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm pong3.asm pong3 |
@pause |
/programs/pong3/trunk/pong.bmp |
---|
Cannot display: file marked as a binary type. |
svn:mime-type = application/octet-stream |
Property changes: |
Added: svn:mime-type |
+application/octet-stream |
\ No newline at end of property |
/programs/pong3/trunk/pong3.asm |
---|
0,0 → 1,357 |
; |
; Pong Gaem 3Ver Mini Sample by Pavlushin Evgeni for ASCL |
; www.waptap@mail.ru |
; |
; Not use bmpfile! |
;****************************************************************************** |
use32 |
org 0x0 |
db 'MENUET01' ; 8 byte id |
dd 0x01 ; header version |
dd START ; start of code |
dd IM_END ; size of image |
dd 0x300000 ; memory for app |
dd 0x300000 ; esp |
dd temp_area , 0x0 ; I_Param , I_Icon |
;****************************************************************************** |
include 'ascl.inc' |
include 'ascgl.inc' |
include 'ascgml.inc' |
START: ; start of execution |
call draw_window |
; loadbmp '/RD/1/PONG.BMP',temp_area,I_END,tsoi |
convbmp pongfile,tsoi |
bmptoimg pongfile,tsoi,pong |
getimg pong,0,0,80,4,img |
getimg pong,0,4,80,4,img2 |
getimg pong,5,38,15,15,img3 |
getimg pong,0,8,80,20,img5 |
fullimg img4 , 80 ,20 ,0x00000000 ;black for rocket |
fullimg img6 , 15 ,15 ,0x00000000 ;black for ball |
still: |
scevent red,key,button |
outcount dword [scoreb],300,8,cl_Blue,5*65536 |
outcount dword [scorea],350,8,cl_Red,5*65536 |
del_images: |
setimg dword [ply1x],dword [ply1y],img4 |
setimg dword [ply2x],dword [ply2y],img4 |
setimg dword [ballx],dword [bally],img6 |
setimg dword [gravx],dword [gravy],img4 |
move_ply1: |
correct [ply1x],[ply1rx],4 |
correct [ply1y],[ply1ry],2 |
;automove ball |
mov eax,dword [ballxv] |
add dword [ballx],eax |
mov eax,dword [ballyv] |
add dword [bally],eax |
;autoslow ball |
cmp dword [ballxv],0 |
jl ballb |
balla: |
cmp dword [ballxv],2 |
jng balln |
dec dword [ballxv] |
jmp balln |
ballb: |
cmp dword [ballxv],-2 |
jnl balln |
inc dword [ballxv] |
jmp balln |
balln: |
cmp dword [ballyv],2 |
jng by_n |
dec dword [ballyv] |
by_n: |
;ball collusion of screen |
cmp dword [ballx],640-32 |
jna xa_ok |
neg dword [ballxv] |
xa_ok: |
cmp dword [ballx],6 |
jnb xb_ok |
neg dword [ballxv] |
xb_ok: |
;if ball far out of screen come back |
; is not work already |
cmp dword [bally],466 |
jng yax_ok |
call draw_window |
inc dword [scoreb] |
mov dword [bally],240 |
mov dword [ballx],310 |
mov dword [ballyv],2 |
random 5,dword [ballxv] |
sub dword [ballxv],2 |
yax_ok: |
cmp dword [bally],30 |
jnl yax_ok2 |
call draw_window |
inc dword [scorea] |
mov dword [bally],240 |
mov dword [ballx],310 |
mov dword [ballyv],2 |
random 5,dword [ballxv] |
sub dword [ballxv],2 |
yax_ok2: |
xorx: |
cmp dword [ballxv],0 |
jne norx |
random 5,dword [ballxv] |
sub dword [ballxv],2 |
cmp dword [ballxv],0 |
je xorx |
norx: |
;test on collusion ply1 of ball |
collusion_test: |
collimg img,[ply1x],[ply1y],img3,[ballx],[bally],eax |
cmp eax,1 |
jne not_coll |
neg dword [ballyv] |
add dword [bally],4 |
; neg dword [ballxv] |
not_coll: |
;test on collusion com of ball |
collusion_com: |
collimg img,[ply2x],[ply2y],img3,[ballx],[bally],eax |
cmp eax,1 |
jne not_collcom |
neg dword [ballyv] |
sub dword [bally],4 |
; neg dword [ballxv] |
not_collcom: |
;test on collusion gravity of ball |
collusion_grav: |
collimg img,[gravx],[gravy],img3,[ballx],[bally],eax |
cmp eax,1 |
jne not_collg |
neg dword [ballyv] |
; mov dword [ballxv],-20 |
cmp dword [ballyv],0 |
jl ab |
jg bf |
jmp not_collgx |
ab: |
sub dword [ballyv],25 |
jmp not_collgx |
bf: |
add dword [ballyv],25 |
not_collgx: |
cmp dword [ballxv],0 |
jl abx |
jg bfx |
jmp not_collg |
abx: |
sub dword [ballxv],8 ;15 |
jmp not_collg |
bfx: |
add dword [ballxv],8 |
; mov dword [ballyv],20 |
not_collg: |
;ply contorl |
cmp dword [ply1rx],560 |
jna plyok |
cmp dword [ply1rx],12000 |
jna paa |
mov dword [ply1rx],4 |
jmp plyok |
paa: |
mov dword [ply1rx],560 |
plyok: |
;com contorl |
cmp dword [ply2x],560 |
jna cplyok |
cmp dword [ply2x],12000 |
jna cpaa |
mov dword [ply2x],4 |
jmp cplyok |
cpaa: |
mov dword [ply2x],560 |
cplyok: |
;com move |
cx_move: |
cmp dword [bally],160 |
jna cno_m |
mov eax,dword [ballx] |
sub eax,30 |
cmp dword [ply2x],eax |
je cno_m |
cmp dword [ply2x],eax |
ja cm_m |
cm_p: |
add dword [ply2x],3 |
jmp cno_m |
cm_m: |
sub dword [ply2x],3 |
cno_m: |
;garvity |
gravity: |
cmp dword [gravtime],0 |
je no_dg |
dec dword [gravtime] |
no_dg: |
draw_gravity: |
cmp dword [gravtime],0 |
je nograv |
mov eax,dword [ply1x] |
mov ebx,dword [ply1y] |
add ebx,10 |
mov dword [gravx],eax |
mov dword [gravy],ebx |
jmp endgrav |
nograv: |
mov dword [gravx],1000 |
mov dword [gravy],1000 |
endgrav: |
redraw_images: |
setimg dword [ply1x],dword [ply1y],img |
setimg dword [ply2x],dword [ply2y],img2 ;2 |
setimg dword [ballx],dword [bally],img3 |
setimg dword [gravx],dword [gravy],img5 |
delay 1 ;don't generate delay for fast speed programm |
jmp still |
red: |
call draw_window |
jmp still |
key: ; key |
mov eax,2 |
int 0x40 |
cmp ah,key_Left |
jne no_l |
sub dword [ply1rx],32 ;16 |
no_l: |
cmp ah,key_Right |
jne no_r |
add dword [ply1rx],32 ;16 |
no_r: |
cmp ah,key_Up |
jne no_u |
sub dword [ply1ry],16 |
no_u: |
cmp ah,key_Down |
jne no_d |
add dword [ply1ry],16 |
no_d: |
cmp ah,key_Space |
jne no_sp |
mov dword [gravtime],100 |
no_sp: |
jmp still |
button: ; button |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jne noclose |
mov eax,-1 ; close this program |
int 0x40 |
noclose: |
jmp still |
draw_window: |
startwd |
window 0,0,640+8,480+24,window_Skinned |
label 12,8,'PONG: USE ARROW KEYS SCORE',cl_White+font_Big |
endwd |
ret |
; DATA AREA |
xt dd 100 |
yt dd 100 |
gravtime dd 10 |
gravx dd 1000 |
gravy dd 1000 |
ply1rx dd 200 |
ply1ry dd 50 |
ply1x dd 200 |
ply1y dd 50 |
ply2x dd 200 |
ply2y dd 400 |
ballx dd 200 |
bally dd 200 |
ballyv dd 3 |
ballxv dd 3 |
scorea dd 0 |
scoreb dd 0 |
counter dd 0 |
tsoi dd 0 |
pongfile: |
file 'pong.bmp' |
IM_END: |
temp: |
rb 20000 |
pong: |
rb 80*60*3+8 |
img: |
rb 32*32*3+8 |
img2: |
rb 32*32*3+8 |
img3: |
rb 32*32*3+8 |
img4: |
rb 80*20*3+8 |
img5: |
rb 32*32*3+8 |
img6: |
rb 15*15*3+8 |
temp_area: |
rb 0x15000 |
I_END: |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |