Example #1
0
int
main ()
{
  int *p;

  p = get_gd ();
  set_gd (3);
  if (*p != 3 || !test_gd (3))
    abort ();

  p = get_ld ();
  set_ld (4);
  if (*p != 4 || !test_ld (4))
    abort ();

  printf ("PASS\n");

  return 0;
}
Example #2
0
static int
do_test (void)
{
  int *p;

  p = get_gd ();
  set_gd (3);
  if (*p != 3 || !test_gd (3))
    abort ();

  p = get_ld ();
  set_ld (4);
  if (*p != 4 || !test_ld (4))
    abort ();

  printf ("PASS\n");

  return 0;
}
Example #3
0
// Kernel
void kernel(dword magic, dword addr) {
	dword * t;
	byte * buffer;
	multiboot_info_t * multiboot_info;
	// Print something
	clrscr();
	puts("Starting...\n");
	// MBoot check
	if(magic != MULTIBOOT_BOOTLOADER_MAGIC) {
		puts("Invalid magic number!\n");
		for(;;);
	}
	multiboot_info = (multiboot_info_t *)addr;
	if (CHECK_FLAG(multiboot_info -> flags, 4) && CHECK_FLAG(multiboot_info -> flags, 5)) {
        puts("Invalid! Both bits 4 and 5 are set!\n");
        for(;;);
	}
	printf("multiboot_info_flags = 0x%x\n", multiboot_info -> flags);
    if(CHECK_FLAG(multiboot_info -> flags, 0)) {
		printf("mem_lower = 0x%x KiB\n", multiboot_info -> mem_lower);
		printf("mem_upper = 0x%x KiB\n", multiboot_info -> mem_upper);
	}
	if(CHECK_FLAG(multiboot_info -> flags, 1)) {
		printf("boot_device = 0x%x\n", multiboot_info -> boot_device);
	}
	if(CHECK_FLAG(multiboot_info -> flags, 2)) {
		printf("cmdline = %s\n", (char *)multiboot_info -> cmdline);
	}
	// Init GDT
	set_gd(gd + 0, 0x0, 0x0, 0x0); // zero
	set_gd(gd + 1, 0x0, 0xcfffff, 0x9a); // cs
	set_gd(gd + 2, 0x0, 0xcfffff, 0x92); // ds
	gdtr.limit = 0x2000;
	gdtr.gd = gd;
	asm("lgdt %0"::"m"(gdtr));
	// Init IRQ
	init_irq();
	// Init IDT
	populate_idt(id);
	idtr.limit = 0x7ff;
	idtr.id = id;
	asm("lidt %0"::"m"(idtr));
	// Init paging
	init_paging();
	asm ("" : :"a"(pdbr));
	asm("mov %eax, %cr3");
	asm("mov %cr0, %eax");
	asm("bts $0x1f, %eax");
	asm("mov %eax, %cr0");
	asm("jmp . + 2");
	// Test FAT
	fat_init(& media_read, 30);
	buffer = malloc(512);
    fat_loadfile("test", buffer, 512);
	puts((char *)buffer);
	// Permit int
	asm("sti");
	// Test paging
	t = (dword *)0x900000;
	*t = 7;
	// LOOP
	for(;;);
}