OSDN Git Service

9ba9a6e23e4db8b9f26f55e5d5aa67a9970c03c0
[mochi/master.git] / src / booter / Initctrl / InitctrlCpu.s
1 /******************************************************************************/
2 /* src/booter/Initctrl/InitctrlCpu.s                                          */
3 /*                                                                 2017/03/12 */
4 /* Copyright (C) 2016-2017 Mochi.                                             */
5 /******************************************************************************/
6  .intel_syntax noprefix
7 .code16
8 /******************************************************************************/
9 /* グローバル宣言                                                             */
10 /******************************************************************************/
11 .global CpuSwitchMode
12
13
14 /******************************************************************************/
15 /* TEXTセクション                                                             */
16 /******************************************************************************/
17 .section .text
18
19 CpuSwitchMode:
20     /* 割り込み無効化 */
21     mov         al, 0xFF
22     out         0xA1, al        /* PIC2割り込み無効化 */
23     nop
24     out         0x21, al        /* PIC1割り込み無効化 */
25     cli                         /* CPU割り込み無効化  */
26     
27     /* GDT設定 */
28     lgdt        [ pGDTR ]
29     
30     /* CR0レジスタ設定 */
31     mov         eax, cr0
32     or          eax, 0x00000001 /* PEビットON       */
33     mov         cr0, eax        /* 保護モード有効化 */
34     
35     /* 保護モード移行(far jump) */
36     jmp         0x8:setSegment
37     
38 .code32
39 setSegment:
40     /* データセグメント初期化 */
41     mov         ax, 2 * 8
42     mov         ds, ax
43     mov         es, ax
44     mov         fs, ax
45     mov         gs, ax
46     mov         ss, ax
47     
48     /* スタックポインタ変更 */
49     mov         esp, 0x04000000
50     
51     /* カーネル実行 */
52     jmp         0x00100000
53
54
55 /******************************************************************************/
56 /* DATAセクション                                                             */
57 /******************************************************************************/
58 .section .data
59 /* GDT */
60 .align 8
61 pGDT:
62     .word   0x0000, 0x0000, 0x0000, 0x0000  /* ナルセグメント   */
63     .word   0xFFFF, 0x0000, 0x9800, 0x00CF  /* コードセグメント */
64     .word   0xFFFF, 0x0000, 0x9200, 0x00CF  /* データセグメント */
65
66 /* GDTR */
67 pGDTR:
68     .word   . - pGDT - 1     /* リミット          */
69     .long   pGDT             /* GDTベースアドレス */
70
71
72 /******************************************************************************/