aboutsummaryrefslogtreecommitdiff
path: root/src/boucane.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/boucane.cc')
-rw-r--r--src/boucane.cc44
1 files changed, 28 insertions, 16 deletions
diff --git a/src/boucane.cc b/src/boucane.cc
index caf0b8d..f4d9482 100644
--- a/src/boucane.cc
+++ b/src/boucane.cc
@@ -28,15 +28,18 @@ extern u64 gdt64_tss;
void configure_tss(){
// Get TSS physical address
- u64 tss_addr=(u64)PHY(&kvar_tss);
+ u64 tss_addr=(u64)&kvar_tss;
u32 limit=sizeof(TSS);
u32 desc1=(tss_addr&0xFFFF)<<16|(limit&0xFFFF);
+ tss_addr>>=16;
u32 desc2=(tss_addr&0xFF);
- desc2|=0b1001<<8; // Type
- desc2|=0b111<<13; // Permission & present
- u32 desc3=((limit>>8)&0xFFFF)|(limit>>24);
-
+ desc2|=0b11101001<<8; // Type, Permission, present
+ tss_addr>>=8;
+ desc2|=tss_addr<<24;
+ tss_addr>>=8;
+ u32 desc3=tss_addr;
+
// Configure GDT
u32 *gdt_entry=(u32*)&gdt64_tss;
gdt_entry[0]=desc1;
@@ -46,6 +49,7 @@ void configure_tss(){
// Configure segment
kvar_tss.rsp0=(u64)VIRT(kvar_stack_pma);
+ kvar_tss.iomap_address=0;
asm(
"mov $0x28, %ax \n\t"
"ltr %ax"
@@ -53,9 +57,15 @@ void configure_tss(){
}
void task1(){
- u64 a=0xEEEEEE;
- DUMP(a);
- while(1);
+ while(1){
+ asm("mov $1, %rdi;int $0x30");
+ }
+}
+
+void task2(){
+ while(1){
+ asm("mov $2, %rdi;int $0x30");
+ }
}
extern "C" void boucane(u64 mb_info){
@@ -77,7 +87,7 @@ extern "C" void boucane(u64 mb_info){
memtext_init();
idt_enable_interrupt();
apic_enable();
-
+
// Looking for framebuffer
FRAMEBUFFER fb_info;
if(mb2_find_framebuffer((u32*)mb_info, &fb_info)){
@@ -97,23 +107,25 @@ extern "C" void boucane(u64 mb_info){
__putchar=vgatext_putchar;
}
}
-
+
// Booting!
printk("Booting Boucane v%d.%d.%d\n",VERSION_MAJOR,VERSION_MINOR, VERSION_PATH);
-
+ printk("System informations -- ");
char bootloader[20];
if(mb2_find_bootloader_name((u32*)mb_info,bootloader)){
- printk("System informations -- BOOT:%s ", bootloader);
+
+ printk("BOOT:%s ", bootloader);
}
-
+
MEM_INFO mem_infos;
if(mb2_find_mem((u32*)mb_info,&mem_infos)){
u64 mem=mem_infos.mem_upper-mem_infos.mem_lower;
mem/=1024;
printk("RAM:%dMB\n", mem);
}
-
- //create_task((void*)task1, 50);
- //scheduler_start();
+ show_ticks=1;
+ create_task((void*)task1, 50);
+ create_task((void*)task2, 50);
+ scheduler_start();
while(1);
} \ No newline at end of file