--- /dev/null
+\r
+#include "core.h"\r
+\r
+void init_system(void)\r
+{\r
+ DATA_VESAInfo *vesa = (DATA_VESAInfo *) ADR_VESAINFO;\r
+ DATA_BootInfo *boot = (DATA_BootInfo *) ADR_BOOTINFO;\r
+ uint i;\r
+\r
+ i = memtest(0x00400000, 0xbfffffff);\r
+ sys_main_str_buf = (struct SYSTEM *)(i - sizeof(struct SYSTEM));\r
+\r
+ system.io.mem.paging.dir = (uint *)0x00400000;\r
+ (uint)system.io.mem.paging.table = 0x00400000 + (1024 * 4);\r
+\r
+ system.io.mem.segment.gdt = (IO_SegmentDescriptor *)ADR_GDT;\r
+ system.io.interrupt.idt = (IO_GateDescriptor *)ADR_IDT;\r
+\r
+ system.io.mem.total = i;\r
+ system.data.info.vesa = *vesa;\r
+ system.data.info.boot = *boot;\r
+\r
+ system.ui.console.org_xsize = (system.data.info.boot.scrnx >> 1) & 0xfffffff0;\r
+ system.ui.console.org_ysize = (system.data.info.boot.scrny >> 1) & 0xffffffe0;\r
+ system.ui.console.org_xchars = system.ui.console.org_xsize >> 3;\r
+ system.ui.console.org_ychars = system.ui.console.org_ysize >> 4;\r
+\r
+ system.io.file.list = (IO_FileInfo *)(ADR_DISKIMG + 0x00002600);\r
+\r
+ init_gdtidt();\r
+ init_pic();\r
+ init_serial();\r
+ init_paging();\r
+ sys_memman_init();\r
+ sys_memman_free((void *)(0x00400000 + (1024 * 4) + (1024 * 1024 * 4)), system.io.mem.total - sizeof(struct SYSTEM) - 0x00400000) - (1024 * 4) - (1024 * 1024 * 4);\r
+ init_sheets(system.data.info.vesa.PhysBasePtr, system.data.info.boot.scrnx, system.data.info.boot.scrny, system.data.info.vesa.BitsPerPixel);\r
+\r
+ system.ui.draw.sht.core = sheet_alloc();\r
+ system.ui.draw.sht.desktop = sheet_alloc();\r
+ system.ui.draw.sht.taskbar = sheet_alloc();\r
+ system.ui.draw.sht.mouse = sheet_alloc();\r
+\r
+ system.ui.draw.sht.core_buf = sys_memman_alloc(system.data.info.boot.scrnx * system.data.info.boot.scrny * (system.data.info.vesa.BitsPerPixel >> 3));\r
+ system.ui.draw.sht.desktop_buf = sys_memman_alloc(system.data.info.boot.scrnx * system.data.info.boot.scrny * (system.data.info.vesa.BitsPerPixel >> 3));\r
+ system.ui.draw.sht.taskbar_buf = sys_memman_alloc(system.data.info.boot.scrnx * TASKBAR_HEIGHT * (system.data.info.vesa.BitsPerPixel >> 3));\r
+ system.ui.draw.sht.mouse_buf = sys_memman_alloc(24 * 24 * (system.data.info.vesa.BitsPerPixel >> 3));\r
+\r
+ sheet_setbuf(system.ui.draw.sht.desktop, system.ui.draw.sht.desktop_buf, system.data.info.boot.scrnx, system.data.info.boot.scrny, INV_COL32);\r
+ sheet_setbuf(system.ui.draw.sht.mouse, system.ui.draw.sht.mouse_buf, 24, 24, INV_COL32);\r
+ sheet_setbuf(system.ui.draw.sht.taskbar, system.ui.draw.sht.taskbar_buf, system.data.info.boot.scrnx, TASKBAR_HEIGHT, INV_COL32);\r
+ sheet_setbuf(system.ui.draw.sht.core, system.ui.draw.sht.core_buf, system.data.info.boot.scrnx, system.data.info.boot.scrny, INV_COL32);\r
+\r
+ sheet_slide(system.ui.draw.sht.desktop, 0, 0);\r
+ sheet_updown(system.ui.draw.sht.desktop, -1);\r
+ sheet_slide(system.ui.draw.sht.taskbar, 0, system.data.info.boot.scrny - TASKBAR_HEIGHT);\r
+ sheet_updown(system.ui.draw.sht.taskbar, -1);\r
+ sheet_slide(system.ui.draw.sht.mouse, system.data.info.boot.scrnx >> 1, system.data.info.boot.scrny >> 1);\r
+ sheet_updown(system.ui.draw.sht.mouse, -1);\r
+\r
+ sheet_slide(system.ui.draw.sht.core, 0, 0);\r
+ boxfill_i(system.ui.draw.sht.core_buf, system.data.info.boot.scrnx, 0x000000, 0, 0, system.data.info.boot.scrnx, system.data.info.boot.scrny);\r
+ draw_chnos_logo(system.ui.draw.sht.core_buf, system.data.info.boot.scrnx, system.data.info.boot.scrnx >> 4, system.data.info.boot.scrnx >> 1, (system.data.info.boot.scrny >> 1) - (system.data.info.boot.scrny / 10));\r
+ sheet_updown(system.ui.draw.sht.core, 0);\r
+\r
+ fifo32_init(&system.data.fifo.main, SYS_FIFOSIZE, system.data.fifo.main_buf, 0);\r
+ fifo32_init(&system.data.fifo.keycmd, KEYCMD_FIFOSIZE, system.data.fifo.keycmd_buf, 0);\r
+ fifo32_init(&system.data.fifo.keyctrl, KEYCTRL_FIFOSIZE, system.data.fifo.keyctrl_buf, 0);\r
+ fifo32_init(&system.data.fifo.mousectrl, MOUSECTRL_FIFOSIZE, system.data.fifo.mousectrl_buf, 0);\r
+ init_pit();\r
+ task_init();\r
+\r
+ system.ui.task.keyctrl = task_alloc();\r
+ system.ui.task.keyctrl->tss.esp = (int)sys_memman_alloc(64 * 1024) + 64 * 1024;\r
+ system.ui.task.keyctrl->tss.eip = (int)&KeyBoardControlTask;\r
+ system.ui.task.keyctrl->tss.es = 1 * 8;\r
+ system.ui.task.keyctrl->tss.cs = 2 * 8;\r
+ system.ui.task.keyctrl->tss.ss = 1 * 8;\r
+ system.ui.task.keyctrl->tss.ds = 1 * 8;\r
+ system.ui.task.keyctrl->tss.fs = 1 * 8;\r
+ system.ui.task.keyctrl->tss.gs = 1 * 8;\r
+\r
+ system.ui.task.mousectrl = task_alloc();\r
+ system.ui.task.mousectrl->tss.esp = (int)sys_memman_alloc(64 * 1024) + 64 * 1024;\r
+ system.ui.task.mousectrl->tss.eip = (int)&MouseControlTask;\r
+ system.ui.task.mousectrl->tss.es = 1 * 8;\r
+ system.ui.task.mousectrl->tss.cs = 2 * 8;\r
+ system.ui.task.mousectrl->tss.ss = 1 * 8;\r
+ system.ui.task.mousectrl->tss.ds = 1 * 8;\r
+ system.ui.task.mousectrl->tss.fs = 1 * 8;\r
+ system.ui.task.mousectrl->tss.gs = 1 * 8;\r
+\r
+ system.data.fifo.main.task = system.ui.task.main;\r
+ system.data.fifo.keycmd.task = system.ui.task.keyctrl;\r
+ system.data.fifo.keyctrl.task = system.ui.task.keyctrl;\r
+ system.data.fifo.mousectrl.task = system.ui.task.mousectrl;\r
+\r
+ task_run(system.ui.task.main, 1, 0);\r
+ task_run(system.ui.task.keyctrl, 1, 1);\r
+ task_run(system.ui.task.mousectrl, 1, 1);\r
+\r
+ init_keyboard(0x100);\r
+ init_mouse(0x100);\r
+ init_windows();\r
+\r
+ fdc_motor_off(4);\r
+\r
+ system.io.file.fat = sys_memman_alloc(2 * 2880);\r
+ decode_fat(system.io.file.fat, false);\r
+\r
+ return;\r
+}\r