| [7] | 1 | /* |
|---|
| 2 | * TOPPERS/ASP Kernel |
|---|
| 3 | * Toyohashi Open Platform for Embedded Real-Time Systems/ |
|---|
| 4 | * Advanced 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) 2005-2010 by Embedded and Real-Time Systems Laboratory |
|---|
| 9 | * Graduate School of Information Science, Nagoya Univ., JAPAN |
|---|
| 10 | * |
|---|
| 11 | * ŸåµÃøºîž¢ŒÔ€Ï¡€°Ê²Œ€Î(1)¡Á(4)€ÎŸò·ï€òËþ€¿€¹Ÿì¹ç€ËžÂ€ê¡€ËÜ¥œ¥Õ¥È¥Š¥§ |
|---|
| 12 | * ¥¢¡ÊËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò²þÊÑ€·€¿€â€Î€òŽÞ€à¡¥°Ê²ŒÆ±€ž¡Ë€ò»ÈÍÑ¡ŠÊ£Àœ¡Š²þ |
|---|
| 13 | * ÊÑ¡ŠºÆÇÛÉۡʰʲŒ¡€ÍøÍрȞƀ֡ˀ¹€ë€³€È€ò̵œþ€ÇµöÂú€¹€ë¡¥ |
|---|
| 14 | * (1) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¥œ¡Œ¥¹¥³¡Œ¥É€Î·Á€ÇÍøÍÑ€¹€ëŸì¹ç€Ë€Ï¡€Ÿåµ€ÎÃøºî |
|---|
| 15 | * ž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ€Î̵ÊÝŸÚµ¬Äꀬ¡€€œ€Î€Þ€Þ€Î·Á€Ç¥œ¡Œ |
|---|
| 16 | * ¥¹¥³¡Œ¥ÉÃæ€ËŽÞ€Þ€ì€Æ€€€ë€³€È¡¥ |
|---|
| 17 | * (2) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€¥é¥€¥Ö¥é¥ê·ÁŒ°€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È |
|---|
| 18 | * Íрǀ€ë·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€ºÆÇÛÉÛ€ËÈŒ€Š¥É¥¥å¥á¥ó¥È¡ÊÍøÍÑ |
|---|
| 19 | * ŒÔ¥Þ¥Ë¥å¥¢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ€ÎÃøºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ |
|---|
| 20 | * €Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥ |
|---|
| 21 | * (3) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ò¡€µ¡Žï€ËÁȀ߹þ€à€Ê€É¡€ÂŸ€Î¥œ¥Õ¥È¥Š¥§¥¢³«È¯€Ë»È |
|---|
| 22 | * Íрǀ€Ê€€·Á€ÇºÆÇÛÉÛ€¹€ëŸì¹ç€Ë€Ï¡€Œ¡€Î€€€º€ì€«€ÎŸò·ï€òËþ€¿€¹€³ |
|---|
| 23 | * €È¡¥ |
|---|
| 24 | * (a) ºÆÇÛÉÛ€ËÈŒ€Š¥É¥¥å¥á¥ó¥È¡ÊÍøÍьԥޥ˥奢¥ë€Ê€É¡Ë€Ë¡€Ÿåµ€ÎÃø |
|---|
| 25 | * ºîž¢ÉœŒš¡€€³€ÎÍøÍÑŸò·ï€ª€è€Ó²Œµ€Î̵ÊÝŸÚµ¬Äê€ò·ÇºÜ€¹€ë€³€È¡¥ |
|---|
| 26 | * (b) ºÆÇÛÉۀηÁÂÖ€ò¡€ÊÌ€ËÄê€á€ëÊýË¡€Ë€è€Ã€Æ¡€TOPPERS¥×¥í¥ž¥§¥¯¥È€Ë |
|---|
| 27 | * Êó¹ð€¹€ë€³€È¡¥ |
|---|
| 28 | * (4) ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€ë€€€«€Ê€ë» |
|---|
| 29 | * ³²€«€é€â¡€ŸåµÃøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€òÌÈÀÕ€¹€ë€³€È¡¥ |
|---|
| 30 | * €Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Î¥æ¡Œ¥¶€Þ€¿€Ï¥š¥ó¥É¥æ¡Œ¥¶€«€é€Î€€€«€Ê€ëÍý |
|---|
| 31 | * ͳ€ËŽð€Å€¯ÀÁµá€«€é€â¡€ŸåµÃøºîž¢ŒÔ€ª€è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€ò |
|---|
| 32 | * ÌÈÀÕ€¹€ë€³€È¡¥ |
|---|
| 33 | * |
|---|
| 34 | * ËÜ¥œ¥Õ¥È¥Š¥§¥¢€Ï¡€ÌµÊÝŸÚ€ÇÄó¶¡€µ€ì€Æ€€€ë€â€Î€Ç€¢€ë¡¥ŸåµÃøºîž¢ŒÔ€ª |
|---|
| 35 | * €è€ÓTOPPERS¥×¥í¥ž¥§¥¯¥È€Ï¡€ËÜ¥œ¥Õ¥È¥Š¥§¥¢€ËŽØ€·€Æ¡€ÆÃÄê€Î»ÈÍÑÌÜŪ |
|---|
| 36 | * €ËÂЀ¹€ëŬ¹çÀ€âŽÞ€á€Æ¡€€€€«€Ê€ëÊÝŸÚ€â¹Ô€ï€Ê€€¡¥€Þ€¿¡€ËÜ¥œ¥Õ¥È¥Š¥§ |
|---|
| 37 | * ¥¢€ÎÍøÍрˀè€êÄŸÀÜŪ€Þ€¿€ÏŽÖÀÜŪ€ËÀž€ž€¿€€€«€Ê€ë»³²€ËŽØ€·€Æ€â¡€€œ |
|---|
| 38 | * €ÎÀÕÇ€€òÉé€ï€Ê€€¡¥ |
|---|
| 39 | * |
|---|
| 40 | * $Id$ |
|---|
| 41 | */ |
|---|
| 42 | |
|---|
| 43 | /* |
|---|
| 44 | * ¥×¥í¥»¥Ã¥µ°Íž¥â¥ž¥å¡Œ¥ë ¥¢¥»¥ó¥Ö¥êžÀžìÉô¡ÊM68040ÍÑ¡Ë |
|---|
| 45 | */ |
|---|
| 46 | |
|---|
| 47 | #define TOPPERS_MACRO_ONLY |
|---|
| 48 | #define UINT_C(val) (val) /* uint_t·¿€ÎÄê¿ô€òºî€ë¥Þ¥¯¥í */ |
|---|
| 49 | #define ULONG_C(val) (val) /* ulong_t·¿€ÎÄê¿ô€òºî€ë¥Þ¥¯¥í */ |
|---|
| 50 | #define CAST(type, val) (val) /* ·¿¥¥ã¥¹¥È€ò¹Ô€Š¥Þ¥¯¥í */ |
|---|
| 51 | #include "kernel_impl.h" |
|---|
| 52 | #include "offset.h" |
|---|
| 53 | |
|---|
| 54 | /* |
|---|
| 55 | * ¥¿¥¹¥¯¥Ç¥£¥¹¥Ñ¥Ã¥Á¥ã |
|---|
| 56 | */ |
|---|
| 57 | .text |
|---|
| 58 | .globl dispatch |
|---|
| 59 | dispatch: |
|---|
| 60 | /* |
|---|
| 61 | * €³€Î¥ë¡Œ¥Á¥ó€Ï¡€¥¿¥¹¥¯¥³¥ó¥Æ¥¥¹¥È¡ŠCPU¥í¥Ã¥¯ŸõÂÖ¡Š¥Ç¥£¥¹¥Ñ¥Ã¥Á |
|---|
| 62 | * µö²ÄŸõÂÖ¡Š¡Ê¥â¥Ç¥ëŸå€Î¡Ë³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Á޲òœüŸõÂրǞƀӜЀµ |
|---|
| 63 | * €ì€ë¡¥ |
|---|
| 64 | */ |
|---|
| 65 | movem.l %d2-%d7/%a2-%a6, -(%sp) /* ¥ì¥ž¥¹¥¿€òÊÝž */ |
|---|
| 66 | move.l p_runtsk, %a0 /* p_runtsk€òA0€Ë */ |
|---|
| 67 | move.l %sp, TCB_msp(%a0) /* ¥¿¥¹¥¯¥¹¥¿¥Ã¥¯€òÊÝž */ |
|---|
| 68 | move.l #dispatch_r, TCB_pc(%a0) /* ŒÂ¹ÔºÆ³«ÈÖÃÏ€òÊÝž */ |
|---|
| 69 | jbra dispatcher |
|---|
| 70 | |
|---|
| 71 | dispatch_r: |
|---|
| 72 | movem.l (%sp)+, %d2-%d7/%a2-%a6 /* ¥ì¥ž¥¹¥¿€òÉüµ¢ */ |
|---|
| 73 | btst.b #TCB_enatex_bit, TCB_enatex(%a0) |
|---|
| 74 | jbeq dispatch_r_1 /* enatex€¬false€Ê€é¥ê¥¿¡Œ¥ó */ |
|---|
| 75 | tst.l TCB_texptn(%a0) /* texptn€¬0€Ê€é¥ê¥¿¡Œ¥ó */ |
|---|
| 76 | jbeq dispatch_r_1 |
|---|
| 77 | tst.l ipmflg /* ipmflg€¬true€Ç€¢€ì€Ð */ |
|---|
| 78 | jbne call_texrtn /* ¥¿¥¹¥¯Îã³°œèÍý¥ë¡Œ¥Á¥ó€ÎžÆœÐ€· */ |
|---|
| 79 | dispatch_r_1: |
|---|
| 80 | rts |
|---|
| 81 | |
|---|
| 82 | /* |
|---|
| 83 | * ¥Ç¥£¥¹¥Ñ¥Ã¥Á¥ã€Îưºî³«»Ï¡Êprc_support.S¡Ë |
|---|
| 84 | */ |
|---|
| 85 | .globl start_dispatch |
|---|
| 86 | start_dispatch: |
|---|
| 87 | /* |
|---|
| 88 | * €³€Î¥ë¡Œ¥Á¥ó€Ï¡€¥«¡Œ¥Í¥ëµ¯Æ°»þ€Ë¡€€¹€Ù€Æ€Î³ä¹þ€ß€ò¶Ø»ß€·€¿ŸõÂÖ |
|---|
| 89 | * ¡Ê³ä¹þ€ß¥í¥Ã¥¯ŸõÂÖ€ÈÆ±Åù¡Ë€ÇžÆ€ÓœÐ€µ€ì€ë¡¥€Þ€¿¡€³ä¹þ€ß¥â¡Œ¥É¡ÊÈó |
|---|
| 90 | * ¥¿¥¹¥¯¥³¥ó¥Æ¥¥¹¥È€ÈƱÅù¡Ë€ÇžÆ€ÓœÐ€µ€ì€ë€³€È€òÁÛÄꀷ€Æ€€€ë¡¥ |
|---|
| 91 | * |
|---|
| 92 | * prc_initialize€Ç¡€lock_flag€òtrue€Ë¡€saved_iipm€òIIPM_ENAALL€Ë |
|---|
| 93 | * œéŽü²œ€·€Æ€€€ë€¿€á¡€¥«¡Œ¥Í¥ëŽÉÍý³°€Î³ä¹þ€ß€òµö²Ä€¹€ë€³€È€Ç¡€ |
|---|
| 94 | * CPU¥í¥Ã¥¯ŸõÂÖ¡Š¡Ê¥â¥Ç¥ëŸå€Î¡Ë³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Á޲òœüŸõÂրˀʀ롥 |
|---|
| 95 | * €Þ€¿¡€initialize_task€Çdisdsp€òfalse€ËœéŽü²œ€·€Æ€€€ë€¿€á¡€¥Ç¥£ |
|---|
| 96 | * ¥¹¥Ñ¥Ã¥Áµö²ÄŸõÂրˀʀÀƀ€€ë¡¥ |
|---|
| 97 | */ |
|---|
| 98 | #if TIPM_LOCK == -7 |
|---|
| 99 | or.w #0x1000, %sr /* ¥Þ¥¹¥¿¥â¡Œ¥É€Ë */ |
|---|
| 100 | #else /* TIPM_LOCK == -7 */ |
|---|
| 101 | move.w %sr, %d0 /* ¥Þ¥¹¥¿¥â¡Œ¥É¡Š */ |
|---|
| 102 | and.w #~0x0700, %d0 /* ¥«¡Œ¥Í¥ëŽÉÍý³°€Î³ä¹þ€ß€òµö²Ä */ |
|---|
| 103 | or.w #(0x1000 | IIPM_LOCK), %d0 |
|---|
| 104 | move.w %d0, %sr |
|---|
| 105 | #endif /* TIPM_LOCK == -7 */ |
|---|
| 106 | jbra dispatcher_0 |
|---|
| 107 | |
|---|
| 108 | /* |
|---|
| 109 | * žœºß€Î¥³¥ó¥Æ¥¥¹¥È€òŒÎ€Æ€Æ¥Ç¥£¥¹¥Ñ¥Ã¥Á |
|---|
| 110 | */ |
|---|
| 111 | .globl exit_and_dispatch |
|---|
| 112 | exit_and_dispatch: |
|---|
| 113 | /* ¥Ç¥£¥¹¥Ñ¥Ã¥Á¥ãËÜÂΡÊdispatcher¡Ë€Ø */ |
|---|
| 114 | |
|---|
| 115 | /* |
|---|
| 116 | * ¥Ç¥£¥¹¥Ñ¥Ã¥Á¥ãËÜÂÎ |
|---|
| 117 | */ |
|---|
| 118 | dispatcher: |
|---|
| 119 | /* |
|---|
| 120 | * €³€Î¥ë¡Œ¥Á¥ó€Ï¡€¥¿¥¹¥¯¥³¥ó¥Æ¥¥¹¥È¡ŠCPU¥í¥Ã¥¯ŸõÂÖ¡Š¥Ç¥£¥¹¥Ñ¥Ã¥Á |
|---|
| 121 | * µö²ÄŸõÂÖ¡Š¡Ê¥â¥Ç¥ëŸå€Î¡Ë³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯Á޲òœüŸõÂրǞƀӜЀµ |
|---|
| 122 | * €ì€ë¡¥ |
|---|
| 123 | * |
|---|
| 124 | * €¹€Ê€ï€Á¡€¥Þ¥¹¥¿¥â¡Œ¥É¡Šlock_flag€¬true¡Šdisdsp€¬false¡Šdspflg |
|---|
| 125 | * €¬true¡Šsaved_iipm€¬IIPM_ENAALL€È€Ê€Ã€Æ€€€ë¡¥ŒÂ¹ÔºÆ³«ÈÖÃπ؀″ |
|---|
| 126 | * €ÎŸõÂր΀ހÞʬŽô€¹€ë¡¥ |
|---|
| 127 | */ |
|---|
| 128 | #ifdef LOG_DSP_ENTER |
|---|
| 129 | move.l p_runtsk, %d0 /* p_runtsk€ò¥Ñ¥é¥á¡Œ¥¿€Ë */ |
|---|
| 130 | move.l %d0, -(%sp) |
|---|
| 131 | jsr log_dsp_enter |
|---|
| 132 | addq.l #4, %sp |
|---|
| 133 | #endif /* LOG_DSP_ENTER */ |
|---|
| 134 | dispatcher_0: |
|---|
| 135 | move.l p_schedtsk, %a0 /* p_schedtsk€òp_runtsk€Ë */ |
|---|
| 136 | move.l %a0, p_runtsk |
|---|
| 137 | jbeq dispatcher_1 /* p_runtsk€¬NULL€Ê€édispatcher_1€Ø */ |
|---|
| 138 | move.l TCB_msp(%a0), %sp /* ¥¿¥¹¥¯¥¹¥¿¥Ã¥¯€òÉüµ¢ */ |
|---|
| 139 | #ifdef LOG_DSP_LEAVE |
|---|
| 140 | move.l %a0, -(%sp) /* p_runtsk€ò¥Ñ¥é¥á¡Œ¥¿€Ë */ |
|---|
| 141 | jsr log_dsp_leave |
|---|
| 142 | addq.l #4, %sp |
|---|
| 143 | move.l p_runtsk, %a0 |
|---|
| 144 | #endif /* LOG_DSP_LEAVE */ |
|---|
| 145 | move.l TCB_pc(%a0), %a1 /* ŒÂ¹ÔºÆ³«ÈÖÃÏ€ØÊ¬Žô */ |
|---|
| 146 | jmp (%a1) |
|---|
| 147 | dispatcher_1: |
|---|
| 148 | /* |
|---|
| 149 | * CPU¥í¥Ã¥¯ŸõÂÖ€ò²òœü€¹€ëœàÈ÷€ò€¹€ë¡¥ |
|---|
| 150 | */ |
|---|
| 151 | move.w %sr, %d0 /* SR€òD0€ËÊÝž */ |
|---|
| 152 | clr.l lock_flag /* CPU¥í¥Ã¥¯²òœüŸõÂÖ€Ë */ |
|---|
| 153 | dispatcher_2: |
|---|
| 154 | /* |
|---|
| 155 | * ³ä¹þ€ß€òµö²Ä€·¡€³ä¹þ€ß¥â¡Œ¥É€ËÀڀꎹ€š€Æ¡€³ä¹þ€ß€òÂԀġ¥ |
|---|
| 156 | * |
|---|
| 157 | * €³€³€Ç³ä¹þ€ß¥â¡Œ¥É€ËÀڀꎹ€š€ë€Î€Ï¡€€³€³€ÇȯÀž€¹€ë³ä¹þ€ßœèÍý€Ë |
|---|
| 158 | * €É€Î¥¹¥¿¥Ã¥¯€ò»È€Š€«€È€€€ŠÌäÂê€Î²ò·è€È¡€³ä¹þ€ß¥Ï¥ó¥É¥éÆâ€Ç€Î¥¿ |
|---|
| 159 | * ¥¹¥¯¥Ç¥£¥¹¥Ñ¥Ã¥Á€ÎËɻ߀Ȁ€€Š2€Ä€Î°ÕÌ£€¬€¢€ë¡¥ |
|---|
| 160 | * |
|---|
| 161 | * ¥×¥í¥»¥Ã¥µ€ò³ä¹þ€ßÂÔ€Á€Ë°Ü¹Ô€µ€»€ëœèÍý€È¡€³ä¹þ€ßµö²Ä€È€Ï¡€ÉÔ²Ä |
|---|
| 162 | * ʬ€Ë¹Ô€Ê€ŠÉ¬Í×€¬€¢€ë¡ÊM68040€Ç€ÏstopÌ¿Îá€ÇΟÊý¹Ô€Ê€Š€Î€ÇÌäÂê€Ê |
|---|
| 163 | * €€¡Ë¡¥€³€ì€òÉÔ²Äʬ€Ë¹Ô€Ê€ï€Ê€€Ÿì¹ç¡€³ä¹þ€ß€òµö²Ä€·€¿ÄŸžå€Ë³ä¹þ |
|---|
| 164 | * €ß€¬Æþ€ê¡€€œ€ÎÃæ€Ç¥¿¥¹¥¯€¬ŒÂ¹Ô²ÄÇœŸõÂրˀʀë€È¡€ŒÂ¹Ô€¹€Ù€¥¿¥¹ |
|---|
| 165 | * ¥¯€¬€¢€ë€Ë€â€«€«€ï€é€º¥×¥í¥»¥Ã¥µ€¬³ä¹þ€ßÂÔ€Á€Ë€Ê€Ã€Æ€·€Þ€Š¡¥ |
|---|
| 166 | * |
|---|
| 167 | * ³ä¹þ€ßÂÔ€Á€ÎŽÖ€Ï¡€p_runtsk€òNULL¡Ê¡á0¡Ë€ËÀßÄꀷ€Ê€±€ì€Ð€Ê€é€Ê |
|---|
| 168 | * €€¡¥€³€Î€è€Š€ËÀßÄꀷ€Ê€€€È¡€³ä¹þ€ß¥Ï¥ó¥É¥é€«€éiget_tid€òžÆ€ÓœÐ |
|---|
| 169 | * €·€¿ºÝ€Îưºî€¬»ÅÍ̀˹çÃ×€·€Ê€¯€Ê€ë¡¥ |
|---|
| 170 | */ |
|---|
| 171 | stop #0x2000 /* ³ä¹þ€ßÂÔ€Á */ |
|---|
| 172 | move.w %d0, %sr /* žµ€ÎŸõÂÖ€ËÌ္ */ |
|---|
| 173 | tst.l reqflg /* reqflg€¬false€Ê€édispatcher_2€Ø */ |
|---|
| 174 | jbeq dispatcher_2 |
|---|
| 175 | clr.l reqflg /* reqflg€òfalse€Ë */ |
|---|
| 176 | /* |
|---|
| 177 | * CPU¥í¥Ã¥¯ŸõÂÖ€ËÌ္¡¥³ä¹þ€ßÂÔ€Á€ÎŽÖ€ËŒÂ¹Ô€·€¿³ä¹þ€ß¥Ï¥ó¥É¥é€Ë€è |
|---|
| 178 | * €ê¡€saved_iipm€¬œñ€Ž¹€š€é€ì€ë²ÄÇœÀ€¬€¢€ë€¿€á¡€žµ€ÎÃÍ€ËÌ္ɬ |
|---|
| 179 | * Í×€¬€¢€ë¡¥dispatcher€¬ŒÂ¹Ô€µ€ì€ë»þ€Ï¡€saved_iipm€¬IIPM_ENAALL |
|---|
| 180 | * €È€Ê€Ã€Æ€€€ë€¿€á¡€€³€³€Ç€Ïsaved_iipm€òIIPM_ENAALL¡Ê¡á0¡Ë€ËÌျ |
|---|
| 181 | * €Ð€è€€¡¥ |
|---|
| 182 | */ |
|---|
| 183 | clr.w saved_iipm /* saved_iipm€ò0€Ë€¹€ë */ |
|---|
| 184 | move.l #true, lock_flag /* CPU¥í¥Ã¥¯ŸõÂÖ€Ë */ |
|---|
| 185 | jbra dispatcher_0 |
|---|
| 186 | |
|---|
| 187 | /* |
|---|
| 188 | * ¥«¡Œ¥Í¥ë€ÎœªÎ»œèÍý€ÎžÆœÐ€· |
|---|
| 189 | * |
|---|
| 190 | * M68040€Ç€Ï¡€¥â¡Œ¥ÉÀÚŽ¹€š€Ë€è€ê¥¹¥¿¥Ã¥¯€âÀڀꎹ€ï€ë€¿€á¡€ÌÀŒšÅª€Ê¥¹ |
|---|
| 191 | * ¥¿¥Ã¥¯ÀÚŽ¹€š€ÏɬÍ׀ʀ€¡¥ºÇœé€«€é³ä¹þ€ß¥â¡Œ¥É€Ç€¢€Ã€¿Ÿì¹ç€â¡€Æ±€žœè |
|---|
| 192 | * Íý€Ç€è€€¡¥ |
|---|
| 193 | */ |
|---|
| 194 | .globl call_exit_kernel |
|---|
| 195 | call_exit_kernel: |
|---|
| 196 | and.w #~0x1000, %sr /* ³ä¹þ€ß¥â¡Œ¥É€Ë */ |
|---|
| 197 | jmp exit_kernel /* ¥«¡Œ¥Í¥ë€ÎœªÎ»œèÍý€òžÆ€Ö */ |
|---|
| 198 | |
|---|
| 199 | /* |
|---|
| 200 | * ¥¿¥¹¥¯³«»Ï»þœèÍý |
|---|
| 201 | */ |
|---|
| 202 | .text |
|---|
| 203 | .globl start_r |
|---|
| 204 | start_r: |
|---|
| 205 | clr.l lock_flag /* CPU¥í¥Ã¥¯²òœüŸõÂÖ€Ë */ |
|---|
| 206 | and.w #~0x0700, %sr |
|---|
| 207 | move.l TCB_p_tinib(%a0), %a1 /* p_runtsk->p_tinib€òA1€Ë */ |
|---|
| 208 | move.l TINIB_exinf(%a1), -(%sp) /* exinf€ò¥¹¥¿¥Ã¥¯€ËÀÑ€à */ |
|---|
| 209 | move.l #ext_tsk, -(%sp) /* ext_tsk€ò¥¹¥¿¥Ã¥¯€ËÀÑ€à */ |
|---|
| 210 | move.l TINIB_task(%a1), %a0 /* ¥¿¥¹¥¯€Îµ¯Æ°ÈÖÃÏ€òA0€Ë */ |
|---|
| 211 | jmp (%a0) |
|---|
| 212 | |
|---|
| 213 | /* |
|---|
| 214 | * ³ä¹þ€ß¥Ï¥ó¥É¥éœÐžýœèÍý |
|---|
| 215 | * |
|---|
| 216 | * ret_int€Ï¡€³ä¹þ€ß¥Ï¥ó¥É¥é€«€éÌá€Ã€¿ÄŸžå€ËŒÂ¹Ô€¹€ë¥ë¡Œ¥Á¥ó€Ç¡€ |
|---|
| 217 | * INTHDR_ENTRY¥Þ¥¯¥í€ÇÅž³«€¹€ë³ä¹þ€ß¥Ï¥ó¥É¥é€ÎÆþžýœèÍý€Ç¡€³ä¹þ€ß¥Ï¥ó |
|---|
| 218 | * ¥É¥é€«€é€ÎÌá€êÈÖÃÏ€ËÀßÄꀵ€ì€ë¡¥ |
|---|
| 219 | */ |
|---|
| 220 | .text |
|---|
| 221 | .globl ret_int |
|---|
| 222 | ret_int: |
|---|
| 223 | btst.b #4, 16(%sp) /* Ìá€êÀ耬³ä¹þ€ß¥â¡Œ¥É€Ê€é */ |
|---|
| 224 | jbeq ret_int_1 /* €¹€°€Ë¥ê¥¿¡Œ¥ó */ |
|---|
| 225 | /* |
|---|
| 226 | * ¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß€¹€ë¡¥€³€Î»þÅÀ€Ç€Ï¡€CPU¥í¥Ã¥¯ŸõÂÖ€Ë |
|---|
| 227 | * €Ï€Ê€é€Ê€€¡Êlock_flag€Èsaved_iipm€Ï¹¹¿·€·€Ê€€¡Ë¡¥ |
|---|
| 228 | * |
|---|
| 229 | * reqflg€ò¥Á¥§¥Ã¥¯€¹€ëÁ°€Ë³ä¹þ€ß€ò¶Ø»ß€¹€ë€Î€Ï¡€reqflg€ò¥Á¥§¥Ã¥¯ |
|---|
| 230 | * €·€¿ÄŸžå€Ë³ä¹þ€ß¥Ï¥ó¥É¥é€¬µ¯Æ°€µ€ì¡€€œ€ÎÃæ€Ç¥Ç¥£¥¹¥Ñ¥Ã¥Á€¬Í×µá |
|---|
| 231 | * €µ€ì€¿Ÿì¹ç€Ë¡€€¹€°€Ë¥Ç¥£¥¹¥Ñ¥Ã¥Á€µ€ì€Ê€€€È€€€ŠÌäÂꀬÀž€ž€ë€¿€á |
|---|
| 232 | * €Ç€¢€ë¡¥ |
|---|
| 233 | */ |
|---|
| 234 | #if TIPM_LOCK == -7 |
|---|
| 235 | or.w #0x0700, %sr /* €¹€Ù€Æ€Î³ä¹þ€ß€ò¶Ø»ß */ |
|---|
| 236 | #else /* TIPM_LOCK == -7 */ |
|---|
| 237 | /* |
|---|
| 238 | * €³€Î¥ë¡Œ¥Á¥ó€Ï¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€«€éµ¯Æ°€µ€ì€ë€¿€á¡€€³€³€Ç€Ï¡€ |
|---|
| 239 | * ³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€¬TIPM_LOCK€è€ê€âÄ €ÈÁÛÄê€Ç€€ë¡¥ |
|---|
| 240 | */ |
|---|
| 241 | move.w %sr, %d0 /* ¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß */ |
|---|
| 242 | and.w #~0x0700, %d0 |
|---|
| 243 | or.w #IIPM_LOCK, %d0 |
|---|
| 244 | move.w %d0, %sr |
|---|
| 245 | #endif /* TIPM_LOCK == -7 */ |
|---|
| 246 | tst.l reqflg /* reqflg€¬true€Ç€¢€ì€Ðret_int_2€Ø */ |
|---|
| 247 | jbne ret_int_2 |
|---|
| 248 | ret_int_1: |
|---|
| 249 | /* |
|---|
| 250 | * ³ä¹þ€ßœèÍý€«€é€Î¥ê¥¿¡Œ¥ó€Ë€è€ê¡€CPU¥í¥Ã¥¯²òœüŸõÂր˰ܹԀ¹€ë€è€Š |
|---|
| 251 | * œàÈ÷€¹€ë¡¥³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€Ï¡€RTEÌ¿Îá€Ë€è€êžµ€ÎÃÍ€ËÌá€ë€¿€á¡€ |
|---|
| 252 | * lock_flag€òfalse€Ë€·€Æ€ª€±€Ð€è€€¡Êlock_flag€òfalse€Ë€¹€ë€Î€Ï¡€ |
|---|
| 253 | * CPU¥í¥Ã¥¯ŸõÂր΀ހ޳ä¹þ€ß¥Ï¥ó¥É¥é€«€éÌá€Ã€¿»þ€ÎÂкö¡Ë¡¥ |
|---|
| 254 | */ |
|---|
| 255 | clr.l lock_flag /* CPU¥í¥Ã¥¯²òœü€ÎœàÈ÷ */ |
|---|
| 256 | movem.l (%sp)+, %d0-%d1/%a0-%a1 /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òÉüµ¢ */ |
|---|
| 257 | rte |
|---|
| 258 | |
|---|
| 259 | ret_int_2: |
|---|
| 260 | movem.l (%sp)+, %d0-%d1/%a0-%a1 /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òÉüµ¢ */ |
|---|
| 261 | addq.l #8, %sp /* ¥¹¥í¡Œ¥¢¥Š¥§¥€¥Õ¥ì¡Œ¥à€òŒÎ€Æ€ë */ |
|---|
| 262 | or.w #0x1000, %sr /* ¥Þ¥¹¥¿¥â¡Œ¥É€Ë¡Ê¥¹¥¿¥Ã¥¯ÀÚŽ¹€š¡Ë*/ |
|---|
| 263 | movem.l %d0-%d1/%a0-%a1, -(%sp) /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òÊÝž */ |
|---|
| 264 | ret_int_3: |
|---|
| 265 | /* |
|---|
| 266 | * €³€³€Ø€Ï¡€CPUÎã³°¥Ï¥ó¥É¥é€ÎœÐžýœèÍý€«€é€âʬŽô€·€Æ€¯€ë¡¥ |
|---|
| 267 | * |
|---|
| 268 | * €³€³€Ç€Ï¡€Ìá€êÀ耬¥¿¥¹¥¯€Ç€¢€ê¡€¥¹¥¿¥Ã¥¯€Ï¡€Îã³°¥¹¥¿¥Ã¥¯¥Õ¥ì¡Œ |
|---|
| 269 | * ¥à€ÎŸå€Ë¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€Î€ß€¬ÊÝž€µ€ì€¿ŸõÂրˀʀÀƀ€€ë¡¥€Þ |
|---|
| 270 | * €¿¡€¥×¥í¥»¥Ã¥µ€Ï¡€¥Þ¥¹¥¿¥â¡Œ¥É¡Š¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß€·€¿ |
|---|
| 271 | * ŸõÂրȀʀÀƀ€€ë¡¥ |
|---|
| 272 | */ |
|---|
| 273 | clr.l reqflg /* reqflg€òfalse€Ë */ |
|---|
| 274 | /* |
|---|
| 275 | * CPU¥í¥Ã¥¯ŸõÂր˰ܹԀ·¡€³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€ò³ä¹þ€ßœèÍýÁ°€ÎÃÍ€ËÀß |
|---|
| 276 | * Äꀹ€ë¡¥¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€Ï€¹€Ç€Ë¶Ø»ß€·€Æ€€€ë€Î€Ç¡€lock_flag |
|---|
| 277 | * €Èsaved_iipm€ò¹¹¿·€¹€ë¡¥saved_iipm€Ï¡€Ìá€êÀè€Î³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹ |
|---|
| 278 | * ¥¯¡Ê€ÎÆâÉôÉœžœ¡Ë€ËÀßÄꀹ€ë¡¥ |
|---|
| 279 | * |
|---|
| 280 | * €³€Î»þÅÀ€ÇCPU¥í¥Ã¥¯ŸõÂրȀ¹€ë€Î€Ï¡€dispatcher€ØÊ¬Žô€¹€ë»þ€È¡€ |
|---|
| 281 | * call_texrtn€òžÆ€ÓœÐ€¹»þ€Ë¡€CPU¥í¥Ã¥¯ŸõÂրˀʀÀƀ€€ëɬÍ×€¬€¢€ë |
|---|
| 282 | * €¿€á€Ç€¢€ë¡¥ |
|---|
| 283 | */ |
|---|
| 284 | move.w 16(%sp), %d0 /* Ìá€êÀè€ÎSR€òD0€Ë */ |
|---|
| 285 | and.w #0x0700, %d0 /* IPM€òŒè€êœÐ€·€Æsaved_iipm€Ë */ |
|---|
| 286 | move.w %d0, saved_iipm |
|---|
| 287 | move.l #true, lock_flag /* lock_flag€òtrue€Ë */ |
|---|
| 288 | /* |
|---|
| 289 | * dspflg€¬false€Ç€¢€ëŸì¹ç€È¡€p_runtsk€Èp_schedtsk€¬Æ±€žŸì¹ç€Ë€Ï¡€ |
|---|
| 290 | * ¥Ç¥£¥¹¥Ñ¥Ã¥Á€ò¹Ô€ï€Ê€€¡¥€³€Î¥Á¥§¥Ã¥¯€¬É¬Í׀ʀ΀ϡ€¥¿¥¹¥¯Îã³°œè |
|---|
| 291 | * Íý¥ë¡Œ¥Á¥ó€ÎžÆœÐ€·€¬É¬Í׀ʟì¹ç€Ë¡€¥Ç¥£¥¹¥Ñ¥Ã¥Á€¬É¬Í׀ʀ¯€Æ€â¡€ |
|---|
| 292 | * reqflg€òtrue€Ë€¹€ë€¿€á€Ç€¢€ë¡¥ |
|---|
| 293 | */ |
|---|
| 294 | move.l p_runtsk, %a0 /* p_runtsk€òA0€Ë */ |
|---|
| 295 | tst.l dspflg /* dspflg€¬false€Ê€éret_int_4€Ø */ |
|---|
| 296 | jbeq ret_int_4 |
|---|
| 297 | cmp.l p_schedtsk, %a0 /* p_runtsk€Èp_schedtsk€¬Æ±€ž€Ê€é */ |
|---|
| 298 | jbeq ret_int_4 /* ret_int_4ۯ */ |
|---|
| 299 | movem.l %d2-%d7/%a2-%a6, -(%sp) /* »Ä€ê€Î¥ì¥ž¥¹¥¿€òÊÝž */ |
|---|
| 300 | move.l %sp, TCB_msp(%a0) /* ¥¿¥¹¥¯¥¹¥¿¥Ã¥¯€òÊÝž */ |
|---|
| 301 | move.l #ret_int_r, TCB_pc(%a0) /* ŒÂ¹ÔºÆ³«ÈÖÃÏ€òÊÝž */ |
|---|
| 302 | jbra dispatcher |
|---|
| 303 | |
|---|
| 304 | ret_int_r: |
|---|
| 305 | movem.l (%sp)+, %d2-%d7/%a2-%a6 /* ¥ì¥ž¥¹¥¿€òÉüµ¢ */ |
|---|
| 306 | ret_int_4: |
|---|
| 307 | /* |
|---|
| 308 | * enatex€¬true€Ç¡€texptn€¬0€Ç€Ê€¯¡€ipmflg€¬true€Ç€¢€ì€Ð¡€¥¿¥¹¥¯ |
|---|
| 309 | * Îã³°œèÍý¥ë¡Œ¥Á¥ó€òžÆ€ÓœÐ€¹¡¥ |
|---|
| 310 | */ |
|---|
| 311 | btst.b #TCB_enatex_bit, TCB_enatex(%a0) |
|---|
| 312 | jbeq ret_int_5 /* enatex€¬false€Ê€éret_int_5€Ø */ |
|---|
| 313 | tst.l TCB_texptn(%a0) /* texptn€¬0€Ê€éret_int_5€Ø */ |
|---|
| 314 | jbeq ret_int_5 |
|---|
| 315 | tst.l ipmflg /* ipmflg€¬false€Ê€éret_int_5€Ø */ |
|---|
| 316 | jbeq ret_int_5 |
|---|
| 317 | jsr call_texrtn /* ¥¿¥¹¥¯Îã³°œèÍý¥ë¡Œ¥Á¥ó€ÎžÆœÐ€· */ |
|---|
| 318 | ret_int_5: |
|---|
| 319 | /* |
|---|
| 320 | * ³ä¹þ€ßœèÍý€«€é€Î¥ê¥¿¡Œ¥ó€Ë€è€ê¡€CPU¥í¥Ã¥¯²òœüŸõÂր˰ܹԀ¹€ë€è |
|---|
| 321 | * €ŠœàÈ÷€¹€ë¡¥³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€Ï¡€RTEÌ¿Îá€Ë€è€êžµ€ÎÃÍ€ËÌá€ë€¿ |
|---|
| 322 | * €á¡€lock_flag€òfalse€Ë€·€Æ€ª€±€Ð€è€€¡¥ |
|---|
| 323 | */ |
|---|
| 324 | clr.l lock_flag /* CPU¥í¥Ã¥¯²òœü€ÎœàÈ÷ */ |
|---|
| 325 | movem.l (%sp)+, %d0-%d1/%a0-%a1 /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òÉüµ¢ */ |
|---|
| 326 | rte |
|---|
| 327 | |
|---|
| 328 | /* |
|---|
| 329 | * CPUÎã³°¥Ï¥ó¥É¥éœÐÆþžýœèÍý |
|---|
| 330 | * |
|---|
| 331 | * exchdr_entry€Ï¡€CPUÎã³°€¬È¯Àž€·€¿»þ€ËŒÂ¹Ô€¹€ë¥ë¡Œ¥Á¥ó€Ç¡€EXCHDR_ENTRY |
|---|
| 332 | * ¥Þ¥¯¥í€ÇÅž³«€¹€ëCPUÎã³°¥Ï¥ó¥É¥é€ÎÆþžýœèÍý€«€é¡€CPUÎã³°¥Ï¥ó¥É¥é€ÎÈÖÃÏ€ò |
|---|
| 333 | * A1€Ë¡€CPUÎã³°¥Ï¥ó¥É¥éÈÖ¹æ€òD1€ËÆþ€ì€ÆÊ¬Žô€·€Æ€¯€ë¡¥ |
|---|
| 334 | * |
|---|
| 335 | * CPUÎã³°¥Ï¥ó¥É¥é€Ï¡€È󥿥¹¥¯¥³¥ó¥Æ¥¥¹¥È€ÇŒÂ¹Ô€¹€ë¡¥€œ€Î€¿€á¡€CPUÎã |
|---|
| 336 | * ³°¥Ï¥ó¥É¥é€òžÆ€ÓœÐ€¹Á°€Ë³ä¹þ€ß¥â¡Œ¥É€Ë°Ü¹Ô€·¡€¥ê¥¿¡Œ¥ó€·€Æ€€¿žå€Ë |
|---|
| 337 | * žµ€Î¥â¡Œ¥É€ËÌ္¡¥žµ€Î¥â¡Œ¥É€ËÌ္€¿€á€Ë¡€³ä¹þ€ß¥â¡Œ¥É€Ë°Ü¹Ô€¹€ëÁ° |
|---|
| 338 | * €ÎSR€ò³ä¹þ€ß¥¹¥¿¥Ã¥¯Ÿå€ËÊÝž€¹€ë¡Ê¥ê¥¿¡Œ¥óÀè€ÎSR€ò»²ŸÈ€¹€ëŒê€â€¢€ë |
|---|
| 339 | * €¬¡€¥¿¥¹¥¯¥¹¥¿¥Ã¥¯Ÿå€ËÊÝž€µ€ì€ëŸì¹ç€¬€¢€ê¡€»²ŸÈ€¹€ë€Î€¬ÌÌÅݡˡ¥ |
|---|
| 340 | */ |
|---|
| 341 | .text |
|---|
| 342 | .globl exchdr_entry |
|---|
| 343 | exchdr_entry: |
|---|
| 344 | lea.l 16(%sp), %a0 /* Îã³°¥Õ¥ì¡Œ¥à€ÎÀèÆ¬€òA0€Ë */ |
|---|
| 345 | move.w %sr, %d0 /* SR€òD0€Ë */ |
|---|
| 346 | and.w #~0x1000, %sr /* ³ä¹þ€ß¥â¡Œ¥É€Ë¡Ê¥¹¥¿¥Ã¥¯ÀÚŽ¹€š¡Ë*/ |
|---|
| 347 | move.l %d0, -(%sp) /* žµ€ÎSR€ò¥¹¥¿¥Ã¥¯€ËÊÝž */ |
|---|
| 348 | and.w #0x0700, %d0 /* IPM€¬INT_IPM(TMIN_INTPRI) */ |
|---|
| 349 | cmp.w #INT_IPM(TMIN_INTPRI), %d0 /* €è€êŸ®€µ€±€ì€Ð¡€¥«¡Œ¥Í¥ë */ |
|---|
| 350 | blt exchdr_entry_1 /* ŽÉÍý€ÎCPUÎã³°€ÎœèÍý€Ø */ |
|---|
| 351 | |
|---|
| 352 | /* |
|---|
| 353 | * ¥«¡Œ¥Í¥ëŽÉÍý³°€ÎCPUÎã³°¥Ï¥ó¥É¥é€ÎžÆœÐ€· |
|---|
| 354 | */ |
|---|
| 355 | move.l lock_flag, %d0 /* žµ€Îlock_flag€ò¥¹¥¿¥Ã¥¯€ËÊÝž */ |
|---|
| 356 | move.l %d0, -(%sp) |
|---|
| 357 | move.l %a0, -(%sp) /* A0€ò¥Ñ¥é¥á¡Œ¥¿€Ë */ |
|---|
| 358 | jsr (%a1) /* CPUÎã³°¥Ï¥ó¥É¥é€òžÆ€ÓœÐ€¹ */ |
|---|
| 359 | addq.l #4, %sp /* ¥¹¥¿¥Ã¥¯Ÿå€Î°ú¿ô€òŒÎ€Æ€ë */ |
|---|
| 360 | move.l (%sp)+, %d0 /* lock_flag€òžµ€ËÌ္ */ |
|---|
| 361 | move.l %d0, lock_flag |
|---|
| 362 | move.l (%sp)+, %d0 /* SR€òžµ€ËÌ္ */ |
|---|
| 363 | move.w %d0, %sr |
|---|
| 364 | movem.l (%sp)+, %d0-%d1/%a0-%a1 /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òÉüµ¢ */ |
|---|
| 365 | rte |
|---|
| 366 | |
|---|
| 367 | /* |
|---|
| 368 | * ¥«¡Œ¥Í¥ëŽÉÍý€ÎCPUÎã³°¥Ï¥ó¥É¥é€ÎžÆœÐ€· |
|---|
| 369 | */ |
|---|
| 370 | exchdr_entry_1: |
|---|
| 371 | #ifdef LOG_EXC_LEAVE /* excno_num€òlog_exc_leave€Î */ |
|---|
| 372 | move.l %d1, -(%sp) /* ¥Ñ¥é¥á¡Œ¥¿€Ë */ |
|---|
| 373 | #endif /* LOG_EXC_LEAVE */ |
|---|
| 374 | move.l %a0, -(%sp) /* A0€òCPUÎã³°¥Ï¥ó¥É¥é€Î¥Ñ¥é¥á¡Œ¥¿€Ë */ |
|---|
| 375 | #ifdef LOG_EXC_ENTER |
|---|
| 376 | move.l %a1, -(%sp) /* A1€òÊÝž */ |
|---|
| 377 | move.l %d1, -(%sp) /* excno_num€ò¥Ñ¥é¥á¡Œ¥¿€Ë */ |
|---|
| 378 | jsr _kernel_log_exc_enter /* log_exc_enter€òžÆ€ÓœÐ€¹ */ |
|---|
| 379 | addq.l #4, %sp |
|---|
| 380 | move.l (%sp)+, %a1 /* A1€òÉüµ¢ */ |
|---|
| 381 | #endif /* LOG_EXC_ENTER */ |
|---|
| 382 | jsr (%a1) /* CPUÎã³°¥Ï¥ó¥É¥é€òžÆ€ÓœÐ€¹ */ |
|---|
| 383 | addq.l #4, %sp /* ¥¹¥¿¥Ã¥¯Ÿå€Î°ú¿ô€òŒÎ€Æ€ë */ |
|---|
| 384 | #ifdef LOG_EXC_LEAVE |
|---|
| 385 | jsr _kernel_log_exc_leave /* log_exc_leave€òžÆ€ÓœÐ€¹ */ |
|---|
| 386 | addq.l #4, %sp |
|---|
| 387 | #endif /* LOG_EXC_LEAVE */ |
|---|
| 388 | ret_exc: |
|---|
| 389 | move.l (%sp)+, %d0 /* žµ€ÎSR€òD0€Ë */ |
|---|
| 390 | and.w #0x1000, %d0 /* žµ€¬³ä¹þ€ß¥â¡Œ¥É€Ê€é */ |
|---|
| 391 | jbeq ret_exc_1 /* €¹€°€Ë¥ê¥¿¡Œ¥ó */ |
|---|
| 392 | /* |
|---|
| 393 | * ¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß€·¡€¥Þ¥¹¥¿¥â¡Œ¥É€ËÌ္¡¥€³€Î»þÅÀ€Ç€Ï¡€ |
|---|
| 394 | * CPU¥í¥Ã¥¯ŸõÂրˀπʀé€Ê€€¡Êlock_flag€Èsaved_iipm€Ï¹¹¿·€·€Ê€€¡Ë¡¥ |
|---|
| 395 | * |
|---|
| 396 | * reqflg€ò¥Á¥§¥Ã¥¯€¹€ëÁ°€Ë³ä¹þ€ß€ò¶Ø»ß€¹€ë€Î€Ï¡€reqflg€ò¥Á¥§¥Ã¥¯ |
|---|
| 397 | * €·€¿ÄŸžå€Ë³ä¹þ€ß¥Ï¥ó¥É¥é€¬µ¯Æ°€µ€ì¡€€œ€ÎÃæ€Ç¥Ç¥£¥¹¥Ñ¥Ã¥Á€¬Í×µá |
|---|
| 398 | * €µ€ì€¿Ÿì¹ç€Ë¡€€¹€°€Ë¥Ç¥£¥¹¥Ñ¥Ã¥Á€µ€ì€Ê€€€È€€€ŠÌäÂꀬÀž€ž€ë€¿€á |
|---|
| 399 | * €Ç€¢€ë¡¥ |
|---|
| 400 | */ |
|---|
| 401 | #if TIPM_LOCK == -7 |
|---|
| 402 | or.w #0x1700, %sr /* ¥Þ¥¹¥¿¥â¡Œ¥É¡ŠÁ޳ä¹þ€ß¶Ø»ß */ |
|---|
| 403 | #else /* TIPM_LOCK == -7 */ |
|---|
| 404 | /* |
|---|
| 405 | * €³€Î¥ë¡Œ¥Á¥ó€Ï¥«¡Œ¥Í¥ëŽÉÍý€ÎCPUÎã³°€«€éµ¯Æ°€µ€ì€ë€¿€á¡€€³€³€Ç€Ï¡€ |
|---|
| 406 | * ³ä¹þ€ßÍ¥ÀèÅÙ¥Þ¥¹¥¯€¬TIPM_LOCK€è€ê€âÄ €ÈÁÛÄê€Ç€€ë¡¥ |
|---|
| 407 | */ |
|---|
| 408 | move.w %sr, %d0 /* ¥Þ¥¹¥¿¥â¡Œ¥É¡Š */ |
|---|
| 409 | and.w #~0x0700, %d0 /* ¥«¡Œ¥Í¥ëŽÉÍý€Î³ä¹þ€ß€ò¶Ø»ß */ |
|---|
| 410 | or.w #(0x1000|IIPM_LOCK), %d0 |
|---|
| 411 | move.w %d0, %sr |
|---|
| 412 | #endif /* TIPM_LOCK == -7 */ |
|---|
| 413 | /* |
|---|
| 414 | * CPUÎã³°€Ç€Ï³ä¹þ€ß¥â¡Œ¥É€ËÀڀꎹ€ï€é€Ê€€€¿€á¡€reqflg€¬true€ÎŸì¹ç¡€ |
|---|
| 415 | * ret_int_2€Ç€Ï€Ê€¯¡€ret_int_3€ØÊ¬Žô€¹€ë¡¥ |
|---|
| 416 | */ |
|---|
| 417 | tst.l reqflg /* reqflg€¬true€Ç€¢€ì€Ðret_int_3€Ø */ |
|---|
| 418 | jbne ret_int_3 |
|---|
| 419 | ret_exc_1: |
|---|
| 420 | movem.l (%sp)+, %d0-%d1/%a0-%a1 /* ¥¹¥¯¥é¥Ã¥Á¥ì¥ž¥¹¥¿€òÉüµ¢ */ |
|---|
| 421 | rte |
|---|
| 422 | |
|---|
| 423 | /* |
|---|
| 424 | * ÈùŸ¯»þŽÖÂÔ€Á¡ÊËÜÍè€ÏSIL€Î¥¿¡Œ¥²¥Ã¥È°ÍžÉô¡Ë |
|---|
| 425 | */ |
|---|
| 426 | .globl _sil_dly_nse |
|---|
| 427 | _sil_dly_nse: |
|---|
| 428 | subi.l #SIL_DLY_TIM1, %d0 /* D0€«€éSIL_DLY_TIM1€ò°ú€¯ */ |
|---|
| 429 | jbhi _sil_dly_nse_1 /* ·ë²Ì€¬0°Ê²Œ€Ê€é¥ê¥¿¡Œ¥ó */ |
|---|
| 430 | rts |
|---|
| 431 | _sil_dly_nse_1: |
|---|
| 432 | subi.l #SIL_DLY_TIM2, %d0 /* D0€«€éSIL_DLY_TIM2€ò°ú€¯ */ |
|---|
| 433 | jbhi _sil_dly_nse_1 /* ·ë²Ì€¬0€è€êÂ瀀±€ì€Ð¥ë¡Œ¥× */ |
|---|
| 434 | rts |
|---|