forked from KolibriOS/kolibrios
Merge new network stack with trunk
git-svn-id: svn://kolibrios.org@3545 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
507
programs/network_old/local/trunk/local.asm
Normal file
507
programs/network_old/local/trunk/local.asm
Normal file
@@ -0,0 +1,507 @@
|
||||
;
|
||||
; Remote processing example (local node)
|
||||
;
|
||||
; Compile with FASM for Menuet
|
||||
;
|
||||
|
||||
|
||||
use32
|
||||
org 0x0
|
||||
db 'MENUET01' ; header
|
||||
dd 0x01 ; header version
|
||||
dd START ; entry point
|
||||
dd I_END ; image size
|
||||
dd I_END+0x10000 ; required memory
|
||||
dd I_END+0x10000 ; esp
|
||||
dd 0x0 , 0x0 ; I_Param , I_Path
|
||||
|
||||
|
||||
include 'lang.inc'
|
||||
include '..\..\..\macros.inc'
|
||||
|
||||
START: ; start of execution
|
||||
|
||||
mov eax,53 ; open socket
|
||||
mov ebx,0
|
||||
mov ecx,0x2000 ; local port
|
||||
mov edx,0x3000 ; remote port
|
||||
mov esi,dword [host_ip] ; node IP
|
||||
mcall
|
||||
|
||||
mov [socketNum], eax
|
||||
|
||||
red:
|
||||
call draw_window ; at first, draw the window
|
||||
|
||||
still:
|
||||
|
||||
mov eax,23 ; wait here for event
|
||||
mov ebx,1
|
||||
mcall
|
||||
|
||||
cmp eax,1 ; redraw request ?
|
||||
jz red
|
||||
cmp eax,2 ; key in buffer ?
|
||||
jz key
|
||||
cmp eax,3 ; button in buffer ?
|
||||
jz button
|
||||
|
||||
mov eax, 53 ; get data
|
||||
mov ebx, 2
|
||||
mov ecx, [socketNum]
|
||||
mcall
|
||||
cmp eax, 0
|
||||
jne read
|
||||
|
||||
jmp still
|
||||
|
||||
key:
|
||||
mov eax,2
|
||||
mcall
|
||||
jmp still
|
||||
|
||||
button:
|
||||
mov eax,17
|
||||
mcall
|
||||
|
||||
cmp ah,1 ; button id=1 ?
|
||||
jnz noclose
|
||||
mov eax, 53
|
||||
mov ebx, 1
|
||||
mov ecx, [socketNum]
|
||||
mcall
|
||||
mov eax,-1
|
||||
mcall
|
||||
noclose:
|
||||
|
||||
cmp ah,2 ; SEND CODE ?
|
||||
je send_xcode
|
||||
|
||||
cmp ah,3 ; LEFT COORDINATES ?
|
||||
jne no_left
|
||||
mov [picture_position],0
|
||||
mov dword [send_data+15],dword STARTX
|
||||
mov dword [send_data+19],dword 4
|
||||
mov esi,send_data
|
||||
mov edi,I_END
|
||||
mov ecx,23
|
||||
cld
|
||||
rep movsb
|
||||
mov [I_END+23],dword -20
|
||||
mov eax,53
|
||||
mov ebx,4
|
||||
mov ecx,[socketNum]
|
||||
mov edx,23 + 4
|
||||
mov esi,I_END
|
||||
mcall
|
||||
jmp still
|
||||
no_left:
|
||||
|
||||
cmp ah,4 ; RIGHT COORDINATES ?
|
||||
jne no_right
|
||||
mov [picture_position],128
|
||||
mov dword [send_data+15],dword STARTX
|
||||
mov dword [send_data+19],dword 4
|
||||
mov esi,send_data
|
||||
mov edi,I_END
|
||||
mov ecx,23
|
||||
cld
|
||||
rep movsb
|
||||
mov [I_END+23],dword -20 + 128
|
||||
mov eax,53
|
||||
mov ebx,4
|
||||
mov ecx,[socketNum]
|
||||
mov edx,23 + 4
|
||||
mov esi,I_END
|
||||
mcall
|
||||
jmp still
|
||||
no_right:
|
||||
|
||||
cmp ah,5 ; SEND EXECUTE ?
|
||||
je send_execute
|
||||
|
||||
jmp still
|
||||
|
||||
|
||||
xx dd 0
|
||||
yy dd 0
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; SEND CODE TO REMOTE ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
send_xcode:
|
||||
|
||||
mov dword [send_data+15],dword 0x80000
|
||||
mov dword [send_data+19],dword remote_code_end - remote_code_start
|
||||
|
||||
mov esi,send_data ; header
|
||||
mov edi,I_END
|
||||
mov ecx,23
|
||||
cld
|
||||
rep movsb
|
||||
|
||||
mov esi,remote_code ; remote_code_start ; data
|
||||
mov edi,I_END+23
|
||||
mov ecx,remote_code_end - remote_code_start
|
||||
cld
|
||||
rep movsb
|
||||
|
||||
mov eax,53 ; SEND CODE TO REMOTE
|
||||
mov ebx,4
|
||||
mov ecx,[socketNum]
|
||||
mov edx,23 + remote_code_end - remote_code_start
|
||||
mov esi,I_END
|
||||
mcall
|
||||
|
||||
jmp still
|
||||
|
||||
|
||||
send_execute:
|
||||
|
||||
mov dword [execute+15],dword draw_fractal
|
||||
|
||||
mov eax,53 ; START EXECUTE AT REMOTE
|
||||
mov ebx,4
|
||||
mov ecx,[socketNum]
|
||||
mov edx,19
|
||||
mov esi,execute
|
||||
mcall
|
||||
|
||||
mov edi,3
|
||||
|
||||
jmp still
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; READ ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
read:
|
||||
|
||||
|
||||
cfr007:
|
||||
|
||||
mov eax, 53
|
||||
mov ebx, 3
|
||||
mov ecx, [socketNum]
|
||||
mcall ; read byte
|
||||
|
||||
shl edx,8
|
||||
mov dl,bl
|
||||
|
||||
dec edi
|
||||
jnz cok
|
||||
|
||||
mov edi,3
|
||||
|
||||
and edx,0xffffff
|
||||
mov eax,1
|
||||
mov ebx,[xx]
|
||||
mov ecx,[yy]
|
||||
add ebx,15
|
||||
add ecx,35
|
||||
add ebx,[picture_position]
|
||||
mcall
|
||||
|
||||
inc [xx]
|
||||
cmp [xx],dword 128
|
||||
jb cok
|
||||
mov [xx],0
|
||||
|
||||
inc [yy]
|
||||
cmp [yy],dword 128
|
||||
jb cok
|
||||
mov [yy],0
|
||||
|
||||
cok:
|
||||
|
||||
mov eax, 53
|
||||
mov ebx, 2
|
||||
mov ecx, [socketNum]
|
||||
mcall ; any more data?
|
||||
|
||||
cmp eax, 0
|
||||
jne cfr007 ; yes, so get it
|
||||
|
||||
jmp still
|
||||
|
||||
|
||||
|
||||
|
||||
; *********************************************
|
||||
; ******* WINDOW DEFINITIONS AND DRAW ********
|
||||
; *********************************************
|
||||
|
||||
|
||||
draw_window:
|
||||
|
||||
mov eax,12 ; function 12:tell os about windowdraw
|
||||
mov ebx,1 ; 1, start of draw
|
||||
mcall
|
||||
|
||||
; DRAW WINDOW
|
||||
mov eax,0 ; function 0 : define and draw window
|
||||
mov ebx,100*65536+286 ; [x start] *65536 + [x size]
|
||||
mov ecx,60*65536+330 ; [y start] *65536 + [y size]
|
||||
mov edx,0x04ffffff ; color of work area RRGGBB
|
||||
mov edi,title ; WINDOW LABEL
|
||||
mcall
|
||||
|
||||
|
||||
mov eax,8 ; SEND CODE
|
||||
mov ebx,60*65536+160
|
||||
mov ecx,181*65536+13
|
||||
mov edx,2
|
||||
mov esi,0x667788
|
||||
mcall
|
||||
|
||||
;mov eax,8 ; LEFT
|
||||
mov ebx,60*65536+75
|
||||
mov ecx,197*65536+13
|
||||
mov edx,3
|
||||
mcall
|
||||
|
||||
;mov eax,8 ; RIGHT
|
||||
mov ebx,148*65536+72
|
||||
mov ecx,197*65536+13
|
||||
mov edx,4
|
||||
mcall
|
||||
|
||||
;mov eax,8 ; SEND EXECUTE
|
||||
mov ebx,60*65536+160
|
||||
mov ecx,213*65536+13
|
||||
mov edx,5
|
||||
mcall
|
||||
|
||||
|
||||
cld
|
||||
mov eax,4
|
||||
mov ebx,25*65536+185 ; draw info text with function 4
|
||||
mov ecx,0x000000
|
||||
mov edx,text
|
||||
mov esi,40
|
||||
newline:
|
||||
mcall
|
||||
add ebx,16
|
||||
add edx,40
|
||||
cmp [edx],byte 'x'
|
||||
jnz newline
|
||||
|
||||
mov eax,12 ; function 12:tell os about windowdraw
|
||||
mov ebx,2 ; 2, end of draw
|
||||
mcall
|
||||
|
||||
ret
|
||||
|
||||
|
||||
; DATA AREA
|
||||
|
||||
|
||||
text:
|
||||
db ' 1) SEND CODE '
|
||||
db ' 2) LEFT RIGHT '
|
||||
db " 3) SEND 'EXECUTE' "
|
||||
db ' '
|
||||
db ' LOCAL : 192.168.1.26 '
|
||||
db ' REMOTE : 192.168.1.22 '
|
||||
db ' REMOTE CODE AT THE END OF THIS FILE '
|
||||
db 'x' ;<- END MARKER, DONT DELETE
|
||||
|
||||
|
||||
title db 'CLUSTER LOCAL',0
|
||||
|
||||
socketNum dd 0x0
|
||||
|
||||
host_ip db 192,168,1,22
|
||||
|
||||
picture_position dd 0x0
|
||||
|
||||
send_data db 'MenuetRemote00' ; 00 header ; -> remote port 0x3000
|
||||
db 1 ; 14 send
|
||||
dd 0x0 ; 15 position
|
||||
dd 0x0 ; 19 size
|
||||
; 23
|
||||
|
||||
execute db 'MenuetRemote00' ; 00 header ; -> remote port 0x3000
|
||||
db 2 ; 14 execute
|
||||
dd 0x0 ; 15 position
|
||||
; 19
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; REMOTE CODE ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
|
||||
remote_code:
|
||||
|
||||
|
||||
org 0x80000
|
||||
|
||||
remote_code_start:
|
||||
|
||||
|
||||
PIXWIDTH equ 129
|
||||
PIXHEIGHT equ 129
|
||||
ZOOMLIMIT equ 13
|
||||
DELTA equ 200
|
||||
THRESHOLD equ 7
|
||||
STARTSCALE equ 6
|
||||
CHAR_COLOR equ 0fh
|
||||
|
||||
STARTX dd -20
|
||||
STARTY dd 10
|
||||
scaleaddy dd 60
|
||||
scaleaddx dd 100
|
||||
|
||||
|
||||
|
||||
draw_fractal:
|
||||
|
||||
pusha
|
||||
|
||||
movzx ebp,word [STARTX]
|
||||
movzx edi,word [STARTY]
|
||||
mov cx, PIXHEIGHT ; height of screen in pixels
|
||||
|
||||
sub di,cx ; adjust our Y offset
|
||||
@@CalcRow:
|
||||
|
||||
push cx
|
||||
mov cx, PIXWIDTH -1 ; width of screen in pixels
|
||||
|
||||
sub bp,cx ;
|
||||
@@CalcPixel:
|
||||
push cx ; save the column counter on stack
|
||||
xor cx, cx ; clear out color loop counter
|
||||
xor bx, bx ; zero i coefficient
|
||||
xor dx, dx ; zero j coefficient
|
||||
@@CycleColors:
|
||||
push dx ; save j value for later
|
||||
mov ax, bx ; ax = i
|
||||
sub ax, dx ; ax = i - j
|
||||
add dx, bx ; dx = i + j
|
||||
stc ; one additional shift, please
|
||||
call Shifty ; ax = ((i+j)*(i-j)) shifted right
|
||||
pop dx ; retrieve our saved value for j
|
||||
add ax,bp ; account for base offset...
|
||||
cmp ah,THRESHOLD ; Q: is i > THRESHOLD * 256?
|
||||
xchg bx,ax ; now swap new i with old i
|
||||
jg @@draw ; Y: draw this pixel
|
||||
clc ; no additional shifts here, please
|
||||
call Shifty ; now dx:ax = old i * j
|
||||
xchg dx,ax ;
|
||||
add dx,di ; account for base offset...
|
||||
inc cl ; increment color
|
||||
jnz @@CycleColors ; keep going until we're done
|
||||
@@draw:
|
||||
xchg ax, cx ; mov color into al
|
||||
pop cx ; retrieve our column counter
|
||||
pop dx ; fetch row (column already in cx)
|
||||
push dx ; must leave a copy on the stack
|
||||
xor bx,bx ; write to video page zero
|
||||
|
||||
call store_pixel
|
||||
|
||||
inc bp
|
||||
loop @@CalcPixel
|
||||
inc di
|
||||
pop cx
|
||||
loop @@CalcRow
|
||||
|
||||
call return_data
|
||||
|
||||
popa
|
||||
|
||||
ret
|
||||
|
||||
|
||||
Shifty:
|
||||
|
||||
push cx
|
||||
db 0b1h
|
||||
scale db STARTSCALE
|
||||
adc cl,0
|
||||
imul dx
|
||||
|
||||
xchg ax,dx
|
||||
shl eax,16
|
||||
xchg ax,dx
|
||||
shr eax,cl
|
||||
|
||||
pop cx
|
||||
ret
|
||||
|
||||
|
||||
pixel_pos: dd data_area
|
||||
|
||||
store_pixel:
|
||||
|
||||
pusha
|
||||
|
||||
mov ebx,[pixel_pos]
|
||||
shl eax,3
|
||||
and eax,0xff
|
||||
mov [ebx],eax
|
||||
add dword [pixel_pos],dword 3
|
||||
|
||||
popa
|
||||
ret
|
||||
|
||||
|
||||
return_data:
|
||||
|
||||
mov ecx,128 * 128/16
|
||||
mov esi,data_area
|
||||
|
||||
sd:
|
||||
|
||||
pusha
|
||||
|
||||
mov eax,53 ; use the socket provided by host
|
||||
mov ebx,4
|
||||
mov ecx,[0]
|
||||
mov edx,3*16
|
||||
mcall
|
||||
|
||||
mov eax,5
|
||||
mov ebx,1
|
||||
mcall
|
||||
|
||||
popa
|
||||
|
||||
add esi,3*16
|
||||
|
||||
loop sd
|
||||
|
||||
ret
|
||||
|
||||
|
||||
data_area:
|
||||
|
||||
remote_code_end:
|
||||
|
||||
|
||||
I_END:
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
Reference in New Issue
Block a user