00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #include <ubixos/init.h>
00031 #include <sys/gdt.h>
00032 #include <sys/video.h>
00033 #include <sys/tss.h>
00034 #include <ubixos/exec.h>
00035 #include <ubixos/kpanic.h>
00036 #include <ubixos/systemtask.h>
00037 #include <vfs/mount.h>
00038 #include <lib/kprintf.h>
00039 #include <lib/kmalloc.h>
00040
00041 #define B_ADAPTORSHIFT 24
00042 #define B_ADAPTORMASK 0x0f
00043 #define B_ADAPTOR(val) (((val) >> B_ADAPTORSHIFT) & B_ADAPTORMASK)
00044 #define B_CONTROLLERSHIFT 20
00045 #define B_CONTROLLERMASK 0xf
00046 #define B_CONTROLLER(val) (((val)>>B_CONTROLLERSHIFT) & B_CONTROLLERMASK)
00047 #define B_SLICESHIFT 20
00048 #define B_SLICEMASK 0xff
00049 #define B_SLICE(val) (((val)>>B_SLICESHIFT) & B_SLICEMASK)
00050 #define B_UNITSHIFT 16
00051 #define B_UNITMASK 0xf
00052 #define B_UNIT(val) (((val) >> B_UNITSHIFT) & B_UNITMASK)
00053 #define B_PARTITIONSHIFT 8
00054 #define B_PARTITIONMASK 0xff
00055 #define B_PARTITION(val) (((val) >> B_PARTITIONSHIFT) & B_PARTITIONMASK)
00056 #define B_TYPESHIFT 0
00057 #define B_TYPEMASK 0xff
00058 #define B_TYPE(val) (((val) >> B_TYPESHIFT) & B_TYPEMASK)
00059
00060
00061
00062
00063
00064
00065
00066
00067
00068
00069
00070
00071
00072
00073
00074
00075
00076 ubixDescriptorTable(ubixGDT,9) {
00077 {dummy:0},
00078 ubixStandardDescriptor(0x0000, 0xFFFFF, (dCode + dRead + dBig + dBiglim)),
00079 ubixStandardDescriptor(0x0000, 0xFFFFF, (dData + dWrite + dBig + dBiglim)),
00080 ubixStandardDescriptor(0x0000, 0xFFFFF, (dLdt)),
00081 ubixStandardDescriptor(0x4200, (sizeof(struct tssStruct)), (dTss + dDpl3)),
00082 ubixStandardDescriptor(0x0000, 0xFFFFF, (dCode + dWrite + dBig + dBiglim + dDpl3)),
00083 ubixStandardDescriptor(0x0000, 0xFFFFF, (dData + dWrite + dBig + dBiglim + dDpl3)),
00084 ubixStandardDescriptor(0x4200, (sizeof(struct tssStruct)), (dTss)),
00085 ubixStandardDescriptor(0x6200, (sizeof(struct tssStruct)), (dTss)),
00086 };
00087 struct {
00088 unsigned short limit __attribute__ ((packed));
00089 union descriptorTableUnion *gdt __attribute__ ((packed));
00090 } loadGDT = { (9 * sizeof(union descriptorTableUnion) - 1), ubixGDT };
00091
00097 int kmain(uInt32 rootdev) {
00098
00099 int i = 0x0;
00100 uInt32 *sysTask = 0x0;
00101
00102
00103 clearScreen();
00104 kprint("AAA");
00105 kprint("BBB");
00106 kprintf("TEST");
00107
00108 for (i=0x0;i<init_tasksTotal;i++) {
00109 if (init_tasks[i]() != 0x0) {
00110 kpanic("Error: Initializing System.\n");
00111 }
00112 }
00113
00114
00115
00116 kprintf("[0xX][0x%X:0x%X:0x%X:0x%X:0x%X:0x%X]\n",B_ADAPTOR(rootdev),B_CONTROLLER(rootdev),B_SLICE(rootdev),B_UNIT(rootdev),B_PARTITION(rootdev),B_TYPE(rootdev));
00117 if (vfs_mount(0x1,B_PARTITION(rootdev)+2,0x0,0xAA,"sys","rw") != 0x0) {
00118 kprintf("Problem Mounting sys Mount Point\n");
00119 }
00120
00121
00122
00123
00124
00125
00126
00127
00128
00129
00130
00131
00132 kprintf("Free Pages: [%i]\n",systemVitals->freePages);
00133
00134 kprintf("MemoryMap: [0x%X]\n",vmmMemoryMap);
00135 kprintf("Starting OS\n");
00136
00137 sysTask = kmalloc(0x2000);
00138 if(sysTask == NULL)
00139 kprintf("OS: Unable to allocate memory\n");
00140
00141 execThread(systemTask, (uInt32)sysTask+0x2000,0x0);
00142
00143 execFile("sys:/bin/init",0x0,0x0,0x0);
00144
00145 irqEnable(0x0);
00146
00147 while (0x1)
00148 asm("hlt");
00149
00150
00151 return(0x0);
00152 }
00153
00154
00155
00156