/kernel/trunk/proc32.inc |
---|
File deleted |
/kernel/trunk/drivers/proc32.inc |
---|
File deleted |
/kernel/trunk/drivers/main.inc |
---|
File deleted |
/kernel/trunk/drivers/unisound.asm |
---|
File deleted |
/kernel/trunk/drivers/mixer.asm |
---|
File deleted |
/kernel/trunk/drivers/infinity.asm |
---|
File deleted |
/kernel/trunk/drivers/sis.asm |
---|
File deleted |
/kernel/trunk/drivers/codec.inc |
---|
File deleted |
/kernel/trunk/core/memory.inc |
---|
4,7 → 4,7 |
align 4 |
proc mem_test |
mov eax, cr0 |
or eax, (CR0_CD+CR0_NW);disable caching |
or eax, 0x60000000 ;disable caching |
mov cr0, eax |
wbinvd ;invalidate cache |
17,7 → 17,7 |
xchg ebx, dword [edi] |
je @b |
and eax, not (CR0_CD+CR0_NW) |
and eax, 0x21 |
mov cr0, eax |
mov eax, edi |
ret |
40,10 → 40,7 |
jnc @F |
or eax, PG_GLOBAL |
or ebx, CR4_PGE |
@@: |
mov cr4, ebx |
mov dword [sys_pgdir], eax |
add eax, 0x00400000 |
mov dword [sys_pgdir+4], eax |
55,6 → 52,8 |
mov dword [sys_pgdir+0x600], sys_master_tab+PG_SW |
mov dword [sys_master_tab+0x600], sys_master_tab+PG_SW |
mov cr4, ebx |
mov ecx, [pg_data.kernel_tables] |
sub ecx, 4 |
mov eax, tmp_page_tab+PG_SW |
1103,15 → 1102,6 |
stdcall srv_handlerEx, ebx |
mov [esp+36], eax |
ret |
@@: |
cmp eax, 18 |
ja @f |
mov ecx, [CURRENT_TASK] |
shl ecx, 8 |
mov eax, [ecx+PROC_BASE+APPDATA.sse_handler] |
mov [ecx+PROC_BASE+APPDATA.sse_handler], ebx |
mov [esp+36], eax |
ret |
@@: |
.fail: |
/kernel/trunk/core/except.inc |
---|
5,13 → 5,13 |
reg_eflags equ ebp+12 |
reg_esp equ ebp+16 |
reg_ss equ ebp+20 |
;fpu_ctrl equ ebp-28 |
fpu_ctrl equ ebp-28 |
align 4 |
except_16: |
push ebp |
mov ebp, esp |
; sub esp, 28 |
sub esp, 28 |
push eax |
push ebx |
41,54 → 41,12 |
iretd |
.default: |
pop edx |
pop ecx |
pop ebx |
pop eax |
leave |
save_ring3_context ;debugger support |
fnstenv [fpu_ctrl] |
fnclex |
or word [fpu_ctrl], 0111111b |
fldenv [fpu_ctrl] |
mov bl, 16 |
jmp exc_c |
; fnstenv [fpu_ctrl] |
; fnclex |
; or word [fpu_ctrl], 0111111b |
; fldenv [fpu_ctrl] |
; pop edx |
; pop ecx |
; pop ebx |
; pop eax |
; leave |
; iretd |
align 16 |
except_19: |
push ebp |
mov ebp, esp |
push eax |
push ebx |
push ecx |
push edx |
mov ebx, [ss:CURRENT_TASK] |
shl ebx, 8 |
mov eax, [ss:ebx+PROC_BASE+APPDATA.sse_handler] |
test eax, eax |
jz .default |
mov ecx, [reg_eip] |
mov edx, [reg_esp] |
sub edx, 4 |
mov [ss:edx+new_app_base], ecx |
mov [reg_esp], edx |
mov dword [reg_eip], eax |
pop edx |
pop ecx |
pop ebx |
97,21 → 55,10 |
leave |
iretd |
.default: |
pop edx |
pop ecx |
pop ebx |
pop eax |
leave |
save_ring3_context ;debugger support |
mov bl, 19 |
jmp exc_c |
restore reg_eip |
restore reg_cs |
restore reg_eflags |
restore reg_esp |
restore reg_ss |
;restore fpu_ctrl |
restore fpu_ctrl |
/kernel/trunk/core/sys32.inc |
---|
172,8 → 172,8 |
dd e8,e9,e10,e11 |
dd e12,e13,page_fault_handler,e15 |
dd except_16, e17,e18, except_19 |
times 12 dd unknown_interrupt |
dd except_16, e17 |
times 14 dd unknown_interrupt |
dd irq0 , irq_serv.irq_1, p_irq2 ,irq_serv.irq_3 |
dd p_irq4 ,irq_serv.irq_5,p_irq6,irq_serv.irq_7 |
219,7 → 219,7 |
jmp exc_c |
} |
exc_wo_code 0, 1, 2, 3, 4, 5, 6, 9, 15, 18 |
exc_wo_code 0, 1, 2, 3, 4, 5, 6, 9, 15 ; 18, 19 |
exc_w_code 8, 10, 11, 12, 13, 14, 17 |
exc_c: |
/kernel/trunk/const.inc |
---|
86,19 → 86,6 |
CAPS_ALTMOVCR8 equ 74 ; |
CR0_PE equ 0x00000001 ;protected mode |
CR0_MP equ 0x00000002 ;monitor fpu |
CR0_EM equ 0x00000004 ;fpu emulation |
CR0_TS equ 0x00000008 ;task switch |
CR0_ET equ 0x00000010 ;extension type hardcoded to 1 |
CR0_NE equ 0x00000020 ;numeric error |
CR0_WP equ 0x00010000 ;write protect |
CR0_AM equ 0x00040000 ;alignment check |
CR0_NW equ 0x20000000 ;not write-through |
CR0_CD equ 0x40000000 ;cache disable |
CR0_PG equ 0x80000000 ;paging |
CR4_VME equ 0x0001 |
CR4_PVI equ 0x0002 |
CR4_TSD equ 0x0004 |
111,22 → 98,7 |
CR4_OSFXSR equ 0x0200 |
CR4_OSXMMEXPT equ 0x0400 |
SSE_IE equ 0x0001 |
SSE_DE equ 0x0002 |
SSE_ZE equ 0x0004 |
SSE_OE equ 0x0008 |
SSE_UE equ 0x0010 |
SSE_PE equ 0x0020 |
SSE_DAZ equ 0x0040 |
SSE_IM equ 0x0080 |
SSE_DM equ 0x0100 |
SSE_ZM equ 0x0200 |
SSE_OM equ 0x0400 |
SSE_UM equ 0x0800 |
SSE_PM equ 0x1000 |
SSE_FZ equ 0x8000 |
SSE_INIT equ (SSE_IM+SSE_DM+SSE_ZM+SSE_OM+SSE_UM+SSE_PM) |
OS_BASE equ 0; 0x80400000 |
/kernel/trunk/kernel.asm |
---|
120,7 → 120,7 |
; CR0 Flags - Protected mode and Paging |
mov ecx, CR0_PE |
mov ecx, 0x00000021 |
; Enabling 32 bit protected mode |
400,7 → 400,7 |
mov cr3, eax |
mov eax,cr0 |
or eax,CR0_PG |
or eax,0x80000000 |
mov cr0,eax |
call init_kernel_heap |
447,48 → 447,25 |
mov ecx, 16 |
rep movsb |
clts |
fninit |
bt [cpu_caps], CAPS_FXSR |
jnc .no_FXSR |
stdcall kernel_alloc, 512*256 |
mov [fpu_data], eax |
mov ebx, cr4 |
mov ecx, cr0 |
or ebx, CR4_OSFXSR+CR4_OSXMMEXPT |
or ebx, CR4_OSFXSR |
mov cr4, ebx |
and ecx, not (CR0_MP+CR0_EM) |
or ecx, CR0_NE |
mov cr0, ecx |
mov dword [esp-4], SSE_INIT |
ldmxcsr [esp-4] |
xorps xmm0, xmm0 |
xorps xmm1, xmm1 |
xorps xmm2, xmm2 |
xorps xmm3, xmm3 |
xorps xmm4, xmm4 |
xorps xmm5, xmm5 |
xorps xmm6, xmm6 |
xorps xmm7, xmm7 |
jmp .set_cr |
jmp .clts |
.no_FXSR: |
stdcall kernel_alloc, 112*256 |
mov [fpu_data], eax |
mov ebx, cr4 |
mov ecx, cr0 |
and ebx, not (CR4_OSFXSR+CR4_OSXMMEXPT) |
and ecx, not CR0_EM |
or ecx, CR0_MP+CR0_NE |
mov cr0, ecx |
mov cr4, ebx |
.set_cr: |
.clts: |
clts |
fninit |
mov edi, irq_tab |
xor eax, eax |
mov ecx, 16 |