[363] | 1 | ;*
|
---|
| 2 | ;* TOPPERS/JSP Kernel
|
---|
| 3 | ;* Toyohashi Open Platform for Embedded Real-Time Systems/
|
---|
| 4 | ;* Just Standard Profile Kernel
|
---|
| 5 | ;*
|
---|
| 6 | ;* Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
|
---|
| 7 | ;* Toyohashi Univ. of Technology, JAPAN
|
---|
| 8 | ;* Copyright (C) 2003-2007 by Naoki Saito
|
---|
| 9 | ;* Nagoya Municipal Industrial Research Institute, JAPAN
|
---|
| 10 | ;* Copyright (C) 2003-2004 by Ryosuke Takeuchi
|
---|
| 11 | ;* Platform Development Center RICOH COMPANY,LTD. JAPAN
|
---|
| 12 | ;*
|
---|
| 13 | ;* ä¸è¨èä½æ¨©è
|
---|
| 14 | ã¯ï¼ä»¥ä¸ã® (1)ã(4) ã®æ¡ä»¶ãï¼Free Software Foundation
|
---|
| 15 | ;* ã«ãã£ã¦å
|
---|
| 16 | ¬è¡¨ããã¦ãã GNU General Public License ã® Version 2 ã«è¨
|
---|
| 17 | ;* è¿°ããã¦ããæ¡ä»¶ãæºããå ´åã«éãï¼æ¬ã½ããã¦ã§ã¢ï¼æ¬ã½ããã¦ã§ã¢
|
---|
| 18 | ;* ãæ¹å¤ãããã®ãå«ãï¼ä»¥ä¸åãï¼ã使ç¨ã»è¤è£½ã»æ¹å¤ã»åé
|
---|
| 19 | å¸ï¼ä»¥ä¸ï¼
|
---|
| 20 | ;* å©ç¨ã¨å¼ã¶ï¼ãããã¨ãç¡åã§è¨±è«¾ããï¼
|
---|
| 21 | ;* (1) æ¬ã½ããã¦ã§ã¢ãã½ã¼ã¹ã³ã¼ãã®å½¢ã§å©ç¨ããå ´åã«ã¯ï¼ä¸è¨ã®èä½
|
---|
| 22 | ;* 権表示ï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãï¼ãã®ã¾ã¾ã®å½¢ã§ã½ã¼
|
---|
| 23 | ;* ã¹ã³ã¼ãä¸ã«å«ã¾ãã¦ãããã¨ï¼
|
---|
| 24 | ;* (2) æ¬ã½ããã¦ã§ã¢ãï¼ã©ã¤ãã©ãªå½¢å¼ãªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
| 25 | ;* ç¨ã§ããå½¢ã§åé
|
---|
| 26 | å¸ããå ´åã«ã¯ï¼åé
|
---|
| 27 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨
|
---|
| 28 | ;* è
|
---|
| 29 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®èä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨
|
---|
| 30 | ;* ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
| 31 | ;* (3) æ¬ã½ããã¦ã§ã¢ãï¼æ©å¨ã«çµã¿è¾¼ããªã©ï¼ä»ã®ã½ããã¦ã§ã¢éçºã«ä½¿
|
---|
| 32 | ;* ç¨ã§ããªãå½¢ã§åé
|
---|
| 33 | å¸ããå ´åã«ã¯ï¼æ¬¡ã®ããããã®æ¡ä»¶ãæºããã
|
---|
| 34 | ;* ã¨ï¼
|
---|
| 35 | ;* (a) åé
|
---|
| 36 | å¸ã«ä¼´ãããã¥ã¡ã³ãï¼å©ç¨è
|
---|
| 37 | ããã¥ã¢ã«ãªã©ï¼ã«ï¼ä¸è¨ã®è
|
---|
| 38 | ;* ä½æ¨©è¡¨ç¤ºï¼ãã®å©ç¨æ¡ä»¶ããã³ä¸è¨ã®ç¡ä¿è¨¼è¦å®ãæ²è¼ãããã¨ï¼
|
---|
| 39 | ;* (b) åé
|
---|
| 40 | å¸ã®å½¢æ
|
---|
| 41 | ãï¼å¥ã«å®ããæ¹æ³ã«ãã£ã¦ï¼TOPPERSããã¸ã§ã¯ãã«
|
---|
| 42 | ;* å ±åãããã¨ï¼
|
---|
| 43 | ;* (4) æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´æ¥çã¾ãã¯éæ¥çã«çãããããªãæ
|
---|
| 44 | ;* 害ãããï¼ä¸è¨èä½æ¨©è
|
---|
| 45 | ããã³TOPPERSããã¸ã§ã¯ããå
|
---|
| 46 | 責ãããã¨ï¼
|
---|
| 47 | ;*
|
---|
| 48 | ;* æ¬ã½ããã¦ã§ã¢ã¯ï¼ç¡ä¿è¨¼ã§æä¾ããã¦ãããã®ã§ããï¼ä¸è¨èä½æ¨©è
|
---|
| 49 | ã
|
---|
| 50 | ;* ãã³TOPPERSããã¸ã§ã¯ãã¯ï¼æ¬ã½ããã¦ã§ã¢ã«é¢ãã¦ï¼ãã®é©ç¨å¯è½æ§ã
|
---|
| 51 | ;* å«ãã¦ï¼ãããªãä¿è¨¼ãè¡ããªãï¼ã¾ãï¼æ¬ã½ããã¦ã§ã¢ã®å©ç¨ã«ããç´
|
---|
| 52 | ;* æ¥çã¾ãã¯éæ¥çã«çãããããªãæ害ã«é¢ãã¦ãï¼ãã®è²¬ä»»ãè² ããªãï¼
|
---|
| 53 | ;*
|
---|
| 54 | ;* @(#) $Id: cpu_support.a30,v 1.7 2007/03/23 07:06:35 honda Exp $
|
---|
| 55 |
|
---|
| 56 |
|
---|
| 57 | ;
|
---|
| 58 | ; ããã»ããµä¾åã¢ã¸ã¥ã¼ã« ã¢ã»ã³ããªè¨èªé¨ï¼M16Cç¨ï¼
|
---|
| 59 | ;
|
---|
| 60 |
|
---|
| 61 | ;
|
---|
| 62 | ; offset.incã¯makeoffset.cã¨m16coffset.exeã³ãã³ãã«ãã
|
---|
| 63 | ; èªåçæãããï¼
|
---|
| 64 | ;
|
---|
| 65 | .include offset.inc
|
---|
| 66 |
|
---|
| 67 | .glb __kernel_runtsk
|
---|
| 68 | .glb __kernel_schedtsk
|
---|
| 69 | .glb __kernel_reqflg
|
---|
| 70 | .glb __kernel_enadsp
|
---|
| 71 |
|
---|
| 72 | .glb __kernel_dispatch
|
---|
| 73 | .glb __kernel_exit_and_dispatch
|
---|
| 74 | .glb __kernel_activate_r
|
---|
| 75 | .glb __kernel_call_texrtn
|
---|
| 76 | .glb __kernel_interrupt
|
---|
| 77 | .glb __kernel_intnest
|
---|
| 78 |
|
---|
| 79 | .glb _iana_tsk
|
---|
| 80 | .glb __kernel_break_wait
|
---|
| 81 |
|
---|
| 82 | .section program, code, align
|
---|
| 83 | ;
|
---|
| 84 | ; ã¿ã¹ã¯ãã£ã¹ãããã£
|
---|
| 85 | ;
|
---|
| 86 | ; dispatch ã¯ï¼ã¿ã¹ã¯ã³ã³ããã¹ãç¶æ
|
---|
| 87 | ã»å²è¾¼ã¿ç¦æ¢ç¶æ
|
---|
| 88 | ã§å¼ã³åºããªã
|
---|
| 89 | ; ãã°ãªããªãï¼exit_and_dispatch ãï¼ã¿ã¹ã¯ã³ã³ããã¹ãç¶æ
|
---|
| 90 | ã»å²è¾¼
|
---|
| 91 | ; ã¿ç¦æ¢ç¶æ
|
---|
| 92 | ã§å¼ã³åºãã®ãååã§ãããï¼ã«ã¼ãã«èµ·åæã«å¯¾å¿ããããï¼
|
---|
| 93 | ; å²è¾¼ã¿ã¢ã¼ãã§å¼ã³åºããå ´åã«ã対å¿ãã¦ããï¼
|
---|
| 94 | ; å¼ã³åºãæ¡ä»¶: IPL=0, FLGã¬ã¸ã¹ã¿Iããã=0 (CPUããã¯ç¶æ
|
---|
| 95 | ),
|
---|
| 96 | ; intnest = 0(ã¿ã¹ã¯ã³ã³ããã¹ã), ã¿ã¹ã¯ã¹ã¿ãã¯
|
---|
| 97 | ;
|
---|
| 98 | __kernel_dispatch:
|
---|
| 99 | pushm sb, fb ; ã¹ã¿ãã¯ã¸ã¬ã¸ã¹ã¿ä¿å
|
---|
| 100 | mov.w __kernel_runtsk, a0
|
---|
| 101 | stc isp, TCB_sp[a0] ; ã¹ã¿ãã¯ãã¤ã³ã¿ãTCBã«ä¿å
|
---|
| 102 | mov.w #(dispatch_r>>16), TCB_pc+2[a0] ; å®è¡åéçªå°ãTCBã«ä¿å
|
---|
| 103 | mov.w #(dispatch_r & 0ffffh), TCB_pc[a0]
|
---|
| 104 | jmp.b dispatcher
|
---|
| 105 | ;
|
---|
| 106 | ; å¼ã³åºãæ¡ä»¶: IPL=0, FLGã¬ã¸ã¹ã¿Iããã=0 (CPUããã¯ç¶æ
|
---|
| 107 | ),
|
---|
| 108 | ; intnest = 0(ã¿ã¹ã¯ã³ã³ããã¹ã), ã¿ã¹ã¯ã¹ã¿ãã¯
|
---|
| 109 | ;
|
---|
| 110 | ; a0 ã«ã¯runtsk ã®ã¢ãã¬ã¹ãæ ¼ç´ããã¦ãã
|
---|
| 111 | ;
|
---|
| 112 | dispatch_r:
|
---|
| 113 | popm sb,fb ; ã¿ã¹ã¯ã¹ã¿ãã¯ããã¬ã¸ã¹ã¿å¾©å¸°
|
---|
| 114 | mov.w TCB_enatex[a0], r0
|
---|
| 115 | btst TCB_enatex_bit, r0 ; ã¿ã¹ã¯ä¾å¤å¦ç許å¯?
|
---|
| 116 | jz dispatch_r_1 ; 許å¯ã§ãªããã° dispatch_r_1 ã¸
|
---|
| 117 | mov.w TCB_texptn[a0], r0 ; ä¿çä¾å¤è¦å ããããï¼
|
---|
| 118 | jz dispatch_r_1 ; ãªããã° dispatch_r_1 ã¸
|
---|
| 119 | jmp __kernel_call_texrtn ; ã¿ã¹ã¯ä¾å¤ãã³ãã©ã¸
|
---|
| 120 | dispatch_r_1: ; ã¿ã¹ã¯ä¾å¤ãå®è¡ããªãå ´å
|
---|
| 121 | rts ; dispatch å¼ã³åºãå
|
---|
| 122 | ã¸æ»ã.
|
---|
| 123 |
|
---|
| 124 |
|
---|
| 125 | ;
|
---|
| 126 | ; ã¿ã¹ã¯èµ·åæå¦ç
|
---|
| 127 | ;
|
---|
| 128 | ; ããã§ã¯, CPUããã¯è§£é¤ç¶æ
|
---|
| 129 | ã«ã, ã¿ã¹ã¯ãèµ·åãã.
|
---|
| 130 | ;
|
---|
| 131 | ; å¼åºæ¡ä»¶: FLGã¬ã¸ã¹ã¿Iããã=0 (CPUããã¯ç¶æ
|
---|
| 132 | ), ã¿ã¹ã¯ã¹ã¿ãã¯
|
---|
| 133 | ; IPL=0, ã¿ã¹ã¯ã³ã³ããã¹ã(intnest=0)
|
---|
| 134 | ;
|
---|
| 135 | __kernel_activate_r:
|
---|
| 136 | pop.w a0 ; ã¿ã¹ã¯ã®èµ·åçªå°ãA1A0ã«è¨å®
|
---|
| 137 | pop.w a1
|
---|
| 138 | ldc #0040h, flg ; å²è¾¼ã¿è¨±å¯, ISP, IPL=0
|
---|
| 139 | jmpi.a a1a0
|
---|
| 140 |
|
---|
| 141 | ;
|
---|
| 142 | ; dispatchå¼ã³åºãæ¡ä»¶:
|
---|
| 143 | ; ã»ãã¹ã¦ã®ã¿ã¹ã¯ã®ã³ã³ããã¹ãã¯ä¿åããã¦ãã.
|
---|
| 144 | ; ã»FLGã¬ã¸ã¹ã¿Iããã=0 (CPUããã¯ç¶æ
|
---|
| 145 | )
|
---|
| 146 | ; ã»ã³ã³ããã¹ãã¯ã¿ã¹ã¯ã³ã³ããã¹ã(intnest=0)
|
---|
| 147 | ; ãä½ããexit_and_dispatchã«ã¤ãã¦ã¯ã¢ãã¿ã¼èµ·åçãèæ
|
---|
| 148 | ®
|
---|
| 149 | ; ãããä¸è¨ä»¥å¤ã®å¼ã³åºãæ¡ä»¶ã®å¯¾å¿ãè¡ã
|
---|
| 150 | ; dispatcher å¼åºæã®ã¹ã¿ãã¯:
|
---|
| 151 | ; __kernel_dispatch ããããå ´å: ã¿ã¹ã¯ã¹ã¿ãã¯
|
---|
| 152 | ; exit_and_dispatch ããããå ´å:
|
---|
| 153 | ; exit_task ããããå ´åã¯ã¿ã¹ã¯ã¹ã¿ãã¯
|
---|
| 154 | ; ã«ã¼ãã«èµ·åæã¯å²è¾¼ã¿ã¹ã¿ãã¯
|
---|
| 155 | ; ret_int ããããå ´å: å²è¾¼ã¿ã¹ã¿ãã¯
|
---|
| 156 | ; dispatcher_2 ã§ã®å²è¾¼ã¿å¾
|
---|
| 157 | ã¡ããããå ´å: å²è¾¼ã¿ã¹ã¿ãã¯
|
---|
| 158 | ;
|
---|
| 159 |
|
---|
| 160 | __kernel_exit_and_dispatch:
|
---|
| 161 | fclr i ; å²è¾¼ã¿ç¦æ¢
|
---|
| 162 | mov.b #0, __kernel_intnest ; ãã¹ãã«ã¦ã³ã¿ã¯ãªã¢
|
---|
| 163 | dispatcher:
|
---|
| 164 | mov.w __kernel_schedtsk, a0 ;
|
---|
| 165 | mov.w a0, __kernel_runtsk ; schedtsk ã runtsk ã«
|
---|
| 166 | .IF MON == 1
|
---|
| 167 | ; ã¿ã¹ã¯ã¢ãã¿ã¼æ©è½ç¨åå²
|
---|
| 168 | ; ä¸è¦ã®å ´å㯠(MON = 0)
|
---|
| 169 | jsr.a _iana_tsk ; ã¿ã¹ã¯å®è¡æ
|
---|
| 170 | å ±ã®è¨å®
|
---|
| 171 | mov.w __kernel_runtsk,a0 ; a0ã復帰
|
---|
| 172 | .ENDIF
|
---|
| 173 | jz dispatcher_1 ; schedtsk ããªããã°å²è¾¼ã¿å¾
|
---|
| 174 | ã¡
|
---|
| 175 | ldc TCB_sp[a0], isp ; ã¿ã¹ã¯ã¹ã¿ãã¯ãã¤ã³ã¿ã復帰
|
---|
| 176 | jmpi.a TCB_pc[a0] ; å®è¡åéçªå°ã¸ã¸ã£ã³ã
|
---|
| 177 | ;
|
---|
| 178 | ; schdedtskã NULL ã®å ´åã¯ãããããä¸ã«ã¯è¡ããªã
|
---|
| 179 | ;
|
---|
| 180 | dispatcher_1:
|
---|
| 181 | ldc #RAMEND, isp ; å²è¾¼ã¿ç¨ã®ã¹ã¿ãã¯ã¸åæ¿ã
|
---|
| 182 | inc.b __kernel_intnest ; éã¿ã¹ã¯ã³ã³ããã¹ã
|
---|
| 183 | dispatcher_2:
|
---|
| 184 | fset i ; å²è¾¼ã¿å¾
|
---|
| 185 | ã¡
|
---|
| 186 | wait ; waitå½ä»¤ã使ç¨ããã¨
|
---|
| 187 | nop ; æ¶è²»é»åãæãããã¨ãã§ãã.
|
---|
| 188 | nop ; ã³ã¡ã³ããã¤ããã¾ã¾(nopã®ã¿)ã«ããã¨
|
---|
| 189 | nop ; ã¢ã¤ãã«ã«ã¼ãã¨åããããªåä½ã«ãªã.
|
---|
| 190 | nop ;
|
---|
| 191 | ;
|
---|
| 192 | ; ããã§éã¿ã¹ã¯ã³ã³ããã¹ã,å²è¾¼ã¿ã¹ã¿ãã¯ã«åãæããã®ã¯,
|
---|
| 193 | ; ããã§çºçããå²è¾¼ã¿å¦çã«ã©ã®ã¹ã¿ãã¯ã使ããã¨ããåé¡ã®è§£æ±ºã¨,
|
---|
| 194 | ; å²è¾¼ã¿ãã³ãã©å
|
---|
| 195 | ã§ã®ãã£ã¹ãããé²æ¢ã¨ãã2ã¤ã®æå³ãããï¼
|
---|
| 196 | ;
|
---|
| 197 | fclr i ; å²è¾¼ã¿ç¦æ¢
|
---|
| 198 | mov.w __kernel_reqflg, r0 ; reqflg ã FALSE ãªã
|
---|
| 199 | jz dispatcher_2 ; dispatcher_2 ã¸
|
---|
| 200 | mov.w #0, __kernel_reqflg ; reqflgãTRUEãªãFALSEã«ãã
|
---|
| 201 | dec.b __kernel_intnest ; ã¿ã¹ã¯ã³ã³ããã¹ãã«æ»ã
|
---|
| 202 | jmp.b dispatcher ; dispatcher ã¸æ»ã
|
---|
| 203 |
|
---|
| 204 |
|
---|
| 205 | ;
|
---|
| 206 | ; å²è¾¼ã¿ãã³ãã©/CPUä¾å¤ãã³ãã©åºå£å¦ç
|
---|
| 207 | ;
|
---|
| 208 | ; å¼åºãæ¡ä»¶:
|
---|
| 209 | ; ã»FLGã¬ã¸ã¹ã¿ã®Iããã=0, IPL=0, ã¿ã¹ã¯ã³ã³ããã¹ã(intnest=0)
|
---|
| 210 | ; ã»ä½¿ç¨ã¹ã¿ãã¯ã¯ã¿ã¹ã¯ã¹ã¿ãã¯, reqflg = TRUE
|
---|
| 211 | ;
|
---|
| 212 | ret_int:
|
---|
| 213 | mov.w #0, __kernel_reqflg ; reqflg <--- FALSE
|
---|
| 214 | mov.w __kernel_runtsk, a0 ; A0 <--- runtsk
|
---|
| 215 | mov.w __kernel_enadsp, r0 ; enadsp ã FALSE ãªã
|
---|
| 216 | jz ret_int_r ; ret_int_r ã¸
|
---|
| 217 | mov.w __kernel_schedtsk, r0 ; schedtskã¨
|
---|
| 218 | cmp.w a0, r0 ; runtsk ãåããªã
|
---|
| 219 | jeq ret_int_r ; ret_int_r ã¸
|
---|
| 220 | ;;;; (runtsk == NULL) ã®ãã§ãã¯ã¯å¿
|
---|
| 221 | è¦ãªãããåé¤ (07/03/02)
|
---|
| 222 | stc isp, TCB_sp[a0] ; ã¿ã¹ã¯ã¹ã¿ãã¯ãä¿å
|
---|
| 223 | mov.w #(ret_int_r&0ffffh), TCB_pc[a0] ; å®è¡åéçªå°ãä¿å
|
---|
| 224 | mov.w #(ret_int_r>>16), TCB_pc+2[a0]
|
---|
| 225 | jmp.b dispatcher
|
---|
| 226 |
|
---|
| 227 | __kernel_break_wait:
|
---|
| 228 | ret_int_r:
|
---|
| 229 | mov.w TCB_enatex[a0],r0 ; enatex ã FALSE ãªããªã¿ã¼ã³
|
---|
| 230 | btst TCB_enatex_bit,r0
|
---|
| 231 | jz ret_int_r_1
|
---|
| 232 | mov.w TCB_texptn[a0],r0 ; texptn ã 0 ãªãã°ãªã¿ã¼ã³
|
---|
| 233 | jz ret_int_r_1
|
---|
| 234 | jsr.a __kernel_call_texrtn ; ã¿ã¹ã¯ä¾å¤å¦çã«ã¼ãã³ã®å¼åºã
|
---|
| 235 | ret_int_r_1:
|
---|
| 236 | popm r0,r1,r2,r3,a0,a1,sb,fb ; ã¹ã¿ãã¯ããã¬ã¸ã¹ã¿ã復帰
|
---|
| 237 | reit ; ã¿ã¹ã¯ã¸æ»ã
|
---|
| 238 |
|
---|
| 239 |
|
---|
| 240 | ;
|
---|
| 241 | ; å²è¾¼ã¿/CPUä¾å¤ã®åºå
|
---|
| 242 | ¥å£å¦ç(ã¢ã»ã³ããªè¨èªè¨è¿°é¨å)
|
---|
| 243 | ;
|
---|
| 244 | ; å¼åºãæ¡ä»¶:
|
---|
| 245 | ; ã»FLGã¬ã¸ã¹ã¿ã®Iããã=0, IPLã¯åä»ããå²è¾¼ã¿ã®IPL.
|
---|
| 246 | ; ã»ã¹ã¿ãã¯ã¯å¤éå²ãè¾¼ã¿ãªãå²è¾¼ã¿ã¹ã¿ãã¯, ããã§ãªããã°
|
---|
| 247 | ; ã¿ã¹ã¯ã¹ã¿ãã¯
|
---|
| 248 | ; ã»a1ã¨a0 ã«ã¯å²è¾¼ã¿/CPUä¾å¤ãã³ãã©ã®ã¢ãã¬ã¹ãæ ¼ç´ããã¦ãã.
|
---|
| 249 | ; ã»r1 ã«ã¯(ã¿ã¹ã¯orå²è¾¼ã¿)ã¹ã¿ãã¯ãã¤ã³ã¿ã®å¤ãæ ¼ç´ããã¦ãã.
|
---|
| 250 | ; ããã¯ãã®ã¾ã¾CPUä¾å¤ãã³ãã©ã«æ¸¡ãVPåã®å¤æ° p_excinf ã¨ãªã.
|
---|
| 251 | ;
|
---|
| 252 | ; ã¬ã¸ã¹ã¿ãã¹ã¿ãã¯ä¸ã«ã©ã®ããã«ä¿åããã¦ãããã以ä¸ã«ç¤ºã.
|
---|
| 253 | ; ãã®å³ã§ã¯ä¸ãä½ä½, ä¸ãé«ä½ã®ã¢ãã¬ã¹ã§, ã¹ã¿ãã¯ã¯ä¸ãã
|
---|
| 254 | ; ä¸æ¹åã«åãã£ã¦ç©ã¿ä¸ãããããã®ã¨ãã.
|
---|
| 255 | ;
|
---|
| 256 | ; --------------------------------------
|
---|
| 257 | ; | R0(2byte) | <--- p_excinf
|
---|
| 258 | ; | |
|
---|
| 259 | ; --------------------------------------
|
---|
| 260 | ; | R1(2byte) |
|
---|
| 261 | ; | |
|
---|
| 262 | ; --------------------------------------
|
---|
| 263 | ; | R2(2byte) |
|
---|
| 264 | ; | |
|
---|
| 265 | ; --------------------------------------
|
---|
| 266 | ; | R3(2byte) |
|
---|
| 267 | ; | |
|
---|
| 268 | ; --------------------------------------
|
---|
| 269 | ; | A0(2byte) |
|
---|
| 270 | ; | |
|
---|
| 271 | ; --------------------------------------
|
---|
| 272 | ; | A1(2byte) |
|
---|
| 273 | ; | |
|
---|
| 274 | ; --------------------------------------
|
---|
| 275 | ; | SB(2byte) |
|
---|
| 276 | ; | |
|
---|
| 277 | ; --------------------------------------
|
---|
| 278 | ; | FB(2byte) |
|
---|
| 279 | ; | |
|
---|
| 280 | ; --------------------------------------
|
---|
| 281 | ; | PCã®ä¸ä½2ãã¤ã |
|
---|
| 282 | ; | |
|
---|
| 283 | ; --------------------------------------
|
---|
| 284 | ; | FLGã®ä¸ä½1ãã¤ã |
|
---|
| 285 | ; --------------------------------------
|
---|
| 286 | ; | FLGã®ä¸ä½4ããã/PCã®ä¸ä½4ããã |
|
---|
| 287 | ; --------------------------------------
|
---|
| 288 | ;
|
---|
| 289 | ; ãã³ãã©ãããªã¿ã¼ã³ããå¾ã¯, å¤éå²è¾¼ã¿ã§ãªã, ã㤠reqflg ã
|
---|
| 290 | ; TRUE ã«ãªã£ãæã«ï¼ret_int ã¸åå²ããï¼
|
---|
| 291 | ;
|
---|
| 292 | ; å¤éå²è¾¼ã¿ãã©ããã¯å²è¾¼ã¿ãã¹ãã«ã¦ã³ã¿ã®å¤ã§å¤å®ãã.
|
---|
| 293 | ; intnest != 0 ãªãã°å¤éå²è¾¼ã¿ã§ããã¨å¤å®ãã.
|
---|
| 294 | ;
|
---|
| 295 | ; reqflg ã¯CPUããã¯ç¶æ
|
---|
| 296 | ã§ãã§ãã¯ãã. ããã§ãªãã¨ï¼
|
---|
| 297 | ; reqflg ãã§ãã¯å¾ã«èµ·åãããå²è¾¼ã¿ãã³ãã©å
|
---|
| 298 | ã§
|
---|
| 299 | ; ãã£ã¹ããããè¦æ±ãããå ´åã«ï¼ãã£ã¹ããããããªã.
|
---|
| 300 | ;
|
---|
| 301 | __kernel_interrupt:
|
---|
| 302 | cmp.b #0, __kernel_intnest ; å¤éå²ãè¾¼ã¿ãã©ãã
|
---|
| 303 | jnz int_from_int ; 0ã§ãªããã°å¤éå²è¾¼ã¿
|
---|
| 304 | int_from_task: ; å段ã®å²è¾¼ã¿
|
---|
| 305 | ldc #RAMEND, isp ; å²è¾¼ã¿ç¨ã®ã¹ã¿ãã¯ã¸åæ¿ãã
|
---|
| 306 | push.w r1 ; ã¹ã¿ãã¯ãã¤ã³ã¿ãå²è¾¼ã¿ã¹ã¿ãã¯ã¸ä¿å
|
---|
| 307 | int_from_int: ; å¤éå²è¾¼ã¿
|
---|
| 308 | inc.b __kernel_intnest ; ãã¹ãåæ°ãã¤ã³ã¯ãªã¡ã³ã
|
---|
| 309 | fset i ; å²è¾¼ã¿ç¦æ¢è§£é¤
|
---|
| 310 | jsri.a a1a0 ; Cã«ã¼ãã³å¼ã³åºã
|
---|
| 311 | fclr i ; å²è¾¼ã¿ç¦æ¢
|
---|
| 312 | dec.b __kernel_intnest ; ãã¹ãåæ°ããã¯ãªã¡ã³ã
|
---|
| 313 | jnz int_return ; å¤éå²ãè¾¼ã¿ãªããªã¿ã¼ã³
|
---|
| 314 | int_from_task2: ; å段ã®å²è¾¼ã¿
|
---|
| 315 | pop.w r1 ; ã¿ã¹ã¯ã¹ã¿ãã¯ãã¤ã³ã¿ãæ»ã
|
---|
| 316 | ldc r1, isp
|
---|
| 317 | ldipl #0 ; ã¿ã¹ã¯ã®IPLå¤ãã»ãã(IPL=0)
|
---|
| 318 | mov.w __kernel_reqflg, r1 ; ãã£ã¹ãããè¦æ±ããªãã?
|
---|
| 319 | jz int_return ; ãªããã°å²è¾¼ã¿çºçå
|
---|
| 320 | ã®ã¿ã¹ã¯ã«æ»ã
|
---|
| 321 | jmp.b ret_int ; ããã° ret_int ã¸ã¸ã£ã³ã
|
---|
| 322 | int_return:
|
---|
| 323 | popm r0,r1,r2,r3,a0,a1,sb,fb ; ã¬ã¸ã¹ã¿å¾©å¸°
|
---|
| 324 | reit ; å²è¾¼ã¿åã®å¦çã«æ»ã
|
---|
| 325 |
|
---|
| 326 | ;
|
---|
| 327 | ; å¾®å°æéå¾
|
---|
| 328 | ã¡
|
---|
| 329 | ;
|
---|
| 330 | SIL_DLY_TIM1 .equ 625 ; æå°æé(ã«ã¼ã0å)[ns]
|
---|
| 331 | SIL_DLY_TIM2 .equ 250 ; ã«ã¼ã1åãããã®æé[ns]
|
---|
| 332 |
|
---|
| 333 | .glb $sil_dly_nse
|
---|
| 334 | $sil_dly_nse:
|
---|
| 335 | sub.w #SIL_DLY_TIM1, r1
|
---|
| 336 | jgtu L0
|
---|
| 337 | rts
|
---|
| 338 | L0:
|
---|
| 339 | sub.w #SIL_DLY_TIM2, r1
|
---|
| 340 | jgtu L0
|
---|
| 341 | rts
|
---|
| 342 |
|
---|
| 343 |
|
---|
| 344 | ; æªä½¿ç¨å²è¾¼ã¿ã®å¦ç
|
---|
| 345 | .glb _unused_interrupt
|
---|
| 346 | _unused_interrupt:
|
---|
| 347 | reit
|
---|
| 348 |
|
---|
| 349 | .end
|
---|