1 ; ---------------------------------------------------------------------------
2 ; Hyper Operating System V4 Advance μITRON4.0仕様 Real-Time OS
5 ; Copyright (C) 1998-2006 by Project HOS
6 ; http://sourceforge.jp/projects/hos/
7 ; ---------------------------------------------------------------------------
11 .EXPORT __kernel_dis_int ; 割り込み禁止
12 .EXPORT __kernel_ena_int ; 割り込み許可
13 .EXPORT __kernel_cre_ctx ; 実行コンテキストの作成
14 .EXPORT __kernel_swi_ctx ; 実行コンテキストの切替
15 .IMPORT __kernel_h83_imsk ; 割り込みマスク
18 .SECTION P, CODE, ALIGN=2
21 ; -----------------------------------------------
23 ; void _kernel_dis_int(void)
24 ; -----------------------------------------------
25 .STACK __kernel_dis_int=4
27 orc #h'c0, ccr ; 割り込みの禁止
31 ; -----------------------------------------------
33 ; void _kernel_ena_int(void)
34 ; -----------------------------------------------
35 .STACK __kernel_ena_int=4
37 mov.b @__kernel_h83_imsk, r0l
38 ldc.b r0l, ccr ; 割り込みの許可
42 ; -----------------------------------------------
44 ; -----------------------------------------------
46 mov.l er3, er0 ; 実行時パラメータを第一引数に設定
47 mov.l er4, er1 ; 実行時パラメータを第一引数に設定
48 jmp @er2 ; 実行アドレスにジャンプ
51 ; -----------------------------------------------
54 ; _KERNEL_T_CTXCB *pk_ctxcb, 作成するコンテキスト [er0]
55 ; VP isp, 初期スタックポインタ [er1]
56 ; FP entry, 実行アドレス [er2]
57 ; VP_INT par1, 実行時パラメータ1 [@(4, er7)]
58 ; VP_INT par2) 実行時パラメータ2 [@(8, er7)]
59 ; -----------------------------------------------
60 .STACK __kernel_cre_ctx=12
62 sub.l #24, er1 ; エントリーポイント+er2〜er6 までの退避分
63 mov.l er2, @(0, er1) ; 実行アドレスの格納(er2部分)
65 mov.l er2, @(4, er1) ; 実行時パラメータ1の格納(er3部分)
67 mov.l er2, @(8, er1) ; 実行時パラメータ1の格納(er4部分)
69 mov.l er2, @(20, er1) ; 実行エントリーポイントの設定
70 mov.l er1, @(0, er0) ; スタックポインタの格納
74 ; -----------------------------------------------
76 ; void _kernel_swi_ctx(
77 ; _KERNEL_T_CTXCB *pk_ctxcb_nxt, 切り替え先のコンテキスト [er0]
78 ; _KERNEL_T_CTXCB *pk_ctxcb_now) 現在のコンテキスト [er1]
79 ; -----------------------------------------------
80 .STACK __kernel_swi_ctx=24
87 mov.l er7,@(0, er1) ; スタックポインタ保存
88 ; ---- このまま _kernel_sta_ctx に続ける
90 ; -----------------------------------------------
92 ; void _kernel_sta_ctx(
93 ; _KERNEL_T_CTXCB *pk_ctxcb) 開始するコンテキスト [er0]
94 ; -----------------------------------------------
95 .STACK __kernel_sta_ctx=4
97 mov.l @(0, er0), er7 ; スタックポインタ復帰