Newer
Older
ubixos / src / sys / init / main.c
@reddawg reddawg on 5 May 2002 1 KB Woot
/**************************************************************************************
 Copyright (c) 2002
      The UbixOS Project

 $Id$
**************************************************************************************/

#include <ubixos/gdt.h>
#include <ubixos/scheduler.h>
#include <version/version.h>

unsigned char KERNEL_STACK[8192];

int main();

descriptorTable(GDT,5) {
  {dummy:0},
  standardDescriptor(0, 0xFFFFF, (dCode + dRead + dBig + dBiglim)),
  standardDescriptor(0, 0xFFFFF, (dData + dWrite + dBig + dBiglim)),
  standardDescriptor(0, 0xFFFFF, (dLdt)),
  standardDescriptor(1000, (sizeof(struct tssStruct)-1), (dTss)),
  };

struct {
  unsigned short limit __attribute__ ((packed));
  union descriptorTableunion *idt __attribute__ ((packed));
  } loadgdt = { (5 * sizeof(union descriptorTableunion) - 1), GDT };

void _start(void) {
  asm(
    "lgdtl (loadgdt)     \n"
    "movw $0x10,%%ax     \n"
    "movw %%ax,%%ds      \n"
    "movw %%ax,%%es      \n"
    "movw %%ax,%%fs      \n"
    "movw %%ax,%%gs      \n"
    "movw %%ax,%%ss      \n"
    "movl $0xFFFF,%%esp  \n"
    "mov $0x18,%%ax      \n" //Set up dummy LDT
    "lldt %%ax           \n"
    "mov $0x20,%%ax      \n" // Set up dummy TSS
    "ltr %%ax            \n" // Loads dummy TSS
    :
    : "r" (GDT), "p" (KERNEL_STACK+4096)
    : "%eax"
    );
  main(); //Start Of Kernel Functionality
  while(1);
  }

/*
void _start() {
  asm(
    "lgdt (loadgdt)     \n"
    "mov $0x18,%%ax  \n"
    "ltr %%ax        \n"
    :
    : "r" (GDT)
    );
  main();
  while (1);
  }
  */

int main() {
  outputVersion();  //Display Version Info
  return(0);
  }