Import backup from 2005-08-27

This commit is contained in:
Josh Holtrop 2005-08-27 22:00:00 -04:00
parent 83a5b032f8
commit daa29212d0
10 changed files with 49 additions and 46 deletions

Binary file not shown.

View File

@ -1,5 +1,8 @@
; test app 1
[bits 32]
org 0x0
header:
dd 0x4D534F48 ; magic identifier "HOSM"
dd 2 ; test app

Binary file not shown.

View File

@ -1,5 +1,8 @@
; test app 1
[bits 32]
org 0x0
header:
dd 0x4D534F48 ; magic identifier "HOSM"
dd 2 ; test app

View File

@ -180,10 +180,14 @@ newgdtcontinue:
mov ax, TSS0_SEG
ltr ax
push esp
push msg1
call _kprintf
add esp, 8
; push esp
; push msg1
; call _kprintf
; add esp, 8
mov eax, esp
push KERNEL_DATA
push eax
idle_loop: ; system idle loop
sti

View File

@ -13,11 +13,11 @@ isr_%1:
push eax
mov eax, %1
push eax
push esp
push msg
call _kprintf
add esp, 12
; push eax
; push esp
; push msg
; call _kprintf
; add esp, 12
; hlt
jmp isr_main
@ -91,10 +91,10 @@ isr_main:
call _isr
add esp, 8
mov eax, [_proc_new_ss]
mov ebx, [_proc_new_esp]
mov ss, ax
mov esp, ebx
; mov eax, [_proc_new_ss]
; mov ebx, [_proc_new_esp]
; mov ss, ax
; mov esp, ebx
pop gs
pop fs

View File

@ -152,7 +152,7 @@ void k_init()
{
kprintf("Creating a task\n");
create_task((void *)mb_modules[i].mod_start,
mb_modules[i].mod_end - mb_modules[i].mod_end,
mb_modules[i].mod_end - mb_modules[i].mod_start,
0,
((hos_module_header_t*)(mb_modules[i].mod_start))->init);
}
@ -208,6 +208,7 @@ void isr(u32_t num, int_stack_t *int_stack)
case 0x20: // timer
timer++;
(*(u16_t *)CONSOLE_MEMORY)++;
proc_sched(int_stack);
pic_eoi();
break;
case 0x21: // keyboard
@ -219,11 +220,9 @@ void isr(u32_t num, int_stack_t *int_stack)
putc(int_stack->ebx);
break;
default:
kprintf("Unhandled interrupt #%d, CR2 = 0x%x!\n", num, read_cr2());
kprintf("Unhandled interrupt #%d, CR2 = 0x%x, int_stack at 0x%x!\n", num, read_cr2(), int_stack);
halt();
}
if ( (num == 0x20) || (proc_new_esp == 0) )
proc_sched(int_stack);
criticalCounter--;
}

View File

@ -33,8 +33,8 @@ typedef struct
u32_t eip;
u32_t cs;
u32_t eflags;
u32_t ss; /* present if ring3->ring0 transition ?? */
u32_t esp;
u32_t ss; /* present if ring3->ring0 transition ?? */
} int_stack_t;
/* returns true to callee if we should jump to a real mode module */

View File

@ -42,11 +42,11 @@ int proc_init()
void proc_sched(int_stack_t *int_stack)
{
processes[cur_task]->esp = (u32_t) int_stack;
processes[cur_task]->ss = read_ss();
cur_task = (cur_task + 1) % 3;
proc_new_esp = processes[cur_task]->esp;
proc_new_ss = processes[cur_task]->ss;
memcpy(&processes[cur_task]->int_stack, int_stack, sizeof(int_stack_t));
cur_task++;
if (cur_task == 3)
cur_task = 0;
memcpy(int_stack, &processes[cur_task]->int_stack, sizeof(int_stack_t));
write_cr3(processes[cur_task]->p_page_dir);
}
@ -105,29 +105,19 @@ void create_process_stack(process_t *p, void *entry)
u32_t *ptr32 = v_stack_table;
for (i = 0; i < 1023; i++)
*ptr32++ = 0;
v_stack_table[1032] = p_stack | 0x7; /* user permissions */
v_stack_table[1023] = p_stack | 0x7; /* user permissions */
p->page_dir[511] = p_stack_table | 0x7; /* stack at 2GB */
i = 1023; /* top of stack */
v_stack[i--] = 0x20000000;
v_stack[i--] = SEG_USER_DATA | 0x3;
v_stack[i--] = 0x0202;
v_stack[i--] = SEG_USER_CODE | 0x3;
v_stack[i--] = (u32_t) entry;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = 0;
v_stack[i--] = SEG_USER_DATA | 0x3;
v_stack[i--] = SEG_USER_DATA | 0x3;
v_stack[i--] = SEG_USER_DATA | 0x3;
v_stack[i--] = SEG_USER_DATA | 0x3;
vmm_unmapp(v_stack_table);
vmm_unmapp(v_stack);
p->ss = SEG_USER_DATA | 0x3;
p->esp = 0x20000000 - sizeof(int_stack_t);
p->int_stack.ds = SEG_USER_DATA | 0x3;
p->int_stack.es = SEG_USER_DATA | 0x3;
p->int_stack.fs = SEG_USER_DATA | 0x3;
p->int_stack.gs = SEG_USER_DATA | 0x3;
p->int_stack.ss = SEG_USER_DATA | 0x3;
p->int_stack.esp = 0x20000000;
p->int_stack.eflags = 0x0202;
p->int_stack.cs = SEG_USER_CODE | 0x3;
p->int_stack.eip = (u32_t)entry;
}
/* Copy pages into new address space (v_page_dir must be set up) */
@ -148,7 +138,7 @@ void copy_into_address_space(u32_t dest_addr,
/* Time for a new page table & page directory entry! */
p->v_page_dir[pde] = (u32_t)vmm_palloc_addr(&p_page_addr);
p->page_dir[pde] = p_page_addr | 0x7;
vmm_unmapp((void *)p->v_page_dir[pde]);
// vmm_unmapp((void *)p->v_page_dir[pde]);
}
page = vmm_palloc_addr(&p_page_addr);
((u32_t *)(p->v_page_dir[pde]))[pte] = p_page_addr | 0x7;

View File

@ -15,8 +15,12 @@ typedef struct
u32_t *v_page_dir; /* Virtual page table addresses for init */
u32_t p_page_dir; /* Physical address of page directory */
u32_t size; /* Process size, bytes from 0 through bss */
u32_t ss;
u32_t esp;
// u32_t ss;
// u32_t esp;
// u32_t eflags;
// u32_t cs;
// u32_t eip;
int_stack_t int_stack;
} process_t;
typedef struct