forked from KolibriOS/kolibrios
some optimized variants from K0700
git-svn-id: svn://kolibrios.org@625 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
48a2a652db
commit
b8fa8489d3
@ -25,12 +25,31 @@ SCREEN_Y equ 200
|
|||||||
|
|
||||||
include 'lang.inc'
|
include 'lang.inc'
|
||||||
include '..\..\..\macros.inc'
|
include '..\..\..\macros.inc'
|
||||||
|
;purge mov
|
||||||
include 'ascl.inc'
|
include 'ascl.inc'
|
||||||
include 'ascgl.inc'
|
include 'ascgl.inc'
|
||||||
|
|
||||||
START:
|
START:
|
||||||
|
init_sin_cos:
|
||||||
|
finit
|
||||||
|
fldz
|
||||||
|
xor edi,edi
|
||||||
|
mov ecx,512
|
||||||
|
isc_make:
|
||||||
|
fld st0
|
||||||
|
fsincos
|
||||||
|
fmul [fixed_point_const]
|
||||||
|
fistp word [cos_table+edi]
|
||||||
|
fmul [fixed_point_const]
|
||||||
|
fistp word [sin_table+edi]
|
||||||
|
|
||||||
|
fadd [inc_angle]
|
||||||
|
|
||||||
|
add edi,2
|
||||||
|
loop isc_make
|
||||||
|
fstp st0
|
||||||
|
red:
|
||||||
call draw_window
|
call draw_window
|
||||||
call init_sin_cos
|
|
||||||
|
|
||||||
still:
|
still:
|
||||||
mov eax,11
|
mov eax,11
|
||||||
@ -76,9 +95,6 @@ main_loop:
|
|||||||
|
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
red:
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
key:
|
key:
|
||||||
mov eax,2
|
mov eax,2
|
||||||
mcall
|
mcall
|
||||||
@ -124,46 +140,37 @@ df_draw:
|
|||||||
mov ecx,3
|
mov ecx,3
|
||||||
mov edi,@@tx1 ;bp
|
mov edi,@@tx1 ;bp
|
||||||
df_get_point:
|
df_get_point:
|
||||||
xor bh,bh
|
movzx ebx, byte [esi]
|
||||||
mov bl,byte [esi]
|
movzx eax, word [object_translated + ebx*4]
|
||||||
shl bx,2
|
stosd
|
||||||
mov ax,word [object_translated+bx]
|
movzx eax, word [object_translated + ebx*4 + 2]
|
||||||
mov word [edi],ax
|
stosd
|
||||||
mov ax,word [object_translated+bx+2]
|
|
||||||
mov word [edi+2],ax
|
|
||||||
inc esi
|
inc esi
|
||||||
add edi,4
|
|
||||||
dec ecx
|
dec ecx
|
||||||
jnz df_get_point
|
jnz df_get_point
|
||||||
|
|
||||||
mov ax,[@@ty1]
|
mov eax,[@@ty1]
|
||||||
sub ax,[@@ty3]
|
sub eax,[@@ty3]
|
||||||
mov bx,[@@tx2]
|
mov ebx,[@@tx2]
|
||||||
sub bx,[@@tx1]
|
sub ebx,[@@tx1]
|
||||||
imul bx
|
imul ebx
|
||||||
shl edx,16
|
push eax
|
||||||
mov dx,ax
|
mov eax,[@@tx1]
|
||||||
push edx
|
sub eax,[@@tx3]
|
||||||
mov ax,[@@tx1]
|
mov ebx,[@@ty2]
|
||||||
sub ax,[@@tx3]
|
sub ebx,[@@ty1]
|
||||||
mov bx,[@@ty2]
|
imul ebx
|
||||||
sub bx,[@@ty1]
|
|
||||||
imul bx
|
|
||||||
shl edx,16
|
|
||||||
mov dx,ax
|
|
||||||
pop ebx
|
pop ebx
|
||||||
sub ebx,edx
|
sub ebx,eax
|
||||||
or ebx,ebx
|
|
||||||
jge df_next
|
jge df_next
|
||||||
|
|
||||||
xor ah,ah
|
movzx eax, byte [esi]
|
||||||
mov al,byte [si]
|
|
||||||
|
|
||||||
mov [@@xcol],ax
|
mov [@@xcol], eax
|
||||||
|
|
||||||
call filled_triangle
|
call filled_triangle
|
||||||
df_next:
|
df_next:
|
||||||
inc si
|
inc esi
|
||||||
pop ecx
|
pop ecx
|
||||||
dec ecx
|
dec ecx
|
||||||
jnz df_draw
|
jnz df_draw
|
||||||
@ -178,7 +185,7 @@ clear_screen_buffer:
|
|||||||
mov ebx,scrbuf
|
mov ebx,scrbuf
|
||||||
mov ecx,SCREEN_X*65536+SCREEN_Y
|
mov ecx,SCREEN_X*65536+SCREEN_Y
|
||||||
mov edx,5*65536+22
|
mov edx,5*65536+22
|
||||||
mov ax,7
|
mov eax,7
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
;White background
|
;White background
|
||||||
@ -196,21 +203,22 @@ clear_screen_buffer:
|
|||||||
|
|
||||||
;filled trangle procedure
|
;filled trangle procedure
|
||||||
|
|
||||||
@@tx1 dw 0
|
align 4
|
||||||
@@ty1 dw 0
|
@@tx1 dd 0
|
||||||
@@tx2 dw 0
|
@@ty1 dd 0
|
||||||
@@ty2 dw 0
|
@@tx2 dd 0
|
||||||
@@tx3 dw 0
|
@@ty2 dd 0
|
||||||
@@ty3 dw 0
|
@@tx3 dd 0
|
||||||
@@xcol dw 0
|
@@ty3 dd 0
|
||||||
|
@@xcol dd 0
|
||||||
|
|
||||||
@@dx12 dw 0
|
@@dx12 dd 0
|
||||||
@@dx13 dw 0
|
@@dx13 dd 0
|
||||||
@@dx23 dw 0
|
@@dx23 dd 0
|
||||||
|
|
||||||
filled_triangle:
|
filled_triangle:
|
||||||
|
|
||||||
mov ax,[@@xcol] ;trnsforming color
|
mov eax,[@@xcol] ;trnsforming color
|
||||||
mov bl,al ;byte bbbggrrx
|
mov bl,al ;byte bbbggrrx
|
||||||
mov dl,al ;to 3 byte
|
mov dl,al ;to 3 byte
|
||||||
mov dh,al ;bbbxxxxx ggxxxxxx rrxxxxxx
|
mov dh,al ;bbbxxxxx ggxxxxxx rrxxxxxx
|
||||||
@ -234,185 +242,175 @@ no_bitup:
|
|||||||
shl eax,8
|
shl eax,8
|
||||||
mov al,dl
|
mov al,dl
|
||||||
mov dword [@@rgb],eax
|
mov dword [@@rgb],eax
|
||||||
mov eax,0 ; for 16 bit instructions
|
|
||||||
|
|
||||||
mov ax,[@@ty1]
|
mov eax,[@@ty1]
|
||||||
cmp ax,[@@ty3]
|
cmp eax,[@@ty3]
|
||||||
jb ft_check1
|
jb ft_check1
|
||||||
|
|
||||||
xchg ax,[@@ty3]
|
xchg eax,[@@ty3]
|
||||||
mov [@@ty1],ax
|
mov [@@ty1],eax
|
||||||
|
|
||||||
mov ax,[@@tx1]
|
mov eax,[@@tx1]
|
||||||
xchg ax,[@@tx3]
|
xchg eax,[@@tx3]
|
||||||
mov [@@tx1],ax
|
mov [@@tx1],eax
|
||||||
ft_check1:
|
ft_check1:
|
||||||
mov ax,[@@ty2]
|
mov eax,[@@ty2]
|
||||||
cmp ax,[@@ty3]
|
cmp eax,[@@ty3]
|
||||||
jb ft_check2
|
jb ft_check2
|
||||||
|
|
||||||
xchg ax,[@@ty3]
|
xchg eax,[@@ty3]
|
||||||
mov [@@ty2],ax
|
mov [@@ty2],eax
|
||||||
|
|
||||||
mov ax,[@@tx2]
|
mov eax,[@@tx2]
|
||||||
xchg ax,[@@tx3]
|
xchg eax,[@@tx3]
|
||||||
mov [@@tx2],ax
|
mov [@@tx2],eax
|
||||||
ft_check2:
|
ft_check2:
|
||||||
mov ax,[@@ty1]
|
mov eax,[@@ty1]
|
||||||
cmp ax,[@@ty2]
|
cmp eax,[@@ty2]
|
||||||
jb ft_check3
|
jb ft_check3
|
||||||
|
|
||||||
xchg ax,[@@ty2]
|
xchg eax,[@@ty2]
|
||||||
mov [@@ty1],ax
|
mov [@@ty1],eax
|
||||||
|
|
||||||
mov ax,[@@tx1]
|
mov eax,[@@tx1]
|
||||||
xchg ax,[@@tx2]
|
xchg eax,[@@tx2]
|
||||||
mov [@@tx1],ax
|
mov [@@tx1],eax
|
||||||
ft_check3:
|
ft_check3:
|
||||||
|
|
||||||
mov bx,[@@ty2]
|
mov ebx,[@@ty2]
|
||||||
sub bx,[@@ty1]
|
sub ebx,[@@ty1]
|
||||||
jnz ft_dx12_make
|
jnz ft_dx12_make
|
||||||
|
|
||||||
mov [@@dx12],word 0
|
mov [@@dx12],dword 0
|
||||||
jmp ft_dx12_done
|
jmp ft_dx12_done
|
||||||
ft_dx12_make:
|
ft_dx12_make:
|
||||||
mov ax,[@@tx2]
|
mov eax,[@@tx2]
|
||||||
sub ax,[@@tx1]
|
sub eax,[@@tx1]
|
||||||
shl ax,7
|
shl eax,7
|
||||||
cwd
|
cdq
|
||||||
idiv bx
|
idiv ebx
|
||||||
mov [@@dx12],ax ; dx12 = (x2-x1)/(y2-y1)
|
mov [@@dx12],eax ; dx12 = (x2-x1)/(y2-y1)
|
||||||
ft_dx12_done:
|
ft_dx12_done:
|
||||||
|
|
||||||
mov bx,[@@ty3]
|
mov ebx,[@@ty3]
|
||||||
sub bx,[@@ty1]
|
sub ebx,[@@ty1]
|
||||||
jnz ft_dx13_make
|
jnz ft_dx13_make
|
||||||
|
|
||||||
mov [@@dx13],word 0
|
mov [@@dx13],dword 0
|
||||||
jmp ft_dx13_done
|
jmp ft_dx13_done
|
||||||
ft_dx13_make:
|
ft_dx13_make:
|
||||||
mov ax,[@@tx3]
|
mov eax,[@@tx3]
|
||||||
sub ax,[@@tx1]
|
sub eax,[@@tx1]
|
||||||
shl ax,7
|
shl eax,7
|
||||||
cwd
|
cdq
|
||||||
idiv bx
|
idiv ebx
|
||||||
mov [@@dx13],ax ; dx13 = (x3-x1)/(y3-y1)
|
mov [@@dx13],eax ; dx13 = (x3-x1)/(y3-y1)
|
||||||
ft_dx13_done:
|
ft_dx13_done:
|
||||||
|
|
||||||
mov bx,[@@ty3]
|
mov ebx,[@@ty3]
|
||||||
sub bx,[@@ty2]
|
sub ebx,[@@ty2]
|
||||||
jnz ft_dx23_make
|
jnz ft_dx23_make
|
||||||
|
|
||||||
mov [@@dx23],word 0
|
mov [@@dx23],dword 0
|
||||||
jmp ft_dx23_done
|
jmp ft_dx23_done
|
||||||
ft_dx23_make:
|
ft_dx23_make:
|
||||||
mov ax,[@@tx3]
|
mov eax,[@@tx3]
|
||||||
sub ax,[@@tx2]
|
sub eax,[@@tx2]
|
||||||
shl ax,7
|
shl eax,7
|
||||||
cwd
|
cdq
|
||||||
idiv bx
|
idiv ebx
|
||||||
mov [@@dx23],ax ; dx23 = (x3-x2)/(y3-y2)
|
mov [@@dx23],eax ; dx23 = (x3-x2)/(y3-y2)
|
||||||
ft_dx23_done:
|
ft_dx23_done:
|
||||||
|
|
||||||
mov ax,[@@tx1]
|
mov eax,[@@tx1]
|
||||||
shl ax,7
|
shl eax,7
|
||||||
mov bx,ax
|
mov ebx,eax
|
||||||
|
|
||||||
mov cx,[@@ty1]
|
mov ecx,[@@ty1]
|
||||||
ft_loop1:
|
ft_loop1:
|
||||||
|
|
||||||
pushad
|
pushad
|
||||||
|
|
||||||
mov [@@ly],cx
|
mov [@@ly],ecx
|
||||||
mov dx,bx
|
mov edx,ebx
|
||||||
shr dx,7
|
shr edx,7
|
||||||
mov [@@lx2],dx
|
mov [@@lx2],edx
|
||||||
mov dx,ax
|
mov edx,eax
|
||||||
shr dx,7
|
shr edx,7
|
||||||
mov [@@lx1],dx
|
mov [@@lx1],edx
|
||||||
mov ax,[@@xcol]
|
mov eax,[@@xcol]
|
||||||
mov [@@lcol],ax
|
mov [@@lcol],eax
|
||||||
call horizontal_line
|
call horizontal_line
|
||||||
|
|
||||||
popad
|
popad
|
||||||
|
|
||||||
add ax,[@@dx13]
|
add eax,[@@dx13]
|
||||||
add bx,[@@dx12]
|
add ebx,[@@dx12]
|
||||||
inc cx
|
inc ecx
|
||||||
cmp cx,[@@ty2]
|
cmp ecx,[@@ty2]
|
||||||
jb ft_loop1
|
jb ft_loop1
|
||||||
|
|
||||||
|
|
||||||
mov bx,[@@tx2]
|
mov ebx,[@@tx2]
|
||||||
shl bx,7
|
shl ebx,7
|
||||||
mov cx,[@@ty2]
|
mov ecx,[@@ty2]
|
||||||
ft_loop2:
|
ft_loop2:
|
||||||
|
|
||||||
pushad
|
pushad
|
||||||
|
|
||||||
mov [@@ly],cx
|
mov [@@ly],ecx
|
||||||
mov dx,bx
|
mov edx,ebx
|
||||||
shr dx,7
|
shr edx,7
|
||||||
mov [@@lx2],dx
|
mov [@@lx2],edx
|
||||||
mov dx,ax
|
mov edx,eax
|
||||||
shr dx,7
|
shr edx,7
|
||||||
mov [@@lx1],dx
|
mov [@@lx1],edx
|
||||||
mov ax,[@@xcol]
|
mov eax,[@@xcol]
|
||||||
mov [@@lcol],ax
|
mov [@@lcol],eax
|
||||||
call horizontal_line
|
call horizontal_line
|
||||||
|
|
||||||
popad
|
popad
|
||||||
|
|
||||||
add ax,[@@dx13]
|
add eax,[@@dx13]
|
||||||
add bx,[@@dx23]
|
add ebx,[@@dx23]
|
||||||
inc ecx
|
inc ecx
|
||||||
cmp cx,[@@ty3]
|
cmp ecx,[@@ty3]
|
||||||
jb ft_loop2
|
jb ft_loop2
|
||||||
|
|
||||||
ret
|
ret
|
||||||
|
|
||||||
;horizontal line subproc
|
;horizontal line subproc
|
||||||
|
|
||||||
@@lx1 dw 0
|
align 4
|
||||||
@@lx2 dw 0
|
@@lx1 dd 0
|
||||||
@@ly dw 0
|
@@lx2 dd 0
|
||||||
@@lcol dw 0
|
@@ly dd 0
|
||||||
|
@@lcol dd 0
|
||||||
|
|
||||||
@@rgb dd 0
|
@@rgb dd 0
|
||||||
|
|
||||||
horizontal_line:
|
horizontal_line:
|
||||||
|
|
||||||
mov ecx,0
|
mov ecx,[@@lx1]
|
||||||
mov cx,[@@lx1]
|
sub ecx,[@@lx2]
|
||||||
cmp cx,[@@lx2]
|
|
||||||
ja x12
|
ja x12
|
||||||
je ext
|
je ext
|
||||||
; ret
|
; ret
|
||||||
mov cx,[@@lx2]
|
neg ecx
|
||||||
sub cx,[@@lx1]
|
|
||||||
mov edi,3
|
mov edi,3
|
||||||
jmp xx
|
jmp xx
|
||||||
x12:
|
x12:
|
||||||
mov cx,[@@lx1]
|
|
||||||
sub cx,[@@lx2]
|
|
||||||
mov edi,-3
|
mov edi,-3
|
||||||
jmp xx
|
jmp xx
|
||||||
ext:
|
ext:
|
||||||
mov ecx,-1 ;1
|
mov ecx,-1 ;1
|
||||||
; sub ebp,3
|
; sub ebp,3
|
||||||
xx:
|
xx:
|
||||||
mov eax,0
|
mov eax,[@@ly]
|
||||||
mov ax,[@@ly]
|
|
||||||
mov ebx,SCREEN_X ;320
|
mov ebx,SCREEN_X ;320
|
||||||
mul ebx
|
mul ebx
|
||||||
mov ebp,0
|
add eax,[@@lx1]
|
||||||
mov bp,[@@lx1] ;for correct 16 bit size
|
lea ebp,[eax*3-3] ; for delete white dots
|
||||||
add eax,ebp
|
|
||||||
mov ebx,3
|
|
||||||
mul ebx
|
|
||||||
mov ebp,eax
|
|
||||||
sub ebp,3 ;for delete white dots
|
|
||||||
add ecx,2
|
add ecx,2
|
||||||
loo:
|
loo:
|
||||||
|
|
||||||
@ -456,12 +454,11 @@ rotate_points:
|
|||||||
mov edi,@@sin_x
|
mov edi,@@sin_x
|
||||||
mov edx,3
|
mov edx,3
|
||||||
rp_sin_cos:
|
rp_sin_cos:
|
||||||
mov bx,word [esi]
|
mov ebx, [esi]
|
||||||
and bx,511
|
and ebx,511
|
||||||
shl bx,1
|
mov ax,word [sin_table+ebx*2]
|
||||||
mov ax,word [sin_table+bx]
|
|
||||||
mov word [edi],ax
|
mov word [edi],ax
|
||||||
mov ax,word [cos_table+bx]
|
mov ax,word [cos_table+ebx*2]
|
||||||
mov word [edi+2],ax
|
mov word [edi+2],ax
|
||||||
|
|
||||||
add esi,2
|
add esi,2
|
||||||
@ -591,8 +588,7 @@ y_n:
|
|||||||
mov [my],bx
|
mov [my],bx
|
||||||
popad
|
popad
|
||||||
|
|
||||||
mov ebx,0 ;?
|
movzx ebx,word [esi+4]
|
||||||
mov bx,word [esi+4]
|
|
||||||
mov ax,[my]
|
mov ax,[my]
|
||||||
cmp ax,0
|
cmp ax,0
|
||||||
jng no_m
|
jng no_m
|
||||||
@ -601,20 +597,18 @@ y_n:
|
|||||||
no_m:
|
no_m:
|
||||||
add bx,256 ; Z factor (zoom)
|
add bx,256 ; Z factor (zoom)
|
||||||
|
|
||||||
mov eax,0 ;?
|
movsx eax,word [esi]
|
||||||
mov ax,word [esi]
|
shl eax,8
|
||||||
shl ax,8
|
cdq
|
||||||
cwd
|
idiv ebx
|
||||||
idiv bx; bx
|
add eax,(SCREEN_X/2) ;160 ;X factor (center X)
|
||||||
add ax,(SCREEN_X/2) ;160 ;X factor (center X)
|
|
||||||
stosw
|
stosw
|
||||||
|
|
||||||
mov eax,0 ;?
|
movsx eax,word [esi+2]
|
||||||
mov ax,word [esi+2]
|
shl eax,8
|
||||||
shl ax,8
|
cdq
|
||||||
cwd
|
idiv ebx
|
||||||
idiv bx
|
add eax,(SCREEN_Y/2) ;100 ;Y factor (center Y)
|
||||||
add ax,(SCREEN_Y/2) ;100 ;Y factor (center Y)
|
|
||||||
stosw
|
stosw
|
||||||
|
|
||||||
add esi,6
|
add esi,6
|
||||||
@ -622,32 +616,6 @@ no_m:
|
|||||||
jnz translate_points
|
jnz translate_points
|
||||||
ret
|
ret
|
||||||
|
|
||||||
init_sin_cos:
|
|
||||||
finit
|
|
||||||
fldz
|
|
||||||
fstp [temp]
|
|
||||||
xor edi,edi
|
|
||||||
mov ecx,512
|
|
||||||
isc_make:
|
|
||||||
fld [temp]
|
|
||||||
fld st0
|
|
||||||
fld st0
|
|
||||||
fsin
|
|
||||||
fmul [fixed_point_const]
|
|
||||||
fistp word [sin_table+edi]
|
|
||||||
fcos
|
|
||||||
fmul [fixed_point_const]
|
|
||||||
fistp word [cos_table+edi]
|
|
||||||
|
|
||||||
fadd [inc_angle]
|
|
||||||
fstp [temp]
|
|
||||||
|
|
||||||
add edi,2
|
|
||||||
loop isc_make
|
|
||||||
ret
|
|
||||||
|
|
||||||
temp dd 0
|
|
||||||
|
|
||||||
fixed_point_const dd 16384.0
|
fixed_point_const dd 16384.0
|
||||||
inc_angle dd 0.01227184630309 ; pi/256
|
inc_angle dd 0.01227184630309 ; pi/256
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
@echo lang fix en >lang.inc
|
@echo lang fix en >lang.inc
|
||||||
@fasm 3dcube2.asm 3dcube2
|
@fasm rsquare.asm rsquare
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -1,4 +1,4 @@
|
|||||||
@echo lang fix ru >lang.inc
|
@echo lang fix ru >lang.inc
|
||||||
@fasm 3dcube2.asm 3dcube2
|
@fasm rsquare.asm rsquare
|
||||||
@erase lang.inc
|
@erase lang.inc
|
||||||
@pause
|
@pause
|
@ -17,6 +17,7 @@ use32
|
|||||||
dd 0x00000000 ; reserved=no extended header
|
dd 0x00000000 ; reserved=no extended header
|
||||||
include 'lang.inc'
|
include 'lang.inc'
|
||||||
include '..\..\..\macros.inc'
|
include '..\..\..\macros.inc'
|
||||||
|
purge mov ; decrease kpack'ed size
|
||||||
|
|
||||||
START: ; start of execution
|
START: ; start of execution
|
||||||
call draw_window ; at first, draw the window
|
call draw_window ; at first, draw the window
|
||||||
@ -54,15 +55,13 @@ still:
|
|||||||
|
|
||||||
|
|
||||||
; Fill the table with blanks
|
; Fill the table with blanks
|
||||||
mov edx, text + 160
|
mov edi, text + 160
|
||||||
doBlank:
|
doBlank:
|
||||||
mov esi, blank
|
mov esi, blank
|
||||||
mov edi, edx
|
|
||||||
mov ecx, 40
|
mov ecx, 40
|
||||||
rep movsb
|
rep movsb
|
||||||
add edx, 40
|
|
||||||
|
|
||||||
cmp edx, text + 560
|
cmp edi, text + 560
|
||||||
jne doBlank
|
jne doBlank
|
||||||
|
|
||||||
pop ecx ; The number of entries
|
pop ecx ; The number of entries
|
||||||
@ -302,30 +301,21 @@ button: ; button
|
|||||||
mov eax,0xffffffff ; close this program
|
mov eax,0xffffffff ; close this program
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
writeDecimal:
|
writeDecimal:
|
||||||
pusha
|
pusha
|
||||||
and eax, 0xff
|
and eax, 0xff
|
||||||
mov ecx, eax
|
|
||||||
mov dl, 100
|
mov dl, 100
|
||||||
div dl
|
div dl
|
||||||
mov cl, ah
|
movzx ecx, ah
|
||||||
add al, '0'
|
add al, '0'
|
||||||
mov [ebx], al
|
mov [ebx], al
|
||||||
inc ebx
|
inc ebx
|
||||||
mov eax, ecx
|
mov eax, ecx
|
||||||
mov dl, 10
|
mov dl, 10
|
||||||
div dl
|
div dl
|
||||||
mov cl, ah
|
add ax, '00'
|
||||||
add al, '0'
|
mov [ebx], ax
|
||||||
mov [ebx], al
|
|
||||||
inc ebx
|
|
||||||
mov al, ah
|
|
||||||
add al, '0'
|
|
||||||
mov [ebx], al
|
|
||||||
popa
|
popa
|
||||||
ret
|
ret
|
||||||
|
|
||||||
@ -360,7 +350,7 @@ draw_window:
|
|||||||
newline:
|
newline:
|
||||||
mcall
|
mcall
|
||||||
add ebx,16
|
add ebx,16
|
||||||
add edx,40
|
add edx,esi
|
||||||
cmp [edx],byte 'x'
|
cmp [edx],byte 'x'
|
||||||
jnz newline
|
jnz newline
|
||||||
|
|
||||||
@ -411,7 +401,7 @@ text:
|
|||||||
db ' xxx.xxx.xxx.xxx xxxxxxxxxxxx xxxx xxxx '
|
db ' xxx.xxx.xxx.xxx xxxxxxxxxxxx xxxx xxxx '
|
||||||
db ' xxx.xxx.xxx.xxx xxxxxxxxxxxx xxxx xxxx '
|
db ' xxx.xxx.xxx.xxx xxxxxxxxxxxx xxxx xxxx '
|
||||||
db ' xxx.xxx.xxx.xxx xxxxxxxxxxxx xxxx xxxx '
|
db ' xxx.xxx.xxx.xxx xxxxxxxxxxxx xxxx xxxx '
|
||||||
db 'x <- END MARKER, DONT DELETE '
|
db 'x' ; <- END MARKER, DONT DELETE
|
||||||
|
|
||||||
|
|
||||||
blank:
|
blank:
|
||||||
@ -424,9 +414,3 @@ hextable db '0123456789ABCDEF'
|
|||||||
|
|
||||||
|
|
||||||
I_END:
|
I_END:
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -26,8 +26,8 @@ include '..\..\..\macros.inc'
|
|||||||
|
|
||||||
START: ; start of execution
|
START: ; start of execution
|
||||||
|
|
||||||
cmp [PARAMS], byte 0
|
cmp [PARAMS], dword 'BOOT'
|
||||||
jne check_parameters
|
jz boot_set_settings
|
||||||
|
|
||||||
no_params:
|
no_params:
|
||||||
|
|
||||||
@ -45,7 +45,7 @@ still:
|
|||||||
jnz button
|
jnz button
|
||||||
|
|
||||||
key: ; key
|
key: ; key
|
||||||
mov al,2 ; just read it and ignore
|
; mov al,2 ; just read it and ignore
|
||||||
mcall
|
mcall
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
@ -55,74 +55,23 @@ still:
|
|||||||
|
|
||||||
shr eax,8
|
shr eax,8
|
||||||
|
|
||||||
cmp eax,1 ; button id=1 ?
|
dec eax ; button id=1 ?
|
||||||
jne noclose
|
jne noclose
|
||||||
or eax,-1 ; close this program
|
or eax,-1 ; close this program
|
||||||
mcall
|
mcall
|
||||||
noclose:
|
noclose:
|
||||||
|
|
||||||
cmp eax,2
|
dec eax
|
||||||
je read_stack_setup
|
je read_stack_setup
|
||||||
|
|
||||||
cmp eax,3
|
dec eax
|
||||||
jne no_apply_stack_setup
|
jne no_apply_stack_setup
|
||||||
call apply_stack_setup
|
call apply_stack_setup
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
no_apply_stack_setup:
|
no_apply_stack_setup:
|
||||||
cmp eax,11
|
dec eax ; GET COM PORT
|
||||||
jb no_set_interface
|
dec eax
|
||||||
cmp eax,14
|
|
||||||
jg no_set_interface
|
|
||||||
sub eax,11
|
|
||||||
mov [interface],eax
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
no_set_interface:
|
|
||||||
|
|
||||||
cmp eax,21
|
|
||||||
jb no_ip_sf
|
|
||||||
cmp eax,22
|
|
||||||
jg no_ip_sf
|
|
||||||
sub eax,21
|
|
||||||
not eax
|
|
||||||
and eax,1
|
|
||||||
mov [assigned],eax
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
no_ip_sf:
|
|
||||||
|
|
||||||
cmp eax,7 ; GET IP
|
|
||||||
jne no_read_ip
|
|
||||||
mov [string_x],205
|
|
||||||
mov [string_y],80
|
|
||||||
mov [string_length],15
|
|
||||||
call read_string
|
|
||||||
mov esi,string-1
|
|
||||||
mov edi,ip_address
|
|
||||||
xor eax,eax
|
|
||||||
ip1:
|
|
||||||
inc esi
|
|
||||||
cmp [esi],byte '0'
|
|
||||||
jb ip2
|
|
||||||
cmp [esi],byte '9'
|
|
||||||
jg ip2
|
|
||||||
imul eax,10
|
|
||||||
movzx ebx,byte [esi]
|
|
||||||
sub ebx,48
|
|
||||||
add eax,ebx
|
|
||||||
jmp ip1
|
|
||||||
ip2:
|
|
||||||
mov [edi],al
|
|
||||||
xor eax,eax
|
|
||||||
inc edi
|
|
||||||
cmp edi,ip_address+3
|
|
||||||
jbe ip1
|
|
||||||
call draw_window
|
|
||||||
jmp still
|
|
||||||
no_read_ip:
|
|
||||||
|
|
||||||
cmp eax,5 ; GET COM PORT
|
|
||||||
jne no_read_comport
|
jne no_read_comport
|
||||||
mov [string_x],272
|
mov [string_x],272
|
||||||
mov [string_y],40
|
mov [string_y],40
|
||||||
@ -152,11 +101,10 @@ no_apply_stack_setup:
|
|||||||
sub eax,48
|
sub eax,48
|
||||||
add ebx,eax
|
add ebx,eax
|
||||||
mov [com_add],ebx
|
mov [com_add],ebx
|
||||||
call draw_window
|
jmp red
|
||||||
jmp still
|
|
||||||
no_read_comport:
|
no_read_comport:
|
||||||
|
|
||||||
cmp eax,6 ; GET COM IRQ
|
dec eax ; GET COM IRQ
|
||||||
jne no_read_comirq
|
jne no_read_comirq
|
||||||
mov [string_x],284
|
mov [string_x],284
|
||||||
mov [string_y],50
|
mov [string_y],50
|
||||||
@ -169,11 +117,38 @@ no_apply_stack_setup:
|
|||||||
gci1:
|
gci1:
|
||||||
sub eax,48
|
sub eax,48
|
||||||
mov [com_irq],eax
|
mov [com_irq],eax
|
||||||
call draw_window
|
jmp red
|
||||||
jmp still
|
|
||||||
no_read_comirq:
|
no_read_comirq:
|
||||||
|
|
||||||
cmp eax, 8 ; set gateway ip
|
dec eax ; GET IP
|
||||||
|
jne no_read_ip
|
||||||
|
mov [string_x],205
|
||||||
|
mov [string_y],80
|
||||||
|
mov [string_length],15
|
||||||
|
call read_string
|
||||||
|
mov esi,string-1
|
||||||
|
mov edi,ip_address
|
||||||
|
ip0:
|
||||||
|
xor eax,eax
|
||||||
|
ip1:
|
||||||
|
inc esi
|
||||||
|
cmp [esi],byte '0'
|
||||||
|
jb ip2
|
||||||
|
cmp [esi],byte '9'
|
||||||
|
jg ip2
|
||||||
|
imul eax,10
|
||||||
|
movzx ebx,byte [esi]
|
||||||
|
sub ebx,48
|
||||||
|
add eax,ebx
|
||||||
|
jmp ip1
|
||||||
|
ip2:
|
||||||
|
stosb
|
||||||
|
cmp edi,ip_address+3
|
||||||
|
jbe ip0
|
||||||
|
jmp red
|
||||||
|
no_read_ip:
|
||||||
|
|
||||||
|
dec eax ; set gateway ip
|
||||||
jne no_set_gateway
|
jne no_set_gateway
|
||||||
|
|
||||||
mov [string_x],205
|
mov [string_x],205
|
||||||
@ -182,6 +157,7 @@ no_apply_stack_setup:
|
|||||||
call read_string
|
call read_string
|
||||||
mov esi,string-1
|
mov esi,string-1
|
||||||
mov edi,gateway_ip
|
mov edi,gateway_ip
|
||||||
|
gip0:
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
gip1:
|
gip1:
|
||||||
inc esi
|
inc esi
|
||||||
@ -195,17 +171,14 @@ no_apply_stack_setup:
|
|||||||
add eax,ebx
|
add eax,ebx
|
||||||
jmp gip1
|
jmp gip1
|
||||||
gip2:
|
gip2:
|
||||||
mov [edi],al
|
stosb
|
||||||
xor eax,eax
|
|
||||||
inc edi
|
|
||||||
cmp edi,gateway_ip+3
|
cmp edi,gateway_ip+3
|
||||||
jbe gip1
|
jbe gip0
|
||||||
call draw_window
|
jmp red
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
no_set_gateway:
|
no_set_gateway:
|
||||||
cmp eax, 9
|
|
||||||
|
dec eax
|
||||||
jne no_set_subnet
|
jne no_set_subnet
|
||||||
|
|
||||||
mov [string_x],205
|
mov [string_x],205
|
||||||
@ -214,6 +187,7 @@ no_apply_stack_setup:
|
|||||||
call read_string
|
call read_string
|
||||||
mov esi,string-1
|
mov esi,string-1
|
||||||
mov edi,subnet_mask
|
mov edi,subnet_mask
|
||||||
|
sip0:
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
sip1:
|
sip1:
|
||||||
inc esi
|
inc esi
|
||||||
@ -227,17 +201,13 @@ no_apply_stack_setup:
|
|||||||
add eax,ebx
|
add eax,ebx
|
||||||
jmp sip1
|
jmp sip1
|
||||||
sip2:
|
sip2:
|
||||||
mov [edi],al
|
stosb
|
||||||
xor eax,eax
|
|
||||||
inc edi
|
|
||||||
cmp edi,subnet_mask+3
|
cmp edi,subnet_mask+3
|
||||||
jbe sip1
|
jbe sip0
|
||||||
call draw_window
|
jmp red
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
no_set_subnet:
|
no_set_subnet:
|
||||||
cmp eax, 10
|
dec eax
|
||||||
jne no_set_dns
|
jne no_set_dns
|
||||||
|
|
||||||
mov [string_x],205
|
mov [string_x],205
|
||||||
@ -246,6 +216,7 @@ no_apply_stack_setup:
|
|||||||
call read_string
|
call read_string
|
||||||
mov esi,string-1
|
mov esi,string-1
|
||||||
mov edi,dns_ip
|
mov edi,dns_ip
|
||||||
|
dip0:
|
||||||
xor eax,eax
|
xor eax,eax
|
||||||
dip1:
|
dip1:
|
||||||
inc esi
|
inc esi
|
||||||
@ -259,20 +230,31 @@ no_apply_stack_setup:
|
|||||||
add eax,ebx
|
add eax,ebx
|
||||||
jmp dip1
|
jmp dip1
|
||||||
dip2:
|
dip2:
|
||||||
mov [edi],al
|
stosb
|
||||||
xor eax,eax
|
|
||||||
inc edi
|
|
||||||
cmp edi,dns_ip+3
|
cmp edi,dns_ip+3
|
||||||
jbe dip1
|
jbe dip0
|
||||||
call draw_window
|
jmp red
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
no_set_dns:
|
no_set_dns:
|
||||||
|
|
||||||
|
dec eax
|
||||||
|
jb no_set_interface
|
||||||
|
cmp eax,14-11
|
||||||
|
ja no_set_interface
|
||||||
|
mov [interface],eax
|
||||||
|
jmp red
|
||||||
|
no_set_interface:
|
||||||
|
|
||||||
|
sub eax,21-11
|
||||||
|
jb no_ip_sf
|
||||||
|
cmp eax,22-21
|
||||||
|
ja no_ip_sf
|
||||||
|
xor eax,1
|
||||||
|
mov [assigned],eax
|
||||||
|
jmp red
|
||||||
|
no_ip_sf:
|
||||||
jmp still
|
jmp still
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
read_stack_setup:
|
read_stack_setup:
|
||||||
|
|
||||||
mov eax,52
|
mov eax,52
|
||||||
@ -318,11 +300,7 @@ read_stack_setup:
|
|||||||
shr eax,7
|
shr eax,7
|
||||||
and eax,1
|
and eax,1
|
||||||
mov [assigned],eax
|
mov [assigned],eax
|
||||||
|
jmp red
|
||||||
call draw_window
|
|
||||||
|
|
||||||
jmp still
|
|
||||||
|
|
||||||
|
|
||||||
apply_stack_setup:
|
apply_stack_setup:
|
||||||
|
|
||||||
@ -363,7 +341,6 @@ apply_stack_setup:
|
|||||||
mcall
|
mcall
|
||||||
|
|
||||||
ret
|
ret
|
||||||
jmp still
|
|
||||||
|
|
||||||
|
|
||||||
string_length dd 16
|
string_length dd 16
|
||||||
@ -388,7 +365,7 @@ read_string:
|
|||||||
mcall
|
mcall
|
||||||
cmp eax,2
|
cmp eax,2
|
||||||
jne read_done
|
jne read_done
|
||||||
mov eax,2
|
; mov eax,2
|
||||||
mcall
|
mcall
|
||||||
shr eax,8
|
shr eax,8
|
||||||
cmp eax,13
|
cmp eax,13
|
||||||
@ -419,11 +396,6 @@ read_string:
|
|||||||
|
|
||||||
read_done:
|
read_done:
|
||||||
|
|
||||||
call print_text
|
|
||||||
|
|
||||||
ret
|
|
||||||
|
|
||||||
|
|
||||||
print_text:
|
print_text:
|
||||||
|
|
||||||
pusha
|
pusha
|
||||||
@ -607,27 +579,27 @@ draw_window:
|
|||||||
mcall
|
mcall
|
||||||
;mov eax,8 ; BUTTON 6 : SET IRQ
|
;mov eax,8 ; BUTTON 6 : SET IRQ
|
||||||
mov ecx,49*65536+8
|
mov ecx,49*65536+8
|
||||||
mov edx,6
|
inc edx
|
||||||
mcall
|
mcall
|
||||||
;mov eax,8 ; BUTTON 7 : SET IP
|
;mov eax,8 ; BUTTON 7 : SET IP
|
||||||
mov ecx,79*65536+8
|
mov ecx,79*65536+8
|
||||||
mov edx,7
|
inc edx
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
;mov eax,8 ; BUTTON 8 : SET gateway IP
|
;mov eax,8 ; BUTTON 8 : SET gateway IP
|
||||||
mov ebx,299*65536+8
|
mov ebx,299*65536+8
|
||||||
mov ecx,89*65536+8
|
mov ecx,89*65536+8
|
||||||
mov edx,8
|
inc edx
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
;mov eax,8 ; BUTTON 9 : SET subnet
|
;mov eax,8 ; BUTTON 9 : SET subnet
|
||||||
mov ecx,99*65536+8
|
mov ecx,99*65536+8
|
||||||
mov edx,9
|
inc edx
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
;mov eax,8 ; BUTTON 10 : SET dns ip
|
;mov eax,8 ; BUTTON 10 : SET dns ip
|
||||||
mov ecx,109*65536+8
|
mov ecx,109*65536+8
|
||||||
mov edx,10
|
inc edx
|
||||||
mcall
|
mcall
|
||||||
|
|
||||||
mov ebx,31*65536+40 ; draw info text with function 4
|
mov ebx,31*65536+40 ; draw info text with function 4
|
||||||
@ -655,13 +627,6 @@ draw_window:
|
|||||||
|
|
||||||
;******************************************************************************
|
;******************************************************************************
|
||||||
|
|
||||||
check_parameters:
|
|
||||||
cmp [PARAMS], dword "BOOT" ; received BOOT parameter -> goto handler
|
|
||||||
je boot_set_settings
|
|
||||||
jmp no_params
|
|
||||||
|
|
||||||
;******************************************************************************
|
|
||||||
|
|
||||||
boot_set_settings:
|
boot_set_settings:
|
||||||
|
|
||||||
mov eax,52
|
mov eax,52
|
||||||
@ -723,5 +688,3 @@ assigned dd 0 ; get ip from server
|
|||||||
config dd 0
|
config dd 0
|
||||||
|
|
||||||
I_END:
|
I_END:
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user