/programs/demos/eyes/trunk/eyes.asm |
---|
20,7 → 20,7 |
db "MENUET01" |
dd 0x01 |
dd ENTRANCE |
dd EYES_END |
dd I_END |
dd 0x3000 |
dd 0x3000 |
dd 0x0 |
30,61 → 30,93 |
ENTRANCE: ; start of code |
; ==== main ==== |
prepare_eyes: |
call 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 shape_window |
still: |
call draw_eyes ; draw those funny "eyes" |
mov eax,23 ; wait for event with timeout |
mov ebx,TIMEOUT |
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 |
cmp eax,1 ; redraw ? |
jnz no_draw |
call redraw_overlap |
no_draw: |
mov esi,imagedata ; calculate shape reference area |
mov edi,winref |
mov ecx,900 ; disable drag bar |
mov al,0 |
rep stosb |
cmp eax,2 ; key ? |
jz key |
mov ecx,30 ; calculate circles for eyes |
shape_loop: |
push ecx |
cmp eax,3 ; button ? |
jz button |
call copy_line ; duplicate (we have two eyes :) |
sub esi,30 |
call copy_line |
jmp still ; loop |
pop ecx |
loop shape_loop |
; EVENTS |
; -====- shape -====- |
key: |
mov eax,2 ; just read and ignore |
int 0x40 |
jmp still |
shape_window: |
button: ; analyze button |
mov eax,-1 ; this is button 1 - we have only one button :-) |
mov eax,50 ; set up shape reference area |
xor ebx,ebx |
mov ecx,winref |
int 0x40 |
jmp still |
; -====- declarations -====- |
call draw_window |
imagedata equ EYES_END |
skindata equ EYES_END+925 |
winref equ EYES_END+6325 |
still: |
; -====- shape -====- |
call draw_eyes ; draw those funny "eyes" |
shape_window: |
mov eax,50 ; set up shape reference area |
mov ebx,0 |
mov ecx,winref |
_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 |
ret |
; -====- redrawing -====- |
draw_eyes: ; check mousepos to disable blinking |
98,8 → 130,22 |
redraw_ok: |
mov [mouse],eax |
redraw_overlap: ; label for redraw event (without checkmouse) |
redraw_eyes: |
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 |
ret |
draw_window: |
mov eax,12 |
mov ebx,1 |
int 0x40 |
118,18 → 164,6 |
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 |
139,10 → 173,8 |
draw_eye_point: ; draw eye point (EAX=X, EBX=Y) |
pusha |
mov ecx, [mouse] ; ecx = mousex, edx = mousey |
mov edx,ecx |
shr ecx,16 |
and edx,0xFFFF |
movzx ecx, word [mouse+2] ; ecx = mousex, esi = mousey |
movzx esi, word [mouse] |
; ===> calculate position |
149,132 → 181,82 |
push eax |
push ebx |
mov byte [sign1],0 |
mov esi, [win_ebx] |
shr esi,16 |
add eax,esi |
mov edx, [win_ebx] |
shr edx,16 |
add eax,edx |
sub ecx,eax ; ECX=ECX-EAX (signed) , ECX=|ECX| |
jnc abs_ok_1 |
neg ecx |
mov byte [sign1],1 |
abs_ok_1: |
mov [temp1],ecx |
push ecx ; save x distance |
mov byte [sign2],0 |
mov esi,[win_ecx] |
shr esi,16 |
add ebx,esi |
sub edx,ebx ; EDX=EDX-EBX (signed) , EDX=|EDX| |
mov edx,[win_ecx] |
shr edx,16 |
add ebx,edx |
sub esi,ebx ; EDX=EDX-EBX (signed) , EDX=|EDX| |
jnc abs_ok_2 |
neg edx |
neg esi |
mov byte [sign2],1 |
abs_ok_2: |
mov [temp2],edx |
pop ebx |
pop eax |
mov [temp2],esi |
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 |
; ESI = ECX*ECX+ESI*ESI |
imul ecx, ecx |
imul esi, esi |
add esi, ecx |
push eax ; EDX*=EDX |
push ecx |
mov ecx,edx |
xor eax,eax |
xor ecx,ecx ; EDX=SQRT(EBX) |
xor edx,edx |
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 |
mov eax,1 |
sqrt_loop: |
; in this moment ecx=edx*edx, eax=1+2*edx |
add ecx,eax |
add eax,edi |
inc eax |
inc eax |
inc edx |
cmp ecx,ebx |
cmp ecx,esi |
jbe sqrt_loop |
dec edx |
mov esi,edx |
mov ax,si ; ESI=ESI/7 |
mov eax,edx ; EDX=EDX/7 |
mov dl,7 |
div dl |
and ax,0xFF |
mov si,ax ; ESI ? 0 : ESI=1 |
and eax,0xFF |
mov edx,eax ; EDX ? 0 : EDX=1 |
jnz nozeroflag1 |
mov si,1 |
inc edx |
nozeroflag1: |
pop eax |
pop edx |
pop ecx |
pop eax ; EAX = x distance |
; ECX=EAX/EDX |
div dl |
movzx ecx,al |
pop ebx |
push eax ; ECX=[temp1]/ESI |
push edx |
mov eax,[temp1] |
mov dx,si |
div dl |
mov cl,al |
and ecx,0xFF |
pop edx |
pop eax |
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: |
cmp byte [sign1], 0 |
jz @f |
neg ecx |
@@: |
add eax, ecx |
push eax ; EDX=[temp2]/ESI |
push ecx |
push eax ; ESI=[temp2]/EDX |
mov eax,[temp2] |
mov dx,si |
div dl |
mov dl,al |
and dx,0xFF |
pop ecx |
movzx esi,al |
pop eax |
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: |
cmp byte [sign2], 0 |
jz @f |
neg esi |
@@: |
add ebx, esi |
; <=== |
mov ecx,ebx ; draw point |
mov ebx,eax |
mov eax,13 |
dec ecx |
dec ecx |
dec ebx |
dec ebx |
; draw point |
lea ecx, [ebx-2] |
lea ebx, [eax-2] |
shl ecx,16 |
add ecx,4 |
shl ebx,16 |
288,82 → 270,13 |
; -====- 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 |
cmp al,0xFF |
jnz set_one |
mov al,0 |
jmp cpl_ok |
set_one: |
mov al,1 |
cpl_ok: |
; input is image: 0xFF = white pixel, 0 = black pixel |
; output is membership boolean: 0 = pixel no, 1 = pixel ok |
inc eax |
stosb |
loop cpl_loop |
ret |
375,14 → 288,19 |
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 |
temp1 dd 0 |
temp2 dd 0 |
sign1 db 0 |
sign2 db 0 |
sign1 db ? |
sign2 db ? |
align 4 |
temp2 dd ? |
EYES_END: ; end of code |
file "EYES.RAW" |
skindata rb 60*30*3 |
winref rb 45*60 |
/programs/demos/eyes/trunk/macros.inc |
---|
143,6 → 143,10 |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
174,7 → 178,7 |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0')) |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
218,13 → 222,7 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
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) |
rb (1024-52) |
} |
struct process_information |
/programs/demos/bgitest/trunk/bgifont.inc |
---|
4,7 → 4,7 |
; |
; Created: December 16, 2004 |
; |
; Last changed: August 27, 2006 |
; Last changed: February 2, 2005 |
; |
; Compile with FASM |
237,16 → 237,18 |
mov esi,edi ; esi->FontName |
mov [.dest],edi ; ptr to load font |
if ~ BGI_LEVEL eq KERNEL |
mov eax, 70 |
mov ebx, .fontattr |
mov [.fsize],1 |
mov eax,58 |
mov ebx,.fontinfo |
int 0x40 |
test eax, eax |
jnz .fail |
dps2 '1' |
mov eax, [.fileattr+32] |
mov [.fsize], eax |
shr ebx,9 |
inc ebx |
mov [.fsize],ebx |
mov ebx,.fontinfo |
mov eax,70 |
mov eax,58 |
int 0x40 ; ebx - file size |
else |
push edi esi edx |
338,22 → 340,11 |
.fontinfo: |
dd 0 |
dd 0 |
dd 0 |
.fsize dd 0 |
.dest dd 0 |
.fontfullname: |
dd 0x10000 |
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' |
488,7 → 479,6 |
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 |
700,7 → 690,7 |
.color dd ? |
.vec_end dd ? |
BGIfont_Ptr dd 0 |
BGIheight dw ? |
width dd ? |
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/FONTS/' |
BGIFONT_PATH equ '/RD/1/' |
_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.fontfullname |
mov esi,_BGIfont_Prepare.fontattr-1 |
mov edx,_BGIfont_Prepare.dest+8 |
mov esi,BGIfont_Coo-1 |
sub esi,edx |
add ecx,0x3b800b8 |
BGIfont_Outtext |
/programs/demos/bgitest/trunk/macros.inc |
---|
143,6 → 143,10 |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
174,7 → 178,7 |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0')) |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
218,13 → 222,7 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
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) |
rb (1024-52) |
} |
struct process_information |
/programs/demos/3dcube2/trunk/macros.inc |
---|
123,10 → 123,8 |
end if |
} |
macro __mov reg,a,b { ; mike.dld |
if (~a eq)&(~b eq) |
mpack reg,a,b |
else if (~a eq)&(b eq) |
macro __mov reg,a { ; mike.dld |
if ~a eq |
mov reg,a |
end if |
} |
143,6 → 141,11 |
; 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> |
174,7 → 177,7 |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0')) |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
218,13 → 221,7 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
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) |
rb (1024-52) |
} |
struct process_information |
/programs/demos/colors/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm colors.asm colors |
@pause |
/programs/demos/colors/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm colors.asm colors |
@pause |
/programs/demos/colors/trunk/colors.asm |
---|
0,0 → 1,206 |
; |
; COLOR TABLE |
; |
; Compile with FASM for Menuet |
; |
use32 |
org 0x0 |
db 'MENUET00' ; 8 byte id |
dd 38 ; required os |
dd START ; program start |
dd I_END ; program image size |
dd 0x1000 ; required amount of memory |
dd 0x1000 ; esp = 0x7FFF0 |
dd 0x00000000 ; reserved=no extended header |
include 'lang.inc' |
include 'macros.inc' |
START: ; start of execution |
call shape_window |
call draw_window ; at first, draw the window |
still: |
mov eax,10 ; wait here for event |
int 0x40 |
cmp eax,1 ; redraw request ? |
jz red |
cmp eax,2 ; key in buffer ? |
jz key |
cmp eax,3 ; button in buffer ? |
jz button |
jmp still |
red: ; redraw |
call draw_window |
jmp still |
key: ; key |
mov eax,2 ; just read it and ignore |
int 0x40 |
jmp still |
button: ; button |
mov eax,17 ; get id |
int 0x40 |
cmp ah,1 ; button id=1 ? |
jnz noclose |
mov eax,0xffffffff ; close this program |
int 0x40 |
noclose: |
jmp still |
shape_window: |
pusha |
mov eax,50 ; give the address of reference area |
mov ebx,0 |
mov ecx,shape_reference |
int 0x40 |
mov eax,50 ; give the scaling ( 5 -> 2^5 ) |
mov ebx,1 |
mov ecx,5 |
int 0x40 |
popa |
ret |
shape_reference: |
db 1,0,1,0,1,0,1,0 |
db 0,1,0,1,0,1,0,1 |
db 1,0,1,0,1,0,1,0 |
db 0,1,0,1,0,1,0,1 |
db 1,0,1,0,1,0,1,0 |
db 0,1,0,1,0,1,0,1 |
db 1,0,1,0,1,0,1,0 |
db 0,1,0,1,0,1,0,1 |
; ********************************************* |
; ******* WINDOW DEFINITIONS AND DRAW ******** |
; ********************************************* |
draw_window: |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,1 ; 1, start of draw |
int 0x40 |
; DRAW WINDOW |
mov eax,0 ; function 0 : define and draw window |
mov ebx,100*65536+255 ; [x start] *65536 + [x size] |
mov ecx,100*65536+255 ; [y start] *65536 + [y size] |
mov edx,0x00000000 |
mov esi,0x8099bbff ; color of grab bar RRGGBB,8->color glide |
mov edi,0x0099bbee ; color of frames RRGGBB |
int 0x40 |
call draw_colors |
; CLOSE BUTTON |
mov eax,8 ; function 8 : define and draw button |
mov ebx,5*65536+12 ; [x start] *65536 + [x size] |
mov ecx,5*65536+12 ; [y start] *65536 + [y size] |
mov edx,1 ; button id |
mov esi,0xccaa22 ; button color RRGGBB |
int 0x40 |
mov eax,12 ; function 12:tell os about windowdraw |
mov ebx,2 ; 2, end of draw |
int 0x40 |
ret |
draw_colors: |
pusha |
mov [bar],dword 0 |
mov eax,-1 |
mov ebx,0 |
mov ecx,0 |
mov edx,0 |
mov edi,0 |
dc1: |
add eax,1 |
cmp eax,256 |
jb na1 |
mov eax,0 |
add ebx,1 |
cmp ebx,256 |
jb na1 |
mov ebx,0 |
add ecx,5 |
na1: |
mov dl,al |
shl edx,8 |
mov dl,bl |
shl edx,8 |
mov dl,cl |
na2: |
pusha |
push edx |
xor edx,edx |
mov eax,edi |
mov ebx,256 |
div ebx |
mov ebx,edx |
mov ecx,eax |
add ebx,[addx] |
add ecx,[addy] |
pop edx |
mov eax,1 |
int 0x40 |
popa |
add edi,1 |
cmp edi,256*256 |
jb dc1 |
popa |
ret |
; DATA AREA |
I_END: |
bar dd ? |
add1 dd ? |
add2 dd ? |
addx dd ? |
addy dd ? |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/demos/colors/trunk/macros.inc |
---|
0,0 → 1,266 |
; new application structure |
macro meos_app_start |
{ |
use32 |
org 0x0 |
db 'MENUET01' |
dd 0x01 |
dd __start |
dd __end |
dd __memory |
dd __stack |
if used __params & ~defined __params |
dd __params |
else |
dd 0x0 |
end if |
dd 0x0 |
} |
MEOS_APP_START fix meos_app_start |
macro code |
{ |
__start: |
} |
CODE fix code |
macro data |
{ |
__data: |
} |
DATA fix data |
macro udata |
{ |
if used __params & ~defined __params |
__params: |
db 0 |
__end: |
rb 255 |
else |
__end: |
end if |
__udata: |
} |
UDATA fix udata |
macro meos_app_end |
{ |
align 32 |
rb 2048 |
__stack: |
__memory: |
} |
MEOS_APP_END fix meos_app_end |
; macro for defining multiline text data |
struc mstr [sstring] |
{ |
forward |
local ssize |
virtual at 0 |
db sstring |
ssize = $ |
end virtual |
dd ssize |
db sstring |
common |
dd -1 |
} |
; strings |
macro sz name,[data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if used name |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
macro lsz name,[lng,data] { ; from MFAR [mike.dld] |
common |
if used name |
label name |
end if |
forward |
if (used name)&(lang eq lng) |
db data |
end if |
common |
if used name |
.size = $-name |
end if |
} |
; easy system call macro |
macro mpack dest, hsrc, lsrc |
{ |
if (hsrc eqtype 0) & (lsrc eqtype 0) |
mov dest, (hsrc) shl 16 + lsrc |
else |
if (hsrc eqtype 0) & (~lsrc eqtype 0) |
mov dest, (hsrc) shl 16 |
add dest, lsrc |
else |
mov dest, hsrc |
shl dest, 16 |
add dest, lsrc |
end if |
end if |
} |
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 |
} |
macro mcall a,b,c,d,e,f { ; mike.dld |
__mov eax,a |
__mov ebx,b |
__mov ecx,c |
__mov edx,d |
__mov esi,e |
__mov edi,f |
int 0x40 |
} |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
macro add arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
inc arg1 |
else |
add arg1,arg2 |
end if |
else |
add arg1,arg2 |
end if |
} |
macro sub arg1,arg2 |
{ |
if (arg2 eqtype 0) |
if (arg2) = 1 |
dec arg1 |
else |
sub arg1,arg2 |
end if |
else |
sub arg1,arg2 |
end if |
} |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
xor arg1,arg1 |
inc arg1 |
else if (arg2) = -1 |
or arg1,-1 |
else if (arg2) > -128 & (arg2) < 128 |
push arg2 |
pop arg1 |
else |
mov arg1,arg2 |
end if |
else |
mov arg1,arg2 |
end if |
} |
macro struct name |
{ |
virtual at 0 |
name name |
sizeof.#name = $ - name |
end virtual |
} |
; structures used in MeOS |
struc process_information |
{ |
.cpu_usage dd ? ; +0 |
.window_stack_position dw ? ; +4 |
.window_stack_value dw ? ; +6 |
.not_used1 dw ? ; +8 |
.process_name rb 12 ; +10 |
.memory_start dd ? ; +22 |
.used_memory dd ? ; +26 |
.PID dd ? ; +30 |
.x_start dd ? ; +34 |
.y_start dd ? ; +38 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
rb (1024-52) |
} |
struct process_information |
struc system_colors |
{ |
.frame dd ? |
.grab dd ? |
.grab_button dd ? |
.grab_button_text dd ? |
.grab_text dd ? |
.work dd ? |
.work_button dd ? |
.work_button_text dd ? |
.work_text dd ? |
.work_graph dd ? |
} |
struct system_colors |
; constants |
; events |
EV_IDLE = 0 |
EV_TIMER = 0 |
EV_REDRAW = 1 |
EV_KEY = 2 |
EV_BUTTON = 3 |
EV_EXIT = 4 |
EV_BACKGROUND = 5 |
EV_MOUSE = 6 |
EV_IPC = 7 |
EV_STACK = 8 |
; event mask bits for function 40 |
EVM_REDRAW = 1b |
EVM_KEY = 10b |
EVM_BUTTON = 100b |
EVM_EXIT = 1000b |
EVM_BACKGROUND = 10000b |
EVM_MOUSE = 100000b |
EVM_IPC = 1000000b |
EVM_STACK = 10000000b |
Property changes: |
Added: svn:eol-style |
+native |
\ No newline at end of property |
/programs/demos/fire/trunk/build.bat |
---|
File deleted |
\ No newline at end of file |
/programs/demos/fire/trunk/fire.asm |
---|
13,6 → 13,7 |
dd mem_end |
dd 0,0 ; no parameters, no path |
;include 'lang.inc' |
include 'macros.inc' |
START: |
/programs/demos/fire/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm fire.asm fire |
@pause |
/programs/demos/fire/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm fire.asm fire |
@pause |
/programs/demos/fire/trunk/macros.inc |
---|
143,6 → 143,10 |
; optimize the code for size |
__regs fix <eax,ebx,ecx,edx,esi,edi,ebp,esp> |
174,7 → 178,7 |
macro mov arg1,arg2 |
{ |
if (arg1 in __regs) & ((arg2 eqtype 0) | (arg2 eqtype '0')) |
if (arg1 in __regs) & (arg2 eqtype 0) |
if (arg2) = 0 |
xor arg1,arg1 |
else if (arg2) = 1 |
218,13 → 222,7 |
.x_size dd ? ; +42 |
.y_size dd ? ; +46 |
.slot_state dw ? ; +50 |
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) |
rb (1024-52) |
} |
struct process_information |
/programs/demos/fire2/trunk/build.bat |
---|
File deleted |
\ No newline at end of file |
/programs/demos/fire2/trunk/fire2.asm |
---|
9,6 → 9,7 |
dd mem_end |
dd 0x0, 0x0 |
;include 'lang.inc' |
START: |
mov edi, my_img |
/programs/demos/fire2/trunk/build_en.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix en >lang.inc |
@fasm fire2.asm fire2 |
@pause |
/programs/demos/fire2/trunk/build_ru.bat |
---|
0,0 → 1,4 |
@erase lang.inc |
@echo lang fix ru >lang.inc |
@fasm fire2.asm fire2 |
@pause |