⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cpu_support.sh

📁 toppers操作系统源码
💻 SH
📖 第 1 页 / 共 3 页
字号:
    .long  STACKTOP            /* タスク迫惟婶のスタックの介袋猛  */_expevt:	    .long  EXPEVT_exc_table_exc:	    .long  _exc_table_unmak_rb_bl_exc:		    .long  0x4fffffff_mask_md_ipm_exc:	    .long  0x40000000 + MAX_IPM << 4	_reqflg_exc:    .long  _reqflg_cpu_expevt_k:	    .long  _cpu_expevt	_mask_md_bl_exc:	    .long  0x50000000 + MAX_IPM << 4	#ifdef GHS_HOOK	.global _exception_hook_exception_hook_dis:	.long   _exception_hook#endif	/* *  タスクディスパッチャ * *  _dispatch は、r7_bank1 = 0,充哈み敦贿觉轮で钙び叫さなければならな *  いˉ_exit_and_dispatch も·r7_bank1 = 0ˇ充哈み敦贿觉轮で钙び叫す *  のが付搂であるが·カ〖ネル弹瓢箕に滦炳するため·r7_bank1 = 1で钙び *  叫した眷圭にも滦炳しているˉ */    .text    .align 2    .global _dispatch_dispatch:    sts.l  pr,@-r15         /* pr,r8×r15 をスタックに瘦赂           */    mov.l  r14,@-r15        /* r0×r7は钙び叫し傅で瘦赂しているため  */        mov.l  r13,@-r15        /* 瘦赂する涩妥が痰い                    */        mov.l  r12,@-r15    mov.l  r11,@-r15    mov.l  r10,@-r15    mov.l  r9, @-r15    mov.l  r8, @-r15    mov.l  _runtsk_dis,r2   /* r0 <- runtsk                          */    mov.l  @r2,r0    mov.l  r15,@(TCB_sp,r0) /* タスクスタックをTCBに瘦赂 60笆布ならOK*/		    mov.l  dispatch_r_k,r1  /* 悸乖浩倡戎孟を瘦赂                    */    mov.l  r1,@(TCB_pc,r0)  /* 悸乖浩倡戎孟をTCBに瘦赂  60笆布ならOK */    bra    dispatcher     nopdispatch_r:	    mov.l  @r15+,r8         /* レジスタを牲耽                       */    mov.l  @r15+,r9    mov.l  @r15+,r10    mov.l  @r15+,r11    mov.l  @r15+,r12    mov.l  @r15+,r13    mov.l  @r15+,r14    lds.l  @r15+,pr    /*     *  タスク毋嘲借妄ル〖チンの弹瓢     *  dispatch_rはdispatcherから钙び叫されるため·     *  tcbのアドレスはr0に掐っているˉ           */    mov.l  @(TCB_enatex,r0),r1    mov.l  _enatex_mask_dis,r2    tst    r1,r2    bt     dispatch_r_1         /* enatex が FALSE ならリタ〖ン */    mov.l  @(TCB_texptn,r0),r1  /* texptnをロ〖ド               */    tst    r1,r1    bt     dispatch_r_1         /* texptn が 0で痰ければ        */    mov.l  _call_texrtn_dis,r1  /* タスク毋嘲ル〖チンの钙び叫し */    jmp    @r1             nop                          dispatch_r_1:       rts     nop                    .global _exit_and_dispatch_exit_and_dispatch:    xor    r1,r1                 /* r7_bank1を0クリア             */    ldc    r1,r7_bankdispatcher:    /*     * ここには充り哈み敦贿で丸ること     */    mov.l  _schedtsk_dis,r12    /* r0 <- schedtsk                   */    mov.l  @r12,r0                 cmp/eq #0,r0                /* schedtsk があるか々              */    bt     dispatcher_1         /* 痰ければジャンプ                 */#ifdef GHS_HOOK 	mov.l   _dispatch_hook_dis,r2	jsr     @r2	mov     r0,r4	mov.l   @r12,r0#endif    mov.l  _runtsk_dis,r2    mov.l  r0,@r2               /* schedtskをruntskに               */    mov.l  @(TCB_sp,r0),r15     /* TCBからタスクスタックを牲耽      */    mov.l  @(TCB_pc,r0),r1      /* TCBから悸乖浩倡戎孟を牲耽        */    jmp    @r1      nopdispatcher_1:    /* イミディエイト猛を髓搀粕み哈むのは跟唯が碍いので祸涟に脱罢する     * r8  : 充り哈み敦贿のためのSRの猛        * r9  : 充り哈み略ち面のSRの猛     * r10 : reqflgの戎孟     * r11 : 0x01     * r12 : 0x00     * r13 : sleep面のSRの觉轮            */    mov.l  _mask_md_ipm_dis,r8  /* 充り哈み敦贿のSRの猛             */#ifdef NO_SLEEP    mov.l  _mask_md_dis,r9      /* 充り哈み略ち面のSRの猛           */        #else    mov.l  _mask_bl_md_dis,r9   /* 充り哈み略ち面のSRの猛           */#endif                          #ifdef SUPPORT_CHG_IPM    mov.l  _task_intmask_k,r2    mov.l  @r2,r3    or     r3,r9#endif    mov.l  _reqflg_dis,r10    mov    #0x01,r11    xor    r12,r12    mov.l  _stacktop_dis,r15   /* スタックを充り哈みスタックに     */    ldc    r11,r7_bank         /* r7_bank1 を1にして充り哈み觉轮に */        dispatcher_2:            /*     *  ここで充哈みモ〖ドに磊り垂えるのは·ここで券栏する充哈み借妄     *  にどのスタックを蝗うかという啼玛の豺疯と·充哈みハンドラ柒で     *  のタスクディスパッチの松贿という企つの罢蹋があるˉ     */     /*      *  充哈み钓材稿にsleep炭吾を悸乖すると·充哈み钓材炭吾の悸乖涟に      *  充哈み妥滇が掐っている眷圭·充哈み钓材炭吾の悸乖と鼎に充哈みが      *  减け烧けられその牲耽稿に·reqflgのチェックではなく sleep 觉轮      *  に掐ってしまうˉ      *  この啼玛は·充哈みの钓材と sleep 觉轮への败乖がアトミックに悸      *  乖できないことに弹傍するˉ      *  そのため·sleep 悸乖木涟の SR 恃构では BL ビットを'1'に肋年す      *  ることで·充哈みの钓材と sleep 觉轮への笆惯をアトミックに悸乖      *  するˉ      *  ldc r9,sr ではBLビットがセットされるため·充哈みは减け烧けずス      *  リ〖プモ〖ドに败乖するˉスリ〖プモ〖ド面は·BLビットが1でも充      *  哈みを减け烧けるため(SH7709ハ〖ドウェアマニュアル 8-10)·スリ〖      *  プモ〖ドへの败乖木稿に充哈みを减烧スリ〖プモ〖ドから牲耽するˉ      */                   ldc    r9,sr               /* 充り哈みの钓材                   */#ifndef NO_SLEEP    sleep                      /* 充哈み略ち                       */#endif /* NO_SLEEP */                    ldc    r8,sr               /* 充り哈み敦贿                     */      mov.l  @r10,r7             /* r7 <- reqflg                     */    tst    r7,r7               /* reqflg が FALSEなら              */    bt     dispatcher_2        /* dispatcher_2 へ                  */    ldc    r12,r7_bank         /* r7_bank1 をクリア                */            mov.l  r12,@r10            /* reqflg を FALSEに                */    bra    dispatcher     nop	    .align 4_runtsk_dis:	    .long _runtsk_schedtsk_dis:	    .long _schedtsk_enatex_mask_dis:        .long TCB_enatex_mask_call_texrtn_dis:	    .long _call_texrtn_mask_md_ipm_dis:	    .long 0x40000000 + MAX_IPM << 4_mask_md_dis:	    .long 0x40000000_mask_bl_md_dis:	    .long 0x50000000	        dispatch_r_k:	    .long dispatch_r_stacktop_dis:    .long STACKTOP           /* タスク迫惟婶のスタックの介袋猛	*/_reqflg_dis:    .long  _reqflg#ifdef GHS_HOOK	.global _dispatch_hook_dispatch_hook_dis:	.long   _dispatch_hook#endif/*  *  充り哈みハンドラ/CPU毋嘲ハンドラ叫庚借妄 * * 提り黎がタスクでreqflgがセットされている眷圭のみここにくる。 * r7_bank1 = 0,充り哈み敦贿觉轮,スクラッチレジスタを瘦赂した * 觉轮で钙び叫すこと。  *	 */    .text    .align 2    .globl ret_int    .globl ret_excret_exc:ret_int:    mov.l  _runtsk_ret,r1     /* r0 <- runtsk                  */    mov.l  @r1,r0               mov.l  _enadsp_ret,r2     /* enadspのチェック              */    mov.l  @r2,r3    tst    r3,r3               bt     ret_int_1               mov.l  _schedtsk_ret,r4   /* r5 <- schedtsk                */     mov.l  @r4,r5    cmp/eq r0,r5              /* runtsk と schedtsk を孺秤     */    bt     ret_int_1    mov.l  r14,@-r15          /* 荒りのレジスタを瘦赂          */    mov.l  r13,@-r15					    mov.l  r12,@-r15					    mov.l  r11,@-r15					    mov.l  r10,@-r15					    mov.l  r9,@-r15					    mov.l  r8,@-r15    mov    #TCB_sp,r1        /* タスクスタックを瘦赂           */    mov.l  r15,@(r0,r1)        mov.l  ret_int_r_k,r1    /* 悸乖浩倡戎孟を瘦赂             */    mov    #TCB_pc,r2	    mov.l  r1,@(r0,r2)      bra    dispatcher     nop    ret_int_r:    mov.l  @r15+,r8		    mov.l  @r15+,r9		    mov.l  @r15+,r10		    mov.l  @r15+,r11		    mov.l  @r15+,r12		    mov.l  @r15+,r13		    mov.l  @r15+,r14		ret_int_1:    /*     *  タスク毋嘲借妄ル〖チンの弹瓢     *  ret_int_r は dispatcher から钙び叫されるため·tcbのアドレスはr0に     *  掐っているˉ     *  なお·充哈みの叫庚でタスクスイッチが券栏しない眷圭はディスパッチャ     *  を奶らずに ret_int から木儡 ret_int_1 に若ぶ            */    mov.l  @(TCB_enatex,r0),r1    mov.l  _enatex_mask_ret,r2    tst    r1,r2    bt     ret_int_2            /* enatex が FALSE ならリタ〖ン  */    mov.l  @(TCB_texptn,r0),r1  /* texptnをロ〖ド                */    tst    r1,r1    bt     ret_int_2            /* texptn が 0で痰ければT<= 0    */    mov.l _call_texrtn_ret,r1   /* タスク毋嘲ル〖チンの钙び叫し  */    jsr   @r1             nop       ret_int_2:               #ifdef SUPPORT_CHG_IPM    mov    #32,r0    mov.l  @(r0,r15),r1    mov.l  _unmask_ipm,r2    and    r2,r1    mov.l  _task_intmask_k,r2    mov.l  @r2,r3    or     r3,r1    mov.l  r1,@(r0,r15)#endif /* SUPPORT_CHG_IMP */    mov.l  @r15+,r7            /* spc,pr,ssr,スクラッチレジスタを牲耽 */    mov.l  @r15+,r6            mov.l  @r15+,r5    mov.l  @r15+,r4    mov.l  @r15+,r3    mov.l  @r15+,r2    mov.l  @r15+,r1    mov.l  _mask_md_bl_ret,r0    ldc    r0,sr               /* BLを1に                               */    mov.l  @r15+,r0    lds.l  @r15+,mach                    lds.l  @r15+,macl            ldc.l  @r15+,gbr           ldc.l  @r15+,ssr    

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -