OSDN Git Service

(none)
[hos/hos-v4a.git] / aplfw / sample / ia32 / pcat / boot.c
1 /** 
2  *  Sample program for Hyper Operating System V4 Advance
3  *
4  * @file  boot.c
5  * @brief %jp{ブート部}%en{boot}
6  *
7  * Copyright (C) 1998-2008 by Project HOS
8  * http://sourceforge.jp/projects/hos/
9  */
10
11
12 #include <stdio.h>
13 #include <stdlib.h>
14 #include <string.h>
15 #include "kernel.h"
16 #include "kernel_id.h"
17 #include "system/system/system.h"
18 #include "system/sysapi/sysapi.h"
19 #include "system/file/console.h"
20 #include "system/process/process.h"
21 #include "system/command/command.h"
22 #include "driver/console/pcattext/pcattextdrv.h"
23 #include "driver/console/vt100/vt100drv.h"
24 #include "driver/serial/pc16550/pc16550drv.h"
25 #include "application//syscmd/shell/shell.h"
26 #include "application//syscmd/commandlist/commandlist.h"
27 #include "application//syscmd/processlist/processlist.h"
28 #include "application/utility/timecmd/timecmd.h"
29 #include "application/utility/memdump/memdump.h"
30 #include "application/utility/memwrite/memwrite.h"
31 #include "application/utility/memtest/memtest.h"
32 #include "application/utility/keytest/keytest.h"
33 #include "application/example/hello/hello.h"
34 #include "boot.h"
35 #include "ostimer.h"
36
37
38 /* システムヒープ */
39 long    g_SystemHeap[256 * 1024 / sizeof(long)];
40
41
42
43 int Boot_Process(VPARAM Param);
44
45
46
47 void Boot_Task(VP_INT exinf)
48 {
49         T_SYSTEM_INITIALIZE_INF SysInf;
50         
51         
52         /*************************/
53         /*    固有初期設定       */
54         /*************************/
55         
56         
57         
58         /*************************/
59         /*       初期化          */
60         /*************************/
61         
62         /* システム初期化 */
63         SysInf.pSysMemBase     = g_SystemHeap;
64         SysInf.SysMemSize      = sizeof(g_SystemHeap);
65         SysInf.SysMemAlign     = 32;
66         SysInf.pIoMemBase      = NULL;
67         SysInf.SystemStackSize = 2048;
68         SysInf.pfncBoot        = Boot_Process;
69         SysInf.BootParam       = (VPARAM)0;
70         SysInf.BootStackSize   = 2048;
71         System_Initialize(&SysInf);
72 }
73
74
75 /* ブートプロセス */
76 int Boot_Process(VPARAM Param)
77 {
78         T_PROCESS_CREATE_INF    ProcInf;
79         HANDLE                                  hProcess;
80         HANDLE                                  hDriver;
81         HANDLE                                  hConOut;
82         HANDLE                                  hConIn;
83         
84         
85         /*************************/
86         /*   デバイスドライバ    */
87         /*************************/
88         
89         /* タイマ初期化 */        
90 /*      OsTimer_Initialize();   */
91         
92         /* 16550デバドラ生成 (/dev/com0 に登録) */
93 /*
94         hDriver = Pc16550Drv_Create((void *)0x03f8, 0, 4, 1843200, 256);
95         File_AddDevice("com1", hDriver);
96         hDriver = Pc16550Drv_Create((void *)0x02f8, 0, 3, 1843200, 256);
97         File_AddDevice("com2", hDriver);
98 */
99         
100         
101         /* コンソールを生成( /dev/con0 に登録) */
102         hDriver = PcatTextDrv_Create((void *)0, (void *)0x000b8000);
103         File_AddDevice("screen0", hDriver);
104         
105         /* コンソールを開く */
106         hConOut = File_Open("/dev/screen0", FILE_OPEN_READ | FILE_OPEN_WRITE);
107         
108         
109         
110         /*************************/
111         /*     標準入出力設定    */
112         /*************************/
113         
114         Process_SetConIn(HANDLE_NULL, hConIn);
115         Process_SetConOut(HANDLE_NULL, hConOut);
116         Process_SetStdIn(HANDLE_NULL, hConIn);
117         Process_SetStdOut(HANDLE_NULL, hConOut);
118         Process_SetStdErr(HANDLE_NULL, hConOut);
119         
120         
121         /*************************/
122         /*     コマンド登録      */
123         /*************************/
124         Command_AddCommand("sh",       Shell_Main);
125         Command_AddCommand("ps",       ProcessList_Main);
126         Command_AddCommand("help",     CommandList_Main);
127         Command_AddCommand("time",     TimeCmd_Main);
128         Command_AddCommand("memdump",  MemDump_Main);
129         Command_AddCommand("memwrite", MemWrite_Main);
130         Command_AddCommand("memtest",  MemTest_Main);
131         Command_AddCommand("keytest",  KeyTest_Main);
132         Command_AddCommand("hello",    Hello_Main);
133         
134         
135         /*************************/
136         /*    起動メッセージ     */
137         /*************************/
138         StdIo_PutString(
139                         "\n\n"
140                         "================================================================\n"
141                         " Hyper Operating System  Application Flamework\n"
142                         "\n"
143                         "                          Copyright (C) 1998-2008 by Project HOS\n"
144                         "                          http://sourceforge.jp/projects/hos/\n"
145                         "================================================================\n"
146                         "\n");
147         
148         
149         /*************************/
150         /*      シェル起動       */
151         /*************************/
152         
153         /* プロセスの生成*/
154         ProcInf.pszCommandLine = "sh -i";                                                               /* 実行コマンド */
155         ProcInf.pszCurrentDir  = "";                                                                    /* 起動ディレクトリ */
156         ProcInf.pfncEntry      = NULL;                                                                  /* 起動アドレス */
157         ProcInf.Param          = 0;                                                                             /* ユーザーパラメータ */
158         ProcInf.StackSize      = 2048;                                                                  /* スタックサイズ */
159         ProcInf.Priority       = PROCESS_PRIORITY_NORMAL;                               /* プロセス優先度 */
160         ProcInf.hTerminal      = Process_GetTerminal(HANDLE_NULL);              /* ターミナル */
161         ProcInf.hConIn         = Process_GetConIn(HANDLE_NULL);                 /* コンソール入力 */
162         ProcInf.hConOut        = Process_GetConOut(HANDLE_NULL);                /* コンソール出力 */
163         ProcInf.hStdIn         = Process_GetStdIn(HANDLE_NULL);                 /* 標準入力 */
164         ProcInf.hStdOut        = Process_GetStdOut(HANDLE_NULL);                /* 標準出力 */
165         ProcInf.hStdErr        = Process_GetStdErr(HANDLE_NULL);                /* 標準エラー出力 */
166         for ( ; ; )
167         {
168                 hProcess = Process_Create(&ProcInf);
169                 Process_WaitExit(hProcess);
170                 Process_Delete(hProcess);
171         }
172 }
173
174
175
176 /* end of file */