OSDN Git Service

svn rev.329より移動。
[chnosproject/CHNOSProject.git] / CHNOSProject / chnos / tolset_chn_000 / chnos_008 / chnos / bootpack.c
diff --git a/CHNOSProject/chnos/tolset_chn_000/chnos_008/chnos/bootpack.c b/CHNOSProject/chnos/tolset_chn_000/chnos_008/chnos/bootpack.c
new file mode 100644 (file)
index 0000000..b615362
--- /dev/null
@@ -0,0 +1,215 @@
+\r
+#include "core.h"\r
+\r
+struct SYSTEM *sys_main_str_buf;\r
+\r
+void CHNMain(void)\r
+{\r
+       uchar s[128];\r
+       int i;\r
+       UI_Timer *t_1sec;\r
+       uint new_tsc[2];\r
+       uint old_tsc[2];\r
+       uint sec_clock[2];\r
+\r
+       init_system();\r
+\r
+       init_screen_i(system.ui.draw.sht.desktop_buf, system.ui.draw.sht.taskbar_buf, system.ui.draw.sht.mouse_buf);\r
+       sheet_updown(system.ui.draw.sht.core, -1);\r
+\r
+       sheet_updown(system.ui.draw.sht.desktop, 0);\r
+       sheet_updown(system.ui.draw.sht.taskbar, 1);\r
+       sheet_updown(system.ui.draw.sht.mouse, 2);\r
+\r
+       t_1sec = timer_alloc();\r
+       timer_init(t_1sec, &system.data.fifo.main, 1);\r
+       timer_settime_millisec(t_1sec, 1000);\r
+\r
+       system.ui.console.consoles[0].win = make_window("console", system.ui.console.org_xsize, system.ui.console.org_ysize, 10, 10, sheet_get_topheight(), false);\r
+       system.ui.console.consoles[0].task = task_alloc();\r
+       system.ui.console.consoles[0].task->tss.esp = (int)sys_memman_alloc(64 * 1024) + 64 * 1024;\r
+       system.ui.console.consoles[0].task->tss.eip = (int)&console_main;\r
+       system.ui.console.consoles[0].task->tss.es = 1 * 8;\r
+       system.ui.console.consoles[0].task->tss.cs = 2 * 8;\r
+       system.ui.console.consoles[0].task->tss.ss = 1 * 8;\r
+       system.ui.console.consoles[0].task->tss.ds = 1 * 8;\r
+       system.ui.console.consoles[0].task->tss.fs = 1 * 8;\r
+       system.ui.console.consoles[0].task->tss.gs = 1 * 8;\r
+       task_arguments(system.ui.console.consoles[0].task, 2, &system.ui.console.consoles[0]);\r
+       task_run(system.ui.console.consoles[0].task, 2, 2);\r
+\r
+       for(;;){\r
+               io_cli();\r
+               if(fifo32_status(&system.data.fifo.main) == 0){\r
+                       task_sleep(system.ui.task.main);\r
+                       io_sti();\r
+               } else{\r
+                       i = fifo32_get(&system.data.fifo.main);\r
+                       if(i == 1){\r
+                               sprintf(s, "%02X%02X/%02X/%02X", readcmos(0x32), readcmos(0x09), readcmos(0x08), readcmos(0x07));\r
+                               putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * 10)) - 4, 4, 0x000000, 0xffffff, s);\r
+                               sprintf(s, "%02X:%02X:%02X", readcmos(0x04), readcmos(0x02), readcmos(0x00));\r
+                               putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * 9)) - 4, 4 + 16, 0x000000, 0xffffff, s);\r
+                               old_tsc[0] = new_tsc[0];\r
+                               old_tsc[1] = new_tsc[1];\r
+                               read_tsc(new_tsc);\r
+                               if(new_tsc[1] > old_tsc[1]){\r
+                                       sec_clock[0] = new_tsc[0] - old_tsc[0];\r
+                                       sec_clock[1] = new_tsc[1] - old_tsc[1];\r
+                               } else if(new_tsc[1] < old_tsc[1]){\r
+                                       sec_clock[0] = new_tsc[0] - old_tsc[0] - 1;\r
+                                       sec_clock[1] = (0xffffffff - old_tsc[1]) + new_tsc[1];\r
+                               }\r
+                               sprintf(s, "%08u%08u", sec_clock[0], sec_clock[1]);\r
+                               putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * (10 + 1 + 3 + 21 + 1))) - 4, 20, 0x000000, 0xffffff, s);\r
+\r
+                               timer_settime_millisec(t_1sec, 1000);\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+void KeyBoardControlTask(void)\r
+{\r
+       int i;\r
+       uchar s[128];\r
+       UI_KeyInfo dec_key;\r
+       UI_Console *key_to;\r
+\r
+       key_to = (UI_Console *)0;\r
+\r
+       for(;;){\r
+               if(fifo32_status(&system.data.fifo.keycmd) > 0 && system.io.keyboard.cmd_wait < 0){\r
+                       system.io.keyboard.cmd_wait = fifo32_get(&system.data.fifo.keycmd);\r
+                       wait_KBC_sendready();\r
+                       io_out8(KEYB_DATA, system.io.keyboard.cmd_wait);\r
+               }\r
+               io_cli();\r
+               if(fifo32_status(&system.data.fifo.keyctrl) == 0){\r
+                       task_sleep(system.ui.task.keyctrl);\r
+                       io_sti();\r
+               } else{\r
+                       i = fifo32_get(&system.data.fifo.keyctrl);\r
+                       if(0x100 <= i && i <= 0x1ff){\r
+                               decode_key(&dec_key, i - 0x100);\r
+                               if(dec_key.make && dec_key.c != 0){/*\92Ê\8fí\95\8e\9a*/\r
+                                       sprintf(s, "[ ]");\r
+                                       s[1] = dec_key.c;\r
+                                       putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * (10 + 1 + 3))) - 4, 4, 0x000000, 0xffffff, s);\r
+                                       if(key_to != 0) fifo32_put(&key_to->task->fifo, dec_key.c + CONSOLE_FIFO_START_KEYB);\r
+                               } else if(dec_key.make && dec_key.keycode == 0x3B && key_shift != 0){/*Shift + F1*/\r
+                                       if(key_to != 0 && key_to->task->tss.ss0 != 0){\r
+                                               cons_put_str(key_to, "\nBreak(key) :\n");\r
+                                               io_cli();\r
+                                               key_to->task->tss.eax = (int)&(key_to->task->tss.esp0);\r
+                                               key_to->task->tss.eip = (int)asm_end_app;\r
+                                               change_window_active(key_to->win, true);\r
+                                               io_sti();\r
+                                       }\r
+                               } else if(dec_key.make && dec_key.keycode == 0x0E){/*BackSpace*/\r
+                                       if(key_to != 0) fifo32_put(&key_to->task->fifo, 0x0e + CONSOLE_FIFO_START_KEYB);\r
+                               } else if(dec_key.make && dec_key.keycode == 0x0f){/*Tab*/\r
+                                       if(key_to == 0){\r
+                                               key_to = &system.ui.console.consoles[0];\r
+                                               change_window_active(key_to->win, true);\r
+                                               fifo32_put(&key_to->task->fifo, CONSOLE_FIFO_CURSOR_START);\r
+                                       } else{\r
+                                               fifo32_put(&key_to->task->fifo, CONSOLE_FIFO_CURSOR_STOP);\r
+                                               change_window_active(key_to->win, false);\r
+                                               key_to = (UI_Console *)0;\r
+                                       }\r
+                               } else if(dec_key.make && dec_key.keycode == 0x57){/*F11*/\r
+                                       if(system.ui.draw.sht.ctrl.top > 3) sheet_updown(system.ui.draw.sht.ctrl.sheets[2], sheet_get_topheight());\r
+                               } else if(dec_key.make && dec_key.keycode == 0x1c){/*Enter*/\r
+                                       if(key_to != 0) fifo32_put(&key_to->task->fifo, 0x0a + CONSOLE_FIFO_START_KEYB);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+}\r
+\r
+void MouseControlTask(void)\r
+{\r
+       int i, mx, my, scrool = 0;\r
+       int j, x, y;\r
+       int k;\r
+       UI_Sheet *sht = 0;\r
+       int mmx = -1, mmy = -1;\r
+       bool win_move = false;\r
+       uchar s[128];\r
+\r
+       mx = system.data.info.boot.scrnx >> 1;\r
+       my = system.data.info.boot.scrny >> 1;\r
+\r
+       for(;;){\r
+               io_cli();\r
+               if(fifo32_status(&system.data.fifo.mousectrl) == 0){\r
+                       task_sleep(system.ui.task.mousectrl);\r
+                       io_sti();\r
+               } else{\r
+                       i = fifo32_get(&system.data.fifo.mousectrl);\r
+                       if(0x100 <= i && i <= 0x1ff){\r
+                               if(decode_mouse(i - 0x100) != 0){\r
+                                       mx += system.io.mouse.decode.x;\r
+                                       my += system.io.mouse.decode.y;\r
+                                       if(mx < 0) mx = 0;\r
+                                       if(my < 0) my = 0;\r
+                                       if(mx > system.data.info.boot.scrnx - 1) mx = system.data.info.boot.scrnx - 1;\r
+                                       if(my > system.data.info.boot.scrny - 1) my = system.data.info.boot.scrny - 1;\r
+\r
+                                       if(system.io.mouse.decode.scrool == 0xFFFFFFFF) scrool++;\r
+                                       if(system.io.mouse.decode.scrool == 0x00000001) scrool--;\r
+\r
+                                       sprintf(s, "[lcr](%4d,%4d,%04d)", mx, my, scrool);\r
+                                       if((system.io.mouse.decode.btn & 0x01) != 0){\r
+                                               s[1] = 'L';\r
+                                               if(win_move == false){\r
+                                                       for(j = system.ui.draw.sht.ctrl.top - 1; j >= 1; j--){\r
+                                                               sht = system.ui.draw.sht.ctrl.sheets[j];\r
+                                                               x = mx - sht->vx0;\r
+                                                               y = my - sht->vy0;\r
+                                                               if(0 <= x && x < sht->bxsize && 0 <= y && y < sht->bysize){\r
+                                                                       sheet_updown(sht, sheet_get_topheight());\r
+                                                                       if(0 <= y && y <= 24){\r
+                                                                               for(k = 0;k < MAX_WINDOWS;k++){\r
+                                                                                       if(system.ui.window.ctrl.winfos[k].win == sht) break;\r
+                                                                               }\r
+                                                                               if(k < MAX_WINDOWS && y <= 16 && (sht->bxsize - 44) <= x && x <= (sht->bxsize - 4) && system.ui.window.ctrl.winfos[k].task != 0){\r
+                                                                                       io_cli();\r
+                                                                                       system.ui.window.ctrl.winfos[k].task->tss.eax = (int)&(system.ui.window.ctrl.winfos[k].task->tss.esp0);\r
+                                                                                       system.ui.window.ctrl.winfos[k].task->tss.eip = (int)asm_end_app;\r
+                                                                                       change_window_active(&system.ui.window.ctrl.winfos[k], true);\r
+                                                                                       io_sti();\r
+                                                                               }\r
+                                                                               if(k < MAX_WINDOWS){\r
+                                                                                       win_move = true;\r
+                                                                                       mmx = mx;\r
+                                                                                       mmy = my;\r
+                                                                               }\r
+                                                                       }\r
+                                                                       break;\r
+                                                               }\r
+                                                       }\r
+                                               } else{\r
+                                                       x = mx - mmx;\r
+                                                       y = my - mmy;\r
+                                                       sheet_slide(sht, sht->vx0 + x, sht->vy0 + y);\r
+                                                       mmx = mx;\r
+                                                       mmy = my;\r
+                                               }\r
+                                       } else{\r
+                                               win_move = false;\r
+                                       }\r
+                                       if((system.io.mouse.decode.btn & 0x02) != 0){\r
+                                               s[3] = 'R';\r
+                                       }\r
+                                       if((system.io.mouse.decode.btn & 0x04) != 0){\r
+                                               s[2] = 'C';\r
+                                       }\r
+                                       putfonts_asc_sht_i(system.ui.draw.sht.taskbar, (system.data.info.boot.scrnx - (8 * (10 + 1 + 3 + 21 + 1))) - 4, 4, 0x000000, 0xffffff, s);\r
+                                       sheet_slide(system.ui.draw.sht.mouse, mx, my);\r
+                               }\r
+                       }\r
+               }\r
+       }\r
+}\r