Import backup from 2005-08-27
This commit is contained in:
parent
83a5b032f8
commit
daa29212d0
BIN
apps/test1.app
BIN
apps/test1.app
Binary file not shown.
@ -1,5 +1,8 @@
|
||||
; test app 1
|
||||
|
||||
[bits 32]
|
||||
org 0x0
|
||||
|
||||
header:
|
||||
dd 0x4D534F48 ; magic identifier "HOSM"
|
||||
dd 2 ; test app
|
||||
|
BIN
apps/test2.app
BIN
apps/test2.app
Binary file not shown.
@ -1,5 +1,8 @@
|
||||
; test app 1
|
||||
|
||||
[bits 32]
|
||||
org 0x0
|
||||
|
||||
header:
|
||||
dd 0x4D534F48 ; magic identifier "HOSM"
|
||||
dd 2 ; test app
|
||||
|
@ -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
|
||||
|
@ -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
|
||||
|
@ -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--;
|
||||
}
|
||||
|
||||
|
@ -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 */
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
Loading…
x
Reference in New Issue
Block a user