Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 476 → Rev 477

/kernel/trunk/core/syscall.inc
48,25 → 48,13
;; ;;
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 
;uglobal
;times 100 db ?
;sysenter_stack:
;endg
 
align 32
SYSENTER_VAR equ 0
sysenter_entry:
; Íàñòðàèâàåì ñòåê
; cli sysenter clear IF
; push eax
; mov eax, [ss:CURRENT_TASK]
; shl eax, 8
; mov eax, [ss:SLOT_BASE + eax + APPDATA.pl0_stack]
; lea esp, [eax + RING0_STACK_SIZE] ; configure ESP
; mov eax, [ss:sysenter_stack - 4] ; eax - original eax, from app
mov esp, [ss:tss._esp0]
 
sti
push ebp ; save app esp + 4
mov ebp, [ebp] ; ebp - original ebp
;------------------
pushad
cld
85,8 → 73,13
 
popad
;------------------
mov edx, [SYSENTER_VAR] ; eip
mov ecx, [SYSENTER_VAR + 4] ; esp
xchg ecx, [ss:esp] ; â âåðøèí ñòåêà - app ecx, ecx - app esp + 4
sub ecx, 4
xchg edx, [ecx] ; edx - return point, & save original edx
push edx
mov edx, [ss:esp + 4]
mov [ecx + 4], edx ; save original ecx
pop edx
sysexit
 
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
/kernel/trunk/kernel.asm
3298,12 → 3298,24
wrmsr_instr:
;now counter in ecx
;(edx:eax) esi:edi => edx:esi
; Fast Call MSR can't be destroy
; Íî MSR_AMD_EFER ìîæíî èçìåíÿòü, ò.ê. â ýòîì ðåãèñòðå ëèø
; âêëþ÷àþòñÿ/âûêëþ÷àþòñÿ ðàñøèðåííûå âîçìîæíîñòè
cmp ecx, MSR_SYSENTER_CS
je @f
cmp ecx, MSR_SYSENTER_ESP
je @f
cmp ecx, MSR_SYSENTER_EIP
je @f
cmp ecx, MSR_AMD_STAR
je @f
 
mov eax,esi
wrmsr
mov [esp+36],eax
mov [esp+24],edx ;ret in ebx?
@@:
ret
 
 
cache_disable:
mov eax,cr0
or eax,01100000000000000000000000000000b
/programs/develop/fast_call_test/MACROS.INC
129,7 → 129,11
end if
}
 
macro mcall a,b,c,d,e,f { ; mike.dld
__CPU_type equ p5
SYSENTER_VAR equ 0
 
macro mcall a,b,c,d,e,f { ; mike.dld, updated by Ghost for Fast System Calls
local ..ret_point
__mov eax,a
__mov ebx,b
__mov ecx,c
136,11 → 140,33
__mov edx,d
__mov esi,e
__mov edi,f
 
if __CPU_type eq p5
int 0x40
else
if __CPU_type eq p6
push ebp
mov ebp, esp
push ..ret_point ; it may be 2 or 5 byte
sysenter
..ret_point:
pop edx
pop ecx
 
else
if __CPU_type eq k6
push ecx
syscall
pop ecx
else
display 'ERROR : unknown CPU type'
int 0x40
end if
end if
end if
}
 
 
 
; language for programs
lang fix ru ; ru en fr ge fi
 
/programs/develop/fast_call_test/test.ASM
4,7 → 4,6
; Compile with FASM for Kolibri
;
;
SYSENTER_VAR equ 0
use32
org 0x0
db 'MENUET01'
20,6 → 19,7
 
START: print 'Please wait'
; ÷åðåç áûñòðûé âûçîâ (SYSENTER)
__CPU_type equ p6
test1: mov eax, 1
cpuid
test edx, 0x800
34,12 → 34,10
mov [old_tsc + 4], edx
mov ebx, 0x100000
mov dword[SYSENTER_VAR], .ret_p
mov [SYSENTER_VAR + 4], esp
align 32
.nxt: mov eax, 19 ; ôóíêöèÿ ïóñòûøêà
sysenter ; ïîðòÿòñÿ ecx, edx
.ret_p: dec ebx
.nxt: mcall 19 ; ôóíêöèÿ ïóñòûøêà
; ïîðòÿòñÿ ecx, edx
dec ebx
jnz .nxt
 
xor eax, eax
56,6 → 54,7
;----------------------------------------------
; ÷åðåç áûñòðûé âûçîâ (SYSCALL)
__CPU_type equ k6
test2: xor eax, eax
cpuid
cmp ecx, "cAMD"
75,12 → 74,9
mov ebx, 0x100000
align 32
.nxt: mov eax, 19
push ecx
syscall
pop ecx
.nxt: mcall 19 ; ôóíêöèÿ ïóñòûøêà
.ret_p: dec ebx
dec ebx
jnz .nxt
 
xor eax, eax
96,6 → 92,7
.end: print ' <- Fast call (SYSCALL)'
;----------------------------------------------
; ÷åðåç øëþç ïðåðûâàíèÿ
__CPU_type equ p5
xor eax, eax
cpuid
rdtsc
104,8 → 101,7
test3: mov ebx, 0x100000
align 32
.nxt: mov eax, 19 ; ôóíêöèÿ ïóñòûøêà
int 0x40
.nxt: mcall 19 ; ôóíêöèÿ ïóñòûøêà
dec ebx
jnz .nxt
121,42 → 117,7
debug_print_hex eax
print ' <- Interrupt'
 
call show_alive
mov eax, -1
int 0x40
mcall -1
;---------------------------------------------
show_alive:
; ÷åðåç áûñòðûé âûçîâ, íàñòðàèâàåì ðåãèñòðû äëÿ âîçâðàòà
mov eax, 63
mov ebx, 1
mov esi, msg_Ok
.nxt: mov cl, [esi]
test cl, cl
jz .end
 
mov dword[SYSENTER_VAR], .ret_p
mov [SYSENTER_VAR + 4], esp
sysenter ; ïîðòÿòñÿ ecx, edx
 
.ret_p: inc esi
jmp .nxt
.end: ret
; ÷åðåç øëþç ïðåðûâàíèÿ
; mov eax, 63
; mov ebx, 1
; mov esi, msg_Ok
; @@: mov cl, [esi]
; test cl, cl
; jz @f
 
; int 0x40
 
; inc esi
; jmp @b
; @@: ret
 
 
old_tsc: dd 0, 0
 
msg_Ok db 'Alive!', 10, 13, 0
I_END:
/programs/system/pcidev/trunk/build_en.bat
File deleted
\ No newline at end of file
/programs/system/pcidev/trunk/build_ge.bat
File deleted
\ No newline at end of file
/programs/system/pcidev/trunk/build.bat
0,0 → 1,2
@fasm pcidev.asm pcidev
@pause