11,7 → 11,7 |
;; |
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
|
$Revision:$ |
; $Revision$ |
|
include "proc32.inc" |
include "kglobals.inc" |
203,7 → 203,7 |
mov cr3, eax |
|
mov eax,cr0 |
or eax,CR0_PG |
or eax,CR0_PG+CR0_WP |
mov cr0,eax |
|
lgdt [gdts] |
372,12 → 372,37 |
.noSYSCALL: |
; ----------------------------------------- |
|
; LOAD IDT |
|
call build_interrupt_table |
lidt [idtreg] |
|
call init_kernel_heap |
stdcall kernel_alloc, 0x2000 |
stdcall kernel_alloc, RING0_STACK_SIZE+512 |
mov [os_stack_seg], eax |
|
lea esp, [eax+RING0_STACK_SIZE] |
|
mov [tss._ss0], os_stack |
mov [tss._esp0], esp |
mov [tss._esp], esp |
mov [tss._cs],os_code |
mov [tss._ss],os_stack |
mov [tss._ds],app_data |
mov [tss._es],app_data |
mov [tss._fs],app_data |
mov [tss._gs],app_data |
mov [tss._io],128 |
;Add IO access table - bit array of permitted ports |
mov edi, tss._io_map_0 |
xor eax, eax |
not eax |
mov ecx, 8192/4 |
rep stosd ; access to 4096*8=65536 ports |
|
mov ax,tss0 |
ltr ax |
|
mov [LFBSize], 0x800000 |
call init_mtrr |
|
385,7 → 410,10 |
call init_fpu |
call init_malloc |
|
stdcall alloc_kernel_space, 0x4F000 |
stdcall alloc_kernel_space, 0x51000 |
mov [default_io_map], eax |
|
add eax, 0x2000 |
mov [ipc_tmp], eax |
mov ebx, 0x1000 |
|
497,9 → 525,6 |
|
call build_scheduler ; sys32.inc |
|
; LOAD IDT |
lidt [idtreg] |
|
mov esi,boot_devices |
call boot_log |
call detect_devices |
565,6 → 590,10 |
mov dword [SLOT_BASE+256+APPDATA.pl0_stack], edi |
add edi, 0x2000-512 |
mov dword [SLOT_BASE+256+APPDATA.fpu_state], edi |
mov dword [SLOT_BASE+256+APPDATA.io_map],\ |
(tss._io_map_0-OS_BASE+PG_MAP) |
mov dword [SLOT_BASE+256+APPDATA.io_map+4],\ |
(tss._io_map_1-OS_BASE+PG_MAP) |
|
mov esi, fpu_data |
mov ecx, 512/4 |
587,31 → 616,6 |
mov [TASK_DATA+TASKDATA.pid], 1 ; process id number |
mov [TASK_DATA+TASKDATA.mem_start], 0 ; process base address |
|
mov edi,tss_data+tss_step |
mov ecx, (tss_step)/4 |
xor eax, eax |
cld |
rep stosd |
|
mov edi,tss_data |
mov [edi+TSS._ss0], os_stack |
mov eax,cr3 |
mov [edi+TSS._cr3],eax |
mov [edi+TSS._eip],osloop |
mov [edi+TSS._eflags],dword 0x1202 ; sti and resume |
mov eax, [os_stack_seg] |
add eax, 0x2000-512 |
mov [edi+TSS._esp], eax |
mov [edi+TSS._cs],os_code |
mov [edi+TSS._ss],os_stack ;os_stack |
mov [edi+TSS._ds],app_data ;os_data |
mov [edi+TSS._es],app_data ;os_data |
mov [edi+TSS._fs],app_data ;os_data |
mov [edi+TSS._gs],app_data ;os_data |
|
mov ax,tss0 |
ltr ax |
|
call init_cursors |
mov eax, [def_cursor] |
mov [SLOT_BASE+APPDATA.cursor],eax |
667,6 → 671,18 |
movsd |
call load_skin |
|
;protect io permission map |
|
mov esi, [default_io_map] |
stdcall map_page,esi,(tss._io_map_0-OS_BASE), PG_MAP |
add esi, 0x1000 |
stdcall map_page,esi,(tss._io_map_1-OS_BASE), PG_MAP |
|
stdcall map_page,tss._io_map_0,\ |
(tss._io_map_0-OS_BASE), PG_MAP |
stdcall map_page,tss._io_map_1,\ |
(tss._io_map_1-OS_BASE), PG_MAP |
|
; LOAD FIRST APPLICATION |
cli |
cmp byte [BOOT_VAR+0x9030],1 |
3727,25 → 3743,23 |
|
pushad |
|
mov edi,[CURRENT_TASK] |
imul edi,tss_step |
add edi,tss_data+128 |
; add edi,128 |
mov edi, tss._io_map_0 |
|
mov ecx,eax |
and ecx,7 ; offset in byte |
; mov ecx,eax |
; and ecx,7 ; offset in byte |
|
shr eax,3 ; number of byte |
add edi,eax |
; shr eax,3 ; number of byte |
; add edi,eax |
|
mov ebx,1 |
shl ebx,cl |
; mov ebx,1 |
; shl ebx,cl |
|
cmp ebp,0 ; enable access - ebp = 0 |
jne siar1 |
|
not ebx |
and [edi],byte bl |
; not ebx |
; and [edi],byte bl |
btr [edi], eax |
|
popad |
|
3753,7 → 3767,8 |
|
siar1: |
|
or [edi],byte bl ; disable access - ebp = 1 |
bts [edi], eax |
; or [edi],byte bl ; disable access - ebp = 1 |
|
popad |
|
Property changes: |
Added: svn:keywords |
+Rev |
\ No newline at end of property |