deleting cross registers in system calls, part 2

git-svn-id: svn://kolibrios.org@684 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
Evgeny Grechnikov (Diamond) 2007-12-17 11:04:07 +00:00
parent 296ab7feb5
commit e02112ea70
9 changed files with 417 additions and 496 deletions

View File

@ -22,11 +22,11 @@ endg
sysfn_saveramdisk: ; 18.6 = SAVE FLOPPY IMAGE (HD version only) sysfn_saveramdisk: ; 18.6 = SAVE FLOPPY IMAGE (HD version only)
call restorefatchain call restorefatchain
mov eax, saverd_fileinfo mov eax, saverd_fileinfo
mov [saverd_fileinfo.name], ebx mov [saverd_fileinfo.name], ecx
pushad pushad
push eax push eax
call file_system_lfn call file_system_lfn
pop eax pop eax
popad popad
mov [esp+36], eax mov [esp+32], eax
ret ret

View File

@ -70,10 +70,10 @@ debug_terminate:
; in: ebx=pid ; in: ebx=pid
call get_debuggee_slot call get_debuggee_slot
jc debug_detach.ret jc debug_detach.ret
mov ebx, eax mov ecx, eax
shr ebx, 5 shr ecx, 5
push 2 push 2
pop eax pop ebx
jmp sys_system jmp sys_system
debug_suspend: debug_suspend:

View File

@ -760,8 +760,8 @@ term9:
jnz @f jnz @f
and dword [ecx], 0 and dword [ecx], 0
pushad pushad
xchg eax, ebx xchg eax, ecx
mov eax, 2 mov ebx, 2
call sys_system call sys_system
popad popad
@@: @@:

View File

@ -103,25 +103,25 @@ iglobal
align 4 align 4
servetable: servetable:
dd sys_drawwindow ; 0-DrawWindow
dd syscall_setpixel ; 1-SetPixel
dd 0
dd 0
dd syscall_writetext ; 4-WriteText
dd delay_hs ; 5-DelayHs
dd syscall_openramdiskfile ; 6-OpenRamdiskFile
dd 0
dd sys_button ; 8-DefineButton
dd sys_cpuusage ; 9-GetProcessInfo
dd 0 dd 0
dd 0 dd 0
dd 0 dd 0
dd 0 dd 0
dd 0 dd 0
dd sys_background ; 15-bgr
dd 0 dd 0
dd 0 dd 0
dd sys_system ; 18-System Services dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0
dd 0 dd 0
dd sys_midi ; 20-ResetMidi and OutputMidi dd sys_midi ; 20-ResetMidi and OutputMidi
dd sys_setup ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,. dd sys_setup ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,.
@ -183,25 +183,25 @@ iglobal
align 4 align 4
servetable2: servetable2:
dd cross_order ; 0-DrawWindow dd sys_drawwindow ; 0-DrawWindow
dd cross_order ; 1-SetPixel dd syscall_setpixel ; 1-SetPixel
dd sys_getkey ; 2-GetKey dd sys_getkey ; 2-GetKey
dd sys_clock ; 3-GetTime dd sys_clock ; 3-GetTime
dd cross_order ; 4-WriteText dd syscall_writetext ; 4-WriteText
dd cross_order ; 5-DelayHs dd delay_hs ; 5-DelayHs
dd cross_order ; 6-OpenRamdiskFile dd syscall_openramdiskfile ; 6-OpenRamdiskFile
dd syscall_putimage ; 7-PutImage dd syscall_putimage ; 7-PutImage
dd cross_order ; 8-DefineButton dd sys_button ; 8-DefineButton
dd cross_order ; 9-GetProcessInfo dd sys_cpuusage ; 9-GetProcessInfo
dd sys_waitforevent ; 10-WaitForEvent dd sys_waitforevent ; 10-WaitForEvent
dd sys_getevent ; 11-CheckForEvent dd sys_getevent ; 11-CheckForEvent
dd sys_redrawstat ; 12-BeginDraw and EndDraw dd sys_redrawstat ; 12-BeginDraw and EndDraw
dd syscall_drawrect ; 13-DrawRect dd syscall_drawrect ; 13-DrawRect
dd syscall_getscreensize ; 14-GetScreenSize dd syscall_getscreensize ; 14-GetScreenSize
dd cross_order ; 15-bgr dd sys_background ; 15-bgr
dd sys_cachetodiskette ; 16-FlushFloppyCache dd sys_cachetodiskette ; 16-FlushFloppyCache
dd sys_getbutton ; 17-GetButton dd sys_getbutton ; 17-GetButton
dd cross_order ; 18-System Services dd sys_system ; 18-System Services
dd paleholder ; 19-reserved dd paleholder ; 19-reserved
dd cross_order ; 20-ResetMidi and OutputMidi dd cross_order ; 20-ResetMidi and OutputMidi
dd cross_order ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,. dd cross_order ; 21-SetMidiBase,SetKeymap,SetShiftKeymap,.

View File

@ -76,34 +76,34 @@ drawbuttonframes:
push ecx push ecx
push edx push edx
shr eax,16
shr ebx,16 shr ebx,16
mov edx,[TASK_BASE] shr ecx,16
mov eax,[TASK_BASE]
add eax,[edx-twdw + WDATA.box.left] add ebx,[eax-twdw + WDATA.box.left]
add ebx,[edx-twdw + WDATA.box.top] add ecx,[eax-twdw + WDATA.box.top]
mov cx,ax mov eax, ebx
mov dx,bx shl eax, 16
shl eax,16 mov ax, bx
shl ebx,16 add ax, word [esp+8]
mov ax,cx mov ebx, ecx
mov bx,dx shl ebx, 16
add ax,word [esp+12] mov bx, cx
mov esi,ebx push ebx
mov edi,0 xor edi, edi
mov ecx,[esp+0] mov ecx, esi
call incecx call incecx
call [draw_line] call [draw_line]
movzx edx,word [esp+8] movzx edx,word [esp+4+4]
add ebx,edx add ebx,edx
shl edx,16 shl edx,16
add ebx,edx add ebx,edx
mov ecx,[esp+0] mov ecx,esi
call dececx call dececx
call [draw_line] call [draw_line]
mov ebx,esi pop ebx
push edx push edx
mov edx,eax mov edx,eax
shr edx,16 shr edx,16
@ -111,22 +111,19 @@ drawbuttonframes:
mov edx,ebx mov edx,ebx
shr edx,16 shr edx,16
mov bx,dx mov bx,dx
mov dx,[esp+8+4] mov dx,[esp+4+4]
add bx,dx add bx,dx
pop edx pop edx
mov edi,0 mov ecx,esi
mov ecx,[esp+0]
call incecx call incecx
call [draw_line] call [draw_line]
mov esi,edx mov dx,[esp+8]
mov dx,[esp+12]
add ax,dx add ax,dx
shl edx,16 shl edx,16
add eax,edx add eax,edx
add ebx,1*65536 add ebx,1*65536
mov edx,esi mov ecx,esi
mov ecx,[esp+0]
call dececx call dececx
call [draw_line] call [draw_line]
@ -173,162 +170,129 @@ button_dececx:
sys_button: sys_button:
push edi mov eax, [current_slot]
mov edi,[current_slot] rol ebx, 16
rol eax,16 add bx, word [eax+APPDATA.wnd_clientbox.left]
add ax,word[edi+APPDATA.wnd_clientbox.left] rol ebx, 16
rol eax,16 rol ecx, 16
rol ebx,16 add cx, word [eax+APPDATA.wnd_clientbox.top]
add bx,word[edi+APPDATA.wnd_clientbox.top] rol ecx, 16
rol ebx,16
pop edi
.forced: .forced:
test ecx,0x80000000 test edx, 0x80000000
jnz remove_button jnz remove_button
push esi or bx, bx
push edi jle noaddbutt
push eax ; <x,xs> or cx, cx
push ebx ; <y,ys> jle noaddbutt
push ecx ; <id>
push edx
or ax,ax test edx, 0x40000000
jle noaddbutt jnz button_no_draw
or bx,bx
jle noaddbutt
test ecx,0x40000000 pushad ; button body
jnz button_no_draw movzx edi, cx
shr ebx, 16
pushad ; button body shr ecx, 16
push ebx mov eax, [TASK_BASE]
shr eax,16 add ebx, [eax-twdw + WDATA.box.left]
shr ebx,16 add ecx, [eax-twdw + WDATA.box.top]
mov edx,[TASK_BASE] mov eax, ebx
mov esi,[edx-twdw + WDATA.box.left] shl eax, 16
mov edi,[edx-twdw + WDATA.box.top] mov ax, bx
add eax,esi add ax, word [esp+16]
add ebx,edi mov ebx, ecx
mov cx,ax shl ebx, 16
mov dx,bx mov bx, cx
shl eax,16 mov ecx, esi
shl ebx,16 cmp [buttontype], 0
mov ax,cx je @f
mov bx,dx call incecx2
movzx ecx,word [4+32+esp+12] @@:
add eax,ecx mov edx, edi
mov ecx,[4+32+esp+0]
cmp [buttontype],dword 0
je @f
call incecx2
@@:
movzx edi,word [esp]
pop edx
and edx, 0xFFFF
.newline: .newline:
call button_dececx call button_dececx
push edi push edi
xor edi, edi xor edi, edi
call [draw_line] call [draw_line]
pop edi pop edi
add ebx,1*65536+1 ; [ y start | y end ] add ebx, 1*65536+1 ; [ y start | y end ]
dec edx dec edx
jnz .newline jnz .newline
popad popad
call drawbuttonframes call drawbuttonframes
button_no_draw: button_no_draw:
and ecx,0xffff push edi
mov edi, [BTN_ADDR]
movzx eax, word [edi]
cmp eax, max_buttons
jge noaddbutt
inc eax
mov [edi], ax
mov edi,[BTN_ADDR] shl eax, 4
movzx eax,word [edi] add edi, eax
cmp eax,max_buttons
jge noaddbutt
inc eax
mov [edi],ax
shl eax,4 mov ax, [CURRENT_TASK]
add eax,edi stosw
mov ax, dx
stosw ; button id number: bits 0-15
mov eax, ebx
rol eax, 16
stosd ; x start | x size
mov eax, ecx
rol eax, 16
stosd ; y start | y size
mov eax, edx
shr eax, 16
stosw ; button id number: bits 16-31
mov bx,[CURRENT_TASK] pop edi
mov [eax],bx
add eax,2 ; save button id number
mov ebx,[esp+4]
mov [eax],bx ; bits 0-15
shr ebx,16
mov [eax-2+0xc],bx; bits 16-31
add eax,2 ; x start
mov bx,[esp+12+2]
mov [eax],bx
add eax,2 ; x size
mov bx,[esp+12+0]
mov [eax],bx
add eax,2 ; y start
mov bx,[esp+8+2]
mov [eax],bx
add eax,2 ; y size
mov bx,[esp+8+0]
mov [eax],bx
noaddbutt: noaddbutt:
pop edx ret
pop ecx
pop ebx
pop eax
pop edi
pop esi
ret
remove_button: remove_button:
and ecx,0x7fffffff and edx, 0x7fffffff
rnewba2: rnewba2:
mov edi,[BTN_ADDR] mov edi, [BTN_ADDR]
mov eax,edi mov eax, edi
movzx ebx,word [edi] movzx ebx, word [edi]
inc bx inc ebx
rnewba: rnewba:
dec bx dec ebx
jz rnmba jz rnmba
add eax,0x10 add eax, 0x10
mov dx,[CURRENT_TASK] mov cx, [CURRENT_TASK]
cmp dx,[eax] cmp cx, [eax]
jnz rnewba jnz rnewba
cmp dx, [eax+2]
jnz rnewba
cmp cx,[eax+2] lea ecx, [ebx+1]
jnz rnewba shl ecx, 4
mov ebx, eax
pushad add eax, 0x10
mov ecx,ebx call memmove
inc ecx dec dword [edi]
shl ecx,4 jmp rnewba2
mov ebx,eax
add eax,0x10
call memmove
dec dword [edi]
popad
jmp rnewba2
rnmba: rnmba:
ret ret
find_pressed_button_frames: find_pressed_button_frames:
@ -618,11 +582,11 @@ checkbuttons:
mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse mov [DONT_DRAW_MOUSE],byte 0 ; draw mouse
;..................................... start 5/5 : modified by vhanla ............................. ;..................................... start 5/5 : modified by vhanla .............................
; check coordinates ; check coordinates
jmp @f iglobal
mx dw 0x0 ; keeps the x mouse's position when it was clicked mx dw 0x0 ; keeps the x mouse's position when it was clicked
my dw 0x0 ; keeps the y mouse's position when it was clicked my dw 0x0 ; keeps the y mouse's position when it was clicked
bPressedMouseXY_B db 0x0 bPressedMouseXY_B db 0x0
@@: endg
pusha pusha
; mouse x >= button x ? ; mouse x >= button x ?

View File

@ -10,41 +10,39 @@ $Revision$
align 4 align 4
dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org]) dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
; eax x & y ; ebx x & y
; ebx style ( 0xX0000000 ) & color ( 0x00RRGGBB ) ; ecx style ( 0xX0000000 ) & color ( 0x00RRGGBB )
; X = ABnnb: ; X = ABnnb:
; nn = font ; nn = font
; A = 0 <=> output edx characters; otherwise output ASCIIZ string ; A = 0 <=> output esi characters; otherwise output ASCIIZ string
; B = 1 <=> fill background with color esi ; B = 1 <=> fill background with color eax
; ecx start of text ; edx start of text
; edi 1 force ; edi 1 force
pushad pushad
call [disable_mouse] call [disable_mouse]
mov ebp, ecx ; ebp=pointer to text movsx eax, bx ; eax=y
mov ecx, ebx ; ecx=color sar ebx, 16 ; ebx=x
movsx ebx, ax ; ebx=y xchg eax, ebx ; eax=x, ebx=y
sar eax, 16 ; eax=x cmp esi, 255
cmp edx, 255
jb .loop jb .loop
mov edx, 255 mov esi, 255
.loop: .loop:
test ecx, ecx test ecx, ecx
js .test_asciiz js .test_asciiz
dec edx dec esi
js .end js .end
jmp @f jmp @f
.test_asciiz: .test_asciiz:
cmp byte [ebp], 0 cmp byte [edx], 0
jz .end jz .end
@@: @@:
push edx inc edx
movzx edx, byte [ebp] pushad
inc ebp movzx edx, byte [edx-1]
test ecx, 0x10000000 test ecx, 0x10000000
jnz .font2 jnz .font2
pushad
mov esi, 9 mov esi, 9
lea ebp, [FONT_I+8*edx+edx] lea ebp, [FONT_I+8*edx+edx]
.symloop1: .symloop1:
@ -60,7 +58,7 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
test ecx, 0x40000000 test ecx, 0x40000000
jz .pixloop1cont jz .pixloop1cont
push ecx push ecx
mov ecx, [esp+4+4] mov ecx, [esp+4+20h+1Ch]
call [putpixel] call [putpixel]
pop ecx pop ecx
.pixloop1cont: .pixloop1cont:
@ -74,10 +72,8 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
jnz .symloop1 jnz .symloop1
popad popad
add eax, 6 add eax, 6
pop edx
jmp .loop jmp .loop
.font2: .font2:
pushad
add edx, edx add edx, edx
lea ebp, [FONT_II+4*edx+edx+1] lea ebp, [FONT_II+4*edx+edx+1]
push 9 push 9
@ -94,7 +90,7 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
test ecx, 0x40000000 test ecx, 0x40000000
jz .pixloop2cont jz .pixloop2cont
push ecx push ecx
mov ecx, [esp+12+4] mov ecx, [esp+12+20h+1Ch]
call [putpixel] call [putpixel]
pop ecx pop ecx
.pixloop2cont: .pixloop2cont:
@ -110,7 +106,6 @@ dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
pop eax pop eax
add dword [esp+28], esi add dword [esp+28], esi
popad popad
pop edx
jmp .loop jmp .loop
.end: .end:
popad popad

View File

@ -1333,7 +1333,7 @@ checkwindows:
mov [WIN_TEMP_XY], esi mov [WIN_TEMP_XY], esi
pushad ; wait for putimages to finish pushad ; wait for putimages to finish
; mov eax,5 ; mov ebx,5
; call delay_hs ; call delay_hs
mov eax,[edi + WDATA.box.left] mov eax,[edi + WDATA.box.left]
mov [npx],eax mov [npx],eax

File diff suppressed because it is too large Load Diff

View File

@ -32,10 +32,10 @@ $Revision$
; push esi ; push esi
; mov esi,.__xyz1 ; mov esi,.__xyz1
; call sys_msg_board_str ; call sys_msg_board_str
; push eax ; push ebx
; mov eax,1 ; mov ebx,1
; call delay_hs ; call delay_hs
; pop eax ; pop ebx
; jmp .__xyz2 ; jmp .__xyz2
;.__xyz1: ;.__xyz1:
; db X ; db X