Пример #1
0
int main(struct multiboot *mboot_ptr)
{
	// All our initialisation calls will go in here.
	init_descriptor_tables();
	monitor_clear();
	initialise_paging();
//	init_timer(3);

	int res = 0;

	monitor_clear();
	monitor_write(str);
	monitor_write("\n\r");
	monitor_write_hex(0xbadacacd);
	monitor_write_hex(0xbada0000);
	monitor_write("\n\r");
	monitor_write_dec(0xadacacd);
	monitor_write("\n\r");
	monitor_write_dec(1234567890);

	//memcpy(0xb8000+80*2*5,0xb8000,80*2*5);
	//memset(0xb8000,76,80*2*5);

	asm volatile ("int $0x3");

	//u32int *ptr = (u32int*)0x0ffffff;
	//u32int do_page_fault = *ptr;
	

	return 0;
}
Пример #2
0
static void timer_callback (registers_t *regs)
{
    tick++;
    monitor_write("Tick: ");
    monitor_write_dec(tick);
    monitor_write("\n");
}
Пример #3
0
// This gets called from our ASM interrupt handler stub.
void irq_handler(registers_t regs)
{
   // Send an EOI (end of interrupt) signal to the PICs.
   // If this interrupt involved the slave.
   if (regs.int_no >= 40)
   {
       // Send reset signal to slave.
       outb(0xA0, 0x20);
   }
   // Send reset signal to master. (As well as slave, if necessary).
   outb(0x20, 0x20);

   if (interrupt_handlers[regs.int_no] != 0)
   {
       isr_t handler = interrupt_handlers[regs.int_no];
       handler(regs);
   }
	else
	{
		// Unhandled IRQ, log it !
		monitor_set_forecolor(e_color_magenta);
		monitor_write("IRQ");
		monitor_write_hex(regs.int_no);
		monitor_write(" raised!\n");
		monitor_set_forecolor(e_color_white);
	}
}
Пример #4
0
int main(struct multiboot *mboot_ptr)
{
	monitor_clear();
	monitor_write("Initializing GDT...\n");
 	init_descriptor_tables();
	monitor_write("GDT initialized.\n");
	//asm volatile("int $0x3");
	//asm volatile("int $0x4");
	//asm volatile("sti");
	//init_timer(50);
	initialise_paging();
	monitor_write("Paging initialized.\n");
	/*u32int *ptr = (u32int*)0xA0000000;*/
	/*u32int do_page_fault = *ptr;*/

	/*asm volatile ("int $0x3");*/
	/*asm volatile ("int $0x4");*/
	//monitor_write_dec(15);
	//monitor_write_dec(-48281);
	//monitor_write_dec(295180203);
	/*monitor_write_hex(0xFF);*/
	/*monitor_put('\n');*/
	/*monitor_write_hex(0x0);*/
	/*monitor_put('\n');*/
	/*monitor_write_hex(0xFAFABABA);*/
	/*monitor_put('\n');*/
	/*monitor_write_hex(0xABA);*/

	// All our initialisation calls will go in here.
	return 0;
}
Пример #5
0
// C Interrupt dispatcher
void isr_handler(registers_t regs)
{
	// This line is important. When the processor extends the 8-bit interrupt number
   // to a 32bit value, it sign-extends, not zero extends. So if the most significant
   // bit (0x80) is set, regs.int_no will be very large (about 0xffffff80).
   u8int int_no = regs.int_no & 0xFF;
	if (interrupt_handlers[int_no] != 0)
	{
		isr_t handler = interrupt_handlers[int_no];
		handler(regs);
	}
	else
	{

		monitor_set_forecolor(e_color_magenta);
		monitor_write("Unhandled interrupt #");
		monitor_write_dec(int_no);
		monitor_put('\n');
		monitor_write("Message: ");
		if(int_no < 32){
			monitor_write(interrupt_messages[int_no - 1]);
			monitor_put('\n');
		}
		monitor_set_forecolor(e_color_white);

		// ERR!
		PANIC("Unhandled interrupt");
	}
}
Пример #6
0
/* All of our Exception handling Interrupt Service Routines will
*  point to this function. This will tell us what exception has
*  happened! Right now, we simply halt the system by hitting an
*  endless loop. All ISRs disable interrupts while they are being
*  serviced as a 'locking' mechanism to prevent an IRQ from
*  happening and messing up kernel data structures */
static void fault_handler(unsigned int exc_no, registers_t regs, APTR Data, SysBase *SysBase)
{
    if (exc_no < 32)
    {
		monitor_write(exception_messages[exc_no]);
		monitor_write("[Exception]. System Halted!\n");
		for (;;)asm volatile("hlt");
    }
Пример #7
0
void isr_handler(regsiters_t regs)
{
	monitor_write("recv inte");
	monitor_write_dec(regs.int_no);
	monitor_write("err code");
	monitor_write_dec(regs.err_code);
	monitor_put('\n');
}
Пример #8
0
void isr_handler(registers_t regs)
{
	monitor_write("recv inte");
	monitor_write_dec(regs.int_no);
	monitor_write("err code");
	monitor_write_dec(regs.err_code);
	monitor_put('\n');
	if(spec_handler[regs.int_no] != NULL){
		spec_handler[regs.int_no](regs);
	}
}
Пример #9
0
int main(struct multiboot *mboot_ptr)
{
  // All our initialisation calls will go in here.
  monitor_clear();
  monitor_write("Hello world!\n");
  monitor_write_hex(12345678);
  monitor_write("\n");
  monitor_write_dec(12345678);
  monitor_write("\n");
  return 0xDEADBABA;
}
Пример #10
0
void isr_handler(registers_t regs)
{
    monitor_write_dec(z);
    monitor_put('-');
    monitor_write("recieved interrupt: ");
    monitor_write_dec(regs.int_no);
    monitor_write(", add: ");
    monitor_write_hex(regs.cs);
    monitor_put(':');
    monitor_write_hex(regs.eip);
    monitor_put('\n');
    ++z;
}
Пример #11
0
//写个struct mulitboot 省着老有警告 用的时候再改
//grub标准里有这个http://gnu.april.org/software/grub/manual/multiboot/multiboot.html
//struct multiboot{};
int kmain(struct multiboot_info* mboot_ptr)//name is mentioned in boot.s
{
	init_gdt();
	init_idt();
	monitor_write("qhello!!@#$%^&*()[]+= bcdef:wworld! 1234");
	monitor_write("\n");
	monitor_write_hex(256);
	monitor_write("finished");
	monitor_write_dec(256);
	monitor_write("done ss");
	monitor_write_hex(kss);
	monitor_write("done esp");
	monitor_write_hex(kesp);
	
	monitor_put('\n');
	//init_gdt();
	//init_idt();
	asm volatile("int $0x3");
	asm volatile("int $0x4");
	prtf("aa bb %x %u %s 11\t \nbb\n", 10, 10, "str");	
	//asm volatile("sti");
    	//init_timer(500);
	//monitor_write_hex((u32int)&end);
	prtf("1\tend is at addr :%x end itself:%x kend:%x &kend:%x\n", (u32int)&end, end, kend, &kend);

	/*旧的paging实现
	init_paging();
	prtf("paging enabled!\n");
	u32int* ptr = (u32int*)0xa0000000;
	*ptr = 1;
	*/
	//新的paging 
	//换了个管理物理内存的方法 这个没啥大区别
	//分割物理内存管理 虚拟内存管理
	//显式映射虚拟地址
	//pmm里搞的都是物理地址 函数返回的也是物理地址
	init_pmm ((u32int)&end, 1 << 25);//32MB
	init_vmm ();
	/*prtf("mboot_ptr : %x\n", mboot_ptr);//大概0x2d000 没到640k呢
	prtf("mem_upper %x\n", mboot_ptr->mem_upper);*/
	map(0xa0000000, 0x300000, PAGE_WRITE|PAGE_PRESENT);
	prtf("mapped!\n");
	u32int* ptr = (u32int*)0xa0000000;
	*ptr = 1;
	prtf("assigned!\n");
	unmap(0xa0000000);
	prtf("unmapped!\n");
	*ptr = 2;
	prtf("end!\n");
	return 0xdeadbeef;
}
int main(struct multiboot *mboot_ptr)
{
    // Initialise all the ISRs and segmentation
    init_descriptor_tables();
    // Initialise the screen (by clearing it)
    monitor_clear();

    // Find the location of our initial ramdisk.
    ASSERT(mboot_ptr->mods_count > 0);
    u32int initrd_location = *((u32int*)mboot_ptr->mods_addr);
    u32int initrd_end = *(u32int*)(mboot_ptr->mods_addr+4);
    // Don't trample our module with placement accesses, please!
    placement_address = initrd_end;

    // Start paging.
    initialise_paging();

    // Initialise the initial ramdisk, and set it as the filesystem root.
    fs_root = initialise_initrd(initrd_location);

    // list the contents of /
    int i = 0;
    struct dirent *node = 0;
    while ( (node = readdir_fs(fs_root, i)) != 0)
    {
        monitor_write("Found file ");
        monitor_write(node->name);
        fs_node_t *fsnode = finddir_fs(fs_root, node->name);

        if ((fsnode->flags&0x7) == FS_DIRECTORY)
        {
            monitor_write("\n\t(directory)\n");
        }
        else
        {
            monitor_write("\n\t contents: \"");
            char buf[256];
            u32int sz = read_fs(fsnode, 0, 256, buf);
            int j;
            for (j = 0; j < sz; j++)
                monitor_put(buf[j]);
            
            monitor_write("\"\n");
        }
        i++;
    }

    return 0;
}
Пример #13
0
u32int encode(u32int source,u32int sz)
{
//first layer
    monitor_write("Version:");
    monitor_write_dec(version);
    monitor_put('\n');
    u32int i=0;
    u32int temp=0x1;
    u32int result=0;                                 // detect run by symbol 00
    u8int marker=0x0;
    u8int layer1[32];
    while(i<32)
    {   monitor_write_dec((source>>i)&0X3);

        i++;
    }
    i=0;
    while(i<32)
    {   layer1[i]=0;//  clearing garbage value
        i++;
    };

    i=0;

    while(i<32)
    {
        if(((source>>i)&0X3)==temp)
        {
            monitor_write("X:");
//monitor_put('\n');
            monitor_write_dec(marker);
            layer1[marker]=layer1[marker]+1;
            monitor_write_dec(layer1[marker]);

//monitor_put('\n');
            s("  ");
            i++;
        }

        else {
            temp+=1;
            temp%=4;


            marker++;
        }


    }
Пример #14
0
// This gets called from our ASM interrupt handler stub.
void isr_handler(registers_t regs)
{
    if (interrupt_handlers[regs.int_no] != 0)
    {
        isr_t handler = interrupt_handlers[regs.int_no];
        handler(regs);
    }
    else
    {
        monitor_write("UNhandled interrupt ..: %d ",regs.int_no);
newcls();
while(1);
        monitor_write("\n");
    }
}
Пример #15
0
void irq_handler(registers_t regs)
{
	monitor_write("irq");
	monitor_write_dec(regs.int_no);
	monitor_write("err code");//0
	monitor_write_dec(regs.err_code);
	if(spec_handler[regs.int_no] != NULL){
		spec_handler[regs.int_no](regs);
	}
	if(regs.int_no >= 40){
		outb(0xa0, 0x20);
	}
	outb(0x20, 0x20);
	
}
Пример #16
0
int kmain(void* mbd, unsigned int magic)
{
    // Initialise the screen (by clearing it)
    monitor_clear();
    // Alloc some memory
    u8int mem;
    memset(&mem, 32, 5);
    
    monitor_write("Hello, world!\n");
    monitor_write_bin(mem);
    monitor_write("\n");
    monitor_write_dec(mem);
    
    return 0;
}
Пример #17
0
static void timer_irq_handler(registers_t regs)
{
	static uint32_t tick = 0;
	++tick;
	monitor_write("Timer at:");
	monitor_write_dec(tick);
}
Пример #18
0
int main(struct multiboot *mboot_ptr)
{
	monitor_clear();
	monitor_write("Hello, world");
	return 0XDEADBABA;
	
}
Пример #19
0
/**------------------------------------------------------**/
void print_R(char* out, const char *format, ...)
{
	
	LOG_FILETYPE stderr_f;
	char buffer[64];
	
	va_list argptr;
	va_start(argptr, format);
	VSNPRINTF(buffer, format, argptr);
	va_end(argptr);

	if(out == NULL)
	{
		printf_terminal(buffer);
	}else
	{
		if(!monitor_openappend(out,&stderr_f))
		{
			if(!monitor_openwrite(out,&stderr_f))
			{
				return;
			}
		}
		/* print to file */
		(void)monitor_seek_end(&stderr_f);
		(void)monitor_write(buffer,&stderr_f);
		(void)monitor_close(&stderr_f);
	}
	
}
Пример #20
0
// This gets called from our ASM interrupt handler stub.
void isr_handler(registers_t* regs)
{
	
    monitor_write("recieved interrupt: ");
    //monitor_write_dec(regs->int_no);
    monitor_write_dec(5);
    monitor_put('\n');
}
Пример #21
0
void isr_handler(registers_t regs)
{
    monitor_write("received interrupt: ");
    monitor_write_hex(regs.int_no);
    monitor_put('\n');

    if (interrupt_handlers[regs.int_no] != 0) {
        isr_t handler = interrupt_handlers[regs.int_no];
        handler(regs);
    }

    if (regs.int_no == 13) {
        monitor_write("gp error : ");
        monitor_write_hex(regs.err_code);
        monitor_write("\n");
    }
}
Пример #22
0
void fs_dump(int show_content)
{
	int i = 0;
    struct dirent *node = 0;
    while ( (node = readdir_fs(fs_root, i)) != 0)
    {
        monitor_write("[Entity] ");
        monitor_write(node->name);
        fs_node_t *fsnode = finddir_fs(fs_root, node->name);

        if ((fsnode->flags&0x7) == FS_DIRECTORY)
        {
            monitor_write("[Dir]\n");
        }
        else
        {
        	monitor_write("[File]\n");
            if(show_content)
            {
		        monitor_write("\n\t Contents: \"");
		        char buf[256];
		        u32int sz = read_fs(fsnode, 0, 256, buf);
		        int j;
		        for (j = 0; j < sz; j++)
		            putch(buf[j]);
		        
		        monitor_write("\n");
        	}
        }
        i++;
    }
    monitor_write("\n");
}
Пример #23
0
Файл: main.c Проект: steni/RYOOs
int main(struct multiboot *mboot_ptr)
{
    // Initialise the screen (by clearing it)
    monitor_clear();
    // Write out a sample string
    monitor_write("Hello, world!");
    
    return 0;
}
Пример #24
0
void isr_handler(registers_t regs) {
    if (interrupt_handlers[regs.int_no]) {
        interrupt_handlers[regs.int_no](regs);
    }
    else {
        monitor_write("unhandled interrupt: ");
        monitor_write_dec(regs.int_no);
        monitor_put('\n');
    }
}
Пример #25
0
void main(struct multiboot *mboot_ptr) {
    #include "common.h"
    #include "monitor.h"
    const char src[50] = "Hello World! Big brother is watching!";
    char dest[50];
    memcpy(dest, src, strlen(src));
    memset(dest, 'F', strlen(dest));
    monitor_clear();
    monitor_write(dest);  
}
Пример #26
0
void idt_handler (registers_t *regs)
{
  if (interrupt_handlers [regs->int_no])
    interrupt_handlers [regs->int_no] (regs);
  else
  {
    monitor_write ("Unhandled interrupt: ");
    monitor_write_dec (regs->int_no);
    monitor_put ('\n');
  }
}
Пример #27
0
static void timer_callback(registers_t regs)
{
	 regs = regs;
    tick++;
	 if (tick % 200 == 0)
	 {
    	 monitor_write("Tick: ");
	 	 monitor_write_dec(tick / 200);
	 	 monitor_put('\n');
	 }
}
Пример #28
0
void isr_handler(registers_t regs)
{
	if (interrupt_handlers[regs.int_no] != 0) {
		isr_t handler = interrupt_handlers[regs.int_no];
		handler(regs);
	} else {
		monitor_write("received CPU interrupt: ");
		monitor_write_dec(regs.int_no);
		monitor_put('\n');
	}
}
Пример #29
0
void isr_handler(registers_t regs){
	u8int int_no = regs.int_no & 0xFF;
	if(interrupt_handlers[int_no] != 0){
		isr_t handler = interrupt_handlers[int_no];
		handler(&regs);
	} else {
		monitor_write("recieved interrupt: ");
		monitor_write_dec(regs.int_no);
		monitor_put('\n');
	}
}
Пример #30
0
int main(struct multiboot *mboot_ptr)
{
    // Initialise the screen (by clearing it)
    init_descriptor_tables();
    monitor_clear();
    // Write out a sample string
   // for(int i=0;i<26;i++)
     monitor_write("Hello, world!\n");
     asm volatile ("int $0x3");
 //   asm volatile ("int $0x4");
 
    return 0;
}