diff options
Diffstat (limited to 'src/boucane.cc')
| -rw-r--r-- | src/boucane.cc | 44 |
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 |
