+++ /dev/null
-\r
-#include "core.h"\r
-\r
-UI_Console *Console_Initialize(void)\r
-{\r
- UI_Console *console;\r
-\r
- console = (UI_Console *)System_CommonStruct_Allocate(SYSTEM_STRUCTID_CONSOLE);\r
-\r
- console->task = System_MultiTask_Task_Initialize(0);\r
- console->task->tss->eip = (uint)&Console_MainTask;\r
- console->task->tss->cs = SYSTEM_CS << 3;\r
- console->task->tss->ss = SYSTEM_DS << 3;\r
- console->task->tss->ds = SYSTEM_DS << 3;\r
- console->task->tss->esp = (uint)System_Memory_Allocate(1024 * 32) + (1024 * 32);\r
- MultiTask_Push_Arguments(console->task, 1, console);\r
-\r
- console->textbox = TextBox_Initialize();\r
-\r
- console->flags.bit.initialized = True;\r
-\r
- #ifdef CHNOSPROJECT_DEBUG_CONSOLE\r
- debug("Console_Initialize:initialized[0x%X]\n", console);\r
- #endif\r
-\r
- return console;\r
-}\r
-\r
-uint Console_SetSize(UI_Console *console, uint xchars, uint ychars)\r
-{\r
- if(console == Null){\r
- return 1;\r
- }\r
-\r
- if(!console->flags.bit.initialized){\r
- return 2;\r
- }\r
-\r
- if(console->flags.bit.configured_size){\r
- return 3;\r
- }\r
-\r
- TextBox_SetBuffer(console->textbox, xchars, ychars, 8, Null);\r
- System_Sheet_SetParentToVRAM(console->textbox->sheet);\r
- Sheet_SetMovable(console->textbox->sheet, True);\r
- Sheet_SetInputFIFO(console->textbox->sheet, console->task->fifo);\r
-\r
- console->flags.bit.configured_size = True;\r
-\r
- #ifdef CHNOSPROJECT_DEBUG_CONSOLE\r
- debug("Console_SetSize:configured[0x%X]\n", console);\r
- #endif\r
-\r
- return 0;\r
-}\r
-\r
-uint Console_Run(UI_Console *console)\r
-{\r
- if(console == Null){\r
- return 1;\r
- }\r
-\r
- if(!console->flags.bit.initialized){\r
- return 2;\r
- }\r
-\r
- if(!console->flags.bit.configured_size){\r
- return 3;\r
- }\r
-\r
- #ifdef CHNOSPROJECT_DEBUG_CONSOLE\r
- debug("Console_Run:start running[0x%X]\n", console);\r
- #endif\r
-\r
- System_MultiTask_Task_Run(console->task);\r
- return 0;\r
-}\r
-\r
-void Console_MainTask(UI_Console *console)\r
-{\r
- UI_Task *mytask;\r
- uint data;\r
- UI_Timer *ctimer;\r
- bool key_ignore;\r
-\r
- data = 0;\r
-\r
- mytask = System_MultiTask_GetNowTask();\r
-\r
- #ifdef CHNOSPROJECT_DEBUG\r
- debug("CMT:ConsoleMainTask[UI_Task=0x%X] Start Running.\n", mytask);\r
- #endif\r
-\r
- console->printf_buffer = (uchar *)System_Memory_Allocate(CONSOLE_PRINTF_BUFFER_SIZE);\r
-\r
- TextBox_Show(console->textbox, SHEET_MAX_CHILDREN, (int)(console->textbox->sheet->parent->size.x >> 1) - (int)(console->textbox->sheet->size.x >> 1), (int)(console->textbox->sheet->parent->size.y >> 1) - (int)(console->textbox->sheet->size.y >> 1));\r
- if(console->textbox->sheet->location.x < 0){\r
- Sheet_Slide_Absolute(console->textbox->sheet, 0, SHEET_LOCATION_NOCHANGE);\r
- }\r
- if(console->textbox->sheet->location.y < 0){\r
- Sheet_Slide_Absolute(console->textbox->sheet, SHEET_LOCATION_NOCHANGE, 0);\r
- }\r
- TextBox_Put_Character(console->textbox, '>');\r
- TextBox_SetEnable_RecordInputText(console->textbox, True);\r
- console->flags.bit.isprompt = True;\r
-\r
- ctimer = Timer_Initialize();\r
- Timer_Config(ctimer, 500, mytask->fifo, 1, True);\r
- Timer_Run(ctimer);\r
-\r
- console->boot_fd = FloppyDisk_Initialize(ADR_DISKIMG);\r
-\r
- for(;;){\r
- if(FIFO32_MyTaskFIFO_Status() == 0){\r
- System_MultiTask_Task_Sleep(mytask);\r
- } else{\r
- data = FIFO32_MyTaskFIFO_Get();\r
- #ifdef CHNOSPROJECT_DEBUG_CMT\r
- debug("CMT:Receive data from FIFO(data:0x%X).\n", data);\r
- #endif\r
- if(data < INPUTSIGNAL_OFFSET){\r
- //\94Ä\97p\97\98\97p\89Â\94\\97Ì\88æ0\r
- if(data == 1){\r
- TextBox_Cursor_Blink(console->textbox);\r
- }\r
- } else if(data < SIGNAL_KEY_OFFSET){\r
- data -= INPUTSIGNAL_OFFSET;\r
- if(data == INPUTSIGNAL_FOCUS_GOT){\r
- TextBox_SetEnable_CursorBlink(console->textbox, True);\r
- } else if(data == INPUTSIGNAL_FOCUS_LOST){\r
- TextBox_SetEnable_CursorBlink(console->textbox, False);\r
- }\r
- //\93ü\97Í\92Ê\92m\97Ì\88æ\r
- } else if(data < SIGNAL_KEY_OFFSET + 0xffff){\r
- key_ignore = False;\r
- //keyid\92Ê\92m\r
- data -= SIGNAL_KEY_OFFSET;\r
- if(!(data & KEYID_MASK_BREAK) && (data & KEYID_MASK_EXTENDED)){\r
- if((data & KEYID_MASK_ID) == KEYID_ENTER){\r
- key_ignore = True;\r
- TextBox_SetEnable_RecordInputText(console->textbox, False);\r
- TextBox_Put_Character(console->textbox, '\n');\r
- if(Console_CompareCommandline_n(console, "test", 4)){\r
- TextBox_Put_String(console->textbox, "Hello, World.\n");\r
- if(console->textbox->text_buf[4] == ' '){\r
- Console_printf(console, "value16:0x%X\n", strtol(&console->textbox->text_buf[5], Null, 0));\r
- Console_printf(console, "value10:%u\n", strtol(&console->textbox->text_buf[5], Null, 0));\r
- }\r
- } else if(Console_CompareCommandline_s(console, "mem")){\r
- Console_printf(console, "Total:%10uBytes %5uKB\n", System_Get_PhisycalMemorySize(), System_Get_PhisycalMemorySize() >> 10);\r
- Console_printf(console, "Free :%10uBytes %5uKB\n", System_Memory_Get_FreeSize(), System_Memory_Get_FreeSize() >> 10);\r
- } else if(Console_CompareCommandline_s(console, "dir")){\r
- Console_Command_dir(console);\r
- } else if(Console_CompareCommandline_n(console, "pci", 3)){\r
- Console_Command_pci(console);\r
- } else if(Console_CompareCommandline_n(console, "type", 4)){\r
- Console_Command_type(console);\r
- } else if(Console_CompareCommandline_n(console, "task", 4)){\r
- Console_Command_task(console);\r
- } else{\r
- TextBox_Put_String(console->textbox, "Console:There is no such file or command:");\r
- TextBox_Put_String(console->textbox, console->textbox->text_buf);\r
- }\r
- TextBox_Put_Character(console->textbox, '\n');\r
- TextBox_Put_Character(console->textbox, '>');\r
- TextBox_SetEnable_RecordInputText(console->textbox, True);\r
- }\r
- }\r
- if(!key_ignore){\r
- TextBox_Put_Key(console->textbox, data);\r
- }\r
- } else if(data < TCM_OFFSET){\r
- //\94Ä\97p\97\98\97p\89Â\94\\97Ì\88æ1\r
- } else{\r
- //TCM\97Ì\88æ\r
- }\r
- }\r
- }\r
-}\r
-\r
-bool Console_CompareCommandline_s(UI_Console *console, const uchar s[])\r
-{\r
- return CFunction_CompareStrings(console->textbox->text_buf, s);\r
-}\r
-\r
-bool Console_CompareCommandline_n(UI_Console *console, const uchar s[], unsigned int n)\r
-{\r
- return CFunction_CompareStrings_n(console->textbox->text_buf, s, n);\r
-}\r
-\r
-uint Console_printf(UI_Console *console, const uchar format[], ...)\r
-{\r
- CFunction_vsnprintf(console->printf_buffer, CONSOLE_PRINTF_BUFFER_SIZE, format, (uint *)(&format + 1));\r
- TextBox_Put_String(console->textbox, console->printf_buffer);\r
- return 0;\r
-}\r
-\r
-uint Console_Command_dir(UI_Console *console)\r
-{\r
- uint i, j;\r
- IO_FloppyDisk_DirectoryEntry_UpdateTime rdetime;\r
- IO_FloppyDisk_DirectoryEntry_UpdateDate rdedate;\r
- IO_FloppyDisk_DirectoryEntry_Attribute rdeattr;\r
-\r
- for(i = 0; i < FLOPPYDISK_RDE_ENTRIES; i++){\r
- if(console->boot_fd->files[i].name[0] == 0x00){\r
- break;\r
- }\r
- rdeattr.attribute = console->boot_fd->files[i].attribute;\r
- if(console->boot_fd->files[i].name[0] != 0xe5 && console->boot_fd->files[i].name[0] != 0x05 && !rdeattr.bit.volumelabel && !rdeattr.bit.directory){\r
- for(j = 0; j < 8; j++){\r
- TextBox_Put_Character(console->textbox, console->boot_fd->files[i].name[j]);\r
- }\r
- TextBox_Put_Character(console->textbox, '.');\r
- for(j = 0; j < 3; j++){\r
- TextBox_Put_Character(console->textbox, console->boot_fd->files[i].ext[j]);\r
- }\r
- Console_printf(console, " %6d", console->boot_fd->files[i].size);\r
- rdedate.updatedate = console->boot_fd->files[i].updatedate;\r
- Console_printf(console, " %04d/%02d/%02d", rdedate.bit.year + 1980, rdedate.bit.month, rdedate.bit.day);\r
- rdetime.updatetime = console->boot_fd->files[i].updatetime;\r
- Console_printf(console, " %02d:%02d:%02d\n", rdetime.bit.hour, rdetime.bit.minute, rdetime.bit.second << 1);\r
- }\r
- }\r
-\r
- return 0;\r
-}\r
-\r
-uint Console_Command_pci(UI_Console *console)\r
-{\r
- uchar *p;\r
- uint bus, device, function;\r
- uint data;\r
-\r
- TextBox_Put_String(console->textbox, "-<pci information>-\n");\r
- if(CFunction_String_GetWord(console->textbox->text_buf, &p, 1)){\r
- if(CFunction_String_GetWord(console->textbox->text_buf, &p, 3)){\r
- function = strtol(p, Null, 0);\r
- CFunction_String_GetWord(console->textbox->text_buf, &p, 2);\r
- device = strtol(p, Null, 0);\r
- CFunction_String_GetWord(console->textbox->text_buf, &p, 1);\r
- bus = strtol(p, Null, 0);\r
- Console_printf(console, "Bus%3d.Device%2d.Function%2d:\n", bus, device, function);\r
- if(bus < 256 && device < 32 && function < 8){\r
- PCI_ConfigurationRegister_SelectDevice(bus, device, function);\r
- data = PCI_ConfigurationRegister_Read32(0x00);\r
- if(data == 0xffffffff){\r
- TextBox_Put_String(console->textbox, "Device not exist.\n");\r
- } else{\r
- Console_printf(console, "DeviceVendor:%s(0x%04X)\n", PCI_GetDeviceVendor(data & 0xffff), data & 0xffff);\r
- Console_printf(console, "DeviceID :0x%04X\n", data >> 16);\r
-\r
- data = PCI_ConfigurationRegister_Read32(0x08);\r
- data = CFunction_ExtractBits(data, 8, 31);\r
- Console_printf(console, "ClassCode :%s(0x%06X)\n", PCI_GetDeviceClass(data), data);\r
-\r
- data = PCI_ConfigurationRegister_Read32(0x0c);\r
- data = CFunction_ExtractBits(data, 16, 22);\r
- Console_printf(console, "DeviceType :%s(%d)\n", PCI_GetDeviceType(data), data);\r
- }\r
- } else{\r
- TextBox_Put_String(console->textbox, "Invalid Device.\n");\r
- }\r
- }\r
- } else{\r
- TextBox_Put_String(console->textbox, "Usage:");\r
- TextBox_Put_String(console->textbox, "pci <bus> <device> <function>\n\nDevices which exist:\n");\r
- for(bus = 0; bus < 256; bus++){\r
- for(device = 0; device < 32; device++){\r
- for(function = 0; function < 8; function++){\r
- PCI_ConfigurationRegister_SelectDevice(bus, device, function);\r
- data = PCI_ConfigurationRegister_Read32(0x00);\r
- if(data != 0xffffffff){\r
- Console_printf(console, "%3d.%2d.%2d, ", bus, device, function);\r
- }\r
- }\r
- }\r
- }\r
- }\r
- return 0;\r
-}\r
-\r
-uint Console_Command_type(UI_Console *console)\r
-{\r
- uchar *p;\r
- IO_File *file;\r
- uint i;\r
-\r
- TextBox_Put_String(console->textbox, "-<type>-");\r
- if(CFunction_String_GetWord(console->textbox->text_buf, &p, 1)){\r
- if(FloppyDisk_IsPathExist(console->boot_fd, p)){\r
- TextBox_Put_String(console->textbox, ":");\r
- TextBox_Put_String(console->textbox, p);\r
- TextBox_Put_String(console->textbox, "\n");\r
- file = File_Initilaize();\r
- if(FloppyDisk_LoadFile(console->boot_fd, file, p) == 0){\r
- for(i = 0; i < file->size; i++){\r
- TextBox_Put_Character(console->textbox, ((uchar *)file->img)[i]);\r
- }\r
- } else{\r
- TextBox_Put_String(console->textbox, "type:File load Error.\n");\r
- }\r
- File_Free(file);\r
- } else{\r
- TextBox_Put_String(console->textbox, "\ntype:The path is not exist.\n");\r
- }\r
- } else{\r
- TextBox_Put_String(console->textbox, "\nUsage:");\r
- TextBox_Put_String(console->textbox, "type filepath\n");\r
- }\r
- return 0;\r
-}\r
-\r
-uint Console_Command_task(UI_Console *console)\r
-{\r
- uint i;\r
- uchar *p;\r
- UI_TaskControl *taskctrl;\r
- UI_Task *search;\r
-\r
- taskctrl = System_MultiTask_GetController();\r
-\r
- TextBox_Put_String(console->textbox, "-<task>-\n");\r
- if(CFunction_String_GetWord(console->textbox->text_buf, &p, 1)){\r
-/*\r
- if(FloppyDisk_IsPathExist(console->boot_fd, p)){\r
- TextBox_Put_String(console->textbox, ":");\r
- TextBox_Put_String(console->textbox, p);\r
- TextBox_Put_String(console->textbox, "\n");\r
- file = File_Initilaize();\r
- if(FloppyDisk_LoadFile(console->boot_fd, file, p) == 0){\r
- for(i = 0; i < file->size; i++){\r
- TextBox_Put_Character(console->textbox, ((uchar *)file->img)[i]);\r
- }\r
- } else{\r
- TextBox_Put_String(console->textbox, "type:File load Error.\n");\r
- }\r
- File_Free(file);\r
- } else{\r
- TextBox_Put_String(console->textbox, "\ntype:The path is not exist.\n");\r
- }\r
-*/\r
- } else{\r
- TextBox_Put_String(console->textbox, "Task list:\n");\r
- for(search = taskctrl->start; search != Null; search = search->next){\r
- Console_printf(console, "sel:%02X count:%d\n", search->selector, search->count);\r
- }\r
- }\r
-\r
- return 0;\r
-}\r