OSDN Git Service

MochiBooterの大幅改造(ATA-PIOreadによるカーネルロード)、VMイメージ作成ツール追加など
[mochi/master.git] / src / booter / InitCtrl / InitCtrlInit32.c
1 /******************************************************************************/
2 /* src/booter/InitCtrl/InitCtrlInit32.c                                       */
3 /*                                                                 2017/07/11 */
4 /* Copyright (C) 2017 Mochi.                                                  */
5 /******************************************************************************/
6 /******************************************************************************/
7 /* インクルード                                                               */
8 /******************************************************************************/
9 /* 共通ヘッダ */
10 #include <stddef.h>
11 #include <hardware/IA32/IA32Instruction.h>
12 #include <kernel/MochiKernel.h>
13
14 /* 外部モジュールヘッダ */
15 #include <Cmn.h>
16 #include <Debug.h>
17 #include <Driver.h>
18 #include <IntMng.h>
19 #include <LoadMng.h>
20
21
22 /******************************************************************************/
23 /* 定義                                                                       */
24 /******************************************************************************/
25 /* デバッグトレースログ出力マクロ */
26 #ifdef DEBUG_LOG_ENABLE
27 #define DEBUG_LOG( ... )                  \
28     DebugLogOutput( CMN_MODULE_INIT_INIT, \
29                     __LINE__,             \
30                     __VA_ARGS__ )
31 #else
32 #define DEBUG_LOG( ... )
33 #endif
34
35
36 /******************************************************************************/
37 /* 変数定義                                                                   */
38 /******************************************************************************/
39 /* カーネルメイン関数 */
40 void ( *MochiKernelMain )( void ) = ( void * ) MOCHIKERNEL_ADDR_ENTRY;
41
42
43 /******************************************************************************/
44 /* グローバル関数定義                                                         */
45 /******************************************************************************/
46 /******************************************************************************/
47 /**
48  * @brief       初期化(32bitモード)
49  * @details     初期化してカーネルを読込み起動する。
50  */
51 /******************************************************************************/
52 void InitCtrlInit32( void )
53 {
54     CmnRet_t ret;   /* 関数戻り値 */
55     
56     /* デバッグ制御初期化 */
57     DebugInit();
58     
59     /* デバッグトレースログ出力 */
60     DEBUG_LOG( "MochiBooter start." );
61     
62     /* A20ライン有効化 */
63     ret = DriverA20Enable();
64     
65     /* 有効化結果判定 */
66     if ( ret != CMN_SUCCESS ) {
67         /* 失敗 */
68         
69         /* デバッグトレースログ出力 */
70         DEBUG_LOG( "DriverA20Enable() Failure. ret=%u", ret );
71         
72         /* アボート */
73         CmnAbort();
74     }
75     
76     /* 割り込み管理初期化 */
77     IntMngInit();
78     
79     /* ドライバ初期化 */
80     DriverInit();
81     
82     /* 割込み有効化 */
83     IntMngPicEnable();
84     IA32InstructionSti();
85     
86     /* ロード管理初期化 */
87     LoadMngInit();
88     
89     /* カーネル読込み */
90     LoadMngKernelLoad();
91     
92     /* 割込み無効化 */
93     IA32InstructionCli();
94     IntMngPicDisable();
95     
96     /* スタックポインタ再設定 */
97     IA32InstructionSetEsp( MOCHIKERNEL_ADDR_STACK );
98     
99     MochiKernelMain();
100     
101     /* トレースログ出力 */
102     DEBUG_LOG( "%s() end. error.", __func__ );
103     
104     CmnAbort();
105 }
106
107
108 /******************************************************************************/