source: ssp_qb_r5f100le_cs/trunk/arch/rl78_ca78k0r/prc.tf

Last change on this file was 95, checked in by nmir-saito, 9 years ago

ファイルの mime-type 変更

  • Property svn:mime-type set to text/plain; charset=shift_jis
File size: 8.7 KB
Line 
1$
2$ TOPPERS/SSP Kernel
3$ Smallest Set Profile Kernel
4$
5$ Copyright (C) 2008 by Witz Corporation, JAPAN
6$ Copyright (C) 2010-2014 by Naoki Saito
7$ Nagoya Municipal Industrial Research Institute, JAPAN
8$
9$ 上記著作権者は,以下の (1)〜(4) の条件を満たす場合に限り,本ソフトウェ
10$ ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改変・
11$ 再配布(以下,利用と呼ぶ)することを無償で許諾する.
12$ (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作権
13$ 表示,この利用条件および下記の無保証規定が,そのままの形でソース
14$ コード中に含まれていること.
15$ (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使用
16$ できる形で再配布する場合には,再配布に伴うドキュメント(利用者マ
17$ ニュアルなど)に,上記の著作権表示,この利用条件および下記の無保
18$ 証規定を掲載すること.
19$ (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使用
20$ できない形で再配布する場合には,次のいずれかの条件を満たすこと.
21$ (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著作
22$ 権表示,この利用条件および下記の無保証規定を掲載すること.
23$ (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに報
24$ 告すること.
25$ (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損害
26$ からも,上記著作権者およびTOPPERSプロジェクトを免責すること.また,
27$ 本ソフトウェアのユーザまたはエンドユーザからのいかなる理由に基づ
28$ く請求からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
29$
30$ 本ソフトウェアは,無保証で提供されているものである.上記著作権者およ
31$ びTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的に対す
32$ る適合性も含めて,いかなる保証も行わない.また,本ソフトウェアの利用
33$ により直接的または間接的に生じたいかなる損害に関しても,その責任を負
34$ わない.
35$
36
37$
38$ プロセッサ依存テンプレート
39$
40
41$
42$ ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
43$
44
45$INTNO_ATTISR_VALID = INTNO_VALID$
46$INHNO_ATTISR_VALID = INHNO_VALID$
47
48$
49$ DEF_INH/DEF_EXCで使用できる割込みハンドラ番号/CPU例外ハンドラ番号
50$
51
52$INHNO_DEFINH_VALID = INHNO_VALID$
53$EXCNO_DEFEXC_VALID = EXCNO_VALID$
54
55$
56$ CFG_INTで使用できる割込み番号と割込み優先度
57$
58
59$INTNO_CFGINT_VALID = INTNO_VALID$
60
61$ // INTPRI_CFGINT_VALID はプロセッサにセット可能な優先度の範囲を示し,
62$ // カーネル管理(外)かどうかの区別をしていない.
63$ // カーネル管理となる割込み優先度の範囲を変更する場合,
64$ // TMIN_INTPRI (prc_kernel.h) の値を必要に応じて変更する.
65$INTPRI_CFGINT_VALID = { -4,-3,-2,-1 }$
66
67$
68$ スタックサイズのチェック方法指定
69$
70$ アライメントに関係なく同じ速度でアクセスできる
71$
72
73$CHECK_STKSZ_ALIGN = 1$
74
75
76$
77$ 定数定義
78$
79$TA_POSEDGE = TA_EDGE$
80
81$
82$ ターゲット依存の割込み属性の定義
83$
84
85$TARGET_INTATR = TA_POSEDGE | TA_NEGEDGE | TA_BOTHEDGE$
86
87$
88$ 標準テンプレートファイルのインクルード
89$
90$INCLUDE "kernel.tf"$
91
92
93$
94$ CFG_INTのターゲット依存のエラーチェック
95$
96$
97$
98
99$FOREACH intno INT.ORDER_LIST$
100$ // INT割込みに対する割込み番号かどうか
101 $IF (LENGTH(FIND(INTNO_INT , INT.INTNO[intno])) != 0)$
102$ // TA_POSEDGE または TA_NEGEDGE または TA_BOTHEDGE が同時に設定されてないかどうか
103 $IF
104 ( ((INT.INTATR[intno] & (TA_POSEDGE|TA_NEGEDGE|TA_BOTHEDGE)) != (TA_POSEDGE))
105 & ((INT.INTATR[intno] & (TA_POSEDGE|TA_NEGEDGE|TA_BOTHEDGE)) != (TA_NEGEDGE))
106 & ((INT.INTATR[intno] & (TA_POSEDGE|TA_NEGEDGE|TA_BOTHEDGE)) != (TA_BOTHEDGE))
107 )$
108 $ERROR$ INT.TEXT_LINE[intno]:$FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "intatr", INT.INTATR[intno], INT.INTNO[intno], "CFG_INT")$$END$
109 $END$
110 $ELSE$
111$ // INT割込み以外の割込みに対して TA_ENAINT 及び TA_EDGE 以外の割込み属性が指定されていないかどうか
112 $IF (INT.INTATR[intno] & ~(TA_ENAINT|TA_EDGE)) != 0$
113 $ERROR$ INT.TEXT_LINE[intno]: $FORMAT(_("illegal %1% `%2%\' of `%3%\' in %4%"), "intatr", INT.INTATR[intno], INT.INTNO[intno], "CFG_INT")$$END$
114 $END$
115 $END$
116$END$
117
118
119$
120$ 割込み番号から割込み優先度を取り出すテーブル
121$
122
123$FILE "kernel_cfg.c"$
124
125const PRI _kernel_intpri_table[$LENGTH(INTNO_RANGE)$] = $NL$
126{
127$FOREACH intno INTNO_RANGE$
128 $IF LENGTH(INT.INTNO[intno])$
129 $intpri = INT.INTPRI[intno]$
130 $ELSE$
131 $intpri = "0"$
132 $END$
133 $TAB$$FORMAT("INT8_C(%2d), /* %02u */", intpri , +intno)$$NL$
134$END$
135};$NL$$NL$
136
137
138$
139$ アーキテクチャ依存テンプレート(アセンブラ固有部分)
140$
141
142$
143$ アセンブラ出力ファイル (共通部分)
144$
145
146$FILE "kernel_cfg_asm.asm"$
147
148;$NL$
149; RL78アーキテクチャ依存出力ファイル$NL$
150;$NL$
151; 割込みハンドラ入口処理の定義$NL$
152;$NL$
153$NL$$NL$
154
155
156$
157$ 割込み入口処理
158$
159
160$
161$ グローバルシンボル
162$
163
164$TAB$extrn __kernel_interrupt_entry $NL$
165$TAB$extrn __kernel_int_return$NL$$NL$
166
167$TAB$; コンパイラが使用する saddr領域のレジスタ$NL$
168$TAB$extrn _@RTARG0,_@RTARG2,_@RTARG4,_@RTARG6,_@SEGAX,_@SEGDE$NL$
169$TAB$extrn _@NRARG0,_@NRARG1,_@NRARG2,_@NRARG3$NL$
170$TAB$extrn _@NRAT00,_@NRAT02,_@NRAT04,_@NRAT06$NL$
171$NL$
172
173; $NL$
174; コンパイラが使用するsaddr領域の退避 $NL$
175; $NL$
176save_saddr_regs macro$NL$
177 $TAB$movw ax, _@RTARG0 $NL$
178 $TAB$push ax $NL$
179 $TAB$movw ax, _@RTARG2 $NL$
180 $TAB$push ax $NL$
181 $TAB$movw ax, _@RTARG4 $NL$
182 $TAB$push ax $NL$
183 $TAB$movw ax, _@RTARG6 $NL$
184 $TAB$push ax $NL$
185 $TAB$movw ax, _@SEGAX $NL$
186 $TAB$push ax $NL$
187 $TAB$movw ax, _@SEGDE $NL$
188 $TAB$push ax $NL$
189 $TAB$$$if (ALLOC_REGVAR_TO_SADDR) ; -qr オプションを使用する場合 $NL$
190 $TAB$movw ax, _@NRARG0 $NL$
191 $TAB$push ax $NL$
192 $TAB$movw ax, _@NRARG1 $NL$
193 $TAB$push ax $NL$
194 $TAB$movw ax, _@NRARG2 $NL$
195 $TAB$push ax $NL$
196 $TAB$movw ax, _@NRARG3 $NL$
197 $TAB$push ax $NL$
198 $TAB$movw ax, _@NRAT00 $NL$
199 $TAB$push ax $NL$
200 $TAB$movw ax, _@NRAT02 $NL$
201 $TAB$push ax $NL$
202 $TAB$movw ax, _@NRAT04 $NL$
203 $TAB$push ax $NL$
204 $TAB$movw ax, _@NRAT06 $NL$
205 $TAB$push ax $NL$
206 $TAB$$$endif$NL$
207 $TAB$endm$NL$
208 $NL$
209
210@@BASE$TAB$CSEG BASE$NL$
211
212$
213$ 割込みハンドラ入口処理
214$
215
216$FOREACH inhno INHNO_RANGE$
217 $IF LENGTH(INH.INHNO[inhno])$
218 $TAB$extrn _$INH.INTHDR[inhno]$ $NL$
219 $TAB$public __kernel_$INH.INTHDR[inhno]$_$+INH.INHNO[inhno]$_entry $NL$
220 __kernel_$INH.INTHDR[inhno]$_$+INH.INHNO[inhno]$_entry: $NL$
221 $TAB$push ax ; レジスタをタスクスタックへ退避 $NL$
222 $TAB$push bc $NL$
223 $TAB$push de $NL$
224 $TAB$push hl $NL$
225 $TAB$mov a,es ; ES, CS の退避 $NL$
226 $TAB$mov x,a $NL$
227 $TAB$mov a,cs $NL$
228 $TAB$push ax $NL$
229 $TAB$save_saddr_regs$NL$
230 $TAB$movw bc, #_$INH.INTHDR[inhno]$ ; ハンドラのアドレスを bc へ $NL$
231
232 $IF (INH.INHATR[inhno] & TA_NONKERNEL) == 0$
233 $TAB$br __kernel_interrupt_entry ; 共通の入口処理へ $NL$
234 $NL$$NL$
235 $ELSE$
236 $TAB$;カーネル管理外の割込みの場合,ハンドラ実行してそのままリターン $NL$
237 $TAB$call bc ; 割込みハンドラ呼び出し$NL$
238 $TAB$br __kernel_int_return ; レジスタ復帰 & 割込みからリターン(prc_support.asm) $NL$
239 $END$
240 $END$
241$END$
242
243
244$
245$ CPU例外ハンドラ入口処理
246$
247
248$FOREACH excno EXCNO_RANGE$
249 $IF LENGTH(EXC.EXCNO[excno])$
250 $TAB$extrn _$EXC.EXCHDR[excno]$ $NL$
251 $TAB$public __kernel_$EXC.EXCHDR[excno]$_$+EXC.EXCNO[excno]$_entry $NL$
252 __kernel_$EXC.EXCHDR[excno]$_$+EXC.EXCNO[excno]$_entry: $NL$
253 $TAB$push ax ; レジスタをタスクスタックへ退避 $NL$
254 $TAB$push bc $NL$
255 $TAB$push de $NL$
256 $TAB$push hl $NL$
257 $TAB$mov a,es ; ES, CS の退避 $NL$
258 $TAB$mov x,a $NL$
259 $TAB$mov a,cs $NL$
260 $TAB$push ax $NL$
261 $TAB$save_saddr_regs $NL$
262 $TAB$movw ax, sp ; SP(ハンドラの引数となる)を ax へ $NL$
263 $TAB$movw bc, #_$EXC.EXCHDR[excno]$ ; ハンドラのアドレスを bc へ $NL$
264 $TAB$br __kernel_interrupt_entry ; 共通の入口処理へ $NL$
265 $NL$$NL$
266 $END$
267$END$
268
269
270$
271$ ベクタテーブル
272$
273
274;$NL$
275; ベクタテーブル$NL$
276;$NL$
277$NL$
278
279$TAB$extrn $TAB$ _unused_interrupt $NL$
280$TAB$org 0004h$NL$$NL$
281$FOREACH inhno INHNO_RANGE$
282 $IF LENGTH(INH.INHNO[inhno])$
283 $inhhdr = CONCAT(CONCAT("_kernel_" , CONCAT(INH.INTHDR[inhno] , "_")) , CONCAT(+INH.INHNO[inhno] , "_entry"))$
284 $ELSE$
285 $inhhdr = "unused_interrupt"$
286 $END$
287 $TAB$dw$TAB$_$inhhdr$ $TAB$ $TAB$ $FORMAT("; %02d" , inhno)$ $NL$
288$END$
289$NL$$NL$
290
291$TAB$org 007eh$NL$$NL$
292$FOREACH excno EXCNO_RANGE$
293 $IF LENGTH(EXC.EXCNO[excno])$
294 $exchdr = CONCAT(CONCAT("_kernel_" , CONCAT(EXC.EXCHDR[excno] , "_")) , CONCAT(+EXC.EXCNO[excno] , "_entry"))$
295 $ELSE$
296 $exchdr = "unused_interrupt"$
297 $END$
298 $TAB$dw$TAB$_$exchdr$ $TAB$ $TAB$ $FORMAT("; %02d" , excno)$ $NL$
299$END$
300$NL$$NL$
301
302 $TAB$end
303$NL$
304
305$
306$ prc_support.asm 用マクロ定義ファイル
307$
308
309$FILE "prc_support_def.inc"$
310
311$IF TMIN_INTPRI == -4$
312 TMIN_INTPRI_EQU_MINUS4 equ 1 $NL$
313$ELSE$
314 TMIN_INTPRI_EQU_MINUS4 equ 0 $NL$
315$END$
Note: See TracBrowser for help on using the repository browser.