OSDN Git Service

SimpleHTMLEditorを追加。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_010 / chnos / system.c
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/system.c b/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/system.c
deleted file mode 100644 (file)
index d156e1a..0000000
+++ /dev/null
@@ -1,496 +0,0 @@
-\r
-#include "core.h"\r
-\r
-#define PHYSICAL_MEMORY_ALLOCATION_START_ADDRESS       0x00400000\r
-#define SYSTEM_MEMORY_CONTROL_TAGS     1024\r
-//\r
-typedef union CPUID_FUNCTION_FLAGS {\r
-       struct CPUID_FUNCTION_FLAGS_REG {\r
-               uint edx;\r
-               uint ecx;\r
-       } reg;\r
-       struct CPUID_FUNCTION_FLAGS_BITS {\r
-               /*EAX=1,EDX*/\r
-               unsigned FPU : 1;\r
-               unsigned VME : 1;\r
-               unsigned DE : 1;\r
-               unsigned PSE : 1;\r
-               unsigned TSC : 1;\r
-               unsigned MSR : 1;\r
-               unsigned PAE : 1;\r
-               unsigned MCE : 1;\r
-               unsigned CX8 : 1;\r
-               unsigned APIC : 1;\r
-               unsigned edx_bit10 : 1;\r
-               unsigned SEP : 1;\r
-               unsigned MTRR : 1;\r
-               unsigned PGE : 1;\r
-               unsigned MCA : 1;\r
-               unsigned CMOV : 1;\r
-               unsigned PAT : 1;\r
-               unsigned PSE36 : 1;\r
-               unsigned PSN : 1;\r
-               unsigned CLFSH : 1;\r
-               unsigned edx_bit20 : 1;\r
-               unsigned DS : 1;\r
-               unsigned ACPI : 1;\r
-               unsigned MMX : 1;\r
-               unsigned FXSR : 1;\r
-               unsigned SSE : 1;\r
-               unsigned SSE2 : 1;\r
-               unsigned SS : 1;\r
-               unsigned HTT : 1;\r
-               unsigned TM : 1;\r
-               unsigned edx_bit30 : 1;\r
-               unsigned PBE : 1;\r
-               /*EAX=1,ECX*/\r
-               unsigned SSE3 : 1;\r
-               unsigned ecx_bit1 : 1;\r
-               unsigned ecx_bit2 : 1;\r
-               unsigned MONITOR : 1;\r
-               unsigned DSCPL : 1;\r
-               unsigned ecx_bit5 : 1;\r
-               unsigned ecx_bit6 : 1;\r
-               unsigned EST : 1;\r
-               unsigned TM2 : 1;\r
-               unsigned ecx_bit9 : 1;\r
-               unsigned CID : 1;\r
-               unsigned ecx_bit11 : 1;\r
-               unsigned ecx_bit12 : 1;\r
-               unsigned CX16 : 1;\r
-               unsigned XTPR : 1;\r
-               unsigned ecx_bit15 : 1;\r
-               unsigned ecx_bit16 : 1;\r
-               unsigned ecx_bit17 : 1;\r
-               unsigned ecx_bit18 : 1;\r
-               unsigned ecx_bit19 : 1;\r
-               unsigned ecx_bit20 : 1;\r
-               unsigned ecx_bit21 : 1;\r
-               unsigned ecx_bit22 : 1;\r
-               unsigned ecx_bit23 : 1;\r
-               unsigned ecx_bit24 : 1;\r
-               unsigned ecx_bit25 : 1;\r
-               unsigned ecx_bit26 : 1;\r
-               unsigned ecx_bit27 : 1;\r
-               unsigned ecx_bit28 : 1;\r
-               unsigned ecx_bit29 : 1;\r
-               unsigned ecx_bit30 : 1;\r
-               unsigned ecx_bit31 : 1;\r
-       } bit;\r
-} CPUID_FunctionFlags;\r
-\r
-typedef struct SYSTEM_COMMONDATA {\r
-       uint RunningPhase;\r
-       DATA_FIFO32 *InputFocus;\r
-       struct SYSTEM_COMMONDATA_CONTROLLER {\r
-               IO_MemoryControl Memory;\r
-               UI_TaskControl *Task;\r
-               IO_CallBIOSControl *CallBIOS;\r
-               IO_DisplayControl *Display;\r
-       } Controller;\r
-       struct SYSTEM_COMMONDATA_ENVIRONMENT {\r
-               struct SYSTEM_COMMONDATA_ENVIRONMENT_MEMORY {\r
-                       uint PhysicalSize;\r
-               } Memory;\r
-               struct SYSTEM_COMMONDATA_ENVIRONMENT_CPUID {\r
-                       uint max_id;\r
-                       uint max_eid;\r
-                       CPUID_FunctionFlags function_flags;\r
-               } CPUID;\r
-       } Environment;\r
-       struct SYSTEM_COMMONDATA_CORETASK {\r
-               UI_Task *Main;\r
-               UI_Task *KeyboardControl;\r
-               UI_Task *MouseControl;\r
-       } CoreTask;\r
-} System_CommonData;\r
-//\r
-System_CommonData System;\r
-\r
-uchar *SystemRunningPhaseText[] = {\r
-       " 0:Initialising System (Protected 32bit Text Mode)"\r
-};\r
-//\r
-void System_Check_Memory(void);\r
-uint System_CPUID(void *addr, uint id);\r
-\r
-void Initialize_System(void)\r
-{\r
-       uint i;\r
-       uchar s[128];\r
-       uint cpuid_buf[4];\r
-       CPU_EFlags eflags;\r
-       CPU_ControlRegister4 cr4;\r
-\r
-       IO_CLI();\r
-\r
-       TextMode_Clear_Screen();\r
-       Error_Set_Enable_Display_TextMode(True);\r
-\r
-       TextMode_Put_String("Welcome to CHNOSProject!\n", green);\r
-\r
-       System_Set_RunningPhase(0);\r
-\r
-       TextMode_Put_String("\tInitialising SerialPort...\n", white);\r
-       Initialize_SerialPort();\r
-       Error_Set_Enable_SerialPort(True);\r
-\r
-       #ifdef CHNOSPROJECT_DEBUG\r
-               debug("%s:%d\n", __FILE__, __LINE__);\r
-               debug("CHNOSProject is Running in Debug Mode.\n");\r
-       #endif\r
-\r
-//Config Control Register4\r
-       cr4.cr4 = Load_CR4();\r
-       cr4.bit.DE = True;\r
-       Store_CR4(cr4.cr4);\r
-\r
-       TextMode_Put_String("\tInitialising Memory...\n", white);\r
-       System_Check_Memory();\r
-       i = System_Get_PhisycalMemorySize();\r
-       snprintf(s, sizeof(s), "\tMemory:%uByte %uKiB %uMib\n", i, i >> 10, i >> 20);\r
-       TextMode_Put_String(s, white);\r
-       System.Controller.Memory = Memory_Initialize_Control((void *)PHYSICAL_MEMORY_ALLOCATION_START_ADDRESS, i - PHYSICAL_MEMORY_ALLOCATION_START_ADDRESS, SYSTEM_MEMORY_CONTROL_TAGS);\r
-\r
-       i = Memory_Get_FreeSize(System.Controller.Memory);\r
-       snprintf(s, sizeof(s), "\tFreeMemory:%uByte %uKiB %uMib\n", i, i >> 10, i >> 20);\r
-       TextMode_Put_String(s, white);\r
-\r
-       TextMode_Put_String("\tInitialising GDT...\n", white);\r
-       Initialize_GlobalDescriptorTable();\r
-\r
-       TextMode_Put_String("\tInitialising IDT...\n", white);\r
-       Initialize_InterruptDescriptorTable();\r
-\r
-       TextMode_Put_String("\tInitialising PIC...\n", white);\r
-       Initialize_ProgrammableInterruptController();\r
-\r
-       TextMode_Put_String("\tInitialising PIT...\n", white);\r
-       Initialize_ProgrammableIntervalTimer();\r
-\r
-       TextMode_Put_String("\tInitialising Keyboard...\n", white);\r
-       Initialize_Keyboard();\r
-\r
-       TextMode_Put_String("\tInitialising MultiTask...\n", white);\r
-       System.Controller.Task = Initialize_MultiTask_Control(System.Controller.Memory);\r
-       Timer_Set_TaskSwitch(&System_TaskSwitch);\r
-       System.CoreTask.Main = System_MultiTask_GetNowTask();\r
-       System.InputFocus = System.CoreTask.Main->fifo;\r
-\r
-       TextMode_Put_String("\tInitialising CallBIOS...\n", white);\r
-       System.Controller.CallBIOS = Initialize_CallBIOS();\r
-\r
-       TextMode_Put_String("\tReading CPU Identification...\n", white);\r
-       eflags.eflags = IO_Load_EFlags();\r
-       eflags.bit.ID = True;\r
-       IO_Store_EFlags(eflags.eflags);\r
-       eflags.eflags = IO_Load_EFlags();\r
-       if(!eflags.bit.ID){\r
-               TextMode_Put_String("\t\tCPUID is Disabled.\n", white);\r
-               System.Environment.CPUID.max_id = 0xffffffff;\r
-               System.Environment.CPUID.max_eid = 0;\r
-       } else{\r
-               eflags.bit.ID = False;\r
-               IO_Store_EFlags(eflags.eflags);\r
-               eflags.eflags = IO_Load_EFlags();\r
-               if(eflags.bit.ID){\r
-                       TextMode_Put_String("\t\tCPUID is Disabled.\n", white);\r
-                       System.Environment.CPUID.max_id = 0xffffffff;\r
-                       System.Environment.CPUID.max_eid = 0;\r
-               }\r
-       }\r
-       if(System.Environment.CPUID.max_id != 0xffffffff){\r
-               System.Environment.CPUID.max_id = 0;\r
-               TextMode_Put_String("\t\tCPUID is Enabled.\n", white);\r
-               CPUID(cpuid_buf, 0);\r
-               System.Environment.CPUID.max_id = cpuid_buf[0];\r
-               snprintf(s, sizeof(s), "\t\tMaxID =0x%X\n", System.Environment.CPUID.max_id);\r
-               TextMode_Put_String(s, white);\r
-               CPUID(cpuid_buf, 0x80000000);\r
-               if((cpuid_buf[0] & 0x80000000) == 0){\r
-                       TextMode_Put_String("\t\tExtended CPUID is Disabled.\n", white);\r
-               } else{\r
-                       TextMode_Put_String("\t\tExtended CPUID is Enabled.\n", white);\r
-                       System.Environment.CPUID.max_eid = cpuid_buf[0];\r
-                       snprintf(s, sizeof(s), "\t\tMaxEID=0x%X\n", System.Environment.CPUID.max_eid);\r
-                       TextMode_Put_String(s, white);\r
-               }\r
-               CPUID(s, 0);\r
-               s[16] = 0x00;\r
-               TextMode_Put_String("\t\t", white);\r
-               TextMode_Put_String(s + 4, white);\r
-               TextMode_Put_String("\n", white);\r
-               CPUID(cpuid_buf, 1);\r
-               System.Environment.CPUID.function_flags.reg.edx = cpuid_buf[2];\r
-               System.Environment.CPUID.function_flags.reg.ecx = cpuid_buf[3];\r
-               snprintf(s, sizeof(s), "\t\tVME:%d\n", System.Environment.CPUID.function_flags.bit.VME);\r
-               TextMode_Put_String(s, white);\r
-       }\r
-\r
-       TextMode_Put_String("\tInitialising PCI...\n", white);\r
-       Initialize_PCI();\r
-\r
-       TextMode_Put_String("\tSystem Initialising Phase End.\n", white);\r
-\r
-       IO_STI();\r
-\r
-       System.Controller.Display = Initialize_Display();\r
-\r
-//Core Task Run.\r
-\r
-       System.CoreTask.KeyboardControl = System_MultiTask_Task_Initialize(0);\r
-       System.CoreTask.KeyboardControl->tss->eip = (uint)&KeyboardControlTask;\r
-       System.CoreTask.KeyboardControl->tss->cs = SYSTEM_CS << 3;\r
-       System.CoreTask.KeyboardControl->tss->ss = SYSTEM_DS << 3;\r
-       System.CoreTask.KeyboardControl->tss->ds = SYSTEM_DS << 3;\r
-       System.CoreTask.KeyboardControl->tss->esp = (uint)System_Memory_Allocate(1024 * 32) + (1024 * 32);\r
-       MultiTask_Push_Arguments(System.CoreTask.KeyboardControl, 1, &System.InputFocus);\r
-       System_MultiTask_Task_Run(System.CoreTask.KeyboardControl);\r
-\r
-       System.CoreTask.MouseControl = System_MultiTask_Task_Initialize(0);\r
-       System.CoreTask.MouseControl->tss->eip = (uint)&MouseControlTask;\r
-       System.CoreTask.MouseControl->tss->cs = SYSTEM_CS << 3;\r
-       System.CoreTask.MouseControl->tss->ss = SYSTEM_DS << 3;\r
-       System.CoreTask.MouseControl->tss->ds = SYSTEM_DS << 3;\r
-       System.CoreTask.MouseControl->tss->esp = (uint)System_Memory_Allocate(1024 * 32) + (1024 * 32);\r
-       MultiTask_Push_Arguments(System.CoreTask.MouseControl, 2, &System.InputFocus, MouseCursor_Initialize(System.Controller.Display->vramsheet));\r
-       System_MultiTask_Task_Run(System.CoreTask.MouseControl);\r
-\r
-       return;\r
-}\r
-\r
-void System_Set_RunningPhase(uint phase)\r
-{\r
-       System.RunningPhase = phase;\r
-       TextMode_Put_String("\nNow SystemRunningPhase is", white);\r
-       TextMode_Put_String(SystemRunningPhaseText[System.RunningPhase], skyblue);\r
-       TextMode_Put_String("\n", white);\r
-\r
-       return;\r
-}\r
-\r
-uint System_Get_RunningPhase(void)\r
-{\r
-       return System.RunningPhase;\r
-}\r
-\r
-uint System_Get_PhisycalMemorySize(void)\r
-{\r
-       return System.Environment.Memory.PhysicalSize;\r
-}\r
-\r
-void System_SegmentDescriptor_Set_Absolute(uint selector, uint limit, uint base, uint ar)\r
-{\r
-       IO_SegmentDescriptor *gdt = (IO_SegmentDescriptor *)ADR_GDT;\r
-\r
-       if(selector >= 8192){\r
-               return;\r
-       }\r
-\r
-       SegmentDescriptor_Set(&gdt[selector], limit, base, ar);\r
-\r
-       return;\r
-}\r
-\r
-uint System_SegmentDescriptor_Get_Base(uint selector)\r
-{\r
-       IO_SegmentDescriptor *gdt = (IO_SegmentDescriptor *)ADR_GDT;\r
-\r
-       if(selector >= 8192){\r
-               return 0;\r
-       }\r
-\r
-       return SegmentDescriptor_Get_Base(&gdt[selector]);\r
-}\r
-\r
-uint System_SegmentDescriptor_Get_Limit(uint selector)\r
-{\r
-       IO_SegmentDescriptor *gdt = (IO_SegmentDescriptor *)ADR_GDT;\r
-\r
-       if(selector >= 8192){\r
-               return 0;\r
-       }\r
-\r
-       return SegmentDescriptor_Get_Limit(&gdt[selector]);\r
-}\r
-\r
-uint System_SegmentDescriptor_Get_AccessRight(uint selector)\r
-{\r
-       IO_SegmentDescriptor *gdt = (IO_SegmentDescriptor *)ADR_GDT;\r
-\r
-       if(selector >= 8192){\r
-               return 0;\r
-       }\r
-\r
-       return SegmentDescriptor_Get_AccessRight(&gdt[selector]);\r
-}\r
-\r
-uint System_SegmentDescriptor_Set(uint limit, uint base, uint ar)\r
-{\r
-       uint *retaddr;\r
-       uint i;\r
-\r
-       retaddr = &limit - 1;\r
-\r
-       for(i = 1; i < 8192; i++){\r
-               if(System_SegmentDescriptor_Get_Limit(i) == 0){\r
-                       System_SegmentDescriptor_Set_Absolute(i, limit, base, ar);\r
-                       return i;\r
-               }\r
-       }\r
-\r
-       Error_Report(ERROR_NO_MORE_SEGMENT, *retaddr);\r
-\r
-       return 0;\r
-}\r
-\r
-void System_GateDescriptor_Set(uint irq, uint offset, uint selector, uint ar)\r
-{\r
-       IO_GateDescriptor *idt = (IO_GateDescriptor *)ADR_IDT;\r
-\r
-       GateDescriptor_Set(&idt[irq], offset, selector, ar);\r
-\r
-       return;\r
-}\r
-\r
-void System_TaskSwitch(void)\r
-{\r
-       MultiTask_TaskSwitch(System.Controller.Task);\r
-       return;\r
-}\r
-\r
-UI_Task *System_MultiTask_Task_Initialize(uint tss_additional_size)\r
-{\r
-       return MultiTask_Task_Initialize(System.Controller.Task, tss_additional_size);\r
-}\r
-\r
-void System_MultiTask_Task_Run(UI_Task *task)\r
-{\r
-       #ifdef CHNOSPROJECT_DEBUG_CALLLINK\r
-               debug("System_MultiTask_Task_Run:Called from[0x%08X].\n", *((uint *)(&task - 1)));\r
-       #endif\r
-       MultiTask_Task_Run(System.Controller.Task, task);\r
-       return;\r
-}\r
-\r
-void *System_Memory_Allocate(uint size)\r
-{\r
-       return Memory_Allocate(System.Controller.Memory, size);\r
-}\r
-\r
-UI_Task *System_MultiTask_GetNowTask(void)\r
-{\r
-       return MultiTask_GetNowTask(System.Controller.Task);\r
-}\r
-\r
-IO_CallBIOSControl *System_CallBIOS_Get_Controller(void)\r
-{\r
-       return System.Controller.CallBIOS;\r
-}\r
-\r
-void System_CallBIOS_Execute(uchar intn, DATA_FIFO32 *fifo, uint endsignal)\r
-{\r
-       CallBIOS_Execute(System.Controller.CallBIOS, intn, fifo, endsignal);\r
-       return;\r
-}\r
-\r
-void System_Memory_Free(void *addr, uint size)\r
-{\r
-       Memory_Free(System.Controller.Memory, addr, size);\r
-       return;\r
-}\r
-\r
-void System_CallBIOS_Send_End_Of_Operation(uint abort)\r
-{\r
-       CallBIOS_Send_End_Of_Operation(System.Controller.CallBIOS, abort);\r
-       return;\r
-}\r
-\r
-void System_MultiTask_Task_Sleep(UI_Task *task)\r
-{\r
-       MultiTask_Task_Sleep(System.Controller.Task, task);\r
-       return;\r
-}\r
-\r
-void System_MultiTask_Task_Kill(UI_Task *task)\r
-{\r
-       MultiTask_Task_Kill(System.Controller.Task, task);\r
-       return;\r
-}\r
-\r
-DATA_FIFO32 *System_FIFO32_Initialize(uint size)\r
-{\r
-       return FIFO32_Initialize(System.Controller.Memory, size);\r
-}\r
-\r
-uint System_Display_VESA_Set_VideoMode(uint index)\r
-{\r
-       return Display_VESA_Set_VideoMode(System.Controller.Display, index);\r
-}\r
-\r
-IO_DisplayControl *System_Display_Get_Controller(void)\r
-{\r
-       return System.Controller.Display;\r
-}\r
-\r
-uint System_Memory_Get_FreeSize(void)\r
-{\r
-       return Memory_Get_FreeSize(System.Controller.Memory);\r
-}\r
-\r
-uint System_TaskControlMessage_Send_AllTask(uint message)\r
-{\r
-       UI_Task *task;\r
-       uint sended_tasks;\r
-\r
-       sended_tasks = 0;\r
-       for(task = System.Controller.Task->start; task != Null; task = task->next){\r
-               if(task->fifo != Null){\r
-                       sended_tasks++;\r
-                       FIFO32_Put(task->fifo, message);\r
-               }\r
-       }\r
-\r
-       return sended_tasks;\r
-}\r
-\r
-uint System_Sheet_SetParentToVRAM(UI_Sheet *sheet)\r
-{\r
-       return Sheet_SetParent(sheet, System.Controller.Display->vramsheet);\r
-}\r
-\r
-uint System_InputFocus_Change(DATA_FIFO32 *fifo)\r
-{\r
-       if(System.InputFocus != fifo){\r
-               FIFO32_Put(System.InputFocus, INPUTSIGNAL_OFFSET + INPUTSIGNAL_FOCUS_LOST);\r
-               System.InputFocus = fifo;\r
-               FIFO32_Put(System.InputFocus, INPUTSIGNAL_OFFSET + INPUTSIGNAL_FOCUS_GOT);\r
-       }\r
-       return 0;\r
-}\r
-\r
-UI_TaskControl *System_MultiTask_GetController(void)\r
-{\r
-       return System.Controller.Task;\r
-}\r
-\r
-//\r
-void System_Check_Memory(void)\r
-{\r
-       System.Environment.Memory.PhysicalSize = Memory_Test(0x00400000, 0xbfffffff);\r
-       return;\r
-}\r
-\r
-uint System_CPUID(void *addr, uint id) //addr\94Ô\92n\82Ìuint[4]\82É\81ACPU\82Ì\8e¯\95Ê\8fî\95ñid\94Ô\82ðEAX\81EEBX\81EEDX\81EECX\82Ì\8f\87\94Ô\82Å\8ai\94[\82·\82é\81B\r
-{                                      //CPUID\82ª\97\98\97p\95s\89Â\82Ì\8fê\8d\87\82Í\81A\96ß\82è\92l\82Í0xffffffff\81A\97\98\97p\89Â\94\\82È\82ç\81A\8dÅ\91å\93ü\97Í\92l\81i\8aî\96{\8fî\95ñ\82Ì\8fê\8d\87\81j\82ð\95Ô\82·\81B\r
-       if(System.Environment.CPUID.max_id == 0xffffffff){\r
-               return 0;\r
-       }\r
-\r
-       if(id <= System.Environment.CPUID.max_id || (0x80000000 <= id && id <= System.Environment.CPUID.max_eid)){\r
-               CPUID(addr, id);\r
-       }\r
-\r
-       return System.Environment.CPUID.max_id;\r
-}\r
-\r