No task gates in the IDT.
No TSSs for interrupt handlers. More free memory. Faster task switch and interrupt handling. Smaller sys32.inc. git-svn-id: svn://kolibrios.org@8 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
2b291188a4
commit
bd15d25cab
@ -5,18 +5,13 @@ label timer_ticks dword at 0xFDF0
|
||||
;; IRQ0 HANDLER (TIMER INTERRUPT) ;;
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
|
||||
|
||||
align 32
|
||||
irq0:
|
||||
cmp [error_interrupt],-1
|
||||
je no_error_in_previous_process
|
||||
|
||||
mov [0xffff],byte 0
|
||||
|
||||
mov [error_interrupt],-1
|
||||
|
||||
no_error_in_previous_process:
|
||||
pushad
|
||||
push ds es
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov edi,[0x3000]
|
||||
shl edi, 3
|
||||
@ -26,10 +21,6 @@ irq0:
|
||||
inc dword [timer_ticks]
|
||||
|
||||
mov eax, [timer_ticks]
|
||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
call playNote ; <<<--- INSERT THIS LINE !!!!!!!!!!
|
||||
;!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
||||
|
||||
cmp eax,[next_usage_update]
|
||||
jb .nocounter
|
||||
add eax,100
|
||||
@ -37,6 +28,8 @@ irq0:
|
||||
call updatecputimes
|
||||
.nocounter:
|
||||
|
||||
call playNote ; <<<--- Speaker driver
|
||||
|
||||
mov edi, [0x3010]
|
||||
|
||||
mov ebx, [edi+0x18] ; time stamp counter add
|
||||
@ -47,8 +40,8 @@ irq0:
|
||||
|
||||
mov ebx,[0x3000]
|
||||
|
||||
cmp [0xffff], byte 1 ;1
|
||||
je do_not_change_task ;je
|
||||
cmp [0xffff], byte 1
|
||||
je .do_not_change_task
|
||||
|
||||
.waiting_for_termination:
|
||||
.waiting_for_reuse:
|
||||
@ -64,43 +57,55 @@ irq0:
|
||||
je .waiting_for_reuse
|
||||
|
||||
cmp ebx,[0x3004]
|
||||
jbe nsched0
|
||||
jbe @f
|
||||
mov ebx,1
|
||||
mov edi,0x3020
|
||||
|
||||
nsched0:
|
||||
@@:
|
||||
|
||||
mov [0x3000],ebx
|
||||
mov [0x3010],edi
|
||||
|
||||
do_not_change_task:
|
||||
jmp @f
|
||||
.do_not_change_task:
|
||||
mov [noct], 1
|
||||
@@:
|
||||
|
||||
call _rdtsc
|
||||
mov [edi+0x18],eax
|
||||
|
||||
cmp [0xffff],byte 0
|
||||
je nodecffff
|
||||
je @f
|
||||
dec byte [0xffff]
|
||||
nodecffff:
|
||||
@@:
|
||||
|
||||
|
||||
shl ebx, 3
|
||||
xor eax, eax
|
||||
add ebx, tss0
|
||||
mov word [0xB004], bx ; selector ;mov [tss_s],bx
|
||||
mov word [0xB004], bx ; selector
|
||||
mov dword [0xB000], eax ; offset
|
||||
|
||||
mov al,0x20 ; send End Of Interrupt signal
|
||||
mov dx,0x20
|
||||
out dx,al
|
||||
|
||||
cmp [noct], 1
|
||||
je @f
|
||||
.switch:
|
||||
jmp pword [0xB000]
|
||||
inc [context_counter] ;noname & halyavin
|
||||
@@:
|
||||
mov [noct], 0
|
||||
|
||||
jmp irq0
|
||||
pop es ds
|
||||
popad
|
||||
iret
|
||||
|
||||
iglobal
|
||||
|
||||
|
||||
uglobal
|
||||
context_counter dd 0 ;noname & halyavin
|
||||
noct db 0
|
||||
endg
|
||||
|
||||
|
||||
|
@ -35,20 +35,6 @@ os_data_l:
|
||||
dw 11011111b *256 +10010010b
|
||||
db 0x00
|
||||
|
||||
graph_data_l:
|
||||
|
||||
dw 0x3ff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11010000b *256 +11110010b
|
||||
db 0x00
|
||||
|
||||
tss0_l:
|
||||
times (max_processes+10) dd 0,0
|
||||
|
||||
tss0i_l:
|
||||
times 0x41 dq 0 ;(256+10) dd 0,0
|
||||
|
||||
app_code_l:
|
||||
dw ((0x80000000-std_application_base_address) shr 12) and 0xffff
|
||||
dw 0
|
||||
@ -63,6 +49,16 @@ app_data_l:
|
||||
dw 11010000b*256+11110010b+256*((0x80000000-std_application_base_address) shr 28)
|
||||
db std_application_base_address shr 24
|
||||
|
||||
graph_data_l:
|
||||
|
||||
dw 0x3ff
|
||||
dw 0x0000
|
||||
db 0x00
|
||||
dw 11010000b *256 +11110010b
|
||||
db 0x00
|
||||
|
||||
tss0_l:
|
||||
times (max_processes+10) dd 0,0
|
||||
|
||||
gdte:
|
||||
|
||||
@ -71,163 +67,10 @@ gdte:
|
||||
idtreg:
|
||||
dw 8*0x41-1
|
||||
dd idts+8
|
||||
|
||||
label idts at 0xB100-8
|
||||
;idte = idts + 8 + 0x60
|
||||
|
||||
|
||||
|
||||
build_process_gdt_tss_pointer:
|
||||
|
||||
mov ecx,tss_data
|
||||
mov edi,0
|
||||
setgdtl2:
|
||||
mov [edi+gdts+ tss0 +0], word tss_step
|
||||
mov [edi+gdts+ tss0 +2], cx
|
||||
mov eax,ecx
|
||||
shr eax,16
|
||||
mov [edi+gdts+ tss0 +4], al
|
||||
mov [edi+gdts+ tss0 +7], ah
|
||||
mov [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b
|
||||
add ecx,tss_step
|
||||
add edi,8
|
||||
cmp edi,8*(max_processes+5)
|
||||
jbe setgdtl2
|
||||
|
||||
ret
|
||||
|
||||
|
||||
build_interrupt_table:
|
||||
|
||||
mov [l.eflags],dword 0x11002
|
||||
mov [l.ss0], int_data
|
||||
;mov [l.ss1], ring1_data
|
||||
;mov [l.ss2], ring2_data
|
||||
mov [l.esp0], 0x52000
|
||||
mov [l.esp1], 0x53000
|
||||
mov [l.esp2], 0x54000
|
||||
|
||||
mov eax,cr3
|
||||
mov [l.cr3],eax
|
||||
mov [l.cs],int_code
|
||||
mov [l.ss],int_data
|
||||
mov [l.ds],int_data
|
||||
mov [l.es],int_data
|
||||
mov [l.fs],int_data
|
||||
mov [l.gs],int_data
|
||||
|
||||
mov eax,sys_int
|
||||
mov [l.esp],0x720000
|
||||
mov edi,0x290000
|
||||
|
||||
newint:
|
||||
push edi
|
||||
mov ebx,[eax]
|
||||
mov [l.eip],ebx
|
||||
mov esi,tss_sceleton
|
||||
mov ecx,120/4
|
||||
cld
|
||||
rep movsd
|
||||
pop edi
|
||||
|
||||
add edi,128
|
||||
add [l.esp],1024
|
||||
add eax,4
|
||||
|
||||
cmp eax,sys_int+4*0x40 ;0x60
|
||||
jbe newint ;jb
|
||||
|
||||
;;
|
||||
|
||||
mov esi,boot_sched_3_2
|
||||
call boot_log
|
||||
|
||||
mov ecx,0x290000
|
||||
mov edi,0
|
||||
setgdtl2i:
|
||||
mov [edi+gdts+ tss0i +0], word 128
|
||||
mov [edi+gdts+ tss0i +2], cx
|
||||
mov eax,ecx
|
||||
shr eax,16
|
||||
mov [edi+gdts+ tss0i +4], al
|
||||
mov [edi+gdts+ tss0i +7], ah
|
||||
mov [edi+gdts+ tss0i +5], word 01010000b *256 +11101001b
|
||||
add ecx,128
|
||||
add edi,8
|
||||
cmp edi,8*0x40 ;0x60
|
||||
jbe setgdtl2i
|
||||
|
||||
;;
|
||||
|
||||
mov esi,boot_sched_3_3
|
||||
call boot_log
|
||||
|
||||
mov edi,0
|
||||
mov edx,tss0i
|
||||
@@:
|
||||
mov [edi+idts+ 8 +0], word 0
|
||||
mov [edi+idts+ 8 +2], dx
|
||||
mov [edi+idts+ 8 +4], word 10000101b*256 ; task gate DPL=0
|
||||
mov [edi+idts+ 8 +6], word 0
|
||||
add edx,8
|
||||
add edi,8
|
||||
|
||||
cmp edi,8*0x40
|
||||
jb @b
|
||||
|
||||
; Exceptions
|
||||
mov edi, idts+8
|
||||
mov esi, sys_int
|
||||
mov ecx, 32
|
||||
@@:
|
||||
mov eax, [esi]
|
||||
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
|
||||
add edi, 8
|
||||
dec ecx
|
||||
jnz @b
|
||||
|
||||
ret
|
||||
|
||||
build_syscall_interrupt_table:
|
||||
|
||||
;mov dx,tss0sys
|
||||
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)
|
||||
|
||||
ret
|
||||
|
||||
|
||||
|
||||
iglobal
|
||||
sys_int:
|
||||
dd s0,s1,s2,s3,s4,s5,s6,s7,s8,s9,sa,sb,sc,sd,se,sf
|
||||
|
||||
dd s10 ,s11 ; ,i_unknown12,i_unknown13
|
||||
; dd i_unknown14,i_unknown15,i_unknown16,i_unknown17
|
||||
; dd i_unknown18,i_unknown19,i_unknown1a,i_unknown1b
|
||||
; dd i_unknown1c,i_unknown1d,i_unknown1e,i_unknown1f
|
||||
times 14 dd unknown_interrupt
|
||||
|
||||
dd irq0 ,irq1 ,p_irq2 ,p_irq3 ,p_irq4 ,p_irq5,p_irq6 ,p_irq7
|
||||
dd p_irq8,p_irq9,p_irq10,p_irq11,p_irq12,irqD ,p_irq14,p_irq15
|
||||
|
||||
;dd i_unknown30,i_unknown31,i_unknown32,i_unknown33
|
||||
;dd i_unknown34,i_unknown35,i_unknown36,i_unknown37
|
||||
;dd i_unknown38,i_unknown39,i_unknown3a,i_unknown3b
|
||||
;dd i_unknown3c,i_unknown3d,i_unknown3e,i_unknown3f
|
||||
times 16 dd unknown_interrupt
|
||||
|
||||
dd i40
|
||||
endg
|
||||
|
||||
uglobal
|
||||
tss_sceleton:
|
||||
l.back dw 0,0
|
||||
@ -259,110 +102,93 @@ uglobal
|
||||
l.io dw 0
|
||||
endg
|
||||
|
||||
s0:
|
||||
|
||||
build_process_gdt_tss_pointer:
|
||||
|
||||
mov ecx,tss_data
|
||||
mov edi,0
|
||||
setgdtl2:
|
||||
mov [edi+gdts+ tss0 +0], word tss_step
|
||||
mov [edi+gdts+ tss0 +2], cx
|
||||
mov eax,ecx
|
||||
shr eax,16
|
||||
mov [edi+gdts+ tss0 +4], al
|
||||
mov [edi+gdts+ tss0 +7], ah
|
||||
mov [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b
|
||||
add ecx,tss_step
|
||||
add edi,8
|
||||
cmp edi,8*(max_processes+5)
|
||||
jbe setgdtl2
|
||||
|
||||
ret
|
||||
|
||||
|
||||
build_interrupt_table:
|
||||
|
||||
mov edi, idts+8
|
||||
mov esi, sys_int
|
||||
mov ecx, 0x40
|
||||
@@:
|
||||
mov eax, [esi]
|
||||
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
|
||||
add edi, 8
|
||||
dec ecx
|
||||
jnz @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)
|
||||
|
||||
ret
|
||||
|
||||
|
||||
|
||||
iglobal
|
||||
sys_int:
|
||||
dd e0,e1,e2,e3,e4,e5,e6,e7,e8,e9,e10,e11,e12,e13,e14,e15
|
||||
dd e16,e17
|
||||
times 14 dd unknown_interrupt
|
||||
|
||||
dd irq0 ,irq1 ,p_irq2 ,p_irq3 ,p_irq4 ,p_irq5,p_irq6 ,p_irq7
|
||||
dd p_irq8,p_irq9,p_irq10,p_irq11,p_irq12,irqD ,p_irq14,p_irq15
|
||||
|
||||
times 16 dd unknown_interrupt
|
||||
|
||||
dd i40
|
||||
endg
|
||||
|
||||
; simply return control to interrupted process
|
||||
unknown_interrupt:
|
||||
iret
|
||||
|
||||
macro exceptions [num]
|
||||
{
|
||||
forward
|
||||
e#num :
|
||||
mov bl, num
|
||||
jmp exc_c
|
||||
}
|
||||
|
||||
exceptions 0, 1, 2, 3, 4, 5, 6, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17
|
||||
exc_c:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x0
|
||||
mov [error_interrupt_entry],dword s0
|
||||
|
||||
movzx eax, bl
|
||||
mov [error_interrupt], eax
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
|
||||
s1:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x1
|
||||
mov [error_interrupt_entry],dword s1
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
s2:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x2
|
||||
mov [error_interrupt_entry],dword s2
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
s3:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x3
|
||||
mov [error_interrupt_entry],dword s3
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
s4:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x4
|
||||
mov [error_interrupt_entry],dword s4
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
s5:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x5
|
||||
mov [error_interrupt_entry],dword s5
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
s6:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x6
|
||||
mov [error_interrupt_entry],dword s6
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
|
||||
mov edx, [0x3010]
|
||||
mov [edx + 0xA], byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
|
||||
@ -371,7 +197,7 @@ s6:
|
||||
;;;;;;;;;;;;;;;;;;;;;;;
|
||||
|
||||
align 4
|
||||
s7:
|
||||
e7:
|
||||
clts
|
||||
|
||||
push eax
|
||||
@ -406,202 +232,25 @@ iglobal
|
||||
endg
|
||||
|
||||
|
||||
s8:
|
||||
add esp, 4 ; zero on the stack!
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x8
|
||||
mov [error_interrupt_entry],dword s8
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
s9:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x9
|
||||
mov [error_interrupt_entry],dword s9
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
; Invalid TSS
|
||||
sa:
|
||||
add esp, 4 ; error code
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0xa
|
||||
mov [error_interrupt_entry],dword sa
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
; Segment not present
|
||||
sb:
|
||||
add esp, 4
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0xb
|
||||
mov [error_interrupt_entry],dword sb
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
; Stack fault exception
|
||||
sc:
|
||||
add esp, 4
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0xc
|
||||
mov [error_interrupt_entry],dword sc
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
; General Protection Fault
|
||||
sd:
|
||||
add esp, 4
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0xd
|
||||
mov [error_interrupt_entry],dword sd
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
; Page-Fault Exception
|
||||
se:
|
||||
add esp, 4
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0xe
|
||||
mov [error_interrupt_entry],dword se
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
; ??
|
||||
sf:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0xf
|
||||
mov [error_interrupt_entry],dword sf
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
; x87 FPU Floating-Point Error
|
||||
s10:
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x10
|
||||
mov [error_interrupt_entry],dword s10
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
; Alignment Check Exception
|
||||
s11:
|
||||
add esp, 4
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov [error_interrupt],0x11
|
||||
mov [error_interrupt_entry],dword s11
|
||||
|
||||
call show_error_parameters
|
||||
|
||||
mov edx,[0x3010]
|
||||
mov [edx+0xa],byte 4
|
||||
|
||||
jmp change_task
|
||||
|
||||
|
||||
|
||||
|
||||
writehex:
|
||||
|
||||
pusha
|
||||
|
||||
mov edi, [write_error_to]
|
||||
mov esi, 8
|
||||
@@:
|
||||
mov ecx, eax
|
||||
and ecx, 0xf
|
||||
|
||||
mov ecx,eax
|
||||
mov ax,word [printerrorat]
|
||||
shl eax,16
|
||||
mov ax,[esp+32+4]
|
||||
sub ax,60
|
||||
mov edx,1
|
||||
mov esi,8
|
||||
mov ebx,0xffffff
|
||||
whl1:
|
||||
push ecx
|
||||
and ecx,0xf
|
||||
add ecx,hexletters
|
||||
mov edi,1
|
||||
|
||||
mov cl,[ecx]
|
||||
mov edi,[write_error_to]
|
||||
mov cl,[ecx+hexletters]
|
||||
mov [edi],cl
|
||||
dec [write_error_to]
|
||||
dec edi
|
||||
|
||||
pop ecx
|
||||
shr ecx,4
|
||||
sub eax,6*65536
|
||||
shr eax,4
|
||||
dec esi
|
||||
jnz whl1
|
||||
jnz @b
|
||||
|
||||
popa
|
||||
ret
|
||||
@ -610,9 +259,6 @@ iglobal
|
||||
hexletters db '0123456789ABCDEF'
|
||||
|
||||
error_interrupt dd -1
|
||||
error_interrupt_entry dd -1
|
||||
|
||||
printerrorat dd 300
|
||||
|
||||
process_error db 'K : Process - forced terminate INT: 00000000',13,10,0
|
||||
process_pid db 'K : Process - forced terminate PID: 00000000',13,10,0
|
||||
@ -638,7 +284,7 @@ show_error_parameters:
|
||||
|
||||
mov eax,[0x3000]
|
||||
shl eax,8
|
||||
cmp [0x80000+eax+0xB0],dword 0
|
||||
cmp [0x80000+eax+0xB0],byte 0
|
||||
jnz .system_error
|
||||
|
||||
mov eax,[0x3000]
|
||||
@ -672,132 +318,35 @@ show_error_parameters:
|
||||
|
||||
; irq1 -> hid/keyboard.inc
|
||||
|
||||
p_irq2:
|
||||
|
||||
call restore_caller
|
||||
macro irqhh [num]
|
||||
{
|
||||
forward
|
||||
p_irq#num :
|
||||
pushad
|
||||
mov edi, num
|
||||
jmp irq_c
|
||||
}
|
||||
|
||||
mov edi,2 ; 1
|
||||
call irqhandler ; 2/5
|
||||
irqhh 2,3,4,5,6,7,8,9,10,11,12,14,15
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq2
|
||||
|
||||
p_irq3:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,3
|
||||
irq_c:
|
||||
push ds es
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq3
|
||||
|
||||
p_irq4:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,4
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq4
|
||||
|
||||
p_irq5:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,5
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq5
|
||||
|
||||
p_irq6:
|
||||
|
||||
call restore_caller
|
||||
|
||||
call fdc_irq
|
||||
|
||||
mov edi,6
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq6
|
||||
|
||||
p_irq7:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,7
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq7
|
||||
|
||||
p_irq8:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,8
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq8
|
||||
|
||||
p_irq9:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,9
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq9
|
||||
|
||||
p_irq10:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,10
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq10
|
||||
|
||||
p_irq11:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,11
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq11
|
||||
|
||||
p_irq12:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,12
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq12
|
||||
|
||||
pop es ds
|
||||
popad
|
||||
iret
|
||||
|
||||
irqD:
|
||||
call restore_caller
|
||||
|
||||
pushad
|
||||
push ds es
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
mov dx,0xf0
|
||||
mov al,0
|
||||
out dx,al
|
||||
@ -806,60 +355,14 @@ irqD:
|
||||
mov al,0x20
|
||||
out dx,al
|
||||
mov dx,0x20
|
||||
out dx,al
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp irqD
|
||||
out dx,al
|
||||
|
||||
|
||||
p_irq14:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,14
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq14
|
||||
|
||||
p_irq15:
|
||||
|
||||
call restore_caller
|
||||
|
||||
mov edi,15
|
||||
call irqhandler
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp p_irq15
|
||||
pop es ds
|
||||
popad
|
||||
iret
|
||||
|
||||
|
||||
|
||||
align 4
|
||||
restore_caller:
|
||||
|
||||
mov edi,[0x3000]
|
||||
shl edi, 3
|
||||
mov [edi+gdts+ tss0 +5], word 01010000b *256 +11101001b
|
||||
|
||||
ret
|
||||
|
||||
align 4
|
||||
return_to_caller:
|
||||
|
||||
mov ebx,[0x3000]
|
||||
shl bx,3
|
||||
add bx,tss0;t
|
||||
mov [tss_irq12],bx
|
||||
|
||||
db 0xea
|
||||
dd 0
|
||||
tss_irq12 dw tss0;t
|
||||
|
||||
ret
|
||||
|
||||
uglobal
|
||||
irqh dd 0x0
|
||||
endg
|
||||
@ -936,18 +439,11 @@ irqhandler:
|
||||
ret
|
||||
|
||||
|
||||
; simply return control to interrupted process
|
||||
unknown_interrupt:
|
||||
iret
|
||||
|
||||
|
||||
|
||||
|
||||
set_application_table_status:
|
||||
push eax
|
||||
|
||||
mov eax,[0x3000]
|
||||
;imul eax,32
|
||||
shl eax, 5
|
||||
add eax,0x3000+4
|
||||
mov eax,[eax]
|
||||
@ -963,7 +459,6 @@ clear_application_table_status:
|
||||
push eax
|
||||
|
||||
mov eax,[0x3000]
|
||||
;imul eax,32
|
||||
shl eax, 5
|
||||
add eax,0x3000+4
|
||||
mov eax,[eax]
|
||||
@ -1356,11 +851,7 @@ terminate: ; terminate application
|
||||
|
||||
iglobal
|
||||
boot_sched_1 db 'Building gdt tss pointer',0
|
||||
;boot_sched_2 db 'Building gdt gate pointer',0
|
||||
boot_sched_3 db 'Building interrupt table - TSS',0
|
||||
boot_sched_3_2 db 'Building interrupt table - GDT',0
|
||||
boot_sched_3_3 db 'Building interrupt table - IDT',0
|
||||
boot_sched_4 db 'Building syscall interrupt table',0
|
||||
boot_sched_2 db 'Building IDT table',0
|
||||
endg
|
||||
|
||||
|
||||
@ -1370,17 +861,9 @@ build_scheduler:
|
||||
call boot_log
|
||||
call build_process_gdt_tss_pointer
|
||||
|
||||
; mov esi,boot_sched_2
|
||||
; call boot_log
|
||||
; call build_process_gdt_gate_pointer
|
||||
|
||||
mov esi,boot_sched_3
|
||||
mov esi,boot_sched_2
|
||||
call boot_log
|
||||
call build_interrupt_table
|
||||
|
||||
mov esi,boot_sched_4
|
||||
call boot_log
|
||||
call build_syscall_interrupt_table
|
||||
|
||||
ret
|
||||
|
||||
|
@ -30,8 +30,11 @@ endg
|
||||
|
||||
align 4
|
||||
irq1:
|
||||
|
||||
call restore_caller
|
||||
pushad
|
||||
push ds es
|
||||
mov ax, os_data
|
||||
mov ds, ax
|
||||
mov es, ax
|
||||
|
||||
movzx eax,word[0x3004] ; top window process
|
||||
movzx eax,word[0xC400+eax*2]
|
||||
@ -209,9 +212,9 @@ irq1:
|
||||
mov al,0x20 ; ready for next irq
|
||||
out 0x20,al
|
||||
|
||||
call return_to_caller
|
||||
|
||||
jmp irq1
|
||||
pop es ds
|
||||
popad
|
||||
iret
|
||||
|
||||
set_lights:
|
||||
mov al,0xED
|
||||
|
@ -119,7 +119,6 @@ int_data equ int_data_l-gdts
|
||||
tss0sys equ tss0sys_l-gdts
|
||||
graph_data equ 3+graph_data_l-gdts
|
||||
tss0 equ tss0_l-gdts
|
||||
tss0i equ tss0i_l-gdts
|
||||
app_code equ 3+app_code_l-gdts
|
||||
app_data equ 3+app_data_l-gdts
|
||||
|
||||
@ -653,16 +652,14 @@ include 'vmodeld.inc'
|
||||
mov [l.ss0], os_data
|
||||
;mov [l.ss1], ring1_data
|
||||
;mov [l.ss2], ring2_data
|
||||
mov [l.esp0], 0x52000
|
||||
mov [l.esp1], 0x53000
|
||||
mov [l.esp2], 0x54000
|
||||
;mov [l.esp0], 0x52000
|
||||
;mov [l.esp1], 0x53000
|
||||
;mov [l.esp2], 0x54000
|
||||
; osloop - TSS
|
||||
mov eax,cr3
|
||||
mov [l.cr3],eax
|
||||
mov [l.eip],osloop
|
||||
; <Ivan Poddubny 14/03/2004>
|
||||
mov [l.esp],0x30000 ;0x2ffff
|
||||
; </Ivan Poddubny 14/03/2004>
|
||||
mov [l.esp],0x30000
|
||||
mov [l.cs],os_code
|
||||
mov [l.ss],os_data
|
||||
mov [l.ds],os_data
|
||||
|
@ -47,9 +47,7 @@
|
||||
; 38 dword time stamp counter add
|
||||
; 3c dword cpu usage in cpu timer tics
|
||||
;
|
||||
; -> delete -> 5000 -> AFFF free
|
||||
;
|
||||
;!!!
|
||||
; 5000 -> 5FFF save_syscall_data - syscall trace
|
||||
; 6000 -> 68FF free
|
||||
; 6900 -> 6EFF saved picture under mouse pointer
|
||||
@ -62,14 +60,13 @@
|
||||
;
|
||||
; B000 -> B005 jump address for irq0 (task switch)
|
||||
; B008 -> B00B count of ticks remaining to updating CPU usage info
|
||||
;
|
||||
|
||||
; B060 -> B0FF free
|
||||
|
||||
; B100 -> B2FF IDT
|
||||
; B300 -> BEFF free
|
||||
;!!!
|
||||
|
||||
; BF00 -> BFFF bytes, 1 if process running/memory in use
|
||||
; B300 -> BFFF free
|
||||
|
||||
; C000 -> C3FF window stack C000 no of windows - all in words
|
||||
; C402 -> C7FF window position in stack
|
||||
; D000 -> D1FF FDC controller
|
||||
@ -134,9 +131,7 @@
|
||||
; 30000 -> 36FFF basic text font II
|
||||
; 37000 -> 3BFFF basic text font I
|
||||
; 40000 -> 4FFFF data of retrieved disks and partitions (Mario79)
|
||||
; 50000 -> 500FF free
|
||||
; 51000 -> 54000 esp0,esp1,esp2
|
||||
; 5F000 -> 5FFFF free
|
||||
; 50000 -> 5FFFF free
|
||||
; 60000 -> 7FFFF paging tables
|
||||
; 80000 -> 8FFFF additional app info, in 256 byte steps - 256 entries
|
||||
;
|
||||
@ -165,10 +160,8 @@
|
||||
; 280000 -> 281FFF ramdisk fat
|
||||
; 282000 -> 283FFF floppy fat
|
||||
;
|
||||
; 284000 -> 28FFFF free
|
||||
; 284000 -> 29FFFF free
|
||||
;
|
||||
; 290000 -> 297FFF TSS's of interrupts
|
||||
; 298000 -> 29FFFF free
|
||||
; 2A0000 -> 2B00ff wav device data
|
||||
; 2C0000 -> 2C3fff button info
|
||||
;
|
||||
@ -220,7 +213,7 @@
|
||||
; 1C dword app int vector
|
||||
;
|
||||
; C03000 -> D11fff sysint_stack_data
|
||||
; - system interrupt stacks
|
||||
; - interrupt stacks
|
||||
; - 256 entries * 4096 step
|
||||
;
|
||||
; D20000 -> F28000 TSS and IO map for (8192*8)=65536 ports
|
||||
|
Loading…
Reference in New Issue
Block a user