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

📄 cpu_support.sh

📁 toppers操作系统源码
💻 SH
📖 第 1 页 / 共 3 页
字号:
    lds.l  @r15+,pr    ldc.l  @r15+,spc    rte     nop            .align 4_runtsk_ret:    .long _runtsk_schedtsk_ret:	    .long _schedtsk_enadsp_ret:	    .long _enadspret_int_r_k:    .long ret_int_r_enatex_mask_ret:        .long TCB_enatex_mask        _call_texrtn_ret:	    .long _call_texrtn_mask_md_bl_ret:	    .long  0x50000000/* *  タスク弹瓢借妄 */     .text    .align 2    .globl _activate_r_activate_r:    stc    sr,r0               /* 充り哈み钓材 */    mov.l  _unmask_ipm,r1    and    r1,r0	#ifdef SUPPORT_CHG_IPM    mov.l  _task_intmask_k,r1    mov.l  @r1,r2    or     r2,r0#endif /* SUPPORT_CHG_IPM */    ldc    r0,sr    mov.l  @r15+,r1    lds.l  @r15+,pr    mov.l  @r15+,r4    jmp    @r1     nop    .align 4_unmask_ipm:    .long  0xffffff0f#ifdef SUPPORT_CHG_IPM		_task_intmask_k:    .long _task_intmask#endif /* SUPPORT_CHG_IPM */				/* *  Exception 600 vector *  充り哈みが券栏すると悸乖される。		 * * *  SH3は充り哈みが券栏するとすべてVBR+0x600戎孟からプログラムを悸乖するため、 *  ここに芹弥するル〖チンでまずスタックの磊り仑え、レジスタの瘦赂,IPMの肋年, *  充り哈み妥傍の冉年を乖いその稿BLビットを0にして充り哈みハンドラを钙ぶ涩妥 *  がある。 *  充り哈み妥傍に滦炳した充り哈みハンドラの倡幌戎孟は芹误int_table[]に判峡し *  て钙び叫す。オフセットの纷换は、充り哈み妥傍レジスタを宝に2ビットシフトし *  て乖う。充り哈み妥傍レジスタはSH7708ではINTEVTレジスタにセットされるが、 *  SH7709およびSH7709AではINTEVT2にセットされるため、ifdefにより磊り尸けてい *  る。また、办婶のディバイスについて充り哈み妥傍レジスタで畔される猛とIPMと *  の粗には簇犯がないため、称充り哈み妥傍に滦炳したIPMを积つSRの柒推を芹误 *  int_plevel_table[]に判峡してそれを粕み叫す。 * *  reqflg をチェックする涟に充哈みを敦贿しないと·reqflg をチェック稿 *  に弹瓢された充哈みハンドラ柒でディスパッチが妥滇された眷圭に·ディ *  スパッチされないˉ * */    .org    0x0600        /* _BASE_VBR + 0x0600戎孟に芹弥 */    .align 2    .global _interrupt_interrupt:    #ifdef GHS_STUB	mov.l	r0,@-r15	mov.l	r1,@-r15	mov.l   _intevt,r0 	mov.l   @r0,r1     	shlr2   r1           	shlr    r1/*	mov.l   _int_table_k,r0	mov.l   @(r0,r1),r0*/		mov.l	@r15+,r1	mov.l	@r15+,r0	bt      _rom_interrupt   #endif    stc.l  spc,@-r15       /* 驴脚充り哈みが掐ると久えてしまうので        */    sts.l  pr,@-r15        /* spc,pr,ssr,gbr,macl,mach                    */    stc.l  ssr,@-r15        stc.l  gbr,@-r15                        sts.l  macl,@-r15                        sts.l  mach,@-r15                                                        stc.l  r0_bank,@-r15   /* ,r0×r7をスタックに瘦赂   */     stc.l  r1_bank,@-r15    stc.l  r2_bank,@-r15    stc.l  r3_bank,@-r15    stc.l  r4_bank,@-r15    stc.l  r5_bank,@-r15    stc.l  r6_bank,@-r15        stc.l  r7_bank,@-r15    tst    r7,r7                 /* 充り哈み券栏箕のコンテキストを冉年  */      bf/s    _interrupt_from_int  /* 毋嘲/充り哈みハンドラならジャンプ   */     add    #0x01,r7             /* 充り哈みのネスト搀眶をインクリメント*/    mov    r15,r1                /* スタックを掐れ仑え傅のスタックポイ  */    mov.l  _stacktop_k,r15       /* ンタを瘦赂                          */    mov.l  r1,@-r15            #ifdef GHS_HOOK	mov.l   r7,@-r15	stc     spc,r0	mov.l   r0,r5	mov.l   _intevt,r0          /* 毋嘲妥傍レジスタを艰评              */	mov.l   _interrupt_hook_dis,r2	jsr     @r2	mov.l   @r0,r4              	mov.l   @r15+,r7#endif    mov.l  _intevt,r0            /* 毋嘲妥傍レジスタを艰评              */    mov.l  @r0,r4                  shlr2  r4                    /* 3ビット宝シフトしオフセットを滇める */    shlr   r4                      mov.l  _int_plevel_table_k,r0     mov.l  @(r0,r4),r5           /* 充り哈みの庭黎刨を艰评               */    mov.l  _int_table_k,r0        mov.l  @(r0,r4),r2           /* 充り哈みハンドラのアドレスを艰评    */    ldc    r2,r2_bank            /* バンク0に磊り仑えるためコピ〖       */        ldc    r5,sr                 /* これ笆惯充り哈みを减け烧ける。      */    jsr    @r2                   /* 充り哈みハンドラへ                  */     nop    mov.l  _mask_md_ipm_ret,r0    ldc    r0,sr                 /* 充り哈み敦贿                           */    stc    r7_bank,r7            /* 毋嘲/充り哈みのネスト搀眶をデクリメント*/    dt     r7    ldc    r7,r7_bank    mov.l  _reqflg_k,r4          /* reqflgのチェック                       */    mov.l  @r4,r1    tst    r1,r1                 /* reqflgがFALSEならret_to_task_intに若ぶ */    bt/s   _ret_to_task_int      /* タスクに提る                           */     mov.l  @r15,r15             /* 提り黎がタスクなのでスタックを提す     */    xor    r0,r0    bra    ret_int     mov.l  r0,@r4               /* reqflgをクリア                   */_interrupt_from_int:#ifdef GHS_HOOK	mov.l   r7,@-r15	stc     spc,r0	mov.l   r0,r5	mov.l   _intevt,r0             /* 毋嘲妥傍INTEVT2レジスタを艰评    */	mov.l   _interrupt_hook_dis,r2	jsr     @r2	mov.l   @r0,r4	mov.l   @r15+,r7#endif    mov.l   _intevt,r0           /* 毋嘲妥傍レジスタを艰评           */    mov.l   @r0,r4    shlr2   r4                   /* オフセットを滇める               */    shlr    r4                   /* オフセットを滇める               */        mov.l   _int_plevel_table_k,r0     mov.l   @(r0,r4),r5            /* 充り哈みの庭黎刨を艰评           */    mov.l   _int_table_k,r0            mov.l   @(r0,r4),r2            /* 充り哈みハンドラのアドレスを艰评 */    ldc     r2,r2_bank             /* バンク0に磊り仑えるためコピ〖    */    ldc     r5,sr                  /* これ笆惯充り哈みを减け烧ける。   */    jsr     @r2                    /* 充り哈みハンドラへ               */      nop    mov.l  _mask_md_ipm_ret,r0    ldc    r0,sr                   /* 充り哈み敦贿                     */    stc    r7_bank,r7              /* 毋嘲/充り哈みのネスト搀眶をデクリメント*/    dt     r7    ldc    r7,r7_bank_ret_to_task_int:    mov.l  @r15+,r7                /* 充り哈み傅に提る                 */    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_int,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    lds.l  @r15+,pr    ldc.l  @r15+,spc    rte     nop#ifdef GHS_STUB_rom_interrupt:	stc.l	ssr,@-r15	stc.l	spc,@-r15	mov.l	r0,@-r15	mov.l	r1,@-r15	mov.l	L._CpuException6,r1	jmp	@r1	mov	#6,r0	.align	4L._CpuException6:	.data.l	_CpuExceptionHandler#endif    /*     * 踏判峡の充哈みが券栏すると·その箕の INTEVT,INTEVT2,SR,PC を     * 苞眶にcpu_interrupt()を钙び叫すˉ     */       .global _no_reg_interrupt_no_reg_interrupt:    mov.l _intevt1,r0    mov.l @r0,r4#if defined(SH7709) || defined(SH7709A) || defined(SH7729R) || defined(SH7727)     mov.l _intevt2,r0        mov.l @r0,r5#endif     stc   spc,r6    stc   ssr,r7    mov.l _cpu_interrupt_k,r1    jsr   @r1     nop    .align  4_stacktop_k:    .long  STACKTOP            /* 润タスク迫惟婶のスタックの介袋猛  */_intevt:        #if defined(SH7708) || defined(SH7750)        .long  INTEVT#else    .long  INTEVT2#endif    _int_table_k:        .long    _int_table       _int_plevel_table_k:        .long    _int_plevel_table _reqflg_k:    .long  _reqflg_mask_md_ipm_ret:        .long  0x40000000 + MAX_IPM << 4_mask_md_bl_int:        .long  0x50000000_intevt1:            .long  INTEVT#if defined(SH7709) || defined(SH7709A) || defined(SH7729R) || defined(SH7727) _intevt2:            .long  INTEVT2#endif _cpu_interrupt_k:    .long  _cpu_interrupt   #ifdef GHS_HOOK_interrupt_hook_dis:	.long   _exception_hook#endif   /* *  腮警箕粗略ち */	.globl _sil_dly_nse_sil_dly_nse:    mov.l  _sil_dly_tim1, r1    add    r1, r4    cmp/pl r4    bt     _sil_dly_nse1    rts     nop_sil_dly_nse1:                mov.l  _sil_dly_tim2, r1    add    r1, r4    cmp/pl r4    bt     _sil_dly_nse1    rts     nop       .align 4_sil_dly_tim1:    .long  -SIL_DLY_TIM1    _sil_dly_tim2:                             .long  -SIL_DLY_TIM2

⌨️ 快捷键说明

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