main.c

Go to the documentation of this file.
00001 /*****************************************************************************************
00002  Copyright (c) 2002-2004, 2005 The UbixOS Project
00003  All rights reserved.
00004 
00005  Redistribution and use in source and binary forms, with or without modification, are
00006  permitted provided that the following conditions are met:
00007 
00008  Redistributions of source code must retain the above copyright notice, this list of
00009  conditions, the following disclaimer and the list of authors.  Redistributions in binary
00010  form must reproduce the above copyright notice, this list of conditions, the following
00011  disclaimer and the list of authors in the documentation and/or other materials provided
00012  with the distribution. Neither the name of the UbixOS Project nor the names of its
00013  contributors may be used to endorse or promote products derived from this software
00014  without specific prior written permission.
00015 
00016  THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
00017  EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
00018  MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL
00019  THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00020  SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT
00021  OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
00022  HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
00023  TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
00024  SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00025 
00026  $Id: main_8c-source.html 88 2016-01-12 00:11:29Z reddawg $
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  Desc: The Kernels Descriptor table:
00063        0x00 - Dummy Entry
00064        0x08 - Ring 0 CS
00065        0x10 - Ring 0 DS 
00066        0x18 - Dummy LDT
00067        0x20 - Scheduler TSS
00068        0x28 - Ring 3 CS
00069        0x30 - Ring 3 DS
00070        0x38 - GPF TSS
00071        0x40 - Stack Fault TSS
00072 
00073  Notes: 
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   /* Set up counter for startup routine */
00099   int i = 0x0;
00100   uInt32 *sysTask = 0x0;
00101 
00102   /* Do A Clear Screen Just To Make The TEXT Buffer Nice And Empty */
00103   clearScreen();
00104   kprint("AAA");
00105   kprint("BBB");
00106 kprintf("TEST");
00107   /* Modify src/sys/include/ubixos/init.h to add a startup routine */
00108   for (i=0x0;i<init_tasksTotal;i++) {
00109     if (init_tasks[i]() != 0x0) {
00110       kpanic("Error: Initializing System.\n");
00111       }
00112     }
00113 
00114   /* New Root Mount Point */
00115   //Old 2 new 10
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   /* Do our mounting */
00122  /* 
00123   if (vfs_mount(0x0,0x0,0x0,0x0,"sys","rw") != 0x0) {
00124     kprintf("Problem Mounting sys Mount Point\n");
00125     }
00126   if (vfs_mount(0x0,0x0,0x1,0x0,"tmp","rw") != 0x0) {
00127     kprintf("Problem Mounting tmp Mount Point\n");
00128     }
00129   */
00130   
00131   /* Initialize the system */
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); /* OS Initializer    */
00144   
00145         irqEnable(0x0);
00146   
00147         while (0x1)
00148                 asm("hlt"); /* Keep haulting until the scheduler reacts */
00149   
00150         /* Return to start however we should never get this far */
00151         return(0x0);
00152 }
00153 
00154 /***
00155  END
00156  ***/

Generated on Fri Dec 15 11:18:55 2006 for UbixOS V2 by  doxygen 1.4.7