OSDN Git Service

MochiBooterの大幅改造(ATA-PIOreadによるカーネルロード)、VMイメージ作成ツール追加など
[mochi/master.git] / src / booter / Ipl / IplMain.s
1 /******************************************************************************/
2 /* src/booter/Ipl/IplMain.s                                                   */
3 /*                                                                 2017/06/18 */
4 /* Copyright (C) 2016-2017 Mochi.                                             */
5 /******************************************************************************/
6 .intel_syntax noprefix
7 .code16
8
9 /******************************************************************************/
10 /* グローバル宣言                                                             */
11 /******************************************************************************/
12 .global IplMain
13
14
15 /******************************************************************************/
16 /* TEXTセクション                                                             */
17 /******************************************************************************/
18 .section .text
19 IplMain:
20     /* 初期化 */
21     xor         ax, ax
22     mov         ds, ax
23     mov         es, ax
24     mov         fs, ax
25     mov         gs, ax
26     
27     /* IPL再配置 */
28     mov         si, 0x7C00      /* コピー元(ds:si)   */
29     mov         di, 0x7A00      /* コピー先(es:di)   */
30     mov         cx, 0x200 / 4   /* コピー回数          */
31     cld                         /* コピー方向(加算)  */
32     rep movsd                   /* コピー実行(4byte) */
33     
34     /* 移行 */
35     jmp         0x07A0:migrate
36 migrate:
37     mov         ax, 0x07A0
38     mov         ds, ax
39     
40     /* メインプログラム格納位置取得 */
41     mov         eax, [ pt1StartLBA ]
42     mov         [ dapReadAddr ], eax
43     mov         ax, [ pt1Size ]
44     mov         [ dapReadSize ], ax
45     
46     /* メインプログラム読み込み */
47     mov         ah, 0x42        /* 機能番号(EXTENDED READ)   */
48     mov         dl, 0x80        /* ドライブ番号                */
49     mov         si, offset dap  /* Disk address packetアドレス */
50     int         0x13
51     
52     /* メインプログラム実行 */
53     jmp         0x0000:0x7C00
54     
55 .align 8
56 /* Disk Address Packet */
57 dap:
58     .byte       0x10            /* サイズ                          */
59     .byte       0x00            /* Reserved                        */
60 dapReadSize:
61     .word       0x0000          /* 読込み論理セクタ数              */
62     .word       0x0000          /* 転送先アドレス(オフセット)    */
63     .word       0x07C0          /* 転送先アドレス(セグメント)    */
64 dapReadAddr:
65     .long       0x00000000      /* 読込み先頭論理セクタ番号(LSB) */
66     .long       0x00000000      /* 読込み先頭論理セクタ番号(MSB) */
67
68
69 /******************************************************************************/
70 /* パーティションテーブル                                                     */
71 /******************************************************************************/
72 .org 0x01BE
73 /* 第1パーティション */
74     .byte       0x00                /* ブートフラグ                      */
75     .byte       0x00, 0x00, 0x00    /* パーティション先頭位置(CHS方式) */
76     .byte       0x00                /* パーティション種別                */
77     .byte       0x00, 0x00, 0x00    /* パーティション末尾位置(CHS方式) */
78 pt1StartLBA:
79     .long       0x00000000          /* パーティション先頭位置(LBA方式) */
80 pt1Size:
81     .long       0x00000000          /* パーティションサイズ(セクタ)    */
82
83
84 /******************************************************************************/
85 /* ブートシグネチャ                                                           */
86 /******************************************************************************/
87 .org 0x01FE
88     .word       0xAA55
89
90
91 /******************************************************************************/