Subversion Repositories Kolibri OS

Compare Revisions

No changes between revisions

Ignore whitespace Rev 204 → Rev 205

/programs/demos/colors/trunk/colors.asm
File deleted
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/demos/colors/trunk/build_en.bat
File deleted
\ No newline at end of file
/programs/demos/colors/trunk/build_ru.bat
File deleted
\ No newline at end of file
/programs/demos/colors/trunk/macros.inc
File deleted
\ No newline at end of file
Property changes:
Deleted: svn:eol-style
-native
\ No newline at end of property
/programs/demos/3dcube2/trunk/macros.inc
123,8 → 123,10
end if
}
 
macro __mov reg,a { ; mike.dld
if ~a eq
macro __mov reg,a,b { ; mike.dld
if (~a eq)&(~b eq)
mpack reg,a,b
else if (~a eq)&(b eq)
mov reg,a
end if
}
141,11 → 143,6
 
 
 
; language for programs
lang fix ru ; ru en fr ge fi
 
 
 
; optimize the code for size
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
 
177,7 → 174,7
 
macro mov arg1,arg2
{
if (arg1 in __regs) & (arg2 eqtype 0)
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
if (arg2) = 0
xor arg1,arg1
else if (arg2) = 1
221,7 → 218,13
.x_size dd ? ; +42
.y_size dd ? ; +46
.slot_state dw ? ; +50
rb (1024-52)
dw ? ; +52 - reserved
.client_left dd ? ; +54
.client_top dd ? ; +58
.client_width dd ? ; +62
.client_height dd ? ; +66
.wnd_state db ? ; +70
rb (1024-71)
}
struct process_information
 
/programs/demos/bgitest/trunk/bgifont.inc
4,7 → 4,7
;
; Created: December 16, 2004
;
; Last changed: February 2, 2005
; Last changed: August 27, 2006
;
; Compile with FASM
 
237,18 → 237,16
mov esi,edi ; esi->FontName
mov [.dest],edi ; ptr to load font
if ~ BGI_LEVEL eq KERNEL
mov [.fsize],1
mov eax,58
mov eax, 70
mov ebx, .fontattr
int 0x40
test eax, eax
jnz .fail
dps2 '1'
mov eax, [.fileattr+32]
mov [.fsize], eax
mov ebx,.fontinfo
int 0x40
test eax,eax
jnz .fail
dps2 '1'
shr ebx,9
inc ebx
mov [.fsize],ebx
mov ebx,.fontinfo
mov eax,58
mov eax,70
int 0x40 ; ebx - file size
else
push edi esi edx
340,11 → 338,22
.fontinfo:
dd 0
dd 0
dd 0
.fsize dd 0
.dest dd 0
dd 0x10000
.fontfullname:
db BGIFONT_PATH
.font db 'FONT.CHR',0
 
.fontattr:
dd 5
dd 0
dd 0
dd 0
dd .fileattr
db 0
dd .fontfullname
.fileattr rd 40/4
else
.dest dd 0
.font db 'FONT CHR'
479,6 → 488,7
loop .next
mov ecx,edx ; ecx - x size
movzx dx,byte[edi+6]
mov [BGIheight],dx
mov ebx,[esp+36]
and ebx,BGI_HAMASK
cmp ebx,BGI_HARIGHT
690,7 → 700,7
.color dd ?
.vec_end dd ?
BGIfont_Ptr dd 0
width dd ?
BGIheight dw ?
deform dd ?
BGIangle dd ?
Xscale dd ?
/programs/demos/bgitest/trunk/bgitest.asm
7,7 → 7,7
; Last changed: February 2, 2005
;
 
BGIFONT_PATH equ '/RD/1/'
BGIFONT_PATH equ '/RD/1/FONTS/'
_X equ 340
_Y equ 240
 
35,8 → 35,8
mcall 47,0x80100,,,0x10ffffff
jecxz .nofont
lea ebx,[edx+80 shl 16+12]
mov edx,_BGIfont_Prepare.dest+8
mov esi,BGIfont_Coo-1
mov edx,_BGIfont_Prepare.fontfullname
mov esi,_BGIfont_Prepare.fontattr-1
sub esi,edx
add ecx,0x3b800b8
BGIfont_Outtext
/programs/demos/bgitest/trunk/macros.inc
143,10 → 143,6
 
 
 
 
 
 
 
; optimize the code for size
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
 
178,7 → 174,7
 
macro mov arg1,arg2
{
if (arg1 in __regs) & (arg2 eqtype 0)
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
if (arg2) = 0
xor arg1,arg1
else if (arg2) = 1
222,7 → 218,13
.x_size dd ? ; +42
.y_size dd ? ; +46
.slot_state dw ? ; +50
rb (1024-52)
dw ? ; +52 - reserved
.client_left dd ? ; +54
.client_top dd ? ; +58
.client_width dd ? ; +62
.client_height dd ? ; +66
.wnd_state db ? ; +70
rb (1024-71)
}
struct process_information
 
/programs/demos/eyes/trunk/eyes.asm
20,7 → 20,7
db "MENUET01"
dd 0x01
dd ENTRANCE
dd I_END
dd EYES_END
dd 0x3000
dd 0x3000
dd 0x0
30,93 → 30,61
ENTRANCE: ; start of code
 
; ==== main ====
prepare_eyes:
 
mov esi,imagedata ; transform grayscale to putimage format
mov edi,skindata
mov ecx,30
transform_loop:
push ecx
mov ecx,30
lp1:
lodsb
stosb
stosb
stosb
loop lp1
sub esi,30
mov ecx,30
lp2:
lodsb
stosb
stosb
stosb
loop lp2
pop ecx
loop transform_loop
call prepare_eyes
 
mov eax,14 ; calculating screen position
call shape_window
 
still:
 
call draw_eyes ; draw those funny "eyes"
 
mov eax,23 ; wait for event with timeout
mov ebx,TIMEOUT
int 0x40
shr eax,1
mov ax,59
sub eax,30*65536
mov [win_ebx],eax
mov [win_ecx],dword 10*65536+44
 
mov esi,imagedata ; calculate shape reference area
mov edi,winref
mov ecx,900 ; disable drag bar
mov al,0
rep stosb
cmp eax,1 ; redraw ?
jnz no_draw
call redraw_overlap
no_draw:
 
mov ecx,30 ; calculate circles for eyes
shape_loop:
push ecx
cmp eax,2 ; key ?
jz key
 
call copy_line ; duplicate (we have two eyes :)
sub esi,30
call copy_line
cmp eax,3 ; button ?
jz button
 
pop ecx
loop shape_loop
jmp still ; loop
 
; EVENTS
 
key:
mov eax,2 ; just read and ignore
int 0x40
jmp still
 
button: ; analyze button
mov eax,-1 ; this is button 1 - we have only one button :-)
int 0x40
jmp still
 
; -====- declarations -====-
 
imagedata equ EYES_END
skindata equ EYES_END+925
winref equ EYES_END+6325
 
; -====- shape -====-
 
shape_window:
 
mov eax,50 ; set up shape reference area
xor ebx,ebx
mov ebx,0
mov ecx,winref
int 0x40
 
call draw_window
ret
 
still:
 
call draw_eyes ; draw those funny "eyes"
 
_wait:
mov eax,23 ; wait for event with timeout
mov ebx,TIMEOUT
int 0x40
dec eax
jz redraw
dec eax
jz key
dec eax
jnz still
button:
or eax, -1
int 0x40
key:
mov al, 2
int 0x40
jmp still
redraw:
call draw_window
call redraw_eyes
jmp _wait
 
; -====- redrawing -====-
 
draw_eyes: ; check mousepos to disable blinking
130,22 → 98,8
redraw_ok:
mov [mouse],eax
 
redraw_eyes:
mov eax,7
mov ebx,skindata
mov ecx,60*65536+30
mov edx,15
int 0x40
redraw_overlap: ; label for redraw event (without checkmouse)
 
mov eax,15
mov ebx,30
call draw_eye_point
add eax,30
call draw_eye_point
ret
 
draw_window:
 
mov eax,12
mov ebx,1
int 0x40
164,6 → 118,18
mov edx,1
int 0x40
 
mov eax,7
mov ebx,skindata
mov ecx,60*65536+30
mov edx,15
int 0x40
 
mov eax,15
mov ebx,30
call draw_eye_point
add eax,30
call draw_eye_point
 
mov eax,12
mov ebx,2
int 0x40
173,8 → 139,10
draw_eye_point: ; draw eye point (EAX=X, EBX=Y)
pusha
 
movzx ecx, word [mouse+2] ; ecx = mousex, esi = mousey
movzx esi, word [mouse]
mov ecx, [mouse] ; ecx = mousex, edx = mousey
mov edx,ecx
shr ecx,16
and edx,0xFFFF
 
; ===> calculate position
 
181,82 → 149,132
push eax
push ebx
mov byte [sign1],0
mov edx, [win_ebx]
shr edx,16
add eax,edx
mov esi, [win_ebx]
shr esi,16
add eax,esi
sub ecx,eax ; ECX=ECX-EAX (signed) , ECX=|ECX|
jnc abs_ok_1
neg ecx
mov byte [sign1],1
abs_ok_1:
push ecx ; save x distance
mov [temp1],ecx
mov byte [sign2],0
mov edx,[win_ecx]
shr edx,16
add ebx,edx
sub esi,ebx ; EDX=EDX-EBX (signed) , EDX=|EDX|
mov esi,[win_ecx]
shr esi,16
add ebx,esi
sub edx,ebx ; EDX=EDX-EBX (signed) , EDX=|EDX|
jnc abs_ok_2
neg esi
neg edx
mov byte [sign2],1
abs_ok_2:
mov [temp2],esi
mov [temp2],edx
pop ebx
pop eax
 
; ESI = ECX*ECX+ESI*ESI
imul ecx, ecx
imul esi, esi
add esi, ecx
push eax ; ECX*=ECX
push edx
xor eax,eax
xor edx,edx
mov ax,cx
mul cx
shl edx,16
or eax,edx
mov ecx,eax
pop edx
pop eax
 
xor ecx,ecx ; EDX=SQRT(EBX)
push eax ; EDX*=EDX
push ecx
mov ecx,edx
xor eax,eax
xor edx,edx
mov eax,1
mov ax,cx
mul cx
shl edx,16
or eax,edx
mov edx,eax
pop ecx
pop eax
 
push ebx
push ecx
push edx
push eax
mov ebx,ecx ; EBX=ECX+EDX
add ebx,edx
xor edi,edi ; ESI=SQRT(EBX)
mov ecx,edi
mov edx,edi
inc edi
mov eax,edi
inc edi
sqrt_loop:
; in this moment ecx=edx*edx, eax=1+2*edx
add ecx,eax
inc eax
inc eax
add eax,edi
inc edx
cmp ecx,esi
cmp ecx,ebx
jbe sqrt_loop
dec edx
mov eax,edx ; EDX=EDX/7
mov esi,edx
mov ax,si ; ESI=ESI/7
mov dl,7
div dl
and eax,0xFF
mov edx,eax ; EDX ? 0 : EDX=1
and ax,0xFF
mov si,ax ; ESI ? 0 : ESI=1
jnz nozeroflag1
inc edx
mov si,1
nozeroflag1:
 
pop eax ; EAX = x distance
; ECX=EAX/EDX
pop eax
pop edx
pop ecx
pop ebx
 
push eax ; ECX=[temp1]/ESI
push edx
mov eax,[temp1]
mov dx,si
div dl
movzx ecx,al
pop ebx
mov cl,al
and ecx,0xFF
pop edx
pop eax
 
cmp byte [sign1], 0
jz @f
neg ecx
@@:
add eax, ecx
cmp byte [sign1],1
je subtract_1
add eax,ecx ; EAX=EAX+ECX
jmp calc_ok_1
subtract_1:
sub eax,ecx ; EAX=EAX-ECX
calc_ok_1:
 
push eax ; ESI=[temp2]/EDX
push eax ; EDX=[temp2]/ESI
push ecx
mov eax,[temp2]
mov dx,si
div dl
movzx esi,al
mov dl,al
and dx,0xFF
pop ecx
pop eax
 
cmp byte [sign2], 0
jz @f
neg esi
@@:
add ebx, esi
cmp byte [sign2],1
je subtract_2
add ebx,edx ; EBX=EBX+EDX
jmp calc_ok_2
subtract_2:
sub ebx,edx ; EBX=EBX-EDX
calc_ok_2:
 
; <===
 
; draw point
lea ecx, [ebx-2]
lea ebx, [eax-2]
mov ecx,ebx ; draw point
mov ebx,eax
mov eax,13
dec ecx
dec ecx
dec ebx
dec ebx
shl ecx,16
add ecx,4
shl ebx,16
270,13 → 288,82
 
; -====- working on images and window -====-
 
prepare_eyes:
 
;mov eax,6 ; load EYES.RAW
;mov ebx,graphix
;mov ecx,0x00000000
;mov edx,0xFFFFFFFF
;mov esi,imagedata
;int 0x40
;cmp eax,0xFFFFFFFF
;jnz filefound
 
;mov eax,-1 ; file not exists...
;int 0x40
 
;filefound:
mov esi,imagedata+25 ; transform grayscale to putimage format
mov edi,skindata
mov ecx,30
transform_loop:
push ecx
mov ecx,30
lp1:
lodsb
stosb
stosb
stosb
loop lp1
sub esi,30
mov ecx,30
lp2:
lodsb
stosb
stosb
stosb
loop lp2
pop ecx
loop transform_loop
 
mov eax,14 ; calculating screen position
int 0x40
shr eax,1
mov ax,59
sub eax,30*65536
mov [win_ebx],eax
mov [win_ecx],dword 10*65536+44
 
mov esi,imagedata+25 ; calculate shape reference area
mov edi,winref
mov ecx,900 ; disable drag bar
mov al,0
rep stosb
 
mov ecx,30 ; calculate circles for eyes
shape_loop:
push ecx
 
call copy_line ; duplicate (we have two eyes :)
sub esi,30
call copy_line
 
pop ecx
loop shape_loop
 
ret
 
copy_line: ; copy single line to shape reference area
mov ecx,30
cpl_loop:
lodsb
; input is image: 0xFF = white pixel, 0 = black pixel
; output is membership boolean: 0 = pixel no, 1 = pixel ok
inc eax
cmp al,0xFF
jnz set_one
mov al,0
jmp cpl_ok
set_one:
mov al,1
cpl_ok:
stosb
loop cpl_loop
ret
288,19 → 375,14
win_ebx dd 0x0
win_ecx dd 0x0
mouse dd 0xFFFFFFFF
;graphix db "EYES.RAW "
 
EYES_END: ; end of code
imagedata:
; texture is 900 bytes starting from 25th
file "eyes.raw":25,900
I_END:
 
; temporary storage for math routines
 
sign1 db ?
sign2 db ?
align 4
temp2 dd ?
temp1 dd 0
temp2 dd 0
sign1 db 0
sign2 db 0
 
skindata rb 60*30*3
winref rb 45*60
EYES_END: ; end of code
file "EYES.RAW"
/programs/demos/eyes/trunk/macros.inc
143,10 → 143,6
 
 
 
 
 
 
 
; optimize the code for size
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
 
178,7 → 174,7
 
macro mov arg1,arg2
{
if (arg1 in __regs) & (arg2 eqtype 0)
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
if (arg2) = 0
xor arg1,arg1
else if (arg2) = 1
222,7 → 218,13
.x_size dd ? ; +42
.y_size dd ? ; +46
.slot_state dw ? ; +50
rb (1024-52)
dw ? ; +52 - reserved
.client_left dd ? ; +54
.client_top dd ? ; +58
.client_width dd ? ; +62
.client_height dd ? ; +66
.wnd_state db ? ; +70
rb (1024-71)
}
struct process_information
 
/programs/demos/fire/trunk/build_ru.bat
File deleted
\ No newline at end of file
/programs/demos/fire/trunk/build_en.bat
File deleted
\ No newline at end of file
/programs/demos/fire/trunk/build.bat
0,0 → 1,2
@fasm fire.asm fire
@pause
/programs/demos/fire/trunk/fire.asm
13,7 → 13,6
dd mem_end
dd 0,0 ; no parameters, no path
 
;include 'lang.inc'
include 'macros.inc'
 
START:
/programs/demos/fire/trunk/macros.inc
143,10 → 143,6
 
 
 
 
 
 
 
; optimize the code for size
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp>
 
178,7 → 174,7
 
macro mov arg1,arg2
{
if (arg1 in __regs) & (arg2 eqtype 0)
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0'))
if (arg2) = 0
xor arg1,arg1
else if (arg2) = 1
222,7 → 218,13
.x_size dd ? ; +42
.y_size dd ? ; +46
.slot_state dw ? ; +50
rb (1024-52)
dw ? ; +52 - reserved
.client_left dd ? ; +54
.client_top dd ? ; +58
.client_width dd ? ; +62
.client_height dd ? ; +66
.wnd_state db ? ; +70
rb (1024-71)
}
struct process_information
 
/programs/demos/fire2/trunk/build_ru.bat
File deleted
\ No newline at end of file
/programs/demos/fire2/trunk/build_en.bat
File deleted
\ No newline at end of file
/programs/demos/fire2/trunk/build.bat
0,0 → 1,2
@fasm fire2.asm fire2
@pause
/programs/demos/fire2/trunk/fire2.asm
9,7 → 9,6
dd mem_end
dd 0x0, 0x0
 
;include 'lang.inc'
START:
 
mov edi, my_img