OSDN Git Service

SimpleHTMLEditorを追加。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_010 / chnos / callbios.c
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/callbios.c b/CHNOSProject/chnos/tolset_chn_000/chnos_010/chnos/callbios.c
deleted file mode 100644 (file)
index af2b771..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-\r
-#include "core.h"\r
-\r
-IO_CallBIOSControl *Initialize_CallBIOS(void)\r
-{\r
-       IO_CallBIOSControl *ctrl;\r
-       uint i;\r
-       const uchar *p;\r
-       uchar *q;\r
-       CPU_ControlRegister4 cr4;\r
-\r
-       ctrl = System_Memory_Allocate(sizeof(IO_CallBIOSControl));\r
-\r
-       //ud2\96½\97ß=16bit\83R\81[\83h\82Ì\96\96\92[\82ð\92T\82·\r
-       p = (uchar *)(&asm_16bit_CallBIOSTask + ADR_BOOTPACK);\r
-       for(i = 0; ; i++){\r
-               if(p[i] == 0x0f){\r
-                       if(p[i + 1] == 0x0b){\r
-                               break;\r
-                       }\r
-               }\r
-       }\r
-\r
-       ctrl->codesize = i + 2;\r
-\r
-       //asmhead\82Ì\82 \82Á\82½\82Æ\82±\82ë\82É\83R\83s\81[\r
-       q = (uchar *)0xc200;\r
-       for(i = 0; i < ctrl->codesize; i++){\r
-               q[i] = p[i];\r
-       }\r
-\r
-       cr4.cr4 = Load_CR4();\r
-       cr4.bit.VME = True;\r
-       Store_CR4(cr4.cr4);\r
-\r
-       ctrl->CallBIOS_Task = System_MultiTask_Task_Initialize((256 >> 3) + (65536 >> 3) + 1);\r
-//CallBIOS 16Bit \83G\83~\83\85\83\8c\81[\83V\83\87\83\93\83^\83X\83N\82ÍFIFO\82ð\8eg\97p\82µ\82È\82¢\82Ì\82Å\83^\83X\83N\82ÌFIFO\82ð\89ð\95ú\r
-       FIFO32_Free(ctrl->CallBIOS_Task->fifo);\r
-       ctrl->CallBIOS_Task->fifo = Null;\r
-\r
-       q = (uchar *)(ctrl->CallBIOS_Task->tss + sizeof(CPU_TaskStateSegment));\r
-       for(i = 0; i < (256 >> 3); i++){\r
-               //q[i] = 0xff;  /*\91S\83\\83t\83g\83E\83G\83A\8a\84\82è\8d\9e\82Ý\82Å\95Û\8cì\83\82\81[\83h\88ê\94Ê\95Û\8cì\97á\8aO\82ð\8bN\82±\82·*/\r
-               q[i] = 0x00;    /*\91S\83\\83t\83g\83E\83G\83A\8a\84\82è\8d\9e\82Ý\82ð\89¼\91z86\83\82\81[\83h\82Å\8f\88\97\9d\82·\82é*/\r
-       }\r
-       //q[1] = ~(1 << 3);     /*(8 * 1) + 3 - 1 = INT:0x10\82ð\89¼\91z86\83\82\81[\83h\82Å\8f\88\97\9d\82·\82é*/\r
-\r
-       ctrl->CallBIOS_Task->tss->iomap_base = sizeof(CPU_TaskStateSegment) + (256 >> 3);\r
-\r
-       q = (uchar *)(ctrl->CallBIOS_Task->tss + sizeof(CPU_TaskStateSegment) + (256 >> 3));\r
-       for(i = 0; i < (65536 >> 3); i++){\r
-               q[i] = 0x00;    /*\91SIO\83|\81[\83g\82ð\81AIOPL\88È\89º\82ÌCPL\82Å\82à\83A\83N\83Z\83X\89Â\94\\82Æ\82·\82é*/\r
-       }\r
-       q[i] = 0xff;\r
-\r
-       ctrl->esp0 = (uint)System_Memory_Allocate(1024 * 32) + (1024 * 32);\r
-       ctrl->CallBIOS_Task->tss->esp0 = ctrl->esp0;\r
-       ctrl->CallBIOS_Task->tss->ss0 = SYSTEM_DS << 3;\r
-\r
-       return ctrl;\r
-}\r
-\r
-//fifo\82É\82Í\81A\8fI\97¹\8fó\8bµ\82ð\8eó\82¯\8eæ\82éfifo\82ð\8ew\92è\82·\82é\81Bendsignal\82Í\90³\8fí\8fI\97¹\81Aendsignal+1\82Í\88Ù\8fí\8fI\97¹\82ð\8e¦\82·\81B\r
-void CallBIOS_Execute(IO_CallBIOSControl *ctrl, uchar intn, DATA_FIFO32 *fifo, uint endsignal)\r
-{\r
-       uchar *q;\r
-\r
-       ctrl->CallBIOS_Task->tss->eip = 0xc200;\r
-       ctrl->CallBIOS_Task->tss->eflags.bit.VM = True;\r
-       ctrl->CallBIOS_Task->tss->cs = 0;\r
-       ctrl->CallBIOS_Task->tss->ss = 0;\r
-       ctrl->CallBIOS_Task->tss->ds = 0;\r
-       ctrl->CallBIOS_Task->tss->esp = 0xc200;\r
-\r
-       ctrl->CallBIOS_Task->tss->esp0 = ctrl->esp0;\r
-\r
-       ctrl->fifo = fifo;\r
-       ctrl->endsignal = endsignal;\r
-\r
-       q = (uchar *)0xc201;\r
-       *q = intn;\r
-\r
-       System_MultiTask_Task_Run(ctrl->CallBIOS_Task);\r
-\r
-       return;\r
-}\r
-\r
-void CallBIOS_Send_End_Of_Operation(IO_CallBIOSControl *ctrl, uint abort)\r
-{\r
-       if(ctrl->fifo != 0){\r
-               if(!abort){\r
-                       FIFO32_Put(ctrl->fifo, ctrl->endsignal);\r
-               } else{\r
-                       FIFO32_Put(ctrl->fifo, ctrl->endsignal + 1);\r
-               }\r
-       }\r
-       return;\r
-}\r
-\r
-void CallBIOS_Check_Privileged_Operation(uint *esp)\r
-{\r
-//\83G\83\89\81[\83R\81[\83h\82Ì\82 \82é\97á\8aO\94­\90\8e\9e\82É\8cÄ\82Î\82ê\82é\82±\82Æ\82ð\91z\92è\r
-//\83G\83\89\81[\83R\81[\83h\82Ì\82È\82¢\97á\8aO\82©\82ç\82¾\82Æ\81A\83X\83^\83b\83N\82ª\82¸\82ê\82é\82Ì\82Å\92\8d\88Ó\r
-       uchar *eip;\r
-       ushort *userstack;\r
-       Emulator_x86_FarPointer *vector;\r
-       CPU_EFlags eflags;\r
-\r
-       eip = (uchar *)((esp[EXCEPTION_INFO_CS] << 4) + (esp[EXCEPTION_INFO_EIP] & 0x0000ffff));\r
-       userstack = (ushort *)((esp[EXCEPTION_INFO_USER_SS] << 4) + (esp[EXCEPTION_INFO_USER_ESP] & 0x0000ffff));\r
-\r
-       if(eip[0] == 0xCD){     /*INT n*/\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("CallBIOS:Privileged Operation Found in v8086mode.\n");\r
-                       debug("UserStack:[0x%X:0x%X] = 0x%X\n", esp[EXCEPTION_INFO_USER_SS], esp[EXCEPTION_INFO_USER_ESP] & 0x0000ffff, userstack);\r
-                       debug("Opcode[0x%X]:INT 0x%X\n", eip, eip[1]);\r
-               #endif\r
-               vector = (Emulator_x86_FarPointer *)(eip[1] << 2);\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("New EIP = [0x%X:0x%X] = [0x%X]\n", vector->selector, vector->offset, (vector->selector << 4) + vector->offset);\r
-               #endif\r
-\r
-               eflags.eflags = esp[EXCEPTION_INFO_EFLAGS];\r
-               //eflags.bit.IF = False;\r
-               eflags.bit.IF = True;   /*\8a\84\82è\8d\9e\82Ý\8bÖ\8e~\82É\82µ\82È\82¢*/\r
-               eflags.bit.TF = False;\r
-               eflags.bit.AC = False;\r
-               CallBIOS_Push_Data_To_Stack(esp, eflags.eflags);\r
-               CallBIOS_Push_Data_To_Stack(esp, esp[EXCEPTION_INFO_CS]);\r
-               CallBIOS_Push_Data_To_Stack(esp, esp[EXCEPTION_INFO_EIP] + 2);\r
-               esp[EXCEPTION_INFO_CS] = vector->selector;\r
-               esp[EXCEPTION_INFO_EIP] = vector->offset;\r
-\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("Return to [0x%X:0x%X] = [0x%X]. Emulation End.\n", esp[EXCEPTION_INFO_CS], esp[EXCEPTION_INFO_EIP], (esp[EXCEPTION_INFO_CS] << 4) + esp[EXCEPTION_INFO_EIP]);\r
-               #endif\r
-\r
-               return;\r
-       } else if(eip[0] == 0xFB){      /*STI*/\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("CallBIOS:Privileged Operation Found in v8086mode.\n");\r
-                       debug("Opcode[0x%X]:STI\n", eip);\r
-               #endif\r
-               /*\89½\82à\82µ\82È\82¢*/\r
-               //eflags.eflags = esp[EXCEPTION_INFO_EFLAGS];\r
-               //eflags.bit.IF = True;\r
-               esp[EXCEPTION_INFO_EIP]++;\r
-\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("Return to [0x%X:0x%X] = [0x%X]. Emulation End.\n", esp[EXCEPTION_INFO_CS], esp[EXCEPTION_INFO_EIP], (esp[EXCEPTION_INFO_CS] << 4) + esp[EXCEPTION_INFO_EIP]);\r
-               #endif\r
-\r
-               return;\r
-       } else if(eip[0] == 0xCF){      /*IRET*/\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("CallBIOS:Privileged Operation Found in v8086mode.\n");\r
-                       debug("UserStack:[0x%X:0x%X] = 0x%X\n", esp[EXCEPTION_INFO_USER_SS], esp[EXCEPTION_INFO_USER_ESP] & 0x0000ffff, userstack);\r
-                       debug("Opcode[0x%X]:IRET\n", eip);\r
-               #endif\r
-               esp[EXCEPTION_INFO_EIP] = CallBIOS_Pop_Data_From_Stack(esp);\r
-               esp[EXCEPTION_INFO_CS] = CallBIOS_Pop_Data_From_Stack(esp);\r
-               eflags.eflags = esp[EXCEPTION_INFO_EFLAGS];\r
-               eflags.eflags = (eflags.eflags & 0xffff0000) | CallBIOS_Pop_Data_From_Stack(esp);\r
-\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("Return to [0x%X:0x%X] = [0x%X]. Emulation End.\n", esp[EXCEPTION_INFO_CS], esp[EXCEPTION_INFO_EIP], (esp[EXCEPTION_INFO_CS] << 4) + esp[EXCEPTION_INFO_EIP]);\r
-               #endif\r
-\r
-               return;\r
-       } else{\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("CallBIOS:Privileged Operation Found in v8086mode.\n");\r
-                       debug("Opcode[0x%X]:0x%X\n", eip, eip[0]);\r
-                       debug("Task Terminate...\n");\r
-               #endif\r
-       }\r
-\r
-       System_CallBIOS_Send_End_Of_Operation(True);\r
-\r
-       for(;;){\r
-               System_MultiTask_Task_Kill(System_MultiTask_GetNowTask());\r
-       }\r
-\r
-       return;\r
-}\r
-\r
-uint CallBIOS_Push_Data_To_Stack(uint *esp, ushort data)\r
-{\r
-       ushort *userstack;\r
-\r
-       if(esp[EXCEPTION_INFO_USER_ESP] < 2){   /*\83X\83^\83b\83N\82ª\91«\82è\82È\82¢*/\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("PushToStack:No More Stack.\n");\r
-               #endif\r
-               return 1;\r
-       }\r
-\r
-       esp[EXCEPTION_INFO_USER_ESP] -= 2;\r
-       userstack = (ushort *)((esp[EXCEPTION_INFO_USER_SS] << 4) + (esp[EXCEPTION_INFO_USER_ESP] & 0x0000ffff));\r
-       userstack[0] = data;\r
-\r
-       #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-               debug("PUSH 0x%X To [0x%X:0x%X] = [0x%X]\n", data, esp[EXCEPTION_INFO_USER_SS], esp[EXCEPTION_INFO_USER_ESP] & 0x0000ffff, userstack);\r
-       #endif\r
-\r
-       return 0;\r
-}\r
-\r
-uint CallBIOS_Pop_Data_From_Stack(uint *esp)\r
-{\r
-       ushort *userstack;\r
-\r
-       if(esp[EXCEPTION_INFO_USER_ESP] > 0x0000fffd){  /*\83X\83^\83b\83N\82ª\91«\82è\82È\82¢*/\r
-               #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-                       debug("PopFromStack:No More Stack.\n");\r
-               #endif\r
-               return 1;\r
-       }\r
-\r
-\r
-       userstack = (ushort *)((esp[EXCEPTION_INFO_USER_SS] << 4) + (esp[EXCEPTION_INFO_USER_ESP] & 0x0000ffff));\r
-\r
-       #ifdef CHNOSPROJECT_DEBUG_CALLBIOS\r
-               debug("Pop 0x%X From [0x%X:0x%X] = [0x%X]\n", userstack[0], esp[EXCEPTION_INFO_USER_SS], esp[EXCEPTION_INFO_USER_ESP] & 0x0000ffff, userstack);\r
-       #endif\r
-\r
-       esp[EXCEPTION_INFO_USER_ESP] += 2;\r
-\r
-       return userstack[0];\r
-}\r