OSDN Git Service

d0dd325f5bb917e55217d8e7047b3fd07e69df9b
[hos/hos-v4a.git] / kernel / source / arch / proc / h8 / h8300 / ctxctl.src
1 ; --------------------------------------------------------------------------- 
2 ;  Hyper Operating System V4 Advance μITRON4.0仕様 Real-Time OS              
3 ;    コンテキスト制御                                                         
4 ;                                                                             
5 ;                                     Copyright (C) 1998-2006 by Project HOS  
6 ;                                     http://sourceforge.jp/projects/hos/     
7 ; --------------------------------------------------------------------------- 
8
9
10
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               ; 割り込みマスク
16
17
18                                 .SECTION  P, CODE, ALIGN=2
19
20
21 ; -----------------------------------------------
22 ;  割り込み禁止
23 ;  void _kernel_dis_int(void)
24 ; -----------------------------------------------
25                                 .STACK  __kernel_dis_int=4
26 __kernel_dis_int:
27                                 orc             #h'c0, ccr                              ; 割り込みの禁止
28                                 rts
29
30
31 ; -----------------------------------------------
32 ;  割り込み許可
33 ;  void _kernel_ena_int(void)
34 ; -----------------------------------------------
35                                 .STACK  __kernel_ena_int=4
36 __kernel_ena_int:
37                                 mov.b   @__kernel_h83_imsk, r0l
38                                 ldc.b   r0l, ccr                                ; 割り込みの許可
39                                 rts
40
41
42 ; -----------------------------------------------
43 ;  実行コンテキストエントリーアドレス
44 ; -----------------------------------------------
45 ctx_entry:      
46                                 mov.l   er3, er0                                ; 実行時パラメータを第一引数に設定
47                                 mov.l   er4, er1                                ; 実行時パラメータを第一引数に設定
48                                 jmp             @er2                                    ; 実行アドレスにジャンプ
49
50
51 ; -----------------------------------------------
52 ;  実行コンテキストの作成
53 ;  _kernel_cre_ctx(
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
61 __kernel_cre_ctx:
62                                 sub.l   #24, er1                                ; エントリーポイント+er2〜er6 までの退避分
63                                 mov.l   er2, @(0, er1)                  ; 実行アドレスの格納(er2部分)
64                                 mov.l   @(4, er7), er2
65                                 mov.l   er2, @(4, er1)                  ; 実行時パラメータ1の格納(er3部分)
66                                 mov.l   @(8, er7), er2
67                                 mov.l   er2, @(8, er1)                  ; 実行時パラメータ1の格納(er4部分)
68                                 mov.l   #ctx_entry, er2
69                                 mov.l   er2, @(20, er1)                 ; 実行エントリーポイントの設定
70                                 mov.l   er1, @(0, er0)                  ; スタックポインタの格納
71                                 rts
72
73
74 ; -----------------------------------------------
75 ;  実行コンテキストの切替
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
81 __kernel_swi_ctx:
82                                 push.l  er2
83                                 push.l  er3
84                                 push.l  er4
85                                 push.l  er5
86                                 push.l  er6
87                                 mov.l   er7,@(0, er1)                   ; スタックポインタ保存
88                 ; ---- このまま _kernel_sta_ctx に続ける
89
90 ; -----------------------------------------------
91 ;  実行コンテキストの開始
92 ;  void _kernel_sta_ctx(
93 ;               _KERNEL_T_CTXCB *pk_ctxcb)                              開始するコンテキスト [er0]
94 ; -----------------------------------------------
95                                 .STACK  __kernel_sta_ctx=4
96 __kernel_sta_ctx:
97                                 mov.l   @(0, er0), er7                  ; スタックポインタ復帰
98                                 pop.l   er6
99                                 pop.l   er5
100                                 pop.l   er4
101                                 pop.l   er3
102                                 pop.l   er2
103                                 rts
104
105
106
107                                 .END