1 | ;
|
---|
2 | ; TOPPERS/SSP Kernel
|
---|
3 | ; Smallest Set Profile Kernel
|
---|
4 | ;
|
---|
5 | ; Copyright (C) 2014 by Naoki Saito
|
---|
6 | ; Nagoya Municipal Industrial Research Institute, JAPAN
|
---|
7 | ;
|
---|
8 | ; 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
|
---|
9 | ; ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
|
---|
10 | ; 再配布(以下,利用と呼ぶ)することを無償で許諾する.
|
---|
11 | ; (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
|
---|
12 | ; 表示,この利用条件および下記の無保証規定が,そのままの形でソース
|
---|
13 | ; コード中に含まれていること.
|
---|
14 | ; (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
|
---|
15 | ; できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
|
---|
16 | ; ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
|
---|
17 | ; 証規定を掲載すること.
|
---|
18 | ; (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
|
---|
19 | ; できない形で再配布する場合には,次のいずれかの条件を満たすこと.
|
---|
20 | ; (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
|
---|
21 | ; 権表示,この利用条件および下記の無保証規定を掲載すること.
|
---|
22 | ; (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
|
---|
23 | ; 告すること.
|
---|
24 | ; (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
|
---|
25 | ; からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
|
---|
26 | ; 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
|
---|
27 | ; く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
|
---|
28 | ;
|
---|
29 | ; 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
|
---|
30 | ; びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
|
---|
31 | ; る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
|
---|
32 | ; により直接的または間接的に生じたいかなる損害に関しても,その責任を負
|
---|
33 | ; わない.
|
---|
34 | ;
|
---|
35 | ;
|
---|
36 |
|
---|
37 | ;
|
---|
38 | ; スタートアップルーチン
|
---|
39 | ; プロセッサはS2コア,ミディアムモデルを対象とする
|
---|
40 | ;
|
---|
41 |
|
---|
42 | ;
|
---|
43 | ; グローバルシンボル
|
---|
44 | ;
|
---|
45 | ; セグメント先頭アドレス(segment_s.asm)
|
---|
46 | extrn _@R_INIT, _@R_INIS, _@RLINIT
|
---|
47 | extrn _@INIT, _@DATA, _@INIS, _@DATS, _@INITL, _@DATAL
|
---|
48 |
|
---|
49 | ; セグメント末尾アドレス(segment_e.asm)
|
---|
50 | extrn _?R_INIT, _?R_INIS, _?RLINIT
|
---|
51 | extrn _?INIT, _?DATA, _?INIS, _?DATS, _?INITL, _?DATAL
|
---|
52 |
|
---|
53 | ; スタックポインタの初期値(kernel_cfg.c)
|
---|
54 | extrn __kernel_istkpt
|
---|
55 |
|
---|
56 | ; カーネル開始処理(kernel/startup.c)
|
---|
57 | extrn _sta_ker
|
---|
58 |
|
---|
59 | ; saddr領域の先頭アドレス,サイズ(リンカで定義)
|
---|
60 | extrn _@SADBEG, _@SADSIZ
|
---|
61 |
|
---|
62 | ; エントリポイント
|
---|
63 | public _start
|
---|
64 |
|
---|
65 |
|
---|
66 | ;
|
---|
67 | ; 定数定義
|
---|
68 | ;
|
---|
69 | ; MAA(PMCのビット0): 0 または 1
|
---|
70 | ; 0の場合,00000H--0FFFFH を F0000H--FFFFFHへミラー
|
---|
71 | ; 1の場合,10000H--1FFFFH を F0000H--FFFFFHへミラー
|
---|
72 | INIT_MAA EQU 0
|
---|
73 |
|
---|
74 | ;
|
---|
75 | ; マクロ定義
|
---|
76 | ;
|
---|
77 | ; セグメント間のデータコピー(farのROMからnearのRAMへ,srcのサイズ分)
|
---|
78 | copy_seg macro src, dst
|
---|
79 | local _1, _2
|
---|
80 | mov es, #highw _@&src
|
---|
81 | movw hl, #loww _@&src
|
---|
82 | movw de, #loww _@&dst
|
---|
83 | br $_2
|
---|
84 | _1:
|
---|
85 | mov a, es:[hl]
|
---|
86 | mov [de], a
|
---|
87 | incw hl
|
---|
88 | incw de
|
---|
89 | _2:
|
---|
90 | movw ax, hl
|
---|
91 | cmpw ax, #loww _?&src
|
---|
92 | bnz $_1
|
---|
93 | endm
|
---|
94 |
|
---|
95 | ; セグメント間のデータコピー(farのROMからfarのRAMへ,srcのサイズ分)
|
---|
96 | copy_fseg MACRO src, dst
|
---|
97 | local _1, _2
|
---|
98 | movw hl, #loww _@&src
|
---|
99 | movw de, #loww _@&dst
|
---|
100 | br $_2
|
---|
101 | _1:
|
---|
102 | mov es, #highw _@&src
|
---|
103 | mov a, es:[hl]
|
---|
104 | mov es, #highw _@&dst
|
---|
105 | mov es:[de], a
|
---|
106 | incw hl
|
---|
107 | incw de
|
---|
108 | _2:
|
---|
109 | movw ax, hl
|
---|
110 | cmpw ax, #loww _?&src
|
---|
111 | bnz $_1
|
---|
112 | endm
|
---|
113 |
|
---|
114 | ; セグメントのデータクリア(near RAM)
|
---|
115 | clear_seg MACRO dst
|
---|
116 | local _1, _2
|
---|
117 | mov es, #0fh
|
---|
118 | movw hl, #loww _@&dst
|
---|
119 | movw ax, #loww _?&dst
|
---|
120 | br $_2
|
---|
121 | _1:
|
---|
122 | mov [hl+0], #0
|
---|
123 | incw hl
|
---|
124 | _2:
|
---|
125 | cmpw ax, hl
|
---|
126 | bnz $_1
|
---|
127 | endm
|
---|
128 |
|
---|
129 | ; セグメントのデータクリア(far RAM)
|
---|
130 | clear_fseg MACRO dst
|
---|
131 | local _1, _2
|
---|
132 | mov es, #highw _@&dst
|
---|
133 | movw hl, #loww _@&dst
|
---|
134 | movw ax, #loww _?&dst
|
---|
135 | br $_2
|
---|
136 | _1:
|
---|
137 | mov es:[hl+0], #0
|
---|
138 | incw hl
|
---|
139 | _2:
|
---|
140 | cmpw ax, hl
|
---|
141 | bnz $_1
|
---|
142 | endm
|
---|
143 |
|
---|
144 | ;
|
---|
145 | ; システム開始
|
---|
146 | ;
|
---|
147 | @@CODE CSEG BASE
|
---|
148 | _start:
|
---|
149 |
|
---|
150 | ;
|
---|
151 | ; PSWの設定
|
---|
152 | ;
|
---|
153 | di ; 割込み禁止(割込みロック相当の割込み禁止)
|
---|
154 | sel rb0 ; レジスタバンク(RB0)
|
---|
155 |
|
---|
156 | ;
|
---|
157 | ; ミラー領域の設定
|
---|
158 | ;
|
---|
159 | mov a, #INIT_MAA
|
---|
160 | mov1 cy, a.0
|
---|
161 | mov1 maa, cy
|
---|
162 |
|
---|
163 | ;
|
---|
164 | ; スタックポインタの設定
|
---|
165 | ;
|
---|
166 | movw de, #__kernel_istkpt
|
---|
167 | mov es, #00H
|
---|
168 | movw ax, es:[de]
|
---|
169 | movw sp, ax
|
---|
170 |
|
---|
171 | ;
|
---|
172 | ; _hardware_init_hook の呼び出し(もしあれば)
|
---|
173 | ;
|
---|
174 | ;call !!_hardware_init_hook
|
---|
175 |
|
---|
176 | ;
|
---|
177 | ; メモリ初期化
|
---|
178 | ;
|
---|
179 | copy_seg R_INIS, INIS
|
---|
180 | copy_seg R_INIT, INIT
|
---|
181 | copy_fseg RLINIT, INITL
|
---|
182 |
|
---|
183 | clear_seg DATS
|
---|
184 | clear_seg DATA
|
---|
185 | clear_fseg DATAL
|
---|
186 |
|
---|
187 | ; saddr領域の初期化
|
---|
188 | mov b,#_@SADSIZ
|
---|
189 | clrw ax
|
---|
190 | saddr_init_loop:
|
---|
191 | dec b
|
---|
192 | dec b
|
---|
193 | movw _@SADBEG[b], ax
|
---|
194 | bnz $saddr_init_loop
|
---|
195 |
|
---|
196 | ;
|
---|
197 | ; _sofrware_init_hook の呼び出し(もしあれば)
|
---|
198 | ;
|
---|
199 | ;call !!_software_init_hook
|
---|
200 |
|
---|
201 | ;
|
---|
202 | ; sta_ker (kernel/startup.c) の呼び出し
|
---|
203 | ;
|
---|
204 | br !!_sta_ker
|
---|
205 |
|
---|
206 | _loop:
|
---|
207 | br $_loop
|
---|
208 |
|
---|
209 | END
|
---|