forked from KolibriOS/kolibrios
Some programs now use window style Y=4
git-svn-id: svn://kolibrios.org@661 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
0c4aa274bd
commit
0ceaac39cf
109
programs/demos/3DS/3DMATH.ASM
Normal file
109
programs/demos/3DS/3DMATH.ASM
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
x3d equ 0
|
||||||
|
y3d equ 2
|
||||||
|
z3d equ 4
|
||||||
|
vec_x equ 0
|
||||||
|
vec_y equ 4
|
||||||
|
vec_z equ 8
|
||||||
|
; 3d point - triple integer word coordinate
|
||||||
|
; vector - triple float dword coordinate
|
||||||
|
;----------------------in: --------------------------------
|
||||||
|
;------------------------ esi - pointer to 1st 3d point ---
|
||||||
|
;------------------------ edi - pointer to 2nd 3d point ---
|
||||||
|
;------------------------ ebx - pointer to result vector --
|
||||||
|
;---------------------- out : none ------------------------
|
||||||
|
make_vector:
|
||||||
|
fninit
|
||||||
|
fild word[edi+x3d] ;edi+x3d
|
||||||
|
fisub word[esi+x3d] ;esi+x3d
|
||||||
|
fstp dword[ebx+vec_x]
|
||||||
|
|
||||||
|
fild word[edi+y3d]
|
||||||
|
fisub word[esi+y3d]
|
||||||
|
fstp dword[ebx+vec_y]
|
||||||
|
|
||||||
|
fild word[edi+z3d]
|
||||||
|
fisub word[esi+z3d]
|
||||||
|
fstp dword[ebx+vec_z]
|
||||||
|
|
||||||
|
ret
|
||||||
|
;---------------------- in: -------------------------------
|
||||||
|
;--------------------------- esi - pointer to 1st vector --
|
||||||
|
;--------------------------- edi - pointer to 2nd vector --
|
||||||
|
;--------------------------- ebx - pointer to result vector
|
||||||
|
;---------------------- out : none
|
||||||
|
cross_product:
|
||||||
|
fninit
|
||||||
|
fld dword [esi+vec_y]
|
||||||
|
fmul dword [edi+vec_z]
|
||||||
|
fld dword [esi+vec_z]
|
||||||
|
fmul dword [edi+vec_y]
|
||||||
|
fsubp ;st1 ,st
|
||||||
|
fstp dword [ebx+vec_x]
|
||||||
|
|
||||||
|
fld dword [esi+vec_z]
|
||||||
|
fmul dword [edi+vec_x]
|
||||||
|
fld dword [esi+vec_x]
|
||||||
|
fmul dword [edi+vec_z]
|
||||||
|
fsubp ;st1 ,st
|
||||||
|
fstp dword [ebx+vec_y]
|
||||||
|
|
||||||
|
fld dword [esi+vec_x]
|
||||||
|
fmul dword [edi+vec_y]
|
||||||
|
fld dword [esi+vec_y]
|
||||||
|
fmul dword [edi+vec_x]
|
||||||
|
fsubp ;st1 ,st
|
||||||
|
fstp dword [ebx+vec_z]
|
||||||
|
ret
|
||||||
|
;----------------------- in: ------------------------------
|
||||||
|
;---------------------------- edi - pointer to vector -----
|
||||||
|
;----------------------- out : none
|
||||||
|
normalize_vector:
|
||||||
|
fninit
|
||||||
|
fld dword [edi+vec_x]
|
||||||
|
fmul st, st
|
||||||
|
fld dword [edi+vec_y]
|
||||||
|
fmul st, st
|
||||||
|
fld dword [edi+vec_z]
|
||||||
|
fmul st, st
|
||||||
|
faddp st1, st
|
||||||
|
faddp st1, st
|
||||||
|
fsqrt
|
||||||
|
|
||||||
|
ftst
|
||||||
|
fstsw ax
|
||||||
|
sahf
|
||||||
|
jnz @f
|
||||||
|
|
||||||
|
fst dword [edi+vec_x]
|
||||||
|
fst dword [edi+vec_y]
|
||||||
|
fstp dword [edi+vec_z]
|
||||||
|
ret
|
||||||
|
@@:
|
||||||
|
fld st
|
||||||
|
fld st
|
||||||
|
fdivr dword [edi+vec_x]
|
||||||
|
fstp dword [edi+vec_x]
|
||||||
|
fdivr dword [edi+vec_y]
|
||||||
|
fstp dword [edi+vec_y]
|
||||||
|
fdivr dword [edi+vec_z]
|
||||||
|
fstp dword [edi+vec_z]
|
||||||
|
ret
|
||||||
|
;------------------in: -------------------------
|
||||||
|
;------------------ esi - pointer to 1st vector
|
||||||
|
;------------------ edi - pointer to 2nd vector
|
||||||
|
;------------------out: ------------------------
|
||||||
|
;------------------ st0 - dot-product
|
||||||
|
dot_product:
|
||||||
|
fninit
|
||||||
|
fld dword [esi+vec_x]
|
||||||
|
fmul dword [edi+vec_x]
|
||||||
|
fld dword [esi+vec_y]
|
||||||
|
fmul dword [edi+vec_y]
|
||||||
|
fld dword [esi+vec_z]
|
||||||
|
fmul dword [edi+vec_z]
|
||||||
|
faddp
|
||||||
|
faddp
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
1984
programs/demos/3DS/3DSHEART.ASM
Normal file
1984
programs/demos/3DS/3DSHEART.ASM
Normal file
File diff suppressed because it is too large
Load Diff
1991
programs/demos/3DS/3DSTPOT.ASM
Normal file
1991
programs/demos/3DS/3DSTPOT.ASM
Normal file
File diff suppressed because it is too large
Load Diff
440
programs/demos/3DS/3dspiral.asm
Normal file
440
programs/demos/3DS/3dspiral.asm
Normal file
@ -0,0 +1,440 @@
|
|||||||
|
;
|
||||||
|
; application : 3d shaking waved spiral
|
||||||
|
; compilator : fasm
|
||||||
|
; system : MenuetOS
|
||||||
|
; author : macgub
|
||||||
|
; email : macgub3@wp
|
||||||
|
|
||||||
|
timeout equ 3
|
||||||
|
maxx equ 600 ; window size
|
||||||
|
maxy equ 420
|
||||||
|
use32
|
||||||
|
|
||||||
|
org 0x0
|
||||||
|
|
||||||
|
db 'MENUET01' ; 8 byte id
|
||||||
|
dd 0x01 ; header version
|
||||||
|
dd START ; start of code
|
||||||
|
dd I_END ; size of image
|
||||||
|
dd 0x100000 ; memory for app
|
||||||
|
dd 0xbffff ; esp
|
||||||
|
dd 0x0 , 0x0 ; I_Param , I_Icon
|
||||||
|
|
||||||
|
START: ; start of execution
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
|
||||||
|
still:
|
||||||
|
|
||||||
|
; mov eax,23 ; wait here for event
|
||||||
|
; mov ebx,timeout
|
||||||
|
; int 0x40
|
||||||
|
mov eax,11 ; check for event no wait
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw request ?
|
||||||
|
je red
|
||||||
|
cmp eax,2 ; key in buffer ?
|
||||||
|
je key
|
||||||
|
cmp eax,3 ; button in buffer ?
|
||||||
|
je button
|
||||||
|
|
||||||
|
jmp noclose
|
||||||
|
|
||||||
|
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 ?
|
||||||
|
jne noclose
|
||||||
|
|
||||||
|
mov eax,-1 ; close this program
|
||||||
|
int 0x40
|
||||||
|
noclose:
|
||||||
|
|
||||||
|
; mov eax,13
|
||||||
|
; mov ebx,20*65536+maxx-25
|
||||||
|
; mov ecx,20*65536+maxy-25
|
||||||
|
; xor edx,edx
|
||||||
|
; int 0x40
|
||||||
|
|
||||||
|
mov edi,screen_buf
|
||||||
|
mov ecx,maxx*maxy*3/4
|
||||||
|
xor eax,eax
|
||||||
|
cld
|
||||||
|
rep stosd
|
||||||
|
|
||||||
|
|
||||||
|
call calc_deg
|
||||||
|
mov [z],0
|
||||||
|
mov [sin_counter],0
|
||||||
|
finit
|
||||||
|
oopz:
|
||||||
|
mov [x],0
|
||||||
|
push [z]
|
||||||
|
call calc_sin_variable
|
||||||
|
oop:
|
||||||
|
push [x]
|
||||||
|
; call getcol ;(x,z)
|
||||||
|
call fun ; calculates y and y1
|
||||||
|
; call rotateY
|
||||||
|
mov eax,[sin_variable]
|
||||||
|
add eax,[vector_x] ; vector_x
|
||||||
|
add [x],eax
|
||||||
|
mov eax,[vector_y]
|
||||||
|
add [y],eax ; vector_y
|
||||||
|
add [y1],eax
|
||||||
|
call point_perspective
|
||||||
|
call draw_point_3d
|
||||||
|
pop [x]
|
||||||
|
inc [x]
|
||||||
|
mov eax,[x]
|
||||||
|
cmp eax,[loop_counter]
|
||||||
|
jne oop
|
||||||
|
inc [sin_counter]
|
||||||
|
pop [z]
|
||||||
|
inc [z]
|
||||||
|
cmp [z],200
|
||||||
|
jne oopz
|
||||||
|
|
||||||
|
mov eax,7
|
||||||
|
mov ebx,screen_buf
|
||||||
|
mov ecx,maxx*65536+maxy
|
||||||
|
mov edx,20*65536+20
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
call set_elipse_dim
|
||||||
|
call set_vectors
|
||||||
|
|
||||||
|
jmp still
|
||||||
|
;-----------------++++++PROCEDURES
|
||||||
|
getcol:
|
||||||
|
mov eax,[x_resolution]
|
||||||
|
mul [z]
|
||||||
|
add eax,[x]
|
||||||
|
mov ebx,eax
|
||||||
|
mov eax,35
|
||||||
|
int 0x40
|
||||||
|
mov [col],eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
set_vectors:
|
||||||
|
cmp [vector_x],55
|
||||||
|
jne vec1
|
||||||
|
mov [vector_dir_x],1
|
||||||
|
vec1:
|
||||||
|
cmp [vector_x],250
|
||||||
|
jne vec2
|
||||||
|
mov [vector_dir_x],0
|
||||||
|
vec2:
|
||||||
|
cmp [vector_dir_x],1
|
||||||
|
jne vec3
|
||||||
|
inc [vector_x]
|
||||||
|
jmp end_x
|
||||||
|
vec3:
|
||||||
|
dec [vector_x]
|
||||||
|
end_x:
|
||||||
|
cmp [vector_y],195
|
||||||
|
jne vec4
|
||||||
|
mov [vector_dir_y],1
|
||||||
|
vec4:
|
||||||
|
cmp [vector_y],205
|
||||||
|
jne vec5
|
||||||
|
mov [vector_dir_y],0
|
||||||
|
vec5:
|
||||||
|
cmp [vector_dir_y],1
|
||||||
|
jne vec6
|
||||||
|
inc [vector_y]
|
||||||
|
ret
|
||||||
|
vec6:
|
||||||
|
dec [vector_y]
|
||||||
|
ret
|
||||||
|
set_elipse_dim:
|
||||||
|
cmp [b],60
|
||||||
|
jne go11
|
||||||
|
mov [elipse_dir],0
|
||||||
|
go11:
|
||||||
|
cmp [b],10
|
||||||
|
jne go12
|
||||||
|
mov [elipse_dir],1
|
||||||
|
go12:
|
||||||
|
cmp [elipse_dir],1
|
||||||
|
jne go13
|
||||||
|
inc [b]
|
||||||
|
dec [a]
|
||||||
|
mov eax,[a]
|
||||||
|
mov [xo],eax
|
||||||
|
shl eax,1
|
||||||
|
inc eax
|
||||||
|
mov [loop_counter],eax
|
||||||
|
ret
|
||||||
|
go13:
|
||||||
|
dec [b]
|
||||||
|
inc [a]
|
||||||
|
mov eax,[a]
|
||||||
|
mov [xo],eax
|
||||||
|
shl eax,1
|
||||||
|
inc eax
|
||||||
|
mov [loop_counter],eax
|
||||||
|
ret
|
||||||
|
|
||||||
|
calc_deg:
|
||||||
|
cmp [deg_counter], 360
|
||||||
|
jne go_deg
|
||||||
|
mov [deg_counter],0
|
||||||
|
go_deg:
|
||||||
|
fldpi
|
||||||
|
fidiv [deg_div]
|
||||||
|
fimul [deg_counter]
|
||||||
|
fstp [current_deg]
|
||||||
|
; fsincos
|
||||||
|
; fstp [cosbeta]
|
||||||
|
; fstp [sinbeta]
|
||||||
|
inc [deg_counter]
|
||||||
|
ret
|
||||||
|
|
||||||
|
;rotateY:
|
||||||
|
; mov eax,[z]
|
||||||
|
; sub eax,[zoo]
|
||||||
|
; mov [subz],eax
|
||||||
|
; mov eax,[x]
|
||||||
|
; sub eax,[xoo]
|
||||||
|
; mov [subx],eax
|
||||||
|
;
|
||||||
|
; fld [sinbeta]
|
||||||
|
; fimul [subz]
|
||||||
|
; fchs
|
||||||
|
; fld [cosbeta]
|
||||||
|
; fimul[subx]
|
||||||
|
; faddp
|
||||||
|
; fiadd [xoo]
|
||||||
|
; fistp [x]
|
||||||
|
|
||||||
|
; fld [sinbeta]
|
||||||
|
; fimul [subx]
|
||||||
|
; fld [cosbeta]
|
||||||
|
; fimul [subz]
|
||||||
|
; faddp
|
||||||
|
; fiadd [zoo]
|
||||||
|
; fistp [z]
|
||||||
|
; finit
|
||||||
|
|
||||||
|
; ret
|
||||||
|
|
||||||
|
point_perspective:
|
||||||
|
mov eax,[x]
|
||||||
|
sub eax,[xobs]
|
||||||
|
mov [xobssub],eax
|
||||||
|
mov eax,[z]
|
||||||
|
sub eax,[zobs]
|
||||||
|
mov [zobssub],eax
|
||||||
|
|
||||||
|
mov eax,[y]
|
||||||
|
sub eax,[yobs]
|
||||||
|
mov [yobssub],eax
|
||||||
|
mov eax,[y1]
|
||||||
|
sub eax,[yobs]
|
||||||
|
mov [y1obssub],eax
|
||||||
|
|
||||||
|
finit
|
||||||
|
fild [xobssub]
|
||||||
|
fidiv [zobssub]
|
||||||
|
fimul [zobs]
|
||||||
|
fchs
|
||||||
|
fiadd [xobs]
|
||||||
|
fistp [x]
|
||||||
|
fild [yobssub]
|
||||||
|
fidiv [zobssub]
|
||||||
|
fimul [zobs]
|
||||||
|
fchs
|
||||||
|
fiadd [yobs]
|
||||||
|
fistp [y]
|
||||||
|
|
||||||
|
; mov eax,[xobssub]
|
||||||
|
; idiv [zobssub]
|
||||||
|
;; mov eax,edx
|
||||||
|
; imul [zobs]
|
||||||
|
; neg eax
|
||||||
|
; add eax,[xobs]
|
||||||
|
; mov [x],eax
|
||||||
|
; mov eax,[yobssub]
|
||||||
|
; idiv [zobssub]
|
||||||
|
;; mov eax,edx
|
||||||
|
; imul [zobs]
|
||||||
|
; neg eax
|
||||||
|
; add eax,[yobs]
|
||||||
|
; mov [y],eax
|
||||||
|
|
||||||
|
fild [y1obssub]
|
||||||
|
fidiv [zobssub]
|
||||||
|
fimul [zobs]
|
||||||
|
fchs
|
||||||
|
fiadd [yobs]
|
||||||
|
fistp [y1]
|
||||||
|
ret
|
||||||
|
calc_sin_variable:
|
||||||
|
;calculate sinus variable
|
||||||
|
fldpi
|
||||||
|
fidiv [sin_gran]
|
||||||
|
fimul [sin_counter]
|
||||||
|
fadd [current_deg]
|
||||||
|
fsin
|
||||||
|
fimul [sin_mul]
|
||||||
|
fistp [sin_variable]
|
||||||
|
ret
|
||||||
|
|
||||||
|
fun:
|
||||||
|
; finit
|
||||||
|
fild [x]
|
||||||
|
fisub [xo]
|
||||||
|
; fchs
|
||||||
|
; faddp
|
||||||
|
fild [a]
|
||||||
|
fdivp st1,st
|
||||||
|
fmul st,st0
|
||||||
|
fchs
|
||||||
|
fld1
|
||||||
|
faddp
|
||||||
|
fsqrt
|
||||||
|
fimul [b]
|
||||||
|
fld st
|
||||||
|
fchs
|
||||||
|
fiadd [yo]
|
||||||
|
fistp [y]
|
||||||
|
fiadd [yo]
|
||||||
|
fistp [y1]
|
||||||
|
ret
|
||||||
|
draw_point_3d:
|
||||||
|
mov eax,[z]
|
||||||
|
imul [sq]
|
||||||
|
shr eax,10
|
||||||
|
mov ebx,eax
|
||||||
|
neg eax
|
||||||
|
push eax
|
||||||
|
add eax,[y]
|
||||||
|
mov [y],eax
|
||||||
|
pop eax
|
||||||
|
add eax,[y1]
|
||||||
|
mov [y1],eax
|
||||||
|
mov eax,ebx
|
||||||
|
add eax,[x]
|
||||||
|
mov [x],eax
|
||||||
|
;mov eax,1
|
||||||
|
;mov ebx,[x]
|
||||||
|
;mov ecx,[y]
|
||||||
|
;mov edx,[col]
|
||||||
|
;int 0x40
|
||||||
|
;mov ecx,[y1]
|
||||||
|
;int 0x40
|
||||||
|
mov eax,maxx
|
||||||
|
mul [y]
|
||||||
|
add eax,[x]
|
||||||
|
mov ebx,eax
|
||||||
|
shl ebx,1
|
||||||
|
add eax,ebx
|
||||||
|
add eax,screen_buf
|
||||||
|
mov ebx,[col]
|
||||||
|
or [eax],ebx
|
||||||
|
mov eax,maxx
|
||||||
|
mul [y1]
|
||||||
|
add eax,[x]
|
||||||
|
mov ebx,eax
|
||||||
|
shl ebx,1
|
||||||
|
add eax,ebx
|
||||||
|
add eax,screen_buf
|
||||||
|
mov ebx,[col]
|
||||||
|
or [eax],ebx
|
||||||
|
ret
|
||||||
|
|
||||||
|
; *********************************************
|
||||||
|
; ******* 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+maxx+25 ; [x start] *65536 + [x size]
|
||||||
|
mov ecx,100*65536+maxy+25 ; [y start] *65536 + [y size]
|
||||||
|
mov edx,0x04000000 ; color of work area RRGGBB,8->color gl
|
||||||
|
mov esi,0x805080d0 ; color of grab bar RRGGBB,8->color gl
|
||||||
|
mov edi,0x005080d0 ; color of frames RRGGBB
|
||||||
|
int 0x40
|
||||||
|
; WINDOW LABEL
|
||||||
|
mov eax,4 ; function 4 : write text to window
|
||||||
|
mov ebx,8*65536+8 ; [x start] *65536 + [y start]
|
||||||
|
mov ecx,0x10ddeeff ; font 1 & color ( 0xF0RRGGBB )
|
||||||
|
mov edx,labelt ; pointer to text beginning
|
||||||
|
mov esi,labellen-labelt ; text length
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||||||
|
mov ebx,2 ; 2, end of draw
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
x_resolution dd 800
|
||||||
|
vector_x dd 200
|
||||||
|
vector_y dd 200
|
||||||
|
vector_dir_x db 1
|
||||||
|
vector_dir_y db 1
|
||||||
|
elipse_dir db 1
|
||||||
|
|
||||||
|
deg_counter dd ? ; rotation variables
|
||||||
|
deg_div dd 20
|
||||||
|
current_deg dd ?
|
||||||
|
;cosbeta dd ?
|
||||||
|
;sinbeta dd ?
|
||||||
|
;zoo dd 100 ; rotation axle
|
||||||
|
;xoo dd 40
|
||||||
|
;yoo dd 20
|
||||||
|
;subx dd ?
|
||||||
|
;suby dd ?
|
||||||
|
;subz dd ?
|
||||||
|
|
||||||
|
xobs dd maxx/2 ; 320 observer variables
|
||||||
|
yobs dd maxy/2 ; 175
|
||||||
|
zobs dd -200
|
||||||
|
xobssub dd ?
|
||||||
|
yobssub dd ?
|
||||||
|
y1obssub dd ?
|
||||||
|
zobssub dd ?
|
||||||
|
|
||||||
|
sin_variable dd ?
|
||||||
|
sin_mul dd 60
|
||||||
|
sin_gran dd 30
|
||||||
|
sin_counter dd 0
|
||||||
|
sq dd 724 ; round( (sqrt2)/2*1024 )
|
||||||
|
z dd ?
|
||||||
|
x dd ?
|
||||||
|
y dd ?
|
||||||
|
y1 dd ?
|
||||||
|
xo dd 70 ; center point , (loop counter-1)/2
|
||||||
|
yo dd 20
|
||||||
|
a dd 70 ; vertical half-axle
|
||||||
|
b dd 20 ; horizontal half-axle
|
||||||
|
loop_counter dd 141 ; axle granularity
|
||||||
|
col dd 0x00ffffff
|
||||||
|
|
||||||
|
labelt:
|
||||||
|
db ' 3D SHAKING WAVED SPIRAL'
|
||||||
|
labellen:
|
||||||
|
screen_buf:
|
||||||
|
|
||||||
|
I_END:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
188
programs/demos/3DS/FLAT3.ASM
Normal file
188
programs/demos/3DS/FLAT3.ASM
Normal file
@ -0,0 +1,188 @@
|
|||||||
|
draw_triangle:
|
||||||
|
;----------in - eax - x1 shl 16 + y1
|
||||||
|
;------------- -ebx - x2 shl 16 + y2
|
||||||
|
;---------------ecx - x3 shl 16 + y3
|
||||||
|
;---------------edx - color 0x00rrggbb
|
||||||
|
;---------------edi - pointer to screen buffer
|
||||||
|
@ch3:
|
||||||
|
cmp ax,bx
|
||||||
|
jg @ch1
|
||||||
|
@ch4: ; sort parameters
|
||||||
|
cmp bx,cx
|
||||||
|
jg @ch2
|
||||||
|
jle @chEnd
|
||||||
|
@ch1:
|
||||||
|
xchg eax,ebx
|
||||||
|
jmp @ch4
|
||||||
|
@ch2:
|
||||||
|
xchg ebx,ecx
|
||||||
|
jmp @ch3
|
||||||
|
@chEnd:
|
||||||
|
mov dword[@y1],eax ; ....and store to user friendly variables
|
||||||
|
mov dword[@y2],ebx
|
||||||
|
mov dword[@y3],ecx
|
||||||
|
mov [@col],edx
|
||||||
|
mov edx,eax ; eax,ebx,ecx are ORd together into edx which means that
|
||||||
|
or edx,ebx ; if any *one* of them is negative a sign flag is raised
|
||||||
|
or edx,ecx
|
||||||
|
test edx,80008000h ; Check both X&Y at once
|
||||||
|
jne @end_triangle
|
||||||
|
|
||||||
|
cmp [@x1],SIZE_X ; {
|
||||||
|
jg @end_triangle
|
||||||
|
cmp [@x2],SIZE_X ; This can be optimized with effort
|
||||||
|
jg @end_triangle
|
||||||
|
cmp [@x3],SIZE_X
|
||||||
|
jg @end_triangle ; }
|
||||||
|
|
||||||
|
shr eax,16
|
||||||
|
shr ebx,16
|
||||||
|
shr ecx,16
|
||||||
|
|
||||||
|
neg ax ; calculate delta 12
|
||||||
|
add ax,bx
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
mov bx,[@y2]
|
||||||
|
mov cx,[@y1]
|
||||||
|
sub bx,cx
|
||||||
|
;cmp ebx,0
|
||||||
|
jne @noZero1
|
||||||
|
mov [@dx12],0
|
||||||
|
jmp @yesZero1
|
||||||
|
@noZero1:
|
||||||
|
idiv ebx
|
||||||
|
mov [@dx12],eax
|
||||||
|
@yesZero1:
|
||||||
|
|
||||||
|
mov ax,[@x3] ; calculate delta 13
|
||||||
|
sub ax,[@x1]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
mov bx,[@y3]
|
||||||
|
mov cx,[@y1]
|
||||||
|
sub bx,cx
|
||||||
|
;cmp ebx,0
|
||||||
|
jne @noZero2
|
||||||
|
mov [@dx13],0
|
||||||
|
jmp @yesZero2
|
||||||
|
@noZero2:
|
||||||
|
idiv ebx
|
||||||
|
mov [@dx13],eax
|
||||||
|
@yesZero2:
|
||||||
|
|
||||||
|
mov ax,[@x3] ; calculate delta 23 [dx23]
|
||||||
|
sub ax,[@x2]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
mov bx,[@y3]
|
||||||
|
mov cx,[@y2]
|
||||||
|
sub bx,cx
|
||||||
|
;cmp ebx,0
|
||||||
|
jne @noZero3
|
||||||
|
mov [@dx23],0
|
||||||
|
jmp @yesZero3
|
||||||
|
@noZero3:
|
||||||
|
idiv ebx
|
||||||
|
mov [@dx23],eax
|
||||||
|
@yesZero3:
|
||||||
|
|
||||||
|
movzx eax,word[@x1] ; eax - xk1
|
||||||
|
shl eax,ROUND
|
||||||
|
mov ebx,eax ; ebx - xk2
|
||||||
|
movzx esi,word[@y1] ; esi - y
|
||||||
|
@next_line1:
|
||||||
|
mov ecx,eax ; ecx - x11
|
||||||
|
sar ecx,ROUND
|
||||||
|
mov edx,ebx ; edx - x12
|
||||||
|
sar edx,ROUND
|
||||||
|
cmp ecx,edx
|
||||||
|
jle @nochg
|
||||||
|
xchg ecx,edx
|
||||||
|
@nochg:
|
||||||
|
pusha
|
||||||
|
mov ebx,ecx
|
||||||
|
sub edx,ecx
|
||||||
|
mov ecx,edx
|
||||||
|
mov edx,esi
|
||||||
|
mov eax,[@col]
|
||||||
|
call @horizontal_line
|
||||||
|
popa
|
||||||
|
add eax,[@dx13]
|
||||||
|
add ebx,[@dx12]
|
||||||
|
inc esi
|
||||||
|
cmp si,[@y2]
|
||||||
|
jl @next_line1
|
||||||
|
|
||||||
|
movzx esi,word[@y2]
|
||||||
|
movzx ebx,word[@x2]
|
||||||
|
shl ebx,ROUND
|
||||||
|
@next_line2:
|
||||||
|
mov ecx,eax
|
||||||
|
sar ecx,ROUND
|
||||||
|
mov edx,ebx
|
||||||
|
sar edx,ROUND
|
||||||
|
cmp ecx,edx
|
||||||
|
jle @nochg1
|
||||||
|
xchg ecx,edx
|
||||||
|
@nochg1:
|
||||||
|
pusha
|
||||||
|
mov ebx,ecx
|
||||||
|
sub edx,ecx
|
||||||
|
mov ecx,edx
|
||||||
|
mov edx,esi
|
||||||
|
mov eax,[@col]
|
||||||
|
call @horizontal_line
|
||||||
|
popa
|
||||||
|
add eax,[@dx13]
|
||||||
|
add ebx,[@dx23]
|
||||||
|
inc esi
|
||||||
|
cmp si,[@y3]
|
||||||
|
jl @next_line2
|
||||||
|
@end_triangle:
|
||||||
|
ret
|
||||||
|
|
||||||
|
@horizontal_line:
|
||||||
|
;---------in
|
||||||
|
;---------eax - color of line, 0x00RRGGBB
|
||||||
|
;---------ebx - x1 - x position of line begin
|
||||||
|
;---------ecx - lenght of line
|
||||||
|
;---------edx - y position of line
|
||||||
|
;---------edi - pointer to buffer
|
||||||
|
jcxz @end_hor_l
|
||||||
|
; or edx,edx
|
||||||
|
; jl @end_hor_l
|
||||||
|
cmp edx,SIZE_Y
|
||||||
|
jg @end_hor_l
|
||||||
|
push eax
|
||||||
|
mov eax,SIZE_X*3
|
||||||
|
mul edx
|
||||||
|
add edi,eax ; calculate line begin adress
|
||||||
|
;add edi,ebx
|
||||||
|
;shl ebx,1
|
||||||
|
lea edi,[edi+ebx*2]
|
||||||
|
add edi,ebx
|
||||||
|
pop eax
|
||||||
|
cld
|
||||||
|
;mov dword[edi-3],0000FF00h
|
||||||
|
@ddraw: ; Drawing horizontally:
|
||||||
|
;push eax
|
||||||
|
stosd ; 4 bytes at a time
|
||||||
|
dec edi ; point to the 4th
|
||||||
|
;shr eax,16
|
||||||
|
;stosb
|
||||||
|
;pop eax
|
||||||
|
;pusha ; If you want to draw pixel-by-pixel
|
||||||
|
; mov eax,7 ; put image
|
||||||
|
; mov ebx,screen
|
||||||
|
; mov ecx,SIZE_X shl 16 + SIZE_Y
|
||||||
|
; mov edx,5 shl 16 + 20
|
||||||
|
; int 0x40
|
||||||
|
;popa
|
||||||
|
loop @ddraw
|
||||||
|
mov byte[edi],0 ; The last 4th will be reset
|
||||||
|
@end_hor_l:
|
||||||
|
ret
|
762
programs/demos/3DS/FLATWAV.ASM
Normal file
762
programs/demos/3DS/FLATWAV.ASM
Normal file
@ -0,0 +1,762 @@
|
|||||||
|
;
|
||||||
|
; application : Flag - Polonia in Tertio Millenium - wavy shading rotary area
|
||||||
|
; compiler : FASM
|
||||||
|
; system : MenuetOS
|
||||||
|
; author : macgub
|
||||||
|
; email : macgub3@wp.pl
|
||||||
|
; web : www.menuet.xt.pl
|
||||||
|
; Fell free to use this intro in your own distribution of MenuetOS.
|
||||||
|
SIZE_X equ 220
|
||||||
|
SIZE_Y equ 260
|
||||||
|
TIMEOUT equ 1
|
||||||
|
ROUND equ 12
|
||||||
|
points_count equ 50
|
||||||
|
triangles_count equ 54
|
||||||
|
|
||||||
|
use32
|
||||||
|
|
||||||
|
org 0x0
|
||||||
|
|
||||||
|
db 'MENUET01' ; 8 byte id
|
||||||
|
dd 0x01 ; header version
|
||||||
|
dd START ; start of code
|
||||||
|
dd I_END ; size of image
|
||||||
|
dd I_END ; memory for app
|
||||||
|
dd I_END ; esp
|
||||||
|
dd 0x0 , 0x0 ; I_Param , I_Icon
|
||||||
|
|
||||||
|
START: ; start of execution
|
||||||
|
|
||||||
|
call draw_window
|
||||||
|
; call generate_map
|
||||||
|
|
||||||
|
still:
|
||||||
|
|
||||||
|
mov eax,23 ; wait here for event with timeout
|
||||||
|
mov ebx,TIMEOUT
|
||||||
|
cmp [speed_flag],0xff
|
||||||
|
jne speed_skip
|
||||||
|
mov eax,11
|
||||||
|
speed_skip:
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp eax,1 ; redraw request ?
|
||||||
|
je red
|
||||||
|
cmp eax,2 ; key in buffer ?
|
||||||
|
je key
|
||||||
|
cmp eax,3 ; button in buffer ?
|
||||||
|
je button
|
||||||
|
|
||||||
|
jmp noclose
|
||||||
|
|
||||||
|
red: ; redraw
|
||||||
|
call draw_window
|
||||||
|
jmp noclose
|
||||||
|
|
||||||
|
key: ; key
|
||||||
|
mov eax,2 ; just read it and ignore
|
||||||
|
int 0x40
|
||||||
|
jmp noclose
|
||||||
|
|
||||||
|
button: ; button
|
||||||
|
mov eax,17 ; get id
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
cmp ah,1 ; button id=1 ?
|
||||||
|
jne shad_button
|
||||||
|
mov eax,-1 ; close this program
|
||||||
|
int 0x40
|
||||||
|
shad_button:
|
||||||
|
cmp ah,2
|
||||||
|
jne speed_button
|
||||||
|
not [shad_flag] ; set shadow / flag mode
|
||||||
|
speed_button:
|
||||||
|
cmp ah,3
|
||||||
|
jne noclose
|
||||||
|
not [speed_flag]
|
||||||
|
noclose:
|
||||||
|
|
||||||
|
call calculate_angle ; calculates sinus and cosinus
|
||||||
|
call generate_map
|
||||||
|
call copy_points
|
||||||
|
call rotate_points
|
||||||
|
call translate_points ; translate from 3d to 2d
|
||||||
|
call clrscr ; clear the screen
|
||||||
|
call sort_triangles
|
||||||
|
call draw_triangles ; draw all triangles from the list
|
||||||
|
|
||||||
|
mov eax,7 ; put image
|
||||||
|
mov ebx,screen
|
||||||
|
mov ecx,SIZE_X shl 16 + SIZE_Y
|
||||||
|
mov edx,5 shl 16 + 20
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
jmp still
|
||||||
|
generate_map:
|
||||||
|
finit
|
||||||
|
mov edi,points
|
||||||
|
xor ebx,ebx ;z
|
||||||
|
again_gen1:
|
||||||
|
mov eax,70 ;x
|
||||||
|
again_gen:
|
||||||
|
mov word[edi],ax
|
||||||
|
mov word[edi+4],bx
|
||||||
|
fild word[edi]
|
||||||
|
fidiv [i20]
|
||||||
|
fadd [current_angle]
|
||||||
|
fsin
|
||||||
|
fimul [i20]
|
||||||
|
fiadd [i75]
|
||||||
|
fistp word [edi+2]
|
||||||
|
; fild word[edi] ;another map generation
|
||||||
|
; fisub [i100]
|
||||||
|
; fidiv [i75]
|
||||||
|
; fmul st,st0
|
||||||
|
; fild word[edi+4]
|
||||||
|
; fisub [i50]
|
||||||
|
; fidiv [i20]
|
||||||
|
; fmul st,st0
|
||||||
|
; faddp
|
||||||
|
; fsqrt
|
||||||
|
; fadd [current_angle]
|
||||||
|
; fsin
|
||||||
|
; fimul [i20]
|
||||||
|
; fiadd [i75]
|
||||||
|
; fistp word[edi+2]
|
||||||
|
|
||||||
|
add ax,10
|
||||||
|
add edi,6
|
||||||
|
cmp ax,170
|
||||||
|
jne again_gen
|
||||||
|
add bx,20
|
||||||
|
cmp bx,100
|
||||||
|
jne again_gen1
|
||||||
|
mov dword[edi],0xffffffff
|
||||||
|
ret
|
||||||
|
i20 dw 20
|
||||||
|
i50 dw 50
|
||||||
|
i75 dw 75
|
||||||
|
i100 dw 100
|
||||||
|
|
||||||
|
sort_triangles:
|
||||||
|
mov esi,triangles
|
||||||
|
mov edi,triangles_with_z
|
||||||
|
mov ebp,points_rotated
|
||||||
|
|
||||||
|
make_triangle_with_z: ;makes list with triangles and z position
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,word[esi]
|
||||||
|
shl eax,1
|
||||||
|
mov ebx,eax
|
||||||
|
shl eax,1
|
||||||
|
add eax,ebx
|
||||||
|
push ebp
|
||||||
|
add ebp,eax
|
||||||
|
xor ecx,ecx
|
||||||
|
mov cx,word[ebp+4]
|
||||||
|
pop ebp
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,word[esi+2]
|
||||||
|
shl eax,1
|
||||||
|
mov ebx,eax
|
||||||
|
shl eax,1
|
||||||
|
add eax,ebx
|
||||||
|
push ebp
|
||||||
|
add ebp,eax
|
||||||
|
add cx,word[ebp+4]
|
||||||
|
pop ebp
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,word[esi+4]
|
||||||
|
shl eax,1
|
||||||
|
mov ebx,eax
|
||||||
|
shl eax,1
|
||||||
|
add eax,ebx
|
||||||
|
push ebp
|
||||||
|
add ebp,eax
|
||||||
|
add cx,word[ebp+4]
|
||||||
|
pop ebp
|
||||||
|
|
||||||
|
mov ax,cx
|
||||||
|
cwd
|
||||||
|
idiv [i3]
|
||||||
|
cld
|
||||||
|
movsd ; store vertex coordinates
|
||||||
|
movsw
|
||||||
|
stosw ; middle vertex coordinate 'z' in triangles_with_z list
|
||||||
|
cmp dword[esi],0xffffffff
|
||||||
|
jne make_triangle_with_z
|
||||||
|
movsd ; copy end mark
|
||||||
|
|
||||||
|
;macro sort
|
||||||
|
|
||||||
|
mov [sort_flag],1
|
||||||
|
next_booble:
|
||||||
|
mov esi,triangles_with_z ;sort list triangles_with_z booble metod
|
||||||
|
cmp [sort_flag],0
|
||||||
|
je end_sort
|
||||||
|
mov [sort_flag],0
|
||||||
|
check_and_check:
|
||||||
|
; cmp dword[esi],0xffffffff
|
||||||
|
; je next_booble
|
||||||
|
cmp dword[esi+8],0xffffffff
|
||||||
|
je next_booble
|
||||||
|
mov ax,word[esi+6]
|
||||||
|
cmp ax,word[esi+14]
|
||||||
|
jge no_chg_pos
|
||||||
|
mov eax,dword[esi]
|
||||||
|
mov ebx,dword[esi+4]
|
||||||
|
xchg eax,dword[esi+8]
|
||||||
|
xchg ebx,dword[esi+12]
|
||||||
|
mov dword[esi],eax
|
||||||
|
mov dword[esi+4],ebx ; sort_flag=1 if change occured
|
||||||
|
mov [sort_flag],1
|
||||||
|
no_chg_pos:
|
||||||
|
add esi,8
|
||||||
|
jmp check_and_check ;check end mark end if greater
|
||||||
|
end_sort:
|
||||||
|
|
||||||
|
; translate triangles_with_z to sorted_triangles
|
||||||
|
mov esi,triangles_with_z
|
||||||
|
mov edi,sorted_triangles
|
||||||
|
again_copy:
|
||||||
|
movsd
|
||||||
|
movsw
|
||||||
|
add esi,2
|
||||||
|
cmp dword[esi],0xffffffff
|
||||||
|
jne again_copy
|
||||||
|
movsd ; copy end mark too
|
||||||
|
ret
|
||||||
|
sort_flag db 0
|
||||||
|
clrscr:
|
||||||
|
mov edi,screen
|
||||||
|
mov ecx,SIZE_X*SIZE_Y*3/4
|
||||||
|
xor eax,eax
|
||||||
|
cld
|
||||||
|
rep stosd
|
||||||
|
ret
|
||||||
|
calculate_angle:
|
||||||
|
finit
|
||||||
|
fldpi
|
||||||
|
fidiv [i180]
|
||||||
|
fimul [angle_counter]
|
||||||
|
fst [current_angle]
|
||||||
|
fld st
|
||||||
|
fidiv [i2]
|
||||||
|
fsincos
|
||||||
|
fstp [singamma]
|
||||||
|
fstp [cosgamma]
|
||||||
|
fsincos
|
||||||
|
fstp [sinbeta]
|
||||||
|
fstp [cosbeta]
|
||||||
|
inc [angle_counter]
|
||||||
|
cmp [angle_counter],360
|
||||||
|
jne end_calc_angle
|
||||||
|
mov [angle_counter],0
|
||||||
|
end_calc_angle:
|
||||||
|
ret
|
||||||
|
i180 dw 90
|
||||||
|
i2 dw 2
|
||||||
|
rotate_points:
|
||||||
|
finit ; y axle rotate
|
||||||
|
mov ebx,points_rotated
|
||||||
|
again_r:
|
||||||
|
mov ax,word[ebx] ;x
|
||||||
|
sub ax,[xo]
|
||||||
|
mov [xsub],ax
|
||||||
|
mov ax,word[ebx+4] ;z
|
||||||
|
sub ax,[zo]
|
||||||
|
mov [zsub],ax
|
||||||
|
fld [sinbeta]
|
||||||
|
fimul [zsub]
|
||||||
|
fchs
|
||||||
|
fld [cosbeta]
|
||||||
|
fimul [xsub]
|
||||||
|
faddp
|
||||||
|
fiadd [xo]
|
||||||
|
fistp word[ebx] ;x
|
||||||
|
fld [sinbeta]
|
||||||
|
fimul [xsub]
|
||||||
|
;fchs
|
||||||
|
fld [cosbeta]
|
||||||
|
fimul [zsub]
|
||||||
|
faddp
|
||||||
|
fiadd [zo]
|
||||||
|
fistp word[ebx+4] ;z
|
||||||
|
|
||||||
|
mov ax,word[ebx+2] ;y ; z axle rotate
|
||||||
|
sub ax,[yo]
|
||||||
|
mov [ysub],ax
|
||||||
|
mov ax,word[ebx] ;x
|
||||||
|
sub ax,[xo]
|
||||||
|
mov [xsub],ax
|
||||||
|
fld [singamma]
|
||||||
|
fimul[ysub]
|
||||||
|
fld [cosgamma]
|
||||||
|
fimul [xsub]
|
||||||
|
faddp
|
||||||
|
fiadd [xo]
|
||||||
|
fistp word[ebx] ;x
|
||||||
|
fld [cosgamma]
|
||||||
|
fimul [ysub]
|
||||||
|
fld [singamma]
|
||||||
|
fimul [xsub]
|
||||||
|
fchs
|
||||||
|
faddp
|
||||||
|
fiadd [yo]
|
||||||
|
fistp word[ebx+2] ;y
|
||||||
|
|
||||||
|
add ebx,6
|
||||||
|
cmp dword[ebx],0xffffffff
|
||||||
|
jne again_r
|
||||||
|
ret
|
||||||
|
xsub dw ?
|
||||||
|
ysub dw ?
|
||||||
|
zsub dw ?
|
||||||
|
draw_triangles:
|
||||||
|
mov [tr_counter],1
|
||||||
|
mov ebp,points_rotated
|
||||||
|
; mov esi,triangles
|
||||||
|
mov esi,sorted_triangles
|
||||||
|
again_dts:
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,word[esi]
|
||||||
|
shl eax,1
|
||||||
|
mov [dtpom],eax
|
||||||
|
shl eax,1
|
||||||
|
add eax,[dtpom]
|
||||||
|
push ebp
|
||||||
|
add ebp,eax
|
||||||
|
mov ax,word[ebp]
|
||||||
|
mov [xx1],ax
|
||||||
|
mov ax,word[ebp+2]
|
||||||
|
mov [yy1],ax
|
||||||
|
mov ax,word[ebp+4]
|
||||||
|
mov [zz1],ax
|
||||||
|
pop ebp
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,word[esi+2]
|
||||||
|
shl eax,1
|
||||||
|
mov [dtpom],eax
|
||||||
|
shl eax,1
|
||||||
|
add eax,[dtpom]
|
||||||
|
push ebp
|
||||||
|
add ebp,eax
|
||||||
|
mov ax,word[ebp]
|
||||||
|
mov [xx2],ax
|
||||||
|
mov ax,word[ebp+2]
|
||||||
|
mov [yy2],ax
|
||||||
|
mov ax,word[ebp+4]
|
||||||
|
mov [zz2],ax
|
||||||
|
pop ebp
|
||||||
|
|
||||||
|
xor eax,eax
|
||||||
|
mov ax,word[esi+4]
|
||||||
|
shl eax,1
|
||||||
|
mov [dtpom],eax
|
||||||
|
shl eax,1
|
||||||
|
add eax,[dtpom]
|
||||||
|
push ebp
|
||||||
|
add ebp,eax
|
||||||
|
mov ax,word[ebp]
|
||||||
|
mov [xx3],ax
|
||||||
|
mov ax,word[ebp+2]
|
||||||
|
mov [yy3],ax
|
||||||
|
mov ax,word[ebp+4]
|
||||||
|
mov [zz3],ax
|
||||||
|
pop ebp
|
||||||
|
push ebp
|
||||||
|
push esi
|
||||||
|
|
||||||
|
macro set_flag
|
||||||
|
{
|
||||||
|
mov edx,0x00ffffff
|
||||||
|
inc [tr_counter]
|
||||||
|
cmp [tr_counter],triangles_count/2
|
||||||
|
jl skip_red
|
||||||
|
set_red:
|
||||||
|
mov edx,0x00ff0000
|
||||||
|
skip_red:
|
||||||
|
}
|
||||||
|
|
||||||
|
mov ax,[zz1]
|
||||||
|
add ax,[zz2]
|
||||||
|
add ax,[zz3]
|
||||||
|
cwd
|
||||||
|
idiv [i3]
|
||||||
|
sub ax,100 ;77
|
||||||
|
; shl ax,1
|
||||||
|
neg al
|
||||||
|
xor edx,edx
|
||||||
|
mov dh,al ;set color according to z position
|
||||||
|
mov dl,al
|
||||||
|
; push dx
|
||||||
|
; shl edx,8
|
||||||
|
; pop dx
|
||||||
|
|
||||||
|
cmp [shad_flag],0
|
||||||
|
je skip_col
|
||||||
|
set_flag
|
||||||
|
skip_col:
|
||||||
|
mov ax,[xx1]
|
||||||
|
shl eax,16
|
||||||
|
mov ax,[yy1]
|
||||||
|
mov bx,[xx2]
|
||||||
|
shl ebx,16
|
||||||
|
mov bx,[yy2]
|
||||||
|
mov cx,[xx3]
|
||||||
|
shl ecx,16
|
||||||
|
mov cx,[yy3]
|
||||||
|
mov edi,screen
|
||||||
|
call draw_triangle
|
||||||
|
pop esi
|
||||||
|
pop ebp
|
||||||
|
|
||||||
|
add esi,6
|
||||||
|
cmp dword[esi],0xffffffff
|
||||||
|
jne again_dts
|
||||||
|
ret
|
||||||
|
i3 dw 3
|
||||||
|
tr_counter dw 0
|
||||||
|
dtpom dd ?
|
||||||
|
xx1 dw ?
|
||||||
|
yy1 dw ?
|
||||||
|
zz1 dw ?
|
||||||
|
xx2 dw ?
|
||||||
|
yy2 dw ?
|
||||||
|
zz2 dw ?
|
||||||
|
xx3 dw ?
|
||||||
|
yy3 dw ?
|
||||||
|
zz3 dw ?
|
||||||
|
translate_points:
|
||||||
|
finit
|
||||||
|
mov ebx,points_rotated
|
||||||
|
again_trans:
|
||||||
|
fild word[ebx+4] ;z1
|
||||||
|
fmul [sq]
|
||||||
|
fld st
|
||||||
|
fiadd word[ebx] ;x1
|
||||||
|
fistp word[ebx]
|
||||||
|
fchs
|
||||||
|
fiadd word[ebx+2] ;y1
|
||||||
|
fistp word[ebx+2] ;y1
|
||||||
|
|
||||||
|
add ebx,6
|
||||||
|
cmp dword[ebx],0xffffffff
|
||||||
|
jne again_trans
|
||||||
|
ret
|
||||||
|
copy_points:
|
||||||
|
mov esi,points
|
||||||
|
mov edi,points_rotated
|
||||||
|
mov ecx,points_count*3+2
|
||||||
|
cld
|
||||||
|
rep movsw
|
||||||
|
ret
|
||||||
|
|
||||||
|
draw_triangle:
|
||||||
|
;----------in - eax - x1 shl 16 + y1
|
||||||
|
;------------- -ebx - x2 shl 16 + y2
|
||||||
|
;---------------ecx - x3 shl 16 + y3
|
||||||
|
;---------------edx - color 0x00rrggbb
|
||||||
|
;---------------edi - pointer to screen buffer
|
||||||
|
@ch3:
|
||||||
|
cmp ax,bx
|
||||||
|
jg @ch1
|
||||||
|
@ch4: ; sort parameters
|
||||||
|
cmp bx,cx
|
||||||
|
jg @ch2
|
||||||
|
jle @chEnd
|
||||||
|
@ch1:
|
||||||
|
xchg eax,ebx
|
||||||
|
jmp @ch4
|
||||||
|
@ch2:
|
||||||
|
xchg ebx,ecx
|
||||||
|
jmp @ch3
|
||||||
|
@chEnd:
|
||||||
|
mov [@y1],ax ; ....and store to user friendly variables
|
||||||
|
mov [@y2],bx
|
||||||
|
mov [@y3],cx
|
||||||
|
shr eax,16
|
||||||
|
shr ebx,16
|
||||||
|
shr ecx,16
|
||||||
|
mov [@x1],ax
|
||||||
|
mov [@x2],bx
|
||||||
|
mov [@x3],cx
|
||||||
|
mov [@col],edx
|
||||||
|
|
||||||
|
cmp [@y1],0
|
||||||
|
jl @end_triangle
|
||||||
|
cmp [@y2],0
|
||||||
|
jl @end_triangle
|
||||||
|
cmp [@y3],0
|
||||||
|
jl @end_triangle
|
||||||
|
cmp [@x1],0
|
||||||
|
jl @end_triangle
|
||||||
|
cmp [@x2],0
|
||||||
|
jl @end_triangle
|
||||||
|
cmp [@x3],0
|
||||||
|
jl @end_triangle
|
||||||
|
cmp [@y1],SIZE_Y
|
||||||
|
jg @end_triangle
|
||||||
|
cmp [@y2],SIZE_Y
|
||||||
|
jg @end_triangle
|
||||||
|
cmp [@y3],SIZE_Y
|
||||||
|
jg @end_triangle
|
||||||
|
cmp [@x1],SIZE_X
|
||||||
|
jg @end_triangle
|
||||||
|
cmp [@x2],SIZE_X
|
||||||
|
jg @end_triangle
|
||||||
|
cmp [@x3],SIZE_X
|
||||||
|
jg @end_triangle
|
||||||
|
|
||||||
|
neg ax ; calculate delta 12
|
||||||
|
add ax,bx
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
mov bx,[@y2]
|
||||||
|
mov cx,[@y1]
|
||||||
|
sub ebx,ecx
|
||||||
|
cmp ebx,0
|
||||||
|
jne @noZero1
|
||||||
|
mov [@dx12],0
|
||||||
|
jmp @yesZero1
|
||||||
|
@noZero1:
|
||||||
|
idiv ebx
|
||||||
|
mov [@dx12],eax
|
||||||
|
@yesZero1:
|
||||||
|
|
||||||
|
mov ax,[@x3] ; calculate delta 13
|
||||||
|
sub ax,[@x1]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
xor ebx,ebx
|
||||||
|
xor ecx,ecx
|
||||||
|
or bx,[@y3]
|
||||||
|
or cx,[@y1]
|
||||||
|
sub ebx,ecx
|
||||||
|
cmp ebx,0
|
||||||
|
jne @noZero2
|
||||||
|
mov [@dx13],0
|
||||||
|
jmp @yesZero2
|
||||||
|
@noZero2:
|
||||||
|
idiv ebx
|
||||||
|
mov [@dx13],eax
|
||||||
|
@yesZero2:
|
||||||
|
|
||||||
|
mov ax,[@x3] ; calculate delta 23 [dx23]
|
||||||
|
sub ax,[@x2]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
xor ebx,ebx
|
||||||
|
xor ecx,ecx
|
||||||
|
or bx,[@y3]
|
||||||
|
or cx,[@y2]
|
||||||
|
sub ebx,ecx
|
||||||
|
cmp ebx,0
|
||||||
|
jne @noZero3
|
||||||
|
mov [@dx23],0
|
||||||
|
jmp @yesZero3
|
||||||
|
@noZero3:
|
||||||
|
idiv ebx
|
||||||
|
mov [@dx23],eax
|
||||||
|
@yesZero3:
|
||||||
|
|
||||||
|
|
||||||
|
xor eax,eax ;eax - xk1
|
||||||
|
or ax,[@x1]
|
||||||
|
shl eax,ROUND
|
||||||
|
mov ebx,eax ; ebx - xk2
|
||||||
|
xor esi,esi ; esi - y
|
||||||
|
or si,[@y1]
|
||||||
|
@next_line1:
|
||||||
|
mov ecx,eax ; ecx - x11
|
||||||
|
sar ecx,ROUND
|
||||||
|
mov edx,ebx ;edx - x12
|
||||||
|
sar edx,ROUND
|
||||||
|
cmp ecx,edx
|
||||||
|
jle @nochg
|
||||||
|
xchg ecx,edx
|
||||||
|
@nochg:
|
||||||
|
pusha
|
||||||
|
mov ebx,ecx
|
||||||
|
sub edx,ecx
|
||||||
|
mov ecx,edx
|
||||||
|
mov edx,esi
|
||||||
|
mov eax,[@col]
|
||||||
|
call @horizontal_line
|
||||||
|
popa
|
||||||
|
add eax,[@dx13]
|
||||||
|
add ebx,[@dx12]
|
||||||
|
inc esi
|
||||||
|
cmp si,[@y2]
|
||||||
|
jl @next_line1
|
||||||
|
|
||||||
|
xor esi,esi
|
||||||
|
or si,[@y2]
|
||||||
|
xor ebx,ebx
|
||||||
|
mov bx,[@x2]
|
||||||
|
shl ebx,ROUND
|
||||||
|
@next_line2:
|
||||||
|
mov ecx,eax
|
||||||
|
sar ecx,ROUND
|
||||||
|
mov edx,ebx
|
||||||
|
sar edx,ROUND
|
||||||
|
cmp ecx,edx
|
||||||
|
jle @nochg1
|
||||||
|
xchg ecx,edx
|
||||||
|
@nochg1:
|
||||||
|
pusha
|
||||||
|
mov eax,[@col]
|
||||||
|
mov ebx,ecx
|
||||||
|
sub edx,ecx
|
||||||
|
mov ecx,edx
|
||||||
|
mov edx,esi
|
||||||
|
call @horizontal_line
|
||||||
|
popa
|
||||||
|
add eax,[@dx13]
|
||||||
|
add ebx,[@dx23]
|
||||||
|
inc esi
|
||||||
|
cmp si,[@y3]
|
||||||
|
jl @next_line2
|
||||||
|
@end_triangle:
|
||||||
|
ret
|
||||||
|
@col dd ?
|
||||||
|
@y1 dw ?
|
||||||
|
@x1 dw ?
|
||||||
|
@y2 dw ?
|
||||||
|
@x2 dw ?
|
||||||
|
@y3 dw ?
|
||||||
|
@x3 dw ?
|
||||||
|
@dx12 dd ?
|
||||||
|
@dx13 dd ?
|
||||||
|
@dx23 dd ?
|
||||||
|
|
||||||
|
@horizontal_line:
|
||||||
|
;---------in
|
||||||
|
;---------eax - color of line, 0x00RRGGBB
|
||||||
|
;---------ebx - x1 - x position of line begin
|
||||||
|
;---------ecx - lenght of line
|
||||||
|
;---------edx - y position of line
|
||||||
|
;---------edi - pointer to buffer
|
||||||
|
jcxz @end_hor_l
|
||||||
|
push eax
|
||||||
|
mov eax,SIZE_X*3
|
||||||
|
mul edx
|
||||||
|
add edi,eax ; calculate line begin adress
|
||||||
|
add edi,ebx
|
||||||
|
shl ebx,1
|
||||||
|
add edi,ebx
|
||||||
|
pop eax
|
||||||
|
cld
|
||||||
|
@ddraw:
|
||||||
|
push eax
|
||||||
|
stosw
|
||||||
|
shr eax,16
|
||||||
|
stosb
|
||||||
|
pop eax
|
||||||
|
loop @ddraw
|
||||||
|
@end_hor_l:
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
; *********************************************
|
||||||
|
; ******* 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+SIZE_X+20 ; [x start] *65536 + [x size]
|
||||||
|
mov ecx,100*65536+SIZE_Y+30 ; [y start] *65536 + [y size]
|
||||||
|
mov edx,0x04000000 ; color of work area RRGGBB,8->color gl
|
||||||
|
mov esi,0x805080d0 ; color of grab bar RRGGBB,8->color gl
|
||||||
|
mov edi,0x005080d0 ; color of frames RRGGBB
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
; WINDOW LABEL
|
||||||
|
mov eax,4 ; function 4 : write text to window
|
||||||
|
mov ebx,8*65536+8 ; [x start] *65536 + [y start]
|
||||||
|
mov ecx,0x20ddeeff ; font 1 & color ( 0xF0RRGGBB )
|
||||||
|
mov edx,labelt ; pointer to text beginning
|
||||||
|
mov esi,labellen-labelt ; text length
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
; flag color button
|
||||||
|
mov eax,8 ; function 8 : define and draw button
|
||||||
|
mov ebx,(SIZE_X-35)*65536+12 ; [x start] *65536 + [x size]
|
||||||
|
mov ecx,5*65536+12 ; [y start] *65536 + [y size]
|
||||||
|
mov edx,2 ; button id
|
||||||
|
mov esi,0x64504A ; button color RRGGBB
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
; speed button
|
||||||
|
mov eax,8 ; function 8 : define and draw button
|
||||||
|
mov ebx,(SIZE_X-53)*65536+12 ; [x start] *65536 + [x size]
|
||||||
|
mov ecx,5*65536+12 ; [y start] *65536 + [y size]
|
||||||
|
mov edx,3 ; button id
|
||||||
|
mov esi,0x64504A ; button color RRGGBB
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
mov eax,12 ; function 12:tell os about windowdraw
|
||||||
|
mov ebx,2 ; 2, end of draw
|
||||||
|
int 0x40
|
||||||
|
|
||||||
|
ret
|
||||||
|
|
||||||
|
|
||||||
|
; DATA AREA
|
||||||
|
angle_counter dw 0
|
||||||
|
sq dd 0.707
|
||||||
|
xo dw 110 ;87
|
||||||
|
zo dw 0
|
||||||
|
yo dw 125
|
||||||
|
shad_flag db 0
|
||||||
|
speed_flag db 0
|
||||||
|
|
||||||
|
triangles:
|
||||||
|
dw 0,1,10, 10,11,1, 1,2,11, 11,12,2, 2,3,12, 12,13,3, 3,4,13, 13,14,4, 4,5,14
|
||||||
|
dw 14,15,5, 5,6,15, 15,16,6, 6,7,16, 16,17,7, 7,8,17, 17,18,8, 8,9,18, 18,19,9
|
||||||
|
dw 10,11,20, 20,21,11, 11,12,21, 21,22,12, 12,13,22, 22,23,13, 13,14,23
|
||||||
|
dw 23,24,14, 14,15,24, 24,25,15, 15,16,25, 25,26,16, 16,17,26, 26,27,17
|
||||||
|
dw 17,18,27, 27,28,18, 18,19,28, 28,29,19, 20,21,30, 30,31,21, 21,22,31
|
||||||
|
dw 31,32,22, 22,23,32, 32,33,23, 23,24,33, 33,34,24, 24,25,34, 34,35,25
|
||||||
|
dw 25,26,35, 35,36,26, 26,27,36, 36,37,27, 27,28,37, 37,38,28, 28,29,38
|
||||||
|
dw 38,39,29
|
||||||
|
dd 0xffffffff ;<- end marker
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
labelt:
|
||||||
|
db '3d wavy rotaring area'
|
||||||
|
labellen:
|
||||||
|
sinbeta rd 1
|
||||||
|
cosbeta rd 1
|
||||||
|
singamma rd 1
|
||||||
|
cosgamma rd 1
|
||||||
|
current_angle rd 1
|
||||||
|
|
||||||
|
points rw points_count*3 + 2
|
||||||
|
points_rotated rw points_count*3 + 2
|
||||||
|
triangles_with_z rw triangles_count*4 + 2 ; triangles triple dw + z position
|
||||||
|
sorted_triangles rw triangles_count*3 + 2
|
||||||
|
screen rb SIZE_X * SIZE_Y * 3 ; screen buffer
|
||||||
|
memStack rb 1000 ;memory area for stack
|
||||||
|
I_END:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
342
programs/demos/3DS/FLAT_CAT.ASM
Normal file
342
programs/demos/3DS/FLAT_CAT.ASM
Normal file
@ -0,0 +1,342 @@
|
|||||||
|
CATMULL_SHIFT equ 16
|
||||||
|
fill_Z_buffer:
|
||||||
|
mov eax,0x70000000
|
||||||
|
mov edi,Z_buffer
|
||||||
|
mov ecx,SIZE_X*SIZE_Y
|
||||||
|
rep stosd
|
||||||
|
ret
|
||||||
|
flat_triangle_z:
|
||||||
|
; procedure drawing triangle with Z cordinate interpolation ------
|
||||||
|
; (Catmull alghoritm)--------------------------------------------
|
||||||
|
; ----------------in - eax - x1 shl 16 + y1 ----------------------
|
||||||
|
; -------------------- ebx - x2 shl 16 + y2 ----------------------
|
||||||
|
; -------------------- ecx - x3 shl 16 + y3 ----------------------
|
||||||
|
; -------------------- edx - color 0x00RRGGBB --------------------
|
||||||
|
; -------------------- esi - pointer to Z-buffer -----------------
|
||||||
|
; -------------------- edi - pointer to screen buffer-------------
|
||||||
|
; -------------------- stack : z coordinates
|
||||||
|
; -------------------- Z-buffer : each z variable as dword
|
||||||
|
; -------------------- (Z coor. as word) shl CATMULL_SHIFT
|
||||||
|
.z1 equ word[ebp+4]
|
||||||
|
.z2 equ word[ebp+6] ; each z coordinate as word integer
|
||||||
|
.z3 equ word[ebp+8]
|
||||||
|
|
||||||
|
.col equ dword[ebp-4]
|
||||||
|
.x1 equ word[ebp-6]
|
||||||
|
.y1 equ word[ebp-8]
|
||||||
|
.x2 equ word[ebp-10]
|
||||||
|
.y2 equ word[ebp-12]
|
||||||
|
.x3 equ word[ebp-14]
|
||||||
|
.y3 equ word[ebp-16]
|
||||||
|
|
||||||
|
.dx12 equ dword[ebp-20]
|
||||||
|
.dz12 equ dword[ebp-24]
|
||||||
|
.dx13 equ dword[ebp-28]
|
||||||
|
.dz13 equ dword[ebp-32]
|
||||||
|
.dx23 equ dword[ebp-36]
|
||||||
|
.dz23 equ dword[ebp-40]
|
||||||
|
.zz1 equ dword[ebp-44]
|
||||||
|
.zz2 equ dword[ebp-48]
|
||||||
|
|
||||||
|
mov ebp,esp
|
||||||
|
push edx ; store edx in variable .col
|
||||||
|
.sort2:
|
||||||
|
cmp ax,bx
|
||||||
|
jle .sort1
|
||||||
|
xchg eax,ebx
|
||||||
|
mov dx,.z1
|
||||||
|
xchg dx,.z2
|
||||||
|
mov .z1,dx
|
||||||
|
.sort1:
|
||||||
|
cmp bx,cx
|
||||||
|
jle .sort3
|
||||||
|
xchg ebx,ecx
|
||||||
|
mov dx,.z2
|
||||||
|
xchg dx,.z3
|
||||||
|
mov .z2,dx
|
||||||
|
jmp .sort2
|
||||||
|
.sort3:
|
||||||
|
push eax ; store triangle coordinates in user friendly variables
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
|
||||||
|
and edx,ebx ; if *all* of them are negative a sign flag is raised
|
||||||
|
and edx,ecx
|
||||||
|
and edx,eax
|
||||||
|
test edx,80008000h ; Check both X&Y at once
|
||||||
|
jne .ft_loop2_end
|
||||||
|
; cmp ax,SIZE_Y
|
||||||
|
; jle @f
|
||||||
|
; cmp bx,SIZE_Y
|
||||||
|
; jle @f
|
||||||
|
; cmp cx,SIZE_Y
|
||||||
|
; jge @f
|
||||||
|
; ror eax,16
|
||||||
|
; ror ebx,16
|
||||||
|
; ror ecx,16
|
||||||
|
; cmp ax,SIZE_X
|
||||||
|
; jle @f
|
||||||
|
; cmp bx,SIZE_X
|
||||||
|
; jle @f
|
||||||
|
; cmp cx,SIZE_X
|
||||||
|
; jle @f
|
||||||
|
; jmp .ft_loop2_end
|
||||||
|
;@@:
|
||||||
|
sub esp,32
|
||||||
|
|
||||||
|
mov bx,.y2 ; calc delta 12
|
||||||
|
sub bx,.y1
|
||||||
|
jnz .ft_dx12_make
|
||||||
|
mov .dx12,0
|
||||||
|
mov .dz12,0
|
||||||
|
jmp .ft_dx12_done
|
||||||
|
.ft_dx12_make:
|
||||||
|
mov ax,.x2
|
||||||
|
sub ax,.x1
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dx12,eax
|
||||||
|
|
||||||
|
mov ax,.z2
|
||||||
|
sub ax,.z1
|
||||||
|
cwde
|
||||||
|
shl eax,CATMULL_SHIFT
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dz12,eax
|
||||||
|
.ft_dx12_done:
|
||||||
|
mov bx,.y3 ; calc delta 13
|
||||||
|
sub bx,.y1
|
||||||
|
jnz .ft_dx13_make
|
||||||
|
mov .dx13,0
|
||||||
|
mov .dz13,0
|
||||||
|
jmp .ft_dx13_done
|
||||||
|
.ft_dx13_make:
|
||||||
|
mov ax,.x3
|
||||||
|
sub ax,.x1
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dx13,eax
|
||||||
|
|
||||||
|
mov ax,.z3
|
||||||
|
sub ax,.z1
|
||||||
|
cwde
|
||||||
|
shl eax,CATMULL_SHIFT
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dz13,eax
|
||||||
|
.ft_dx13_done:
|
||||||
|
mov bx,.y3 ; calc delta 23
|
||||||
|
sub bx,.y2
|
||||||
|
jnz .gt_dx23_make
|
||||||
|
mov .dx23,0
|
||||||
|
mov .dz23,0
|
||||||
|
jmp .gt_dx23_done
|
||||||
|
.gt_dx23_make:
|
||||||
|
mov ax,.x3
|
||||||
|
sub ax,.x2
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dx23,eax
|
||||||
|
|
||||||
|
mov ax,.z3
|
||||||
|
sub ax,.z2
|
||||||
|
cwde
|
||||||
|
shl eax,CATMULL_SHIFT
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dz23,eax
|
||||||
|
.gt_dx23_done:
|
||||||
|
|
||||||
|
movsx edx,.z1
|
||||||
|
shl edx,CATMULL_SHIFT
|
||||||
|
mov .zz1,edx
|
||||||
|
mov .zz2,edx
|
||||||
|
movsx eax,.x1
|
||||||
|
shl eax,ROUND ; eax - x1
|
||||||
|
mov ebx,eax ; ebx - x2
|
||||||
|
mov cx,.y1
|
||||||
|
cmp cx,.y2
|
||||||
|
jge .ft_loop1_end
|
||||||
|
.ft_loop1:
|
||||||
|
|
||||||
|
pushad
|
||||||
|
|
||||||
|
push .col
|
||||||
|
push cx ; y
|
||||||
|
sar ebx,ROUND
|
||||||
|
push bx ; x2
|
||||||
|
sar eax,ROUND
|
||||||
|
push ax ; x1
|
||||||
|
push .zz2 ; z2 shl CATMULL_SHIFT
|
||||||
|
push .zz1 ; z1 shl CATMULL_SHIFT
|
||||||
|
call flat_line_z
|
||||||
|
|
||||||
|
popad
|
||||||
|
|
||||||
|
add eax,.dx13
|
||||||
|
add ebx,.dx12
|
||||||
|
mov edx,.dz13
|
||||||
|
add .zz1,edx
|
||||||
|
mov edx,.dz12
|
||||||
|
add .zz2,edx
|
||||||
|
inc cx
|
||||||
|
cmp cx,.y2
|
||||||
|
jl .ft_loop1
|
||||||
|
.ft_loop1_end:
|
||||||
|
|
||||||
|
movsx edx,.z2
|
||||||
|
shl edx,CATMULL_SHIFT
|
||||||
|
mov .zz2,edx
|
||||||
|
movsx ebx,.x2
|
||||||
|
shl ebx,ROUND
|
||||||
|
mov cx,.y2
|
||||||
|
cmp cx,.y3
|
||||||
|
jge .ft_loop2_end
|
||||||
|
.ft_loop2:
|
||||||
|
pushad
|
||||||
|
|
||||||
|
push .col
|
||||||
|
push cx
|
||||||
|
sar ebx,ROUND
|
||||||
|
push bx
|
||||||
|
sar eax,ROUND
|
||||||
|
push ax ; x1
|
||||||
|
push .zz2 ; z2 shl CATMULL_SHIFT
|
||||||
|
push .zz1 ; z1 shl CATMULL_SHIFT
|
||||||
|
call flat_line_z
|
||||||
|
|
||||||
|
popad
|
||||||
|
|
||||||
|
add eax,.dx13
|
||||||
|
add ebx,.dx23
|
||||||
|
mov edx,.dz13
|
||||||
|
add .zz1,edx
|
||||||
|
mov edx,.dz23
|
||||||
|
add .zz2,edx
|
||||||
|
inc cx
|
||||||
|
cmp cx,.y3
|
||||||
|
jl .ft_loop2
|
||||||
|
.ft_loop2_end:
|
||||||
|
|
||||||
|
mov esp,ebp
|
||||||
|
ret 6
|
||||||
|
|
||||||
|
flat_line_z:
|
||||||
|
;----------------
|
||||||
|
;-------------in edi - pointer to screen buffer ----------------------------------
|
||||||
|
;--------------- esi - pointer to z-buffer (each Z varible dword)-----------------
|
||||||
|
;----------stack - (each z coordinate shifted shl CATMULL_SHIFT)------------------
|
||||||
|
.z1 equ dword [ebp+4]
|
||||||
|
.z2 equ dword [ebp+8]
|
||||||
|
.x1 equ word [ebp+12]
|
||||||
|
.x2 equ word [ebp+14]
|
||||||
|
.y equ word [ebp+16]
|
||||||
|
.col equ dword [ebp+18]
|
||||||
|
|
||||||
|
.dz equ dword [ebp-4]
|
||||||
|
|
||||||
|
mov ebp,esp
|
||||||
|
;; sub esp,4
|
||||||
|
mov ax,.y
|
||||||
|
or ax,ax
|
||||||
|
jl .fl_quit
|
||||||
|
cmp ax,SIZE_Y-1
|
||||||
|
jg .fl_quit
|
||||||
|
|
||||||
|
; cmp .x1,0
|
||||||
|
; jge .fl_ok1
|
||||||
|
; cmp .x2,0
|
||||||
|
; jl .fl_quit
|
||||||
|
; .fl_ok1:
|
||||||
|
; cmp .x1,SIZE_X
|
||||||
|
; jle .fl_ok2
|
||||||
|
; cmp .x2,SIZE_X
|
||||||
|
; jg .fl_quit
|
||||||
|
; .fl_ok2:
|
||||||
|
mov ax,.x1
|
||||||
|
cmp ax,.x2
|
||||||
|
je .fl_quit
|
||||||
|
jl .fl_ok
|
||||||
|
|
||||||
|
xchg ax,.x2
|
||||||
|
mov .x1,ax
|
||||||
|
mov edx,.z1
|
||||||
|
xchg edx,.z2
|
||||||
|
mov .z1,edx
|
||||||
|
.fl_ok:
|
||||||
|
cmp .x1,SIZE_X-1
|
||||||
|
jg .fl_quit
|
||||||
|
cmp .x2,0
|
||||||
|
jle .fl_quit
|
||||||
|
|
||||||
|
mov eax,.z2
|
||||||
|
sub eax,.z1
|
||||||
|
cdq
|
||||||
|
mov bx,.x2
|
||||||
|
sub bx,.x1
|
||||||
|
movsx ebx,bx
|
||||||
|
idiv ebx
|
||||||
|
;; mov .dz,eax ; calculated delta - shifted .dz
|
||||||
|
push eax
|
||||||
|
|
||||||
|
cmp .x1,0
|
||||||
|
jge @f
|
||||||
|
movsx ebx,.x1
|
||||||
|
neg ebx
|
||||||
|
imul ebx
|
||||||
|
add .z1,eax
|
||||||
|
mov .x1,0
|
||||||
|
@@:
|
||||||
|
cmp .x2,SIZE_X
|
||||||
|
jl @f
|
||||||
|
mov .x2,SIZE_X
|
||||||
|
@@:
|
||||||
|
mov edx,SIZE_X
|
||||||
|
movsx eax,.y
|
||||||
|
mul edx ; edi = edi + (SIZE_X * y + x1)*3
|
||||||
|
movsx edx,.x1
|
||||||
|
add eax,edx
|
||||||
|
push eax
|
||||||
|
lea eax,[eax*3]
|
||||||
|
add edi,eax ; esi = esi + (SIZE_X * y + x1)*4
|
||||||
|
pop eax
|
||||||
|
shl eax,2
|
||||||
|
add esi,eax
|
||||||
|
|
||||||
|
mov cx,.x2
|
||||||
|
sub cx,.x1
|
||||||
|
movzx ecx,cx
|
||||||
|
|
||||||
|
mov eax,.col
|
||||||
|
mov ebx,.z1 ; ebx : curr. z
|
||||||
|
mov edx,.dz
|
||||||
|
.ddraw:
|
||||||
|
;pushad
|
||||||
|
;show
|
||||||
|
;popad
|
||||||
|
cmp ebx,dword[esi]
|
||||||
|
jge .skip
|
||||||
|
stosd
|
||||||
|
dec edi
|
||||||
|
mov dword[esi],ebx
|
||||||
|
jmp .no_skip
|
||||||
|
.skip:
|
||||||
|
add edi,3
|
||||||
|
.no_skip:
|
||||||
|
add esi,4
|
||||||
|
add ebx,edx
|
||||||
|
loop .ddraw
|
||||||
|
|
||||||
|
.fl_quit:
|
||||||
|
mov esp,ebp
|
||||||
|
ret 18
|
481
programs/demos/3DS/GRD3.ASM
Normal file
481
programs/demos/3DS/GRD3.ASM
Normal file
@ -0,0 +1,481 @@
|
|||||||
|
gouraud_triangle:
|
||||||
|
;------------------in - eax - x1 shl 16 + y1 ---------
|
||||||
|
;---------------------- ebx - x2 shl 16 + y2 ---------
|
||||||
|
;---------------------- ecx - x3 shl 16 + y3 ---------
|
||||||
|
;---------------------- edi - pointer to screen buffer
|
||||||
|
;---------------------- stack : colors----------------
|
||||||
|
;----------------- procedure don't save registers !!--
|
||||||
|
.col1r equ ebp+4 ; each color as word
|
||||||
|
.col1g equ ebp+6
|
||||||
|
.col1b equ ebp+8
|
||||||
|
.col2r equ ebp+10
|
||||||
|
.col2g equ ebp+12
|
||||||
|
.col2b equ ebp+14
|
||||||
|
.col3r equ ebp+16
|
||||||
|
.col3g equ ebp+18
|
||||||
|
.col3b equ ebp+20
|
||||||
|
|
||||||
|
.x1 equ word[ebp-2]
|
||||||
|
.y1 equ word[ebp-4]
|
||||||
|
.x2 equ word[ebp-6]
|
||||||
|
.y2 equ word[ebp-8]
|
||||||
|
.x3 equ word[ebp-10]
|
||||||
|
.y3 equ word[ebp-12]
|
||||||
|
|
||||||
|
.dc12r equ dword[ebp-16]
|
||||||
|
.dc12g equ dword[ebp-20]
|
||||||
|
.dc12b equ dword[ebp-24]
|
||||||
|
.dc13r equ dword[ebp-28]
|
||||||
|
.dc13g equ dword[ebp-32]
|
||||||
|
.dc13b equ dword[ebp-36]
|
||||||
|
.dc23r equ dword[ebp-40]
|
||||||
|
.dc23g equ dword[ebp-44]
|
||||||
|
.dc23b equ dword[ebp-48]
|
||||||
|
|
||||||
|
.c1r equ dword[ebp-52]
|
||||||
|
.c1g equ dword[ebp-56]
|
||||||
|
.c1b equ dword[ebp-60]
|
||||||
|
.c2r equ dword[ebp-64]
|
||||||
|
.c2g equ dword[ebp-68]
|
||||||
|
.c2b equ dword[ebp-72]
|
||||||
|
|
||||||
|
.dx12 equ dword[ebp-76]
|
||||||
|
.dx13 equ dword[ebp-80]
|
||||||
|
.dx23 equ dword[ebp-84]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
mov ebp,esp
|
||||||
|
; sub esp,72
|
||||||
|
|
||||||
|
.sort3: ; sort triangle coordinates...
|
||||||
|
cmp ax,bx
|
||||||
|
jle .sort1
|
||||||
|
xchg eax,ebx
|
||||||
|
mov edx,dword[.col1r]
|
||||||
|
xchg edx,dword[.col2r]
|
||||||
|
mov dword[.col1r],edx
|
||||||
|
mov dx,word[.col1b]
|
||||||
|
xchg dx,word[.col2b]
|
||||||
|
mov word[.col1b],dx
|
||||||
|
.sort1:
|
||||||
|
cmp bx,cx
|
||||||
|
jle .sort2
|
||||||
|
xchg ebx,ecx
|
||||||
|
mov edx,dword[.col2r]
|
||||||
|
xchg edx,dword[.col3r]
|
||||||
|
mov dword[.col2r],edx
|
||||||
|
mov dx,word[.col2b]
|
||||||
|
xchg dx,word[.col3b]
|
||||||
|
mov word[.col2b],dx
|
||||||
|
jmp .sort3
|
||||||
|
.sort2:
|
||||||
|
push eax ;store triangle coordinates in user friendly variables
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
sub esp,72 ; set correctly value of esp
|
||||||
|
|
||||||
|
mov edx,eax ; check only X triangle coordinate
|
||||||
|
or edx,ebx
|
||||||
|
or edx,ecx
|
||||||
|
test edx,80000000h
|
||||||
|
jne .gt_loop2_end
|
||||||
|
shr eax,16
|
||||||
|
cmp ax,SIZE_X-1
|
||||||
|
jg .gt_loop2_end
|
||||||
|
shr ebx,16
|
||||||
|
cmp bx,SIZE_X-1
|
||||||
|
jg .gt_loop2_end
|
||||||
|
shr ecx,16
|
||||||
|
cmp cx,SIZE_X-1
|
||||||
|
jg .gt_loop2_end
|
||||||
|
|
||||||
|
|
||||||
|
mov bx,.y2 ; calc deltas
|
||||||
|
sub bx,.y1
|
||||||
|
jnz .gt_dx12_make
|
||||||
|
mov .dx12,0
|
||||||
|
mov .dc12r,0
|
||||||
|
mov .dc12g,0
|
||||||
|
mov .dc12b,0
|
||||||
|
jmp .gt_dx12_done
|
||||||
|
.gt_dx12_make:
|
||||||
|
|
||||||
|
mov ax,.x2
|
||||||
|
sub ax,.x1
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dx12,eax
|
||||||
|
|
||||||
|
mov ax,word[.col2r]
|
||||||
|
sub ax,word[.col1r]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dc12r,eax
|
||||||
|
mov ax,word[.col2g]
|
||||||
|
sub ax,word[.col1g]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dc12g,eax
|
||||||
|
mov ax,word[.col2b]
|
||||||
|
sub ax,word[.col1b]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dc12b,eax
|
||||||
|
.gt_dx12_done:
|
||||||
|
|
||||||
|
mov bx,.y3
|
||||||
|
sub bx,.y1
|
||||||
|
jnz .gt_dx13_make
|
||||||
|
mov .dx13,0
|
||||||
|
mov .dc13r,0
|
||||||
|
mov .dc13g,0
|
||||||
|
mov .dc13b,0
|
||||||
|
jmp .gt_dx13_done
|
||||||
|
.gt_dx13_make:
|
||||||
|
mov ax,.x3
|
||||||
|
sub ax,.x1
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dx13,eax
|
||||||
|
|
||||||
|
mov ax,word[.col3r]
|
||||||
|
sub ax,word[.col1r]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dc13r,eax
|
||||||
|
mov ax,word[.col3g]
|
||||||
|
sub ax,word[.col1g]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dc13g,eax
|
||||||
|
mov ax,word[.col3b]
|
||||||
|
sub ax,word[.col1b]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dc13b,eax
|
||||||
|
.gt_dx13_done:
|
||||||
|
|
||||||
|
mov bx,.y3
|
||||||
|
sub bx,.y2
|
||||||
|
jnz .gt_dx23_make
|
||||||
|
mov .dx23,0
|
||||||
|
mov .dc23r,0
|
||||||
|
mov .dc23g,0
|
||||||
|
mov .dc23b,0
|
||||||
|
jmp .gt_dx23_done
|
||||||
|
.gt_dx23_make:
|
||||||
|
mov ax,.x3
|
||||||
|
sub ax,.x2
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dx23,eax
|
||||||
|
|
||||||
|
mov ax,word[.col3r]
|
||||||
|
sub ax,word[.col2r]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dc23r,eax
|
||||||
|
mov ax,word[.col3g]
|
||||||
|
sub ax,word[.col2g]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dc23g,eax
|
||||||
|
mov ax,word[.col3b]
|
||||||
|
sub ax,word[.col2b]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov .dc23b,eax
|
||||||
|
.gt_dx23_done:
|
||||||
|
|
||||||
|
movsx eax,.x1
|
||||||
|
shl eax,ROUND
|
||||||
|
mov ebx,eax
|
||||||
|
movsx edx,word[.col1r]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c1r,edx
|
||||||
|
mov .c2r,edx
|
||||||
|
movsx edx,word[.col1g]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c1g,edx
|
||||||
|
mov .c2g,edx
|
||||||
|
movsx edx,word[.col1b]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c1b,edx
|
||||||
|
mov .c2b,edx
|
||||||
|
mov cx,.y1
|
||||||
|
cmp cx,.y2
|
||||||
|
jge .gt_loop1_end
|
||||||
|
.gt_loop1:
|
||||||
|
push eax ; eax - cur x1
|
||||||
|
push ebx ; ebx - cur x2
|
||||||
|
push cx ; cx - cur y
|
||||||
|
push edi
|
||||||
|
push ebp
|
||||||
|
|
||||||
|
mov edx,.c2r ; c2r,c2g,c2b,c1r,c1g,c1b - current colors
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c2g
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c2b
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1r
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1g
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1b
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
push cx
|
||||||
|
sar ebx,ROUND
|
||||||
|
push bx
|
||||||
|
sar eax,ROUND
|
||||||
|
push ax
|
||||||
|
call gouraud_line
|
||||||
|
|
||||||
|
pop ebp
|
||||||
|
pop edi
|
||||||
|
pop cx
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
mov edx,.dc13r
|
||||||
|
add .c1r,edx
|
||||||
|
mov edx,.dc13g
|
||||||
|
add .c1g,edx
|
||||||
|
mov edx,.dc13b
|
||||||
|
add .c1b,edx
|
||||||
|
mov edx,.dc12r
|
||||||
|
add .c2r,edx
|
||||||
|
mov edx,.dc12g
|
||||||
|
add .c2g,edx
|
||||||
|
mov edx,.dc12b
|
||||||
|
add .c2b,edx
|
||||||
|
|
||||||
|
add eax,.dx13
|
||||||
|
add ebx,.dx12
|
||||||
|
inc cx
|
||||||
|
cmp cx,.y2
|
||||||
|
jl .gt_loop1
|
||||||
|
.gt_loop1_end:
|
||||||
|
|
||||||
|
mov cx,.y2
|
||||||
|
cmp cx,.y3
|
||||||
|
jge .gt_loop2_end
|
||||||
|
movsx ebx,.x2
|
||||||
|
shl ebx,ROUND
|
||||||
|
|
||||||
|
movsx edx,word[.col2r]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c2r,edx
|
||||||
|
movsx edx,word[.col2g]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c2g,edx
|
||||||
|
movsx edx,word[.col2b]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c2b,edx
|
||||||
|
.gt_loop2:
|
||||||
|
push eax ; eax - cur x1
|
||||||
|
push ebx ; ebx - cur x2
|
||||||
|
push cx
|
||||||
|
push edi
|
||||||
|
push ebp
|
||||||
|
|
||||||
|
mov edx,.c2r
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c2g
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c2b
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1r
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1g
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1b
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
push cx
|
||||||
|
sar ebx,ROUND
|
||||||
|
push bx
|
||||||
|
sar eax,ROUND
|
||||||
|
push ax
|
||||||
|
call gouraud_line
|
||||||
|
|
||||||
|
pop ebp
|
||||||
|
pop edi
|
||||||
|
pop cx
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
|
||||||
|
mov edx,.dc13r
|
||||||
|
add .c1r,edx
|
||||||
|
mov edx,.dc13g
|
||||||
|
add .c1g,edx
|
||||||
|
mov edx,.dc13b
|
||||||
|
add .c1b,edx
|
||||||
|
mov edx,.dc23r
|
||||||
|
add .c2r,edx
|
||||||
|
mov edx,.dc23g
|
||||||
|
add .c2g,edx
|
||||||
|
mov edx,.dc23b
|
||||||
|
add .c2b,edx
|
||||||
|
|
||||||
|
add eax,.dx13
|
||||||
|
add ebx,.dx23
|
||||||
|
inc cx
|
||||||
|
cmp cx,.y3
|
||||||
|
jl .gt_loop2
|
||||||
|
.gt_loop2_end:
|
||||||
|
|
||||||
|
; add esp,84
|
||||||
|
mov esp,ebp
|
||||||
|
ret 18
|
||||||
|
gouraud_line:
|
||||||
|
;-------------in - edi - pointer to screen buffer
|
||||||
|
;----------------- stack - another parameters
|
||||||
|
.x1 equ word [ebp+4]
|
||||||
|
.x2 equ word [ebp+6]
|
||||||
|
.y equ word [ebp+8]
|
||||||
|
.col1b equ ebp+10
|
||||||
|
.col1g equ ebp+12
|
||||||
|
.col1r equ ebp+14
|
||||||
|
.col2b equ ebp+16
|
||||||
|
.col2g equ ebp+18
|
||||||
|
.col2r equ ebp+20
|
||||||
|
.dc_r equ dword[ebp-4]
|
||||||
|
.dc_g equ dword[ebp-8]
|
||||||
|
.dc_b equ dword[ebp-12]
|
||||||
|
mov ebp,esp
|
||||||
|
|
||||||
|
mov ax,.y
|
||||||
|
or ax,ax
|
||||||
|
jl .gl_quit
|
||||||
|
cmp ax,SIZE_Y-1
|
||||||
|
jg .gl_quit
|
||||||
|
|
||||||
|
mov ax,.x1
|
||||||
|
cmp ax,.x2
|
||||||
|
je .gl_quit
|
||||||
|
jl .gl_ok
|
||||||
|
|
||||||
|
xchg ax,.x2
|
||||||
|
mov .x1,ax
|
||||||
|
mov eax,dword[.col1b]
|
||||||
|
xchg eax,dword[.col2b]
|
||||||
|
mov dword[.col1b],eax
|
||||||
|
mov ax,word[.col1r]
|
||||||
|
xchg ax,word[.col2r]
|
||||||
|
mov word[.col1r],ax
|
||||||
|
.gl_ok:
|
||||||
|
; cmp .x1,SIZE_X-1 ;check
|
||||||
|
; jg .gl_quit
|
||||||
|
; cmp .x2,SIZE_X-1
|
||||||
|
; jl @f
|
||||||
|
; mov .x2,SIZE_X-1
|
||||||
|
; @@:
|
||||||
|
; cmp .x1,0
|
||||||
|
; jg @f
|
||||||
|
; mov .x1,0
|
||||||
|
; @@:
|
||||||
|
; cmp .x2,0
|
||||||
|
; jl .gl_quit
|
||||||
|
|
||||||
|
movsx ecx,.y
|
||||||
|
mov eax,SIZE_X*3
|
||||||
|
mul ecx
|
||||||
|
movsx ebx,.x1
|
||||||
|
lea ecx,[ebx*2+eax]
|
||||||
|
add edi,ecx
|
||||||
|
add edi,ebx
|
||||||
|
|
||||||
|
mov ax,word[.col2r]
|
||||||
|
sub ax,word[.col1r]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
mov cx,.x2
|
||||||
|
sub cx,.x1
|
||||||
|
movsx ecx,cx
|
||||||
|
idiv ecx
|
||||||
|
;mov .dc_r,eax ;first delta
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.col2g]
|
||||||
|
sub ax,word[.col1g]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ecx
|
||||||
|
;mov .dc_g,eax
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.col2b]
|
||||||
|
sub ax,word[.col1b]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ecx
|
||||||
|
; mov .dc_b,eax
|
||||||
|
push eax
|
||||||
|
|
||||||
|
movsx ebx,word[.col1r]
|
||||||
|
shl ebx,ROUND
|
||||||
|
movsx edx,word[.col1g]
|
||||||
|
shl edx,ROUND
|
||||||
|
movsx esi,word[.col1b]
|
||||||
|
shl esi,ROUND
|
||||||
|
.gl_draw:
|
||||||
|
mov eax,ebx
|
||||||
|
sar eax,ROUND
|
||||||
|
stosb
|
||||||
|
mov eax,edx
|
||||||
|
sar eax,ROUND
|
||||||
|
stosb
|
||||||
|
mov eax,esi
|
||||||
|
sar eax,ROUND
|
||||||
|
stosb
|
||||||
|
add ebx,.dc_r
|
||||||
|
add edx,.dc_g
|
||||||
|
add esi,.dc_b
|
||||||
|
loop .gl_draw
|
||||||
|
.gl_quit:
|
||||||
|
; add esp,12
|
||||||
|
mov esp,ebp
|
||||||
|
ret 18
|
598
programs/demos/3DS/GRD_CAT.ASM
Normal file
598
programs/demos/3DS/GRD_CAT.ASM
Normal file
@ -0,0 +1,598 @@
|
|||||||
|
ROUND equ 8
|
||||||
|
CATMULL_SHIFT equ 8
|
||||||
|
gouraud_triangle_z:
|
||||||
|
;----procedure drawing gouraud triangle with z coordinate
|
||||||
|
;----interpolation ( Catmull alghoritm )-----------------
|
||||||
|
;------------------in - eax - x1 shl 16 + y1 ------------
|
||||||
|
;---------------------- ebx - x2 shl 16 + y2 ------------
|
||||||
|
;---------------------- ecx - x3 shl 16 + y3 ------------
|
||||||
|
;---------------------- esi - pointer to Z-buffer--------
|
||||||
|
;---------------------- Z-buffer filled with dd variables
|
||||||
|
;---------------------- shifted CATMULL_SHIFT------------
|
||||||
|
;---------------------- edi - pointer to screen buffer---
|
||||||
|
;---------------------- stack : colors-------------------
|
||||||
|
;----------------- procedure don't save registers !!-----
|
||||||
|
.col1r equ ebp+4 ; each color as word
|
||||||
|
.col1g equ ebp+6 ; each z coordinate as word
|
||||||
|
.col1b equ ebp+8
|
||||||
|
.z1 equ ebp+10
|
||||||
|
.col2r equ ebp+12
|
||||||
|
.col2g equ ebp+14
|
||||||
|
.col2b equ ebp+16
|
||||||
|
.z2 equ ebp+18
|
||||||
|
.col3r equ ebp+20
|
||||||
|
.col3g equ ebp+22
|
||||||
|
.col3b equ ebp+24
|
||||||
|
.z3 equ ebp+26
|
||||||
|
|
||||||
|
.x1 equ word[ebp-2]
|
||||||
|
.y1 equ word[ebp-4]
|
||||||
|
.x2 equ word[ebp-6]
|
||||||
|
.y2 equ word[ebp-8]
|
||||||
|
.x3 equ word[ebp-10]
|
||||||
|
.y3 equ word[ebp-12]
|
||||||
|
|
||||||
|
.dx12 equ dword[ebp-16]
|
||||||
|
.dz12 equ dword[ebp-20]
|
||||||
|
.dc12r equ dword[ebp-24]
|
||||||
|
.dc12g equ dword[ebp-28]
|
||||||
|
.dc12b equ dword[ebp-32]
|
||||||
|
|
||||||
|
.dx13 equ dword[ebp-36]
|
||||||
|
.dz13 equ dword[ebp-40]
|
||||||
|
.dc13r equ dword[ebp-44]
|
||||||
|
.dc13g equ dword[ebp-48]
|
||||||
|
.dc13b equ dword[ebp-52]
|
||||||
|
|
||||||
|
.dx23 equ dword[ebp-56]
|
||||||
|
.dz23 equ dword[ebp-60]
|
||||||
|
.dc23r equ dword[ebp-64]
|
||||||
|
.dc23g equ dword[ebp-68]
|
||||||
|
.dc23b equ dword[ebp-72]
|
||||||
|
|
||||||
|
.c1r equ dword[ebp-76]
|
||||||
|
.c1g equ dword[ebp-80]
|
||||||
|
.c1b equ dword[ebp-84]
|
||||||
|
.c2r equ dword[ebp-88]
|
||||||
|
.c2g equ dword[ebp-92]
|
||||||
|
.c2b equ dword[ebp-96]
|
||||||
|
.zz1 equ dword[ebp-100]
|
||||||
|
.zz2 equ dword[ebp-104]
|
||||||
|
|
||||||
|
mov ebp,esp
|
||||||
|
; sub esp,84
|
||||||
|
.sort3: ; sort triangle coordinates...
|
||||||
|
cmp ax,bx
|
||||||
|
jle .sort1
|
||||||
|
xchg eax,ebx
|
||||||
|
mov edx,dword[.col1r]
|
||||||
|
xchg edx,dword[.col2r]
|
||||||
|
mov dword[.col1r],edx
|
||||||
|
mov edx,dword[.col1b]
|
||||||
|
xchg edx,dword[.col2b]
|
||||||
|
mov dword[.col1b],edx
|
||||||
|
.sort1:
|
||||||
|
cmp bx,cx
|
||||||
|
jle .sort2
|
||||||
|
xchg ebx,ecx
|
||||||
|
mov edx,dword[.col2r]
|
||||||
|
xchg edx,dword[.col3r]
|
||||||
|
mov dword[.col2r],edx
|
||||||
|
mov edx,dword[.col2b]
|
||||||
|
xchg edx,dword[.col3b]
|
||||||
|
mov dword[.col2b],edx
|
||||||
|
jmp .sort3
|
||||||
|
.sort2:
|
||||||
|
push eax ; store in variables
|
||||||
|
push ebx
|
||||||
|
push ecx
|
||||||
|
mov edx,80008000h ; eax,ebx,ecx are ANDd together into edx which means that
|
||||||
|
and edx,ebx ; if *all* of them are negative a sign flag is raised
|
||||||
|
and edx,ecx
|
||||||
|
and edx,eax
|
||||||
|
test edx,80008000h ; Check both X&Y at once
|
||||||
|
jne .gt_loop2_end
|
||||||
|
|
||||||
|
mov bx,.y2 ; calc deltas
|
||||||
|
sub bx,.y1
|
||||||
|
jnz .gt_dx12_make
|
||||||
|
; mov .dx12,0
|
||||||
|
; mov .dz12,0
|
||||||
|
; mov .dc12r,0
|
||||||
|
; mov .dc12g,0
|
||||||
|
; mov .dc12b,0
|
||||||
|
mov ecx,5
|
||||||
|
@@:
|
||||||
|
push dword 0
|
||||||
|
loop @b
|
||||||
|
jmp .gt_dx12_done
|
||||||
|
.gt_dx12_make:
|
||||||
|
mov ax,.x2
|
||||||
|
sub ax,.x1
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dx12,eax
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.z2]
|
||||||
|
sub ax,word[.z1]
|
||||||
|
cwde
|
||||||
|
shl eax,CATMULL_SHIFT
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.col2r]
|
||||||
|
sub ax,word[.col1r]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dc12r,eax
|
||||||
|
push eax
|
||||||
|
mov ax,word[.col2g]
|
||||||
|
sub ax,word[.col1g]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dc12g,eax
|
||||||
|
push eax
|
||||||
|
mov ax,word[.col2b]
|
||||||
|
sub ax,word[.col1b]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dc12b,eax
|
||||||
|
push eax
|
||||||
|
.gt_dx12_done:
|
||||||
|
|
||||||
|
mov bx,.y3 ; calc deltas
|
||||||
|
sub bx,.y1
|
||||||
|
jnz .gt_dx13_make
|
||||||
|
; mov .dx13,0
|
||||||
|
; mov .dz13,0
|
||||||
|
; mov .dc13r,0
|
||||||
|
; mov .dc13g,0
|
||||||
|
; mov .dc13b,0
|
||||||
|
mov ecx,5
|
||||||
|
@@:
|
||||||
|
push dword 0
|
||||||
|
loop @b
|
||||||
|
jmp .gt_dx13_done
|
||||||
|
.gt_dx13_make:
|
||||||
|
mov ax,.x3
|
||||||
|
sub ax,.x1
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dx13,eax
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.z3]
|
||||||
|
sub ax,word[.z1]
|
||||||
|
cwde
|
||||||
|
shl eax,CATMULL_SHIFT
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.col3r]
|
||||||
|
sub ax,word[.col1r]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dc13r,eax
|
||||||
|
push eax
|
||||||
|
mov ax,word[.col3g]
|
||||||
|
sub ax,word[.col1g]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dc13g,eax
|
||||||
|
push eax
|
||||||
|
mov ax,word[.col3b]
|
||||||
|
sub ax,word[.col1b]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dc13b,eax
|
||||||
|
push eax
|
||||||
|
.gt_dx13_done:
|
||||||
|
|
||||||
|
mov bx,.y3 ; calc deltas
|
||||||
|
sub bx,.y2
|
||||||
|
jnz .gt_dx23_make
|
||||||
|
; mov .dx23,0
|
||||||
|
; mov .dz23,0
|
||||||
|
; mov .dc23r,0
|
||||||
|
; mov .dc23g,0
|
||||||
|
; mov .dc23b,0
|
||||||
|
mov ecx,5
|
||||||
|
@@:
|
||||||
|
push dword 0
|
||||||
|
loop @b
|
||||||
|
jmp .gt_dx23_done
|
||||||
|
.gt_dx23_make:
|
||||||
|
mov ax,.x3
|
||||||
|
sub ax,.x2
|
||||||
|
cwde
|
||||||
|
movsx ebx,bx
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dx23,eax
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.z3]
|
||||||
|
sub ax,word[.z2]
|
||||||
|
cwde
|
||||||
|
shl eax,CATMULL_SHIFT
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.col3r]
|
||||||
|
sub ax,word[.col2r]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dc23r,eax
|
||||||
|
push eax
|
||||||
|
mov ax,word[.col3g]
|
||||||
|
sub ax,word[.col2g]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dc23g,eax
|
||||||
|
push eax
|
||||||
|
mov ax,word[.col3b]
|
||||||
|
sub ax,word[.col2b]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
; mov .dc23b,eax
|
||||||
|
push eax
|
||||||
|
.gt_dx23_done:
|
||||||
|
sub esp,32
|
||||||
|
|
||||||
|
movsx eax,.x1 ; eax - cur x1
|
||||||
|
shl eax,ROUND ; ebx - cur x2
|
||||||
|
mov ebx,eax
|
||||||
|
movsx edx,word[.z1]
|
||||||
|
shl edx,CATMULL_SHIFT
|
||||||
|
mov .zz1,edx
|
||||||
|
mov .zz2,edx
|
||||||
|
movzx edx,word[.col1r]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c1r,edx
|
||||||
|
mov .c2r,edx
|
||||||
|
movzx edx,word[.col1g]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c1g,edx
|
||||||
|
mov .c2g,edx
|
||||||
|
movzx edx,word[.col1b]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c1b,edx
|
||||||
|
mov .c2b,edx
|
||||||
|
mov cx,.y1
|
||||||
|
cmp cx,.y2
|
||||||
|
jge .gt_loop1_end
|
||||||
|
|
||||||
|
.gt_loop1:
|
||||||
|
pushad
|
||||||
|
; macro .debug
|
||||||
|
|
||||||
|
mov edx,.c2r ; c2r,c2g,c2b,c1r,c1g,c1b - current colors
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c2g
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c2b
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
sar ebx,ROUND ; x2
|
||||||
|
push bx
|
||||||
|
mov edx,.c1r
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1g
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1b
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
sar eax,ROUND
|
||||||
|
push ax ; x1
|
||||||
|
push cx ; y
|
||||||
|
push .zz2
|
||||||
|
push .zz1
|
||||||
|
call gouraud_line_z
|
||||||
|
|
||||||
|
popad
|
||||||
|
|
||||||
|
mov edx,.dc13r
|
||||||
|
add .c1r,edx
|
||||||
|
mov edx,.dc13g
|
||||||
|
add .c1g,edx
|
||||||
|
mov edx,.dc13b
|
||||||
|
add .c1b,edx
|
||||||
|
mov edx,.dc12r
|
||||||
|
add .c2r,edx
|
||||||
|
mov edx,.dc12g
|
||||||
|
add .c2g,edx
|
||||||
|
mov edx,.dc12b
|
||||||
|
add .c2b,edx
|
||||||
|
mov edx,.dz13
|
||||||
|
add .zz1,edx
|
||||||
|
mov edx,.dz12
|
||||||
|
add .zz2,edx
|
||||||
|
|
||||||
|
add eax,.dx13
|
||||||
|
add ebx,.dx12
|
||||||
|
inc cx
|
||||||
|
cmp cx,.y2
|
||||||
|
jl .gt_loop1
|
||||||
|
|
||||||
|
.gt_loop1_end:
|
||||||
|
mov cx,.y2
|
||||||
|
cmp cx,.y3
|
||||||
|
jge .gt_loop2_end
|
||||||
|
|
||||||
|
movsx ebx,.x2 ; eax - cur x1
|
||||||
|
shl ebx,ROUND ; ebx - cur x2
|
||||||
|
movsx edx,word[.z2]
|
||||||
|
shl edx,CATMULL_SHIFT
|
||||||
|
mov .zz2,edx
|
||||||
|
movzx edx,word[.col2r]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c2r,edx
|
||||||
|
movzx edx,word[.col2g]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c2g,edx
|
||||||
|
movzx edx,word[.col2b]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov .c2b,edx
|
||||||
|
|
||||||
|
.gt_loop2:
|
||||||
|
pushad
|
||||||
|
; macro .debug
|
||||||
|
|
||||||
|
mov edx,.c2r ; c2r,c2g,c2b,c1r,c1g,c1b - current colors
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c2g
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c2b
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
sar ebx,ROUND ; x2
|
||||||
|
push bx
|
||||||
|
mov edx,.c1r
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1g
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,.c1b
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
sar eax,ROUND
|
||||||
|
push ax ; x1
|
||||||
|
push cx ; y
|
||||||
|
push .zz2
|
||||||
|
push .zz1
|
||||||
|
call gouraud_line_z
|
||||||
|
|
||||||
|
popad
|
||||||
|
|
||||||
|
mov edx,.dc13r
|
||||||
|
add .c1r,edx
|
||||||
|
mov edx,.dc13g
|
||||||
|
add .c1g,edx
|
||||||
|
mov edx,.dc13b
|
||||||
|
add .c1b,edx
|
||||||
|
mov edx,.dc23r
|
||||||
|
add .c2r,edx
|
||||||
|
mov edx,.dc23g
|
||||||
|
add .c2g,edx
|
||||||
|
mov edx,.dc23b
|
||||||
|
add .c2b,edx
|
||||||
|
mov edx,.dz13
|
||||||
|
add .zz1,edx
|
||||||
|
mov edx,.dz23
|
||||||
|
add .zz2,edx
|
||||||
|
|
||||||
|
add eax,.dx13
|
||||||
|
add ebx,.dx23
|
||||||
|
inc cx
|
||||||
|
cmp cx,.y3
|
||||||
|
jl .gt_loop2
|
||||||
|
.gt_loop2_end:
|
||||||
|
|
||||||
|
mov esp,ebp
|
||||||
|
ret 24
|
||||||
|
gouraud_line_z:
|
||||||
|
;----------------- procedure drawing gouraud line
|
||||||
|
;----------------- with z coordinate interpolation
|
||||||
|
;----------------- esi - pointer to Z_buffer
|
||||||
|
;----------------- edi - pointer to screen buffer
|
||||||
|
;----------------- stack:
|
||||||
|
.z1 equ dword[ebp+4] ; z coordiunate shifted left CATMULL_SHIFT
|
||||||
|
.z2 equ dword[ebp+8]
|
||||||
|
.y equ word[ebp+12]
|
||||||
|
.x1 equ ebp+14
|
||||||
|
.c1b equ ebp+16
|
||||||
|
.c1g equ ebp+18
|
||||||
|
.c1r equ ebp+20
|
||||||
|
.x2 equ ebp+22
|
||||||
|
.c2b equ ebp+24
|
||||||
|
.c2g equ ebp+26
|
||||||
|
.c2r equ ebp+28
|
||||||
|
.dz equ dword[ebp-4]
|
||||||
|
.dc_r equ dword[ebp-8]
|
||||||
|
.dc_g equ dword[ebp-12]
|
||||||
|
.dc_b equ dword[ebp-14]
|
||||||
|
.cr equ dword[ebp-18]
|
||||||
|
.cg equ dword[ebp-22]
|
||||||
|
.cb equ dword[ebp-26]
|
||||||
|
mov ebp,esp
|
||||||
|
|
||||||
|
mov ax,.y
|
||||||
|
or ax,ax
|
||||||
|
jl .gl_quit
|
||||||
|
cmp ax,SIZE_Y
|
||||||
|
jge .gl_quit
|
||||||
|
|
||||||
|
mov eax,dword[.x1]
|
||||||
|
cmp ax,word[.x2]
|
||||||
|
je .gl_quit
|
||||||
|
jl @f
|
||||||
|
|
||||||
|
xchg eax,dword[.x2]
|
||||||
|
mov dword[.x1],eax
|
||||||
|
mov eax,dword[.c1g]
|
||||||
|
xchg eax,dword[.c2g]
|
||||||
|
mov dword[.c1g],eax
|
||||||
|
mov eax,.z1
|
||||||
|
xchg eax,.z2
|
||||||
|
mov .z1,eax
|
||||||
|
@@:
|
||||||
|
cmp word[.x1],SIZE_X
|
||||||
|
jge .gl_quit
|
||||||
|
cmp word[.x2],0
|
||||||
|
jle .gl_quit
|
||||||
|
|
||||||
|
mov eax,.z2
|
||||||
|
sub eax,.z1
|
||||||
|
cdq
|
||||||
|
mov bx,word[.x2] ; dz = z2-z1/x2-x1
|
||||||
|
sub bx,word[.x1]
|
||||||
|
movsx ebx,bx
|
||||||
|
idiv ebx
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.c2r]
|
||||||
|
sub ax,word[.c1r]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND ; dc_r = c2r-c1r/x2-x1
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.c2g]
|
||||||
|
sub ax,word[.c1g]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
push eax
|
||||||
|
|
||||||
|
mov ax,word[.c2b]
|
||||||
|
sub ax,word[.c1b]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
push eax
|
||||||
|
|
||||||
|
cmp word[.x1],0
|
||||||
|
jg @f
|
||||||
|
mov eax,.dz
|
||||||
|
movsx ebx,word[.x1]
|
||||||
|
neg ebx
|
||||||
|
imul ebx
|
||||||
|
add .z1,eax
|
||||||
|
mov word[.x1],0
|
||||||
|
|
||||||
|
mov eax,.dc_r
|
||||||
|
imul ebx
|
||||||
|
sar eax,ROUND
|
||||||
|
add word[.c1r],ax
|
||||||
|
|
||||||
|
mov eax,.dc_g
|
||||||
|
imul ebx
|
||||||
|
sar eax,ROUND
|
||||||
|
add word[.c1g],ax
|
||||||
|
|
||||||
|
mov eax,.dc_b
|
||||||
|
imul ebx
|
||||||
|
sar eax,ROUND
|
||||||
|
add word[.c1b],ax
|
||||||
|
|
||||||
|
@@:
|
||||||
|
cmp word[.x2],SIZE_X
|
||||||
|
jl @f
|
||||||
|
mov word[.x2],SIZE_X
|
||||||
|
@@:
|
||||||
|
sub esp,12 ; calculate memory begin
|
||||||
|
mov edx,SIZE_X ; in buffers
|
||||||
|
movzx eax,.y
|
||||||
|
mul edx
|
||||||
|
movzx edx,word[.x1]
|
||||||
|
add eax,edx
|
||||||
|
push eax
|
||||||
|
lea eax,[eax*3]
|
||||||
|
add edi,eax
|
||||||
|
pop eax
|
||||||
|
shl eax,2
|
||||||
|
add esi,eax
|
||||||
|
|
||||||
|
mov cx,word[.x2]
|
||||||
|
sub cx,word[.x1]
|
||||||
|
movzx ecx,cx
|
||||||
|
mov ebx,.z1 ; ebx - currrent z shl CATMULL_SIFT
|
||||||
|
mov edx,.dz ; edx - delta z
|
||||||
|
movzx eax,word[.c1r]
|
||||||
|
shl eax,ROUND
|
||||||
|
mov .cr,eax
|
||||||
|
movzx eax,word[.c1g]
|
||||||
|
shl eax,ROUND
|
||||||
|
mov .cg,eax
|
||||||
|
movzx eax,word[.c1b]
|
||||||
|
shl eax,ROUND
|
||||||
|
mov .cb,eax
|
||||||
|
.ddraw:
|
||||||
|
cmp ebx,dword[esi]
|
||||||
|
jge .skip
|
||||||
|
mov eax,.cr
|
||||||
|
sar eax,ROUND
|
||||||
|
stosb
|
||||||
|
mov eax,.cg
|
||||||
|
sar eax,ROUND
|
||||||
|
stosb
|
||||||
|
mov eax,.cb
|
||||||
|
sar eax,ROUND
|
||||||
|
stosb
|
||||||
|
mov dword[esi],ebx
|
||||||
|
jmp .no_skip
|
||||||
|
.skip:
|
||||||
|
add edi,3
|
||||||
|
.no_skip:
|
||||||
|
add esi,4
|
||||||
|
add ebx,edx
|
||||||
|
mov eax,.dc_r
|
||||||
|
add .cr,eax
|
||||||
|
mov eax,.dc_g
|
||||||
|
add .cg,eax
|
||||||
|
mov eax,.dc_b
|
||||||
|
add .cb,eax
|
||||||
|
loop .ddraw
|
||||||
|
|
||||||
|
.gl_quit:
|
||||||
|
mov esp,ebp
|
||||||
|
ret 26
|
BIN
programs/demos/3DS/HRT.3DS
Normal file
BIN
programs/demos/3DS/HRT.3DS
Normal file
Binary file not shown.
BIN
programs/demos/3DS/TEAPOT.3DS
Normal file
BIN
programs/demos/3DS/TEAPOT.3DS
Normal file
Binary file not shown.
507
programs/demos/3DS/TEX3.ASM
Normal file
507
programs/demos/3DS/TEX3.ASM
Normal file
@ -0,0 +1,507 @@
|
|||||||
|
;---------------------------------------------------------------------
|
||||||
|
;--------------------textured triangle procedure----------------------
|
||||||
|
;---------------------------------------------------------------------
|
||||||
|
tex_triangle:
|
||||||
|
;----------in - eax - x1 shl 16 + y1
|
||||||
|
;-------------- ebx - x2 shl 16 + y2
|
||||||
|
;---------------ecx - x3 shl 16 + y3
|
||||||
|
;---------------edx - nothing
|
||||||
|
;---------------esi - pointer to texture buffer
|
||||||
|
;---------------edi - pointer to screen buffer
|
||||||
|
;-------------stack - texture coordinates
|
||||||
|
.tex_x1 equ ebp+4
|
||||||
|
.tex_y1 equ ebp+6
|
||||||
|
.tex_x2 equ ebp+8
|
||||||
|
.tex_y2 equ ebp+10
|
||||||
|
.tex_x3 equ ebp+12
|
||||||
|
.tex_y3 equ ebp+14
|
||||||
|
mov ebp,esp
|
||||||
|
|
||||||
|
mov edx,dword[.tex_x1] ; check all parameters
|
||||||
|
or dx,dx
|
||||||
|
jl .tt_end
|
||||||
|
cmp dx,TEX_X-1
|
||||||
|
jg .tt_end
|
||||||
|
shr edx,16
|
||||||
|
or dx,dx
|
||||||
|
jl .tt_end
|
||||||
|
cmp dx,TEX_Y-1
|
||||||
|
jg .tt_end
|
||||||
|
|
||||||
|
mov edx,dword[.tex_x2]
|
||||||
|
or dx,dx
|
||||||
|
jl .tt_end
|
||||||
|
cmp dx,TEX_X-1
|
||||||
|
jg .tt_end
|
||||||
|
shr edx,16
|
||||||
|
or dx,dx
|
||||||
|
jl .tt_end
|
||||||
|
cmp dx,TEX_Y-1
|
||||||
|
jg .tt_end
|
||||||
|
|
||||||
|
mov edx,dword[.tex_x3]
|
||||||
|
or dx,dx
|
||||||
|
jl .tt_end
|
||||||
|
cmp dx,TEX_X-1
|
||||||
|
jg .tt_end
|
||||||
|
shr edx,16
|
||||||
|
cmp dx,TEX_Y-1
|
||||||
|
jg .tt_end
|
||||||
|
or dx,dx
|
||||||
|
jl .tt_end
|
||||||
|
|
||||||
|
mov edx,eax ; check X&Y triangle coordinate
|
||||||
|
or edx,ebx
|
||||||
|
or edx,ecx
|
||||||
|
test edx,80008000h
|
||||||
|
jne .tt_end
|
||||||
|
|
||||||
|
; or ax,ax
|
||||||
|
; jl .tt_end
|
||||||
|
cmp ax,SIZE_Y
|
||||||
|
jg .tt_end
|
||||||
|
ror eax,16
|
||||||
|
; or ax,ax
|
||||||
|
; jl .tt_end
|
||||||
|
cmp ax,SIZE_X
|
||||||
|
jg .tt_end
|
||||||
|
rol eax,16
|
||||||
|
|
||||||
|
; or bx,bx
|
||||||
|
; jl .tt_end
|
||||||
|
cmp bx,SIZE_Y
|
||||||
|
jg .tt_end
|
||||||
|
ror ebx,16
|
||||||
|
; or bx,bx
|
||||||
|
; jl .tt_end
|
||||||
|
cmp bx,SIZE_X
|
||||||
|
jg .tt_end
|
||||||
|
rol ebx,16
|
||||||
|
|
||||||
|
; or cx,cx
|
||||||
|
; jl .tt_end
|
||||||
|
cmp cx,SIZE_Y
|
||||||
|
jg .tt_end
|
||||||
|
ror ecx,16
|
||||||
|
; or cx,cx
|
||||||
|
; jl .tt_end
|
||||||
|
cmp cx,SIZE_X
|
||||||
|
jg .tt_end
|
||||||
|
rol ecx,16 ; uff.. parameters was checked
|
||||||
|
|
||||||
|
cmp ax,bx ;sort all parameters
|
||||||
|
jle .tt_sort1
|
||||||
|
xchg eax,ebx
|
||||||
|
mov edx,dword [.tex_x1]
|
||||||
|
xchg edx,dword [.tex_x2]
|
||||||
|
mov dword[.tex_x1],edx
|
||||||
|
.tt_sort1:
|
||||||
|
cmp ax,cx
|
||||||
|
jle .tt_sort2
|
||||||
|
xchg eax,ecx
|
||||||
|
mov edx,dword [.tex_x1]
|
||||||
|
xchg edx,dword [.tex_x3]
|
||||||
|
mov dword [.tex_x1],edx
|
||||||
|
.tt_sort2:
|
||||||
|
cmp bx,cx
|
||||||
|
jle .tt_sort3
|
||||||
|
xchg ebx,ecx
|
||||||
|
mov edx,dword [.tex_x2]
|
||||||
|
xchg edx,dword [.tex_x3]
|
||||||
|
mov dword [.tex_x2],edx
|
||||||
|
.tt_sort3:
|
||||||
|
mov [.y1],ax ; and store to user friendly variables
|
||||||
|
shr eax,16
|
||||||
|
mov [.x1],ax
|
||||||
|
mov [.y2],bx
|
||||||
|
shr ebx,16
|
||||||
|
mov [.x2],bx
|
||||||
|
mov [.y3],cx
|
||||||
|
shr ecx,16
|
||||||
|
mov [.x3],cx
|
||||||
|
mov [.tex_ptr],esi
|
||||||
|
|
||||||
|
movsx ebx,word[.y2]
|
||||||
|
sub bx,[.y1]
|
||||||
|
jnz .tt_dx12_make
|
||||||
|
|
||||||
|
mov [.dx12],0
|
||||||
|
mov [.tex_dx12],0
|
||||||
|
mov [.tex_dy12],0
|
||||||
|
jmp .tt_dx12_done
|
||||||
|
.tt_dx12_make:
|
||||||
|
mov ax,[.x2]
|
||||||
|
sub ax,[.x1]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov [.dx12],eax ; dx12 = (x2-x1)/(y2-y1)
|
||||||
|
|
||||||
|
mov ax,word[.tex_x2]
|
||||||
|
sub ax,word[.tex_x1]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov [.tex_dx12],eax ; tex_dx12 = (tex_x2-tex_x1)/(y2-y1)
|
||||||
|
|
||||||
|
mov ax,word[.tex_y2]
|
||||||
|
sub ax,word[.tex_y1]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov [.tex_dy12],eax ; tex_dy12 = (tex_y2-tex_y1)/(y2-y1)
|
||||||
|
.tt_dx12_done:
|
||||||
|
|
||||||
|
movsx ebx,[.y3]
|
||||||
|
sub bx,[.y1]
|
||||||
|
jnz .tt_dx13_make
|
||||||
|
|
||||||
|
mov [.dx13],0
|
||||||
|
mov [.tex_dx13],0
|
||||||
|
mov [.tex_dy13],0
|
||||||
|
jmp .tt_dx13_done
|
||||||
|
.tt_dx13_make:
|
||||||
|
mov ax,[.x3]
|
||||||
|
sub ax,[.x1]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov [.dx13],eax ; dx13 = (x3-x1)/(y3-y1)
|
||||||
|
|
||||||
|
mov ax,word[.tex_x3]
|
||||||
|
sub ax,word[.tex_x1]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov [.tex_dx13],eax ; tex_dx13 = (tex_x3-tex_x1)/(y3-y1)
|
||||||
|
|
||||||
|
mov ax,word[.tex_y3]
|
||||||
|
sub ax,word[.tex_y1]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov [.tex_dy13],eax ; tex_dy13 = (tex_y3-tex_y1)/(y3-y1)
|
||||||
|
.tt_dx13_done:
|
||||||
|
|
||||||
|
movsx ebx,[.y3]
|
||||||
|
sub bx,[.y2]
|
||||||
|
jnz .tt_dx23_make
|
||||||
|
|
||||||
|
mov [.dx23],0
|
||||||
|
mov [.tex_dx23],0
|
||||||
|
mov [.tex_dy23],0
|
||||||
|
jmp .tt_dx23_done
|
||||||
|
.tt_dx23_make:
|
||||||
|
mov ax,[.x3]
|
||||||
|
sub ax,[.x2]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov [.dx23],eax ; dx23 = (x3-x2)/(y3-y2)
|
||||||
|
|
||||||
|
mov ax,word[.tex_x3]
|
||||||
|
sub ax,word[.tex_x2]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov [.tex_dx23],eax ; tex_dx23 = (tex_x3-tex_x2)/(y3-y2)
|
||||||
|
|
||||||
|
mov ax,word[.tex_y3]
|
||||||
|
sub ax,word[.tex_y2]
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ebx
|
||||||
|
mov [.tex_dy23],eax ; tex_dy23 = (tex_y3-tex_y2)/(y3-y2)
|
||||||
|
.tt_dx23_done:
|
||||||
|
|
||||||
|
movsx eax,[.x1]
|
||||||
|
shl eax,ROUND
|
||||||
|
mov ebx,eax
|
||||||
|
|
||||||
|
movsx edx, word[.tex_x1]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov [.scan_x1],edx
|
||||||
|
mov [.scan_x2],edx
|
||||||
|
movsx edx, word[.tex_y1]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov [.scan_y1],edx
|
||||||
|
mov [.scan_y2],edx
|
||||||
|
|
||||||
|
mov cx,[.y1]
|
||||||
|
cmp cx, [.y2]
|
||||||
|
jge .tt_loop1_end
|
||||||
|
.tt_loop1:
|
||||||
|
push edi
|
||||||
|
push eax
|
||||||
|
push ebx
|
||||||
|
push cx
|
||||||
|
push ebp
|
||||||
|
|
||||||
|
mov edx, [.scan_y2]
|
||||||
|
sar edx, ROUND
|
||||||
|
push dx
|
||||||
|
mov edx, [.scan_x2]
|
||||||
|
sar edx, ROUND
|
||||||
|
push dx
|
||||||
|
mov edx, [.scan_y1]
|
||||||
|
sar edx, ROUND
|
||||||
|
push dx
|
||||||
|
mov edx, [.scan_x1]
|
||||||
|
sar edx, ROUND
|
||||||
|
push dx
|
||||||
|
push [.tex_ptr]
|
||||||
|
|
||||||
|
push cx
|
||||||
|
mov edx,ebx
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,eax
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
call textured_line
|
||||||
|
|
||||||
|
pop ebp
|
||||||
|
pop cx
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
mov edx, [.tex_dx13]
|
||||||
|
add [.scan_x1], edx
|
||||||
|
mov edx, [.tex_dx12]
|
||||||
|
add [.scan_x2], edx
|
||||||
|
mov edx, [.tex_dy13]
|
||||||
|
add [.scan_y1], edx
|
||||||
|
mov edx, [.tex_dy12]
|
||||||
|
add [.scan_y2], edx
|
||||||
|
|
||||||
|
add eax, [.dx13]
|
||||||
|
add ebx, [.dx12]
|
||||||
|
inc cx
|
||||||
|
cmp cx,[.y2]
|
||||||
|
jl .tt_loop1
|
||||||
|
.tt_loop1_end:
|
||||||
|
|
||||||
|
|
||||||
|
mov cx,[.y2]
|
||||||
|
cmp cx, [.y3]
|
||||||
|
jge .tt_loop2_end
|
||||||
|
|
||||||
|
movsx ebx,[.x2]
|
||||||
|
shl ebx,ROUND
|
||||||
|
|
||||||
|
movsx edx, word[.tex_x2]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov [.scan_x2],edx
|
||||||
|
movsx edx, word[.tex_y2]
|
||||||
|
shl edx,ROUND
|
||||||
|
mov [.scan_y2],edx
|
||||||
|
|
||||||
|
.tt_loop2:
|
||||||
|
push edi
|
||||||
|
push eax
|
||||||
|
push ebx
|
||||||
|
push cx
|
||||||
|
push ebp
|
||||||
|
|
||||||
|
mov edx, [.scan_y2]
|
||||||
|
sar edx, ROUND
|
||||||
|
push dx
|
||||||
|
mov edx, [.scan_x2]
|
||||||
|
sar edx, ROUND
|
||||||
|
push dx
|
||||||
|
mov edx, [.scan_y1]
|
||||||
|
sar edx, ROUND
|
||||||
|
push dx
|
||||||
|
mov edx, [.scan_x1]
|
||||||
|
sar edx, ROUND
|
||||||
|
push dx
|
||||||
|
push [.tex_ptr]
|
||||||
|
|
||||||
|
push cx
|
||||||
|
mov edx,ebx
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
mov edx,eax
|
||||||
|
sar edx,ROUND
|
||||||
|
push dx
|
||||||
|
call textured_line
|
||||||
|
|
||||||
|
pop ebp
|
||||||
|
pop cx
|
||||||
|
pop ebx
|
||||||
|
pop eax
|
||||||
|
pop edi
|
||||||
|
|
||||||
|
mov edx, [.tex_dx13]
|
||||||
|
add [.scan_x1], edx
|
||||||
|
mov edx, [.tex_dx23]
|
||||||
|
add [.scan_x2], edx
|
||||||
|
mov edx, [.tex_dy13]
|
||||||
|
add [.scan_y1], edx
|
||||||
|
mov edx, [.tex_dy23]
|
||||||
|
add [.scan_y2], edx
|
||||||
|
|
||||||
|
add eax, [.dx13]
|
||||||
|
add ebx, [.dx23]
|
||||||
|
inc cx
|
||||||
|
cmp cx,[.y3]
|
||||||
|
jl .tt_loop2
|
||||||
|
.tt_loop2_end:
|
||||||
|
|
||||||
|
.tt_end:
|
||||||
|
mov esp,ebp
|
||||||
|
ret 12
|
||||||
|
.x1 dw ?
|
||||||
|
.y1 dw ?
|
||||||
|
.x2 dw ?
|
||||||
|
.y2 dw ?
|
||||||
|
.x3 dw ?
|
||||||
|
.y3 dw ?
|
||||||
|
.dx12 dd ?
|
||||||
|
.dx13 dd ?
|
||||||
|
.dx23 dd ?
|
||||||
|
.tex_dx12 dd ?
|
||||||
|
.tex_dy12 dd ?
|
||||||
|
.tex_dx13 dd ?
|
||||||
|
.tex_dy13 dd ?
|
||||||
|
.tex_dx23 dd ?
|
||||||
|
.tex_dy23 dd ?
|
||||||
|
.tex_ptr dd ?
|
||||||
|
|
||||||
|
.scan_x1 dd ?
|
||||||
|
.scan_y1 dd ?
|
||||||
|
.scan_x2 dd ?
|
||||||
|
.scan_y2 dd ?
|
||||||
|
|
||||||
|
|
||||||
|
textured_line:
|
||||||
|
;-----in -edi screen buffer pointer
|
||||||
|
;------------ stack:
|
||||||
|
.x1 equ word [ebp+4]
|
||||||
|
.x2 equ word [ebp+6]
|
||||||
|
.y equ word [ebp+8]
|
||||||
|
|
||||||
|
.tex_ptr equ dword [ebp+10]
|
||||||
|
.tex_x1 equ word [ebp+14]
|
||||||
|
.tex_y1 equ word [ebp+16]
|
||||||
|
.tex_x2 equ word [ebp+18]
|
||||||
|
.tex_y2 equ word [ebp+20]
|
||||||
|
|
||||||
|
mov ebp,esp
|
||||||
|
|
||||||
|
mov ax,.y
|
||||||
|
or ax,ax
|
||||||
|
jl .tl_quit
|
||||||
|
cmp ax,SIZE_Y
|
||||||
|
jg .tl_quit
|
||||||
|
|
||||||
|
mov ax,.x1
|
||||||
|
cmp ax,.x2
|
||||||
|
je .tl_quit
|
||||||
|
jl .tl_ok
|
||||||
|
|
||||||
|
xchg ax,.x2
|
||||||
|
mov .x1,ax
|
||||||
|
|
||||||
|
mov ax,.tex_x1
|
||||||
|
xchg ax,.tex_x2
|
||||||
|
mov .tex_x1,ax
|
||||||
|
|
||||||
|
mov ax,.tex_y1
|
||||||
|
xchg ax,.tex_y2
|
||||||
|
mov .tex_y1,ax
|
||||||
|
|
||||||
|
.tl_ok:
|
||||||
|
mov ebx,edi
|
||||||
|
movsx edi,.y
|
||||||
|
mov eax,SIZE_X*3
|
||||||
|
mul edi
|
||||||
|
mov edi,eax
|
||||||
|
movsx eax,.x1
|
||||||
|
add edi,eax
|
||||||
|
shl eax,1
|
||||||
|
add edi,eax
|
||||||
|
add edi,ebx
|
||||||
|
|
||||||
|
mov cx,.x2
|
||||||
|
sub cx,.x1
|
||||||
|
movsx ecx,cx
|
||||||
|
|
||||||
|
mov ax,.tex_x2
|
||||||
|
sub ax,.tex_x1
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ecx
|
||||||
|
mov [.tex_dx],eax ; tex_dx=(tex_x2-tex_x1)/(x2-x1)
|
||||||
|
|
||||||
|
mov ax,.tex_y2
|
||||||
|
sub ax,.tex_y1
|
||||||
|
cwde
|
||||||
|
shl eax,ROUND
|
||||||
|
cdq
|
||||||
|
idiv ecx
|
||||||
|
mov [.tex_dy],eax ; tex_dy = (tex_y2-tex_y1)/(x2-x1)
|
||||||
|
|
||||||
|
movsx eax,.tex_x1
|
||||||
|
shl eax,ROUND
|
||||||
|
movsx ebx,.tex_y1
|
||||||
|
shl ebx,ROUND
|
||||||
|
cld
|
||||||
|
.tl_loop:
|
||||||
|
mov edx,eax
|
||||||
|
mov esi,ebx
|
||||||
|
sar edx,ROUND
|
||||||
|
sar esi,ROUND
|
||||||
|
macro .fluent
|
||||||
|
{
|
||||||
|
push eax
|
||||||
|
push edx
|
||||||
|
mov eax,TEX_X*3
|
||||||
|
mul esi
|
||||||
|
mov esi,eax
|
||||||
|
pop edx
|
||||||
|
pop eax
|
||||||
|
}
|
||||||
|
macro .shift
|
||||||
|
{
|
||||||
|
shl esi,TEX_SHIFT
|
||||||
|
lea esi,[esi*3]
|
||||||
|
;push edx
|
||||||
|
;mov edx,esi
|
||||||
|
;shl esi,1
|
||||||
|
;add esi,edx
|
||||||
|
;pop edx
|
||||||
|
}
|
||||||
|
if TEX = FLUENTLY
|
||||||
|
.fluent
|
||||||
|
end if
|
||||||
|
if TEX = SHIFTING
|
||||||
|
.shift
|
||||||
|
end if
|
||||||
|
lea edx,[edx*3]
|
||||||
|
add esi,edx
|
||||||
|
; shl edx,1
|
||||||
|
; add esi,edx
|
||||||
|
add esi,.tex_ptr
|
||||||
|
movsd
|
||||||
|
dec edi
|
||||||
|
add eax,[.tex_dx]
|
||||||
|
add ebx,[.tex_dy]
|
||||||
|
loop .tl_loop
|
||||||
|
|
||||||
|
.tl_quit:
|
||||||
|
mov esp,ebp
|
||||||
|
ret 18
|
||||||
|
.tex_dx dd ?
|
||||||
|
.tex_dy dd ?
|
@ -2,4 +2,5 @@
|
|||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm fasm.asm fasm
|
@fasm fasm.asm fasm
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
|
@kpack fasm
|
||||||
@pause
|
@pause
|
@ -2,4 +2,5 @@
|
|||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm kfar.asm kfar
|
@fasm kfar.asm kfar
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
|
@kpack kfar
|
||||||
@pause
|
@pause
|
@ -1,4 +1,5 @@
|
|||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm rsquare.asm rsquare
|
@fasm rsquare.asm rsquare
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
|
kpack rsquare
|
||||||
@pause
|
@pause
|
@ -2,4 +2,5 @@
|
|||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm jpegview.asm jpegview
|
@fasm jpegview.asm jpegview
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
|
@kpack jpegview
|
||||||
@pause
|
@pause
|
@ -20,7 +20,7 @@ use32
|
|||||||
dd 0x7FFF0 ; esp = 0x7FFF0
|
dd 0x7FFF0 ; esp = 0x7FFF0
|
||||||
dd 0, 0 ; no params, no path
|
dd 0, 0 ; no params, no path
|
||||||
|
|
||||||
include '..\..\..\macros.inc'
|
include 'macros.inc'
|
||||||
; Various states of client connection
|
; Various states of client connection
|
||||||
USER_NONE equ 0 ; Awaiting a connection
|
USER_NONE equ 0 ; Awaiting a connection
|
||||||
USER_CONNECTED equ 1 ; User just connected, prompt given
|
USER_CONNECTED equ 1 ; User just connected, prompt given
|
||||||
@ -180,7 +180,7 @@ draw_window:
|
|||||||
xor eax,eax ; DRAW WINDOW
|
xor eax,eax ; DRAW WINDOW
|
||||||
mov ebx,100*65536+491 + 8 +15
|
mov ebx,100*65536+491 + 8 +15
|
||||||
mov ecx,100*65536+270 + 20 ; 20 for status bar
|
mov ecx,100*65536+270 + 20 ; 20 for status bar
|
||||||
mov edx,0x13000000
|
mov edx,0x14000000
|
||||||
mov edi,labelt
|
mov edi,labelt
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
@ -23,17 +23,17 @@ DEBUGGING_DISABLED equ 0
|
|||||||
DEBUGGING_STATE equ DEBUGGING_DISABLED
|
DEBUGGING_STATE equ DEBUGGING_DISABLED
|
||||||
|
|
||||||
use32
|
use32
|
||||||
org 0x0
|
org 0x0
|
||||||
db 'MENUET01' ; header
|
db 'MENUET01' ; header
|
||||||
dd 0x01 ; header version
|
dd 0x01 ; header version
|
||||||
dd START ; entry point
|
dd START ; entry point
|
||||||
dd I_END ; image size
|
dd I_END ; image size
|
||||||
dd 0x100000 ; required memory
|
dd 0x100000 ; required memory
|
||||||
dd 0x100000 ; esp
|
dd 0x100000 ; esp
|
||||||
dd 0x0 , 0x0 ; I_Param , I_Path
|
dd 0x0 , 0x0 ; I_Param , I_Path
|
||||||
|
|
||||||
include 'lang.inc'
|
include 'lang.inc'
|
||||||
include '..\..\..\macros.inc'
|
include 'macros.inc'
|
||||||
;include "DEBUG.INC"
|
;include "DEBUG.INC"
|
||||||
|
|
||||||
URLMAXLEN equ 50 ; maximum length of url string
|
URLMAXLEN equ 50 ; maximum length of url string
|
||||||
@ -1392,7 +1392,7 @@ draw_window:
|
|||||||
mov eax,0 ; function 0 : define and draw window
|
mov eax,0 ; function 0 : define and draw window
|
||||||
mov ebx,50*65536+550 ; [x start] *65536 + [x size]
|
mov ebx,50*65536+550 ; [x start] *65536 + [x size]
|
||||||
mov ecx,50*65536+400 ; [y start] *65536 + [y size]
|
mov ecx,50*65536+400 ; [y start] *65536 + [y size]
|
||||||
mov edx,0x13ffffff ; color of work area RRGGBB,8->color gl
|
mov edx,0x14ffffff ; color of work area RRGGBB,8->color gl
|
||||||
mov edi,title ; WINDOW LABEL
|
mov edi,title ; WINDOW LABEL
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
@ -19,17 +19,17 @@ version equ '0.6'
|
|||||||
|
|
||||||
use32
|
use32
|
||||||
|
|
||||||
org 0x0
|
org 0x0
|
||||||
|
|
||||||
db 'MENUET01' ; 8 byte id
|
db 'MENUET01' ; 8 byte id
|
||||||
dd 0x01 ; required os
|
dd 0x01 ; required os
|
||||||
dd START ; program start
|
dd START ; program start
|
||||||
dd I_END ; program image size
|
dd I_END ; program image size
|
||||||
dd 0x400000 ; required amount of memory
|
dd 0x400000 ; required amount of memory
|
||||||
dd 0x20000
|
dd 0x20000
|
||||||
dd 0,0 ; reserved=no extended header
|
dd 0,0 ; reserved=no extended header
|
||||||
|
|
||||||
include "..\..\..\MACROS.INC"
|
include "MACROS.INC"
|
||||||
|
|
||||||
; 0x0+ - program image
|
; 0x0+ - program image
|
||||||
; 0x1ffff - stack
|
; 0x1ffff - stack
|
||||||
@ -42,7 +42,7 @@ filel:
|
|||||||
dd 0
|
dd 0
|
||||||
dd 50000
|
dd 50000
|
||||||
dd 0x20000
|
dd 0x20000
|
||||||
db '/sys/board.htm',0
|
db '/sys/board.htm',0
|
||||||
|
|
||||||
files:
|
files:
|
||||||
dd 2
|
dd 2
|
||||||
@ -53,7 +53,7 @@ files:
|
|||||||
db '/sys/board.htm',0
|
db '/sys/board.htm',0
|
||||||
|
|
||||||
|
|
||||||
START: ; start of execution
|
START: ; start of execution
|
||||||
|
|
||||||
mov eax,70
|
mov eax,70
|
||||||
mov ebx,filel
|
mov ebx,filel
|
||||||
@ -81,7 +81,7 @@ START: ; start of execution
|
|||||||
mov [last_status],-2
|
mov [last_status],-2
|
||||||
call clear_input
|
call clear_input
|
||||||
red:
|
red:
|
||||||
call draw_window ; at first, draw the window
|
call draw_window ; at first, draw the window
|
||||||
|
|
||||||
still:
|
still:
|
||||||
|
|
||||||
@ -110,26 +110,26 @@ last_status dd 0x0
|
|||||||
|
|
||||||
check_events:
|
check_events:
|
||||||
|
|
||||||
cmp eax,1 ; redraw request ?
|
cmp eax,1 ; redraw request ?
|
||||||
jz red
|
jz red
|
||||||
cmp eax,2 ; key in buffer ?
|
cmp eax,2 ; key in buffer ?
|
||||||
jz key
|
jz key
|
||||||
cmp eax,3 ; button in buffer ?
|
cmp eax,3 ; button in buffer ?
|
||||||
jz button
|
jz button
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
key: ; Keys are not valid at this part of the
|
key: ; Keys are not valid at this part of the
|
||||||
mov al,2 ; loop. Just read it and ignore
|
mov al,2 ; loop. Just read it and ignore
|
||||||
mcall
|
mcall
|
||||||
ret
|
ret
|
||||||
|
|
||||||
button: ; button
|
button: ; button
|
||||||
|
|
||||||
mov al,17 ; get id
|
mov al,17 ; get id
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
cmp ah,1 ; close
|
cmp ah,1 ; close
|
||||||
jnz tst2
|
jnz tst2
|
||||||
mov eax,53
|
mov eax,53
|
||||||
mov ebx,8
|
mov ebx,8
|
||||||
@ -146,9 +146,9 @@ button: ; button
|
|||||||
mov eax,53
|
mov eax,53
|
||||||
mov ebx,5
|
mov ebx,5
|
||||||
mov ecx,80 ; local port # - http
|
mov ecx,80 ; local port # - http
|
||||||
mov edx,0 ; no remote port specified
|
mov edx,0 ; no remote port specified
|
||||||
mov esi,0 ; no remote ip specified
|
mov esi,0 ; no remote ip specified
|
||||||
mov edi,0 ; PASSIVE open
|
mov edi,0 ; PASSIVE open
|
||||||
mcall
|
mcall
|
||||||
mov [socket], eax
|
mov [socket], eax
|
||||||
mov [posy],1
|
mov [posy],1
|
||||||
@ -160,7 +160,7 @@ button: ; button
|
|||||||
call check_status
|
call check_status
|
||||||
ret
|
ret
|
||||||
tst3:
|
tst3:
|
||||||
cmp ah,4 ; button id=4 ?
|
cmp ah,4 ; button id=4 ?
|
||||||
jnz no4
|
jnz no4
|
||||||
mov [server_active],0
|
mov [server_active],0
|
||||||
close_socket:
|
close_socket:
|
||||||
@ -181,9 +181,9 @@ button: ; button
|
|||||||
mov eax,53
|
mov eax,53
|
||||||
mov ebx,5
|
mov ebx,5
|
||||||
mov ecx,80 ; local port # - http
|
mov ecx,80 ; local port # - http
|
||||||
mov edx,0 ; no remote port specified
|
mov edx,0 ; no remote port specified
|
||||||
mov esi,0 ; no remote ip specified
|
mov esi,0 ; no remote ip specified
|
||||||
mov edi,0 ; PASSIVE open
|
mov edi,0 ; PASSIVE open
|
||||||
mcall
|
mcall
|
||||||
mov [socket], eax
|
mov [socket], eax
|
||||||
no_re_open:
|
no_re_open:
|
||||||
@ -211,8 +211,8 @@ button: ; button
|
|||||||
jmp still
|
jmp still
|
||||||
no4:
|
no4:
|
||||||
|
|
||||||
cmp ah,6 ; read directory
|
cmp ah,6 ; read directory
|
||||||
je read_string
|
je read_string
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -240,9 +240,9 @@ start_transmission:
|
|||||||
wait_for_data:
|
wait_for_data:
|
||||||
call check_for_incoming_data
|
call check_for_incoming_data
|
||||||
cmp [input_text+256+1],dword 'GET '
|
cmp [input_text+256+1],dword 'GET '
|
||||||
je data_received
|
je data_received
|
||||||
cmp [input_text+256+1],dword 'POST'
|
cmp [input_text+256+1],dword 'POST'
|
||||||
je data_received
|
je data_received
|
||||||
mov eax,5
|
mov eax,5
|
||||||
mov ebx,1
|
mov ebx,1
|
||||||
mcall
|
mcall
|
||||||
@ -291,7 +291,7 @@ start_transmission:
|
|||||||
add [filepos],edx
|
add [filepos],edx
|
||||||
|
|
||||||
cmp [file_left],0
|
cmp [file_left],0
|
||||||
jg newblock
|
jg newblock
|
||||||
|
|
||||||
no_http_request:
|
no_http_request:
|
||||||
|
|
||||||
@ -363,14 +363,14 @@ send_header:
|
|||||||
|
|
||||||
pusha
|
pusha
|
||||||
|
|
||||||
mov eax,53 ; send response and file length
|
mov eax,53 ; send response and file length
|
||||||
mov ebx,7
|
mov ebx,7
|
||||||
mov ecx,[socket]
|
mov ecx,[socket]
|
||||||
mov edx,h_len-html_header
|
mov edx,h_len-html_header
|
||||||
mov esi,html_header
|
mov esi,html_header
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
mov eax,53 ; send file type
|
mov eax,53 ; send file type
|
||||||
mov ebx,7
|
mov ebx,7
|
||||||
mov ecx,[socket]
|
mov ecx,[socket]
|
||||||
mov edx,[type_len]
|
mov edx,[type_len]
|
||||||
@ -380,13 +380,13 @@ send_header:
|
|||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|
||||||
fileinfo dd 0
|
fileinfo dd 0
|
||||||
dd 0
|
dd 0
|
||||||
dd 0
|
dd 0
|
||||||
dd 512
|
dd 512
|
||||||
dd 0x100000
|
dd 0x100000
|
||||||
getf db '/sys/'
|
getf db '/sys/'
|
||||||
times 50 db 0
|
times 50 db 0
|
||||||
wanted_file: times 100 db 0
|
wanted_file: times 100 db 0
|
||||||
|
|
||||||
getflen dd 6
|
getflen dd 6
|
||||||
@ -395,30 +395,30 @@ make_room:
|
|||||||
|
|
||||||
pusha
|
pusha
|
||||||
|
|
||||||
mov edx,ecx
|
mov edx,ecx
|
||||||
|
|
||||||
mov esi,0x20000
|
mov esi,0x20000
|
||||||
add esi,[board_size]
|
add esi,[board_size]
|
||||||
mov edi,esi
|
mov edi,esi
|
||||||
add edi,edx
|
add edi,edx
|
||||||
mov ecx,[board_size]
|
mov ecx,[board_size]
|
||||||
sub ecx,board1-board
|
sub ecx,board1-board
|
||||||
inc ecx
|
inc ecx
|
||||||
std
|
std
|
||||||
rep movsb
|
rep movsb
|
||||||
cld
|
cld
|
||||||
|
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
from_i dd 0x0
|
from_i dd 0x0
|
||||||
from_len dd 0x0
|
from_len dd 0x0
|
||||||
|
|
||||||
message dd 0x0
|
message dd 0x0
|
||||||
message_len dd 0x0
|
message_len dd 0x0
|
||||||
|
|
||||||
read_file: ; start of execution
|
read_file: ; start of execution
|
||||||
|
|
||||||
mov [fileinfo+16],eax
|
mov [fileinfo+16],eax
|
||||||
shl ebx, 9
|
shl ebx, 9
|
||||||
@ -428,7 +428,7 @@ read_file: ; start of execution
|
|||||||
mov [filename+40*2+6],dword 'UNK '
|
mov [filename+40*2+6],dword 'UNK '
|
||||||
|
|
||||||
cmp [input_text+256+1],dword 'POST'
|
cmp [input_text+256+1],dword 'POST'
|
||||||
je yes_new_message
|
je yes_new_message
|
||||||
|
|
||||||
cmp [input_text+256+11],dword 'oard' ; server board message
|
cmp [input_text+256+11],dword 'oard' ; server board message
|
||||||
jne no_server_message_2
|
jne no_server_message_2
|
||||||
@ -454,7 +454,7 @@ read_file: ; start of execution
|
|||||||
newfroms:
|
newfroms:
|
||||||
inc esi
|
inc esi
|
||||||
cmp esi,input_text+256*20
|
cmp esi,input_text+256*20
|
||||||
je no_server_message_2
|
je no_server_message_2
|
||||||
cmp [esi],dword 'from'
|
cmp [esi],dword 'from'
|
||||||
jne newfroms
|
jne newfroms
|
||||||
|
|
||||||
@ -464,11 +464,11 @@ read_file: ; start of execution
|
|||||||
mov edx,0
|
mov edx,0
|
||||||
name_new_len:
|
name_new_len:
|
||||||
cmp [esi+edx],byte 13
|
cmp [esi+edx],byte 13
|
||||||
je name_found_len
|
je name_found_len
|
||||||
cmp [esi+edx],byte '&'
|
cmp [esi+edx],byte '&'
|
||||||
je name_found_len
|
je name_found_len
|
||||||
cmp edx,1000
|
cmp edx,1000
|
||||||
je name_found_len
|
je name_found_len
|
||||||
inc edx
|
inc edx
|
||||||
jmp name_new_len
|
jmp name_new_len
|
||||||
|
|
||||||
@ -480,7 +480,7 @@ read_file: ; start of execution
|
|||||||
newmessages:
|
newmessages:
|
||||||
inc esi
|
inc esi
|
||||||
cmp esi,input_text+256*20
|
cmp esi,input_text+256*20
|
||||||
je no_server_message_2
|
je no_server_message_2
|
||||||
cmp [esi],dword 'sage'
|
cmp [esi],dword 'sage'
|
||||||
jne newmessages
|
jne newmessages
|
||||||
|
|
||||||
@ -491,11 +491,11 @@ read_file: ; start of execution
|
|||||||
new_len:
|
new_len:
|
||||||
inc edx
|
inc edx
|
||||||
cmp [esi+edx],byte ' '
|
cmp [esi+edx],byte ' '
|
||||||
je found_len
|
je found_len
|
||||||
cmp [esi+edx],byte 13
|
cmp [esi+edx],byte 13
|
||||||
jbe found_len
|
jbe found_len
|
||||||
cmp edx,input_text+5000
|
cmp edx,input_text+5000
|
||||||
je found_len
|
je found_len
|
||||||
jmp new_len
|
jmp new_len
|
||||||
found_len:
|
found_len:
|
||||||
mov [message_len],edx
|
mov [message_len],edx
|
||||||
@ -552,14 +552,14 @@ read_file: ; start of execution
|
|||||||
call make_room
|
call make_room
|
||||||
|
|
||||||
|
|
||||||
mov esi,board1 ; first part
|
mov esi,board1 ; first part
|
||||||
mov edi,0x20000
|
mov edi,0x20000
|
||||||
add edi,board1-board
|
add edi,board1-board
|
||||||
mov ecx,edx
|
mov ecx,edx
|
||||||
cld
|
cld
|
||||||
rep movsb
|
rep movsb
|
||||||
|
|
||||||
mov esi,[from_i] ; name
|
mov esi,[from_i] ; name
|
||||||
mov edi,0x20000
|
mov edi,0x20000
|
||||||
add edi,board1-board
|
add edi,board1-board
|
||||||
add edi,board1e-board1
|
add edi,board1e-board1
|
||||||
@ -567,7 +567,7 @@ read_file: ; start of execution
|
|||||||
cld
|
cld
|
||||||
rep movsb
|
rep movsb
|
||||||
|
|
||||||
mov esi,board2 ; middle part
|
mov esi,board2 ; middle part
|
||||||
mov edi,0x20000
|
mov edi,0x20000
|
||||||
add edi,board1-board + board1e-board1
|
add edi,board1-board + board1e-board1
|
||||||
add edi,[from_len]
|
add edi,[from_len]
|
||||||
@ -575,7 +575,7 @@ read_file: ; start of execution
|
|||||||
cld
|
cld
|
||||||
rep movsb
|
rep movsb
|
||||||
|
|
||||||
mov esi,[message] ; message
|
mov esi,[message] ; message
|
||||||
mov edi,0x20000
|
mov edi,0x20000
|
||||||
add edi,board1-board + board1e-board1 + board2e-board2
|
add edi,board1-board + board1e-board1 + board2e-board2
|
||||||
add edi,[from_len]
|
add edi,[from_len]
|
||||||
@ -659,7 +659,7 @@ read_file: ; start of execution
|
|||||||
cld
|
cld
|
||||||
new_let:
|
new_let:
|
||||||
cmp [esi],byte ' '
|
cmp [esi],byte ' '
|
||||||
je no_new_let
|
je no_new_let
|
||||||
cmp edi,wanted_file+30
|
cmp edi,wanted_file+30
|
||||||
jge no_new_let
|
jge no_new_let
|
||||||
movsb
|
movsb
|
||||||
@ -672,10 +672,10 @@ read_file: ; start of execution
|
|||||||
cmp esi,input_text+256+6
|
cmp esi,input_text+256+6
|
||||||
jne no_index
|
jne no_index
|
||||||
mov edi,wanted_file
|
mov edi,wanted_file
|
||||||
mov [edi+0],dword 'inde'
|
mov [edi+0],dword 'inde'
|
||||||
mov [edi+4],dword 'x.ht'
|
mov [edi+4],dword 'x.ht'
|
||||||
mov [edi+8],byte 'm'
|
mov [edi+8],byte 'm'
|
||||||
mov [edi+9],byte 0
|
mov [edi+9],byte 0
|
||||||
add edi,9
|
add edi,9
|
||||||
|
|
||||||
mov [file_type],htm
|
mov [file_type],htm
|
||||||
@ -686,9 +686,9 @@ read_file: ; start of execution
|
|||||||
no_index:
|
no_index:
|
||||||
|
|
||||||
cmp [edi-3],dword 'htm'+0
|
cmp [edi-3],dword 'htm'+0
|
||||||
je htm_header
|
je htm_header
|
||||||
cmp [edi-3],dword 'HTM'+0
|
cmp [edi-3],dword 'HTM'+0
|
||||||
je htm_header
|
je htm_header
|
||||||
jmp no_htm_header
|
jmp no_htm_header
|
||||||
htm_header:
|
htm_header:
|
||||||
mov [file_type],htm
|
mov [file_type],htm
|
||||||
@ -698,9 +698,9 @@ read_file: ; start of execution
|
|||||||
no_htm_header:
|
no_htm_header:
|
||||||
|
|
||||||
cmp [edi-3],dword 'png'+0
|
cmp [edi-3],dword 'png'+0
|
||||||
je png_header
|
je png_header
|
||||||
cmp [edi-3],dword 'PNG'+0
|
cmp [edi-3],dword 'PNG'+0
|
||||||
je png_header
|
je png_header
|
||||||
jmp no_png_header
|
jmp no_png_header
|
||||||
png_header:
|
png_header:
|
||||||
mov [file_type],png
|
mov [file_type],png
|
||||||
@ -710,9 +710,9 @@ read_file: ; start of execution
|
|||||||
no_png_header:
|
no_png_header:
|
||||||
|
|
||||||
cmp [edi-3],dword 'gif'+0
|
cmp [edi-3],dword 'gif'+0
|
||||||
je gif_header
|
je gif_header
|
||||||
cmp [edi-3],dword 'GIF'+0
|
cmp [edi-3],dword 'GIF'+0
|
||||||
je gif_header
|
je gif_header
|
||||||
jmp no_gif_header
|
jmp no_gif_header
|
||||||
gif_header:
|
gif_header:
|
||||||
mov [file_type],gif
|
mov [file_type],gif
|
||||||
@ -722,9 +722,9 @@ read_file: ; start of execution
|
|||||||
no_gif_header:
|
no_gif_header:
|
||||||
|
|
||||||
cmp [edi-3],dword 'jpg'+0
|
cmp [edi-3],dword 'jpg'+0
|
||||||
je jpg_header
|
je jpg_header
|
||||||
cmp [edi-3],dword 'JPG'+0
|
cmp [edi-3],dword 'JPG'+0
|
||||||
je jpg_header
|
je jpg_header
|
||||||
jmp no_jpg_header
|
jmp no_jpg_header
|
||||||
jpg_header:
|
jpg_header:
|
||||||
mov [file_type],jpg
|
mov [file_type],jpg
|
||||||
@ -734,13 +734,13 @@ read_file: ; start of execution
|
|||||||
no_jpg_header:
|
no_jpg_header:
|
||||||
|
|
||||||
cmp [edi-3],dword 'asm'+0
|
cmp [edi-3],dword 'asm'+0
|
||||||
je txt_header
|
je txt_header
|
||||||
cmp [edi-3],dword 'ASM'+0
|
cmp [edi-3],dword 'ASM'+0
|
||||||
je txt_header
|
je txt_header
|
||||||
cmp [edi-3],dword 'txt'+0
|
cmp [edi-3],dword 'txt'+0
|
||||||
je txt_header
|
je txt_header
|
||||||
cmp [edi-3],dword 'TXT'+0
|
cmp [edi-3],dword 'TXT'+0
|
||||||
je txt_header
|
je txt_header
|
||||||
jmp no_txt_header
|
jmp no_txt_header
|
||||||
txt_header:
|
txt_header:
|
||||||
mov [file_type],txt
|
mov [file_type],txt
|
||||||
@ -766,13 +766,13 @@ read_file: ; start of execution
|
|||||||
cld
|
cld
|
||||||
rep movsb
|
rep movsb
|
||||||
|
|
||||||
mov [fileinfo+12],dword 1 ; file exists ?
|
mov [fileinfo+12],dword 1 ; file exists ?
|
||||||
mov eax,70
|
mov eax,70
|
||||||
mov ebx,fileinfo
|
mov ebx,fileinfo
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
cmp eax,0 ; file not found - message
|
cmp eax,0 ; file not found - message
|
||||||
je file_found
|
je file_found
|
||||||
mov edi,et
|
mov edi,et
|
||||||
call set_time
|
call set_time
|
||||||
mov edi,ed
|
mov edi,ed
|
||||||
@ -988,7 +988,7 @@ check_status:
|
|||||||
mcall
|
mcall
|
||||||
|
|
||||||
cmp eax,[status]
|
cmp eax,[status]
|
||||||
je c_ret
|
je c_ret
|
||||||
mov [status],eax
|
mov [status],eax
|
||||||
add al,48
|
add al,48
|
||||||
mov [text+12],al
|
mov [text+12],al
|
||||||
@ -999,8 +999,8 @@ check_status:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
|
|
||||||
addr dd 0x0
|
addr dd 0x0
|
||||||
ya dd 0x0
|
ya dd 0x0
|
||||||
|
|
||||||
filename2: times 100 db 32
|
filename2: times 100 db 32
|
||||||
|
|
||||||
@ -1028,11 +1028,11 @@ read_string:
|
|||||||
mcall
|
mcall
|
||||||
shr eax,8
|
shr eax,8
|
||||||
cmp eax,13
|
cmp eax,13
|
||||||
je read_done
|
je read_done
|
||||||
cmp eax,8
|
cmp eax,8
|
||||||
jnz nobsl
|
jnz nobsl
|
||||||
cmp edi,[addr]
|
cmp edi,[addr]
|
||||||
jz f11
|
jz f11
|
||||||
sub edi,1
|
sub edi,1
|
||||||
mov [edi],byte 32
|
mov [edi],byte 32
|
||||||
call print_text
|
call print_text
|
||||||
@ -1096,33 +1096,33 @@ print_text:
|
|||||||
|
|
||||||
draw_window:
|
draw_window:
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
mov eax,12 ; function 12:tell os about windowdraw
|
||||||
mov ebx,1 ; 1, start of draw
|
mov ebx,1 ; 1, start of draw
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
; DRAW WINDOW
|
; DRAW WINDOW
|
||||||
mov eax,0 ; function 0 : define and draw window
|
mov eax,0 ; function 0 : define and draw window
|
||||||
mov ebx,100*65536+480 ; [x start] *65536 + [x size]
|
mov ebx,100*65536+480 ; [x start] *65536 + [x size]
|
||||||
mov ecx,100*65536+215 ; [y start] *65536 + [y size]
|
mov ecx,100*65536+215 ; [y start] *65536 + [y size]
|
||||||
mov edx,0x13ffffff ; color of work area RRGGBB
|
mov edx,0x14ffffff ; color of work area RRGGBB
|
||||||
mov edi,title ; WINDOW LABEL
|
mov edi,title ; WINDOW LABEL
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
mov eax,8 ; function 8 : define and draw button
|
mov eax,8 ; function 8 : define and draw button
|
||||||
mov ebx,(40)*65536+20 ; [x start] *65536 + [x size]
|
mov ebx,(40)*65536+20 ; [x start] *65536 + [x size]
|
||||||
mov ecx,59*65536+9 ; [y start] *65536 + [y size]
|
mov ecx,59*65536+9 ; [y start] *65536 + [y size]
|
||||||
mov edx,2 ; button id
|
mov edx,2 ; button id
|
||||||
mov esi,0x66aa66 ; button color RRGGBB
|
mov esi,0x66aa66 ; button color RRGGBB
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
; function 8 : define and draw button
|
; function 8 : define and draw button
|
||||||
mov ebx,(40)*65536+20 ; [x start] *65536 + [x size]
|
mov ebx,(40)*65536+20 ; [x start] *65536 + [x size]
|
||||||
mov ecx,72*65536+9 ; [y start] *65536 + [y size]
|
mov ecx,72*65536+9 ; [y start] *65536 + [y size]
|
||||||
mov edx,4 ; button id
|
mov edx,4 ; button id
|
||||||
mov esi,0xaa6666 ; button color RRGGBB
|
mov esi,0xaa6666 ; button color RRGGBB
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
; Enter directory
|
; Enter directory
|
||||||
mov ebx,(25)*65536+66
|
mov ebx,(25)*65536+66
|
||||||
mov ecx,135*65536+15
|
mov ecx,135*65536+15
|
||||||
mov edx,6
|
mov edx,6
|
||||||
@ -1143,8 +1143,8 @@ draw_window:
|
|||||||
|
|
||||||
call draw_data
|
call draw_data
|
||||||
|
|
||||||
mov eax,12 ; function 12:tell os about windowdraw
|
mov eax,12 ; function 12:tell os about windowdraw
|
||||||
mov ebx,2 ; 2, end of draw
|
mov ebx,2 ; 2, end of draw
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
ret
|
ret
|
||||||
@ -1154,7 +1154,7 @@ draw_data:
|
|||||||
|
|
||||||
pusha
|
pusha
|
||||||
|
|
||||||
mov ebx,25*65536+35 ; draw info text with function 4
|
mov ebx,25*65536+35 ; draw info text with function 4
|
||||||
mov ecx,0x000000
|
mov ecx,0x000000
|
||||||
mov edx,text
|
mov edx,text
|
||||||
mov esi,35
|
mov esi,35
|
||||||
@ -1186,7 +1186,7 @@ draw_data:
|
|||||||
mov [input_text+4],dword 'IVED'
|
mov [input_text+4],dword 'IVED'
|
||||||
mov [input_text+8],dword ': '
|
mov [input_text+8],dword ': '
|
||||||
|
|
||||||
mov ebx,255*65536+35 ; draw info text with function 4
|
mov ebx,255*65536+35 ; draw info text with function 4
|
||||||
mov ecx,0x000000
|
mov ecx,0x000000
|
||||||
mov edx,input_text
|
mov edx,input_text
|
||||||
mov esi,35
|
mov esi,35
|
||||||
@ -1215,7 +1215,7 @@ draw_data:
|
|||||||
|
|
||||||
; DATA AREA
|
; DATA AREA
|
||||||
|
|
||||||
status dd 0x0
|
status dd 0x0
|
||||||
|
|
||||||
text:
|
text:
|
||||||
db 'TCB status: x '
|
db 'TCB status: x '
|
||||||
@ -1296,8 +1296,8 @@ unkl:
|
|||||||
|
|
||||||
title db appname,version,0
|
title db appname,version,0
|
||||||
|
|
||||||
socket dd 0x0
|
socket dd 0x0
|
||||||
server_active db 0x0
|
server_active db 0x0
|
||||||
|
|
||||||
board:
|
board:
|
||||||
|
|
||||||
@ -1354,8 +1354,8 @@ db "</HTML>",13,10
|
|||||||
|
|
||||||
board_end:
|
board_end:
|
||||||
|
|
||||||
board_size dd 0x0
|
board_size dd 0x0
|
||||||
board_messages dd 0x0
|
board_messages dd 0x0
|
||||||
|
|
||||||
input_text:
|
input_text:
|
||||||
|
|
||||||
|
@ -25,7 +25,7 @@ use32
|
|||||||
dd 0, 0 ; param, icon
|
dd 0, 0 ; param, icon
|
||||||
|
|
||||||
include 'lang.inc'
|
include 'lang.inc'
|
||||||
include '..\..\..\macros.inc'
|
include 'macros.inc'
|
||||||
|
|
||||||
START: ; start of execution
|
START: ; start of execution
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ draw_window:
|
|||||||
mov eax,0 ; function 0 : define and draw window
|
mov eax,0 ; function 0 : define and draw window
|
||||||
mov ebx,100*65536+250 ; [x start] *65536 + [x size]
|
mov ebx,100*65536+250 ; [x start] *65536 + [x size]
|
||||||
mov ecx,60*65536+150 ; [y start] *65536 + [y size]
|
mov ecx,60*65536+150 ; [y start] *65536 + [y size]
|
||||||
mov edx,0x13ffffff ; color of work area RRGGBB
|
mov edx,0x14ffffff ; color of work area RRGGBB
|
||||||
mov edi,title ; WINDOW LABEL
|
mov edi,title ; WINDOW LABEL
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
@ -12,17 +12,17 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
use32
|
use32
|
||||||
org 0x0
|
org 0x0
|
||||||
db 'MENUET01' ; header
|
db 'MENUET01' ; header
|
||||||
dd 0x01 ; header version
|
dd 0x01 ; header version
|
||||||
dd START ; entry point
|
dd START ; entry point
|
||||||
dd I_END ; image size
|
dd I_END ; image size
|
||||||
dd I_END+0x10000 ; required memory
|
dd I_END+0x10000 ; required memory
|
||||||
dd I_END+0x10000 ; esp
|
dd I_END+0x10000 ; esp
|
||||||
dd 0x0 , 0x0 ; I_Param , I_Path
|
dd 0x0 , 0x0 ; I_Param , I_Path
|
||||||
|
|
||||||
include 'lang.inc'
|
include 'lang.inc'
|
||||||
include '..\..\..\macros.inc'
|
include 'macros.inc'
|
||||||
remote_ip db 192,168,0,1
|
remote_ip db 192,168,0,1
|
||||||
|
|
||||||
|
|
||||||
@ -135,7 +135,7 @@ draw_window:
|
|||||||
mov eax,0 ; function 0 : define and draw window
|
mov eax,0 ; function 0 : define and draw window
|
||||||
mov ebx,100*65536+300 ; [x start] *65536 + [x size]
|
mov ebx,100*65536+300 ; [x start] *65536 + [x size]
|
||||||
mov ecx,100*65536+330 ; [y start] *65536 + [y size]
|
mov ecx,100*65536+330 ; [y start] *65536 + [y size]
|
||||||
mov edx,0x13ffffff ; color of work area RRGGBB
|
mov edx,0x14ffffff ; color of work area RRGGBB
|
||||||
mov edi,title ; WINDOW LABEL
|
mov edi,title ; WINDOW LABEL
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
@ -9,7 +9,7 @@
|
|||||||
;; Compile with FASM for Menuet ;;
|
;; Compile with FASM for Menuet ;;
|
||||||
;; ;;
|
;; ;;
|
||||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||||
include '..\..\..\macros.inc'
|
include 'macros.inc'
|
||||||
version equ '0.1'
|
version equ '0.1'
|
||||||
|
|
||||||
use32
|
use32
|
||||||
@ -811,7 +811,7 @@ draw_window:
|
|||||||
mov eax,0 ; draw window
|
mov eax,0 ; draw window
|
||||||
mov ebx,5*65536+435
|
mov ebx,5*65536+435
|
||||||
mov ecx,5*65536+232
|
mov ecx,5*65536+232
|
||||||
mov edx,0x13ffffff
|
mov edx,0x14ffffff
|
||||||
mov edi,labelt
|
mov edi,labelt
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
@ -6,20 +6,20 @@
|
|||||||
;
|
;
|
||||||
|
|
||||||
use32
|
use32
|
||||||
org 0x0
|
org 0x0
|
||||||
db 'MENUET01' ; header
|
db 'MENUET01' ; header
|
||||||
dd 0x01 ; header version
|
dd 0x01 ; header version
|
||||||
dd START ; entry point
|
dd START ; entry point
|
||||||
dd I_END ; image size
|
dd I_END ; image size
|
||||||
dd I_END+0x10000 ; required memory
|
dd I_END+0x10000 ; required memory
|
||||||
dd I_END+0x10000 ; esp
|
dd I_END+0x10000 ; esp
|
||||||
dd 0x0 , 0x0 ; I_Param , I_Path
|
dd 0x0 , 0x0 ; I_Param , I_Path
|
||||||
|
|
||||||
|
|
||||||
include 'lang.inc'
|
include 'lang.inc'
|
||||||
include '..\..\..\macros.inc'
|
include 'macros.inc'
|
||||||
|
|
||||||
START: ; start of execution
|
START: ; start of execution
|
||||||
|
|
||||||
; Clear the screen memory
|
; Clear the screen memory
|
||||||
mov eax, ' '
|
mov eax, ' '
|
||||||
@ -43,22 +43,22 @@ still:
|
|||||||
mov [socket_status], eax
|
mov [socket_status], eax
|
||||||
|
|
||||||
cmp eax, ebx
|
cmp eax, ebx
|
||||||
je waitev
|
je waitev
|
||||||
|
|
||||||
red:
|
red:
|
||||||
call draw_window
|
call draw_window
|
||||||
|
|
||||||
waitev:
|
waitev:
|
||||||
mov eax,23 ; wait here for event
|
mov eax,23 ; wait here for event
|
||||||
mov ebx,20
|
mov ebx,20
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
cmp eax,1 ; redraw request ?
|
cmp eax,1 ; redraw request ?
|
||||||
je red
|
je red
|
||||||
cmp eax,2 ; key in buffer ?
|
cmp eax,2 ; key in buffer ?
|
||||||
je key
|
je key
|
||||||
cmp eax,3 ; button in buffer ?
|
cmp eax,3 ; button in buffer ?
|
||||||
je button
|
je button
|
||||||
|
|
||||||
; any data from the socket?
|
; any data from the socket?
|
||||||
|
|
||||||
@ -105,11 +105,11 @@ handle_data:
|
|||||||
|
|
||||||
mov al, [telnetstate]
|
mov al, [telnetstate]
|
||||||
cmp al, 0
|
cmp al, 0
|
||||||
je state0
|
je state0
|
||||||
cmp al, 1
|
cmp al, 1
|
||||||
je state1
|
je state1
|
||||||
cmp al, 2
|
cmp al, 2
|
||||||
je state2
|
je state2
|
||||||
jmp hd001
|
jmp hd001
|
||||||
|
|
||||||
state0:
|
state0:
|
||||||
@ -138,7 +138,7 @@ state2:
|
|||||||
ret
|
ret
|
||||||
|
|
||||||
hd001:
|
hd001:
|
||||||
cmp bl,13 ; BEGINNING OF LINE
|
cmp bl,13 ; BEGINNING OF LINE
|
||||||
jne nobol
|
jne nobol
|
||||||
mov ecx,[pos]
|
mov ecx,[pos]
|
||||||
add ecx,1
|
add ecx,1
|
||||||
@ -154,7 +154,7 @@ hd001:
|
|||||||
jmp newdata
|
jmp newdata
|
||||||
nobol:
|
nobol:
|
||||||
|
|
||||||
cmp bl,10 ; LINE DOWN
|
cmp bl,10 ; LINE DOWN
|
||||||
jne nolf
|
jne nolf
|
||||||
addx1:
|
addx1:
|
||||||
add [pos],dword 1
|
add [pos],dword 1
|
||||||
@ -168,7 +168,7 @@ hd001:
|
|||||||
jmp cm1
|
jmp cm1
|
||||||
nolf:
|
nolf:
|
||||||
|
|
||||||
cmp bl,8 ; BACKSPACE
|
cmp bl,8 ; BACKSPACE
|
||||||
jne nobasp
|
jne nobasp
|
||||||
mov eax,[pos]
|
mov eax,[pos]
|
||||||
dec eax
|
dec eax
|
||||||
@ -178,7 +178,7 @@ hd001:
|
|||||||
jmp newdata
|
jmp newdata
|
||||||
nobasp:
|
nobasp:
|
||||||
|
|
||||||
cmp bl,15 ; CHARACTER
|
cmp bl,15 ; CHARACTER
|
||||||
jbe newdata
|
jbe newdata
|
||||||
mov eax,[pos]
|
mov eax,[pos]
|
||||||
mov [eax+text],bl
|
mov [eax+text],bl
|
||||||
@ -188,7 +188,7 @@ hd001:
|
|||||||
mov ebx,[scroll+4]
|
mov ebx,[scroll+4]
|
||||||
imul ebx,80
|
imul ebx,80
|
||||||
cmp eax,ebx
|
cmp eax,ebx
|
||||||
jb noeaxz
|
jb noeaxz
|
||||||
mov esi,text+80
|
mov esi,text+80
|
||||||
mov edi,text
|
mov edi,text
|
||||||
mov ecx,ebx
|
mov ecx,ebx
|
||||||
@ -201,16 +201,16 @@ hd001:
|
|||||||
newdata:
|
newdata:
|
||||||
ret
|
ret
|
||||||
|
|
||||||
key: ; KEY
|
key: ; KEY
|
||||||
mov eax,2 ; send to modem
|
mov eax,2 ; send to modem
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
mov ebx, [socket_status]
|
mov ebx, [socket_status]
|
||||||
cmp ebx, 4 ; connection open?
|
cmp ebx, 4 ; connection open?
|
||||||
jne still ; no, so ignore key
|
jne still ; no, so ignore key
|
||||||
|
|
||||||
shr eax,8
|
shr eax,8
|
||||||
cmp eax,178 ; ARROW KEYS
|
cmp eax,178 ; ARROW KEYS
|
||||||
jne noaup
|
jne noaup
|
||||||
mov al,'A'
|
mov al,'A'
|
||||||
call arrow
|
call arrow
|
||||||
@ -240,10 +240,10 @@ hd001:
|
|||||||
|
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
button: ; BUTTON
|
button: ; BUTTON
|
||||||
mov eax,17
|
mov eax,17
|
||||||
mcall
|
mcall
|
||||||
cmp ah,1 ; CLOSE PROGRAM
|
cmp ah,1 ; CLOSE PROGRAM
|
||||||
jne noclose
|
jne noclose
|
||||||
|
|
||||||
mov eax,53
|
mov eax,53
|
||||||
@ -254,7 +254,7 @@ hd001:
|
|||||||
or eax,-1
|
or eax,-1
|
||||||
mcall
|
mcall
|
||||||
noclose:
|
noclose:
|
||||||
cmp ah, 2 ; Set IP
|
cmp ah, 2 ; Set IP
|
||||||
jne notip
|
jne notip
|
||||||
|
|
||||||
mov [string_x], dword 78
|
mov [string_x], dword 78
|
||||||
@ -267,9 +267,9 @@ hd001:
|
|||||||
ip1:
|
ip1:
|
||||||
inc esi
|
inc esi
|
||||||
cmp [esi],byte '0'
|
cmp [esi],byte '0'
|
||||||
jb ip2
|
jb ip2
|
||||||
cmp [esi],byte '9'
|
cmp [esi],byte '9'
|
||||||
jg ip2
|
jg ip2
|
||||||
imul eax,10
|
imul eax,10
|
||||||
movzx ebx,byte [esi]
|
movzx ebx,byte [esi]
|
||||||
sub ebx,48
|
sub ebx,48
|
||||||
@ -287,7 +287,7 @@ hd001:
|
|||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
notip:
|
notip:
|
||||||
cmp ah, 3 ; set port
|
cmp ah, 3 ; set port
|
||||||
jne notport
|
jne notport
|
||||||
|
|
||||||
mov [string_x], dword 215
|
mov [string_x], dword 215
|
||||||
@ -300,9 +300,9 @@ notip:
|
|||||||
ip11:
|
ip11:
|
||||||
inc esi
|
inc esi
|
||||||
cmp [esi],byte '0'
|
cmp [esi],byte '0'
|
||||||
jb ip21
|
jb ip21
|
||||||
cmp [esi],byte '9'
|
cmp [esi],byte '9'
|
||||||
jg ip21
|
jg ip21
|
||||||
imul eax,10
|
imul eax,10
|
||||||
movzx ebx,byte [esi]
|
movzx ebx,byte [esi]
|
||||||
sub ebx,48
|
sub ebx,48
|
||||||
@ -318,24 +318,24 @@ notip:
|
|||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
notport:
|
notport:
|
||||||
cmp ah, 4 ; connect
|
cmp ah, 4 ; connect
|
||||||
jne notcon
|
jne notcon
|
||||||
|
|
||||||
mov eax, [socket_status]
|
mov eax, [socket_status]
|
||||||
cmp eax, 4
|
cmp eax, 4
|
||||||
je still
|
je still
|
||||||
call connect
|
call connect
|
||||||
|
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
notcon:
|
notcon:
|
||||||
cmp ah,5 ; disconnect
|
cmp ah,5 ; disconnect
|
||||||
jne notdiscon
|
jne notdiscon
|
||||||
|
|
||||||
call disconnect
|
call disconnect
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
notdiscon: ; Echo Toggle
|
notdiscon: ; Echo Toggle
|
||||||
cmp ah, 6
|
cmp ah, 6
|
||||||
jne still
|
jne still
|
||||||
|
|
||||||
@ -376,7 +376,7 @@ tm_000:
|
|||||||
pop bx
|
pop bx
|
||||||
mov al, [echo]
|
mov al, [echo]
|
||||||
cmp al, 0
|
cmp al, 0
|
||||||
je tm_001
|
je tm_001
|
||||||
|
|
||||||
push bx
|
push bx
|
||||||
call handle_data
|
call handle_data
|
||||||
@ -409,17 +409,17 @@ disconnect:
|
|||||||
connect:
|
connect:
|
||||||
pusha
|
pusha
|
||||||
|
|
||||||
mov ecx, 1000 ; local port starting at 1000
|
mov ecx, 1000 ; local port starting at 1000
|
||||||
|
|
||||||
getlp:
|
getlp:
|
||||||
inc ecx
|
inc ecx
|
||||||
push ecx
|
push ecx
|
||||||
mov eax, 53
|
mov eax, 53
|
||||||
mov ebx, 9
|
mov ebx, 9
|
||||||
mcall
|
mcall
|
||||||
pop ecx
|
pop ecx
|
||||||
cmp eax, 0 ; is this local port in use?
|
cmp eax, 0 ; is this local port in use?
|
||||||
jz getlp ; yes - so try next
|
jz getlp ; yes - so try next
|
||||||
|
|
||||||
mov eax,53
|
mov eax,53
|
||||||
mov ebx,5
|
mov ebx,5
|
||||||
@ -431,7 +431,7 @@ getlp:
|
|||||||
shl edx, 8
|
shl edx, 8
|
||||||
mov dl, [ip_address]
|
mov dl, [ip_address]
|
||||||
mov esi, edx
|
mov esi, edx
|
||||||
movzx edx, word [port] ; telnet port id
|
movzx edx, word [port] ; telnet port id
|
||||||
mov edi,1 ; active open
|
mov edi,1 ; active open
|
||||||
mcall
|
mcall
|
||||||
mov [socket], eax
|
mov [socket], eax
|
||||||
@ -455,10 +455,10 @@ draw_window:
|
|||||||
mov ebx,1
|
mov ebx,1
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
xor eax,eax ; DRAW WINDOW
|
xor eax,eax ; DRAW WINDOW
|
||||||
mov ebx,100*65536+491 + 8 +15
|
mov ebx,100*65536+491 + 8 +15
|
||||||
mov ecx,100*65536+270 + 20 ; 20 for status bar
|
mov ecx,100*65536+270 + 20 ; 20 for status bar
|
||||||
mov edx,0x13000000
|
mov edx,0x14000000
|
||||||
mov edi,title
|
mov edi,title
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
@ -469,14 +469,14 @@ draw_window:
|
|||||||
mov edx, 0x00557799
|
mov edx, 0x00557799
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
mov eax,8 ; BUTTON 2: SET IP
|
mov eax,8 ; BUTTON 2: SET IP
|
||||||
mov ebx,4*65536+70
|
mov ebx,4*65536+70
|
||||||
mov ecx,273*65536+12
|
mov ecx,273*65536+12
|
||||||
mov esi, 0x00557799
|
mov esi, 0x00557799
|
||||||
mov edx,2
|
mov edx,2
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
mov eax,4 ; Button text
|
mov eax,4 ; Button text
|
||||||
mov ebx,6*65536+276
|
mov ebx,6*65536+276
|
||||||
mov ecx,0x00ffffff
|
mov ecx,0x00ffffff
|
||||||
mov edx,setipt
|
mov edx,setipt
|
||||||
@ -485,7 +485,7 @@ draw_window:
|
|||||||
|
|
||||||
|
|
||||||
mov eax,47
|
mov eax,47
|
||||||
mov edi,ip_address ; display IP address
|
mov edi,ip_address ; display IP address
|
||||||
mov edx,78*65536+276
|
mov edx,78*65536+276
|
||||||
mov esi,0x00ffffff
|
mov esi,0x00ffffff
|
||||||
mov ebx,3*65536
|
mov ebx,3*65536
|
||||||
@ -495,16 +495,16 @@ draw_window:
|
|||||||
add edx,6*4*65536
|
add edx,6*4*65536
|
||||||
inc edi
|
inc edi
|
||||||
cmp edi,ip_address+4
|
cmp edi,ip_address+4
|
||||||
jb ipdisplay
|
jb ipdisplay
|
||||||
|
|
||||||
mov eax,8 ; BUTTON 3: SET PORT
|
mov eax,8 ; BUTTON 3: SET PORT
|
||||||
mov ebx,173*65536+38
|
mov ebx,173*65536+38
|
||||||
mov ecx,273*65536+12
|
mov ecx,273*65536+12
|
||||||
mov edx,3
|
mov edx,3
|
||||||
mov esi, 0x00557799
|
mov esi, 0x00557799
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
mov eax,4 ; Button text
|
mov eax,4 ; Button text
|
||||||
mov ebx,178*65536+276
|
mov ebx,178*65536+276
|
||||||
mov ecx,0x00ffffff
|
mov ecx,0x00ffffff
|
||||||
mov edx,setportt
|
mov edx,setportt
|
||||||
@ -512,21 +512,21 @@ draw_window:
|
|||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
|
||||||
mov edx,216*65536+276 ; display port
|
mov edx,216*65536+276 ; display port
|
||||||
mov esi,0x00ffffff
|
mov esi,0x00ffffff
|
||||||
mov ebx,4*65536
|
mov ebx,4*65536
|
||||||
mov eax,47
|
mov eax,47
|
||||||
movzx ecx,word [port]
|
movzx ecx,word [port]
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
mov eax,8 ; BUTTON 4: Connect
|
mov eax,8 ; BUTTON 4: Connect
|
||||||
mov ebx,250*65536+50
|
mov ebx,250*65536+50
|
||||||
mov ecx,273*65536+12
|
mov ecx,273*65536+12
|
||||||
mov esi, 0x00557799
|
mov esi, 0x00557799
|
||||||
mov edx,4
|
mov edx,4
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
mov eax,4 ; Button text
|
mov eax,4 ; Button text
|
||||||
mov ebx,255*65536+276
|
mov ebx,255*65536+276
|
||||||
mov ecx,0x00ffffff
|
mov ecx,0x00ffffff
|
||||||
mov edx,cont
|
mov edx,cont
|
||||||
@ -534,7 +534,7 @@ draw_window:
|
|||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
|
||||||
mov eax,8 ; BUTTON 5: disconnect
|
mov eax,8 ; BUTTON 5: disconnect
|
||||||
mov ebx,303*65536+70
|
mov ebx,303*65536+70
|
||||||
mov ecx,273*65536+12
|
mov ecx,273*65536+12
|
||||||
mov edx,5
|
mov edx,5
|
||||||
@ -542,7 +542,7 @@ draw_window:
|
|||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
|
||||||
mov eax,4 ; Button text
|
mov eax,4 ; Button text
|
||||||
mov ebx,307*65536+276
|
mov ebx,307*65536+276
|
||||||
mov ecx,0x00ffffff
|
mov ecx,0x00ffffff
|
||||||
mov edx,dist
|
mov edx,dist
|
||||||
@ -550,22 +550,22 @@ draw_window:
|
|||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
|
||||||
mov esi,contlen-contt ; display connected status
|
mov esi,contlen-contt ; display connected status
|
||||||
mov edx, contt
|
mov edx, contt
|
||||||
mov eax, [socket_status]
|
mov eax, [socket_status]
|
||||||
cmp eax, 4 ; 4 is connected
|
cmp eax, 4 ; 4 is connected
|
||||||
je pcon
|
je pcon
|
||||||
mov esi,discontlen-discontt
|
mov esi,discontlen-discontt
|
||||||
mov edx, discontt
|
mov edx, discontt
|
||||||
pcon:
|
pcon:
|
||||||
|
|
||||||
mov eax,4 ; status text
|
mov eax,4 ; status text
|
||||||
mov ebx,380*65536+276
|
mov ebx,380*65536+276
|
||||||
mov ecx,0x00ffffff
|
mov ecx,0x00ffffff
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
|
|
||||||
mov eax,8 ; BUTTON 6: echo
|
mov eax,8 ; BUTTON 6: echo
|
||||||
mov ebx,460*65536+50
|
mov ebx,460*65536+50
|
||||||
mov ecx,273*65536+12
|
mov ecx,273*65536+12
|
||||||
mov edx,6
|
mov edx,6
|
||||||
@ -581,7 +581,7 @@ pcon:
|
|||||||
mov esi,echoolen-echoot
|
mov esi,echoolen-echoot
|
||||||
|
|
||||||
peo:
|
peo:
|
||||||
mov eax,4 ; Button text
|
mov eax,4 ; Button text
|
||||||
mov ebx,463*65536+276
|
mov ebx,463*65536+276
|
||||||
mov ecx,0x00ffffff
|
mov ecx,0x00ffffff
|
||||||
mcall
|
mcall
|
||||||
@ -622,7 +622,7 @@ draw_text:
|
|||||||
; erase character
|
; erase character
|
||||||
|
|
||||||
pusha
|
pusha
|
||||||
mov edx, 0 ; bg colour
|
mov edx, 0 ; bg colour
|
||||||
mov ecx, ebx
|
mov ecx, ebx
|
||||||
add ecx, 26
|
add ecx, 26
|
||||||
shl ecx, 16
|
shl ecx, 16
|
||||||
@ -656,11 +656,11 @@ draw_text:
|
|||||||
add esi,1
|
add esi,1
|
||||||
add eax,6
|
add eax,6
|
||||||
cmp eax,80*6
|
cmp eax,80*6
|
||||||
jb newletter
|
jb newletter
|
||||||
mov eax,0
|
mov eax,0
|
||||||
add ebx,10
|
add ebx,10
|
||||||
cmp ebx,24*10
|
cmp ebx,24*10
|
||||||
jb newletter
|
jb newletter
|
||||||
|
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
@ -686,11 +686,11 @@ read_string:
|
|||||||
mcall
|
mcall
|
||||||
shr eax,8
|
shr eax,8
|
||||||
cmp eax,13
|
cmp eax,13
|
||||||
je read_done
|
je read_done
|
||||||
cmp eax,8
|
cmp eax,8
|
||||||
jnz nobsl
|
jnz nobsl
|
||||||
cmp edi,string
|
cmp edi,string
|
||||||
jz f11
|
jz f11
|
||||||
sub edi,1
|
sub edi,1
|
||||||
mov [edi],byte '_'
|
mov [edi],byte '_'
|
||||||
call print_text
|
call print_text
|
||||||
@ -699,7 +699,7 @@ read_string:
|
|||||||
cmp eax,dword 31
|
cmp eax,dword 31
|
||||||
jbe f11
|
jbe f11
|
||||||
cmp eax,dword 95
|
cmp eax,dword 95
|
||||||
jb keyok
|
jb keyok
|
||||||
sub eax,32
|
sub eax,32
|
||||||
keyok:
|
keyok:
|
||||||
mov [edi],al
|
mov [edi],al
|
||||||
@ -750,41 +750,41 @@ print_text:
|
|||||||
|
|
||||||
; DATA AREA
|
; DATA AREA
|
||||||
|
|
||||||
telnetrep db 0xff,0xfc,0x00
|
telnetrep db 0xff,0xfc,0x00
|
||||||
telnetstate db 0
|
telnetstate db 0
|
||||||
|
|
||||||
string_length dd 16
|
string_length dd 16
|
||||||
string_x dd 200
|
string_x dd 200
|
||||||
string_y dd 60
|
string_y dd 60
|
||||||
|
|
||||||
string db '________________'
|
string db '________________'
|
||||||
|
|
||||||
tx_buff db 0, 10
|
tx_buff db 0, 10
|
||||||
ip_address db 001,002,003,004
|
ip_address db 001,002,003,004
|
||||||
port db 0,0
|
port db 0,0
|
||||||
echo db 0
|
echo db 0
|
||||||
socket dd 0x0
|
socket dd 0x0
|
||||||
socket_status dd 0x0
|
socket_status dd 0x0
|
||||||
pos dd 80 * 1
|
pos dd 80 * 1
|
||||||
scroll dd 1
|
scroll dd 1
|
||||||
dd 24
|
dd 24
|
||||||
wcolor dd 0x000000
|
wcolor dd 0x000000
|
||||||
title db 'Telnet v0.1',0
|
title db 'Telnet v0.1',0
|
||||||
setipt db 'IP Address: . . .'
|
setipt db 'IP Address: . . .'
|
||||||
setiplen:
|
setiplen:
|
||||||
setportt db 'Port:'
|
setportt db 'Port:'
|
||||||
setportlen:
|
setportlen:
|
||||||
cont db 'Connect'
|
cont db 'Connect'
|
||||||
conlen:
|
conlen:
|
||||||
dist db 'Disconnect'
|
dist db 'Disconnect'
|
||||||
dislen:
|
dislen:
|
||||||
contt db 'Connected'
|
contt db 'Connected'
|
||||||
contlen:
|
contlen:
|
||||||
discontt db 'Disconnected'
|
discontt db 'Disconnected'
|
||||||
discontlen:
|
discontlen:
|
||||||
echot db 'Echo On'
|
echot db 'Echo On'
|
||||||
echolen:
|
echolen:
|
||||||
echoot db 'Echo Off'
|
echoot db 'Echo Off'
|
||||||
echoolen:
|
echoolen:
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,2 +1,3 @@
|
|||||||
@fasm period.asm period
|
@fasm period.asm period
|
||||||
|
@kpack period
|
||||||
@pause
|
@pause
|
@ -2,4 +2,5 @@
|
|||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm icon.asm @icon
|
@fasm icon.asm @icon
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
|
@kpack @icon
|
||||||
@pause
|
@pause
|
@ -2,4 +2,5 @@
|
|||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm iconmngr.asm iconmngr
|
@fasm iconmngr.asm iconmngr
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
|
@kpack iconmngr
|
||||||
@pause
|
@pause
|
@ -2,4 +2,5 @@
|
|||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm @panel.asm @panel
|
@fasm @panel.asm @panel
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
|
@kpack @panel
|
||||||
@pause
|
@pause
|
@ -346,7 +346,7 @@ DATA
|
|||||||
strtbl startapps ,\
|
strtbl startapps ,\
|
||||||
<"/sys/PIC4",0> ,\
|
<"/sys/PIC4",0> ,\
|
||||||
<"/sys/DESKTOP",0> ,\
|
<"/sys/DESKTOP",0> ,\
|
||||||
<"/sys/ICON",0>,\
|
<"/sys/ICONMNGR",0>,\
|
||||||
<"/sys/SETUP",0> ,\
|
<"/sys/SETUP",0> ,\
|
||||||
<"/sys/VRR",0> ,\
|
<"/sys/VRR",0> ,\
|
||||||
<"/sys/CPU",0>
|
<"/sys/CPU",0>
|
||||||
|
Loading…
Reference in New Issue
Block a user