forked from KolibriOS/kolibrios
merged trunk
git-svn-id: svn://kolibrios.org@436 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
7ca193f613
commit
025b91fede
@ -1,3 +1,9 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
init_fpu:
|
||||
clts
|
||||
@ -52,36 +58,43 @@ fpu_save:
|
||||
mov edi, eax
|
||||
|
||||
mov ecx, [fpu_owner]
|
||||
mov eax, [CURRENT_TASK]
|
||||
cmp ecx, eax
|
||||
mov esi, [CURRENT_TASK]
|
||||
cmp ecx, esi
|
||||
jne .save
|
||||
.copy:
|
||||
shl eax, 8
|
||||
mov esi, [eax+SLOT_BASE+APPDATA.fpu_state]
|
||||
|
||||
call save_context
|
||||
jmp .exit
|
||||
.save:
|
||||
mov [fpu_owner], esi
|
||||
|
||||
shl ecx, 8
|
||||
mov eax, [ecx+SLOT_BASE+APPDATA.fpu_state]
|
||||
|
||||
call save_context
|
||||
|
||||
shl esi, 8
|
||||
mov esi, [esi+SLOT_BASE+APPDATA.fpu_state]
|
||||
mov ecx, 512/4
|
||||
cld
|
||||
rep movsd
|
||||
fninit
|
||||
|
||||
.exit:
|
||||
popfd
|
||||
pop edi
|
||||
pop esi
|
||||
pop ecx
|
||||
ret
|
||||
.save:
|
||||
mov [fpu_owner], eax
|
||||
|
||||
shl ecx, 8
|
||||
mov ecx, [ecx+SLOT_BASE+APPDATA.fpu_state]
|
||||
|
||||
align 4
|
||||
save_context:
|
||||
bt [cpu_caps], CAPS_SSE
|
||||
jnc .no_SSE
|
||||
|
||||
fxsave [ecx]
|
||||
jmp .copy
|
||||
fxsave [eax]
|
||||
ret
|
||||
.no_SSE:
|
||||
fnsave [ecx]
|
||||
jmp .copy
|
||||
fnsave [eax]
|
||||
ret
|
||||
|
||||
align 4
|
||||
fpu_restore:
|
||||
@ -99,7 +112,6 @@ fpu_restore:
|
||||
jne .copy
|
||||
|
||||
clts
|
||||
|
||||
bt [cpu_caps], CAPS_SSE
|
||||
jnc .no_SSE
|
||||
|
||||
|
@ -1,3 +1,10 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; IRQ0 HANDLER (TIMER INTERRUPT) ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -1,11 +1,16 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; MenuetOS process management, protected ring3 ;;
|
||||
;; ;;
|
||||
;; Distributed under GPL. See file COPYING for details. ;;
|
||||
;; Copyright 2003 Ville Turjanmaa ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;; ;;
|
||||
;; MenuetOS process management, protected ring3 ;;
|
||||
;; ;;
|
||||
;; Distributed under GPL. See file COPYING for details. ;;
|
||||
;; Copyright 2003 Ville Turjanmaa ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
align 4
|
||||
idtreg:
|
||||
@ -18,23 +23,18 @@ build_interrupt_table:
|
||||
mov esi, sys_int
|
||||
mov ecx, 0x40
|
||||
@@:
|
||||
mov eax, [esi]
|
||||
lodsd
|
||||
mov [edi], ax ; lower part of offset
|
||||
mov [edi+2], word os_code ; segment selector
|
||||
shr eax, 16
|
||||
mov [edi+4], word 10001110b shl 8 ; interrupt descriptor
|
||||
mov [edi+6], ax
|
||||
add esi, 4
|
||||
mov ax, word 10001110b shl 8 ; type: interrupt gate
|
||||
mov [edi+4], eax
|
||||
add edi, 8
|
||||
dec ecx
|
||||
jnz @b
|
||||
loop @b
|
||||
|
||||
;mov edi,8*0x40+idts+8
|
||||
mov [edi + 0], word (i40 and ((1 shl 16)-1))
|
||||
mov [edi + 2], word os_code
|
||||
mov [edi + 4], word 11101110b*256
|
||||
mov [edi + 6], word (i40 shr 16)
|
||||
|
||||
mov dword [edi], (i40 and 0xFFFF) or (os_code shl 16)
|
||||
mov dword [edi+4], (11101111b shl 8) or (i40 and 0xFFFF0000)
|
||||
; type: trap gate
|
||||
ret
|
||||
|
||||
iglobal
|
||||
|
@ -1,3 +1,10 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved. ;;
|
||||
;; Distributed under terms of the GNU General Public License ;;
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;; ;;
|
||||
;; SYSTEM CALL ENTRY ;;
|
||||
@ -6,6 +13,8 @@
|
||||
|
||||
align 16
|
||||
i40:
|
||||
; diamond, 27.03.2007: handler does not require disabled interrupts
|
||||
; so interrupts remain enabled when calling int 0x40
|
||||
pushad
|
||||
cld
|
||||
|
||||
@ -22,7 +31,7 @@ i40:
|
||||
mov edi, [esp+28]
|
||||
|
||||
; enable interupts - a task switch or an IRQ _CAN_ interrupt i40 handler
|
||||
sti
|
||||
; sti
|
||||
push eax
|
||||
and edi,0xff
|
||||
call dword [servetable+edi*4]
|
||||
@ -38,10 +47,10 @@ i40:
|
||||
;; ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
uglobal
|
||||
times 100 db ?
|
||||
sysenter_stack:
|
||||
endg
|
||||
;uglobal
|
||||
;times 100 db ?
|
||||
;sysenter_stack:
|
||||
;endg
|
||||
|
||||
align 32
|
||||
SYSENTER_VAR equ 0
|
||||
@ -54,19 +63,13 @@ sysenter_entry:
|
||||
; 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]
|
||||
|
||||
mov esp, [current_slot]
|
||||
mov esp, [esp + APPDATA.pl0_stack]
|
||||
add esp, RING0_STACK_SIZE ; configure ESP
|
||||
sti
|
||||
;------------------
|
||||
pushad
|
||||
cld
|
||||
|
||||
; mov ax, word app_data
|
||||
; mov ds, ax
|
||||
; mov es, ax
|
||||
|
||||
mov eax, ebx
|
||||
mov ebx, ecx
|
||||
mov ecx, edx
|
||||
@ -93,8 +96,13 @@ sysenter_entry:
|
||||
align 32
|
||||
syscall_entry:
|
||||
; cli syscall clear IF
|
||||
xchg ecx, [esp]
|
||||
mov [SYSENTER_VAR + 4], esp
|
||||
xchg esp, [ss:tss._esp0]
|
||||
push ecx
|
||||
lea ecx, [esp+4]
|
||||
xchg ecx, [ss:tss._esp0]
|
||||
sti
|
||||
push ecx
|
||||
mov ecx, [ecx]
|
||||
|
||||
; mov [ss:sysenter_stack - 4], eax
|
||||
; mov eax, [ss:CURRENT_TASK]
|
||||
@ -103,11 +111,6 @@ syscall_entry:
|
||||
; lea esp, [eax + RING0_STACK_SIZE] ; configure ESP
|
||||
; mov eax, [ss:sysenter_stack - 4] ; eax - original eax, from app
|
||||
|
||||
mov esp, [current_slot]
|
||||
mov esp, [esp + APPDATA.pl0_stack]
|
||||
add esp, RING0_STACK_SIZE ; configure ESP
|
||||
|
||||
sti
|
||||
;------------------
|
||||
pushad
|
||||
cld
|
||||
@ -131,9 +134,8 @@ syscall_entry:
|
||||
popad
|
||||
;------------------
|
||||
|
||||
cli
|
||||
mov esp, [SYSENTER_VAR + 4]
|
||||
xchg ecx, [esp]
|
||||
mov ecx, [ss:esp+4]
|
||||
pop esp
|
||||
sysret
|
||||
iglobal
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
@ -1,13 +1,54 @@
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
;;
|
||||
;; Kolibri OS - based on source code Menuet OS, but not 100% compatible.
|
||||
;; Copyright (C) KolibriOS team 2004-2007. All rights reserved.
|
||||
;; PROGRAMMING:
|
||||
;; Ivan Poddubny
|
||||
;; Marat Zakiyanov (Mario79)
|
||||
;; VaStaNi
|
||||
;; Trans
|
||||
;; Mihail Semenyako (mike.dld)
|
||||
;; Sergey Kuzmin (Wildwest)
|
||||
;; Andrey Halyavin (halyavin)
|
||||
;; Mihail Lisovin (Mihasik)
|
||||
;; Andrey Ignatiev (andrew_programmer)
|
||||
;; NoName
|
||||
;; Evgeny Grechnikov (Diamond)
|
||||
;; Iliya Mihailov (Ghost)
|
||||
;; Sergey Semyonov (Serge)
|
||||
;; Johnny_B
|
||||
;;
|
||||
;; See file COPYING or GNU.TXT for details with these additional details:
|
||||
;; - All code written in 32 bit x86 assembly language
|
||||
;; - No external code (eg. bios) at process execution time
|
||||
;; Data in this file was originally part of MenuetOS project which is
|
||||
;; distributed under the terms of GNU GPL. It is modified and redistributed as
|
||||
;; part of KolibriOS project under the terms of GNU GPL.
|
||||
;;
|
||||
;; Copyright (C) MenuetOS 2000-2004 Ville Mikael Turjanmaa
|
||||
;; PROGRAMMING:
|
||||
;;
|
||||
;; Compile with last version FASM
|
||||
;; Ville Mikael Turjanmaa, villemt@itu.jyu.fi
|
||||
;; - main os coding/design
|
||||
;; Jan-Michael Brummer, BUZZ2@gmx.de
|
||||
;; Felix Kaiser, info@felix-kaiser.de
|
||||
;; Paolo Minazzi, paolo.minazzi@inwind.it
|
||||
;; quickcode@mail.ru
|
||||
;; Alexey, kgaz@crosswinds.net
|
||||
;; Juan M. Caravaca, bitrider@wanadoo.es
|
||||
;; kristol@nic.fi
|
||||
;; Mike Hibbett, mikeh@oceanfree.net
|
||||
;; Lasse Kuusijarvi, kuusijar@lut.fi
|
||||
;; Jarek Pelczar, jarekp3@wp.pl
|
||||
;;
|
||||
;; KolibriOS is distributed in the hope that it will be useful, but WITHOUT ANY
|
||||
;; WARRANTY. No author or distributor accepts responsibility to anyone for the
|
||||
;; consequences of using it or for whether it serves any particular purpose or
|
||||
;; works at all, unless he says so in writing. Refer to the GNU General Public
|
||||
;; License (the "GPL") for full details.
|
||||
;
|
||||
;; Everyone is granted permission to copy, modify and redistribute KolibriOS,
|
||||
;; but only under the conditions described in the GPL. A copy of this license
|
||||
;; is supposed to have been given to you along with KolibriOS so you can know
|
||||
;; your rights and responsibilities. It should be in a file named COPYING.
|
||||
;; Among other things, the copyright notice and this notice must be preserved
|
||||
;; on all copies.
|
||||
;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
@ -22,12 +63,12 @@ max_processes equ 255
|
||||
tss_step equ (128+8192) ; tss & i/o - 65535 ports, * 256=557056*4
|
||||
|
||||
|
||||
os_stack equ os_data_l-gdts ; GDTs
|
||||
os_code equ os_code_l-gdts
|
||||
graph_data equ 3+graph_data_l-gdts
|
||||
tss0 equ tss0_l-gdts
|
||||
app_code equ 3+app_code_l-gdts
|
||||
app_data equ 3+app_data_l-gdts
|
||||
os_stack equ (os_data_l-gdts) ; GDTs
|
||||
os_code equ (os_code_l-gdts)
|
||||
graph_data equ (3+graph_data_l-gdts)
|
||||
tss0 equ (tss0_l-gdts)
|
||||
app_code equ (3+app_code_l-gdts)
|
||||
app_data equ (3+app_data_l-gdts)
|
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
@ -338,7 +379,8 @@ high_code:
|
||||
mov eax, os_code
|
||||
wrmsr
|
||||
mov ecx, MSR_SYSENTER_ESP
|
||||
mov eax, sysenter_stack ; Check it
|
||||
; mov eax, sysenter_stack ; Check it
|
||||
xor eax, eax
|
||||
wrmsr
|
||||
mov ecx, MSR_SYSENTER_EIP
|
||||
mov eax, sysenter_entry
|
||||
|
Loading…
Reference in New Issue
Block a user