 ;/*
 ;*  TOPPERS/JSP Kernel
 ;*      Toyohashi Open Platform for Embedded Real-Time Systems/
 ;*      Just Standard Profile Kernel
 ;*
 ;*  Copyright (C) 2000-2002 by Embedded and Real-Time Systems Laboratory
 ;*                              Toyohashi Univ. of Technology, JAPAN
 ;*  Copyright (C) 2001,2002 by Dep. of Computer Science and Engineering
 ;*                   Tomakomai National College of Technology, JAPAN
 ;*  Copyright (C) 2001,2002 by Industrial Technology Institute,
 ;*                              Miyagi Prefectural Government, JAPAN
 ;*
 ;*  嵭ԤϡFree Software Foundation ˤäƸɽƤ
 ;*  GNU General Public License  Version 2 ˵ҤƤ狼
 ;*  (1)(4)ξ˸¤ꡤܥեȥܥեȥ
 ;*  ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
 ;*  ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 ;*  (1) ܥեȥ򥽡ɤηѤˤϡ嵭
 ;*      ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
 ;*      ˴ޤޤƤ뤳ȡ
 ;*  (2) ܥեȥѲǽʥХʥꥳɡʥ֥륪
 ;*      ȥե饤֥ʤɡˤηѤˤϡ
 ;*      ȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭ɽ
 ;*      Ѿ浪Ӳ̵ݾڵǺܤ뤳ȡ
 ;*  (3) ܥեȥԲǽʥХʥꥳɤηޤϵ
 ;*      ߹ѤˤϡΤ줫ξȡ
 ;*    (a) ѤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
 ;*        ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
 ;*    (b) Ѥη֤̤ˡˤäơ嵭Ԥ𤹤
 ;*        ȡ
 ;*  (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
 ;*      ⡤嵭Ԥդ뤳ȡ
 ;*
 ;*  ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥϡ
 ;*  ܥեȥ˴ؤơŬѲǽޤơʤݾڤԤ
 ;*  ʤޤܥեȥѤˤľŪޤϴŪ
 ;*  ʤ»˴ؤƤ⡤Ǥʤ
 ;*
 ;*  @(#) $Id: int_header.txt,v 1.3 2002/04/13 13:14:45 imai Exp $
 ;*/

        .SECTION P, CODE,ALIGN=2
        .INCLUDE  "cpu_config_asm.h"
	.INCLUDE  "sys_config_asm.h"
	.GLOBAL _inthdr_entry
	.IMPORT _inthdr

_inthdr_entry:
			/*  ɬ׺Ǿ¤Υ쥸򥹥å        */ 
	push.l	er0							
	push.l	er1							
                        /*  exrer1˥ԡ                            */ 
       stc.b     exr, r1l                                              
                        /*  ------------߶ػ----------------------*/ 
       ldc.b     #MAX_IPM, exr                                   
                        /*  er2򥹥å򡡡 */ 
       push.l  er2                                                     
			/*  ߥͥȥ󥿤Υå 		*/ 
	mov.l	@_intnest, er0						
	mov.l	er0, er2   						
				/*  ߥͥȥ󥿤 +1           */ 
	inc.l	#1, er0							
	mov.l	er0, @_intnest						
				/* ȯΥƥȤȽ  	*/ 
	or.l	er2, er2   						
				/* ¿ųߤʤ饸   		*/ 
	bne	_interrupt_from_int_inthdr				
   /* H8ǤǤϡǡ ̥ϡɥ߶ػߡ                 */ 
   /*	jsr	@_inthdr_disable_int					*/ 
				/* åؤ			*/ 
				/* åݥ󥿤¸        	*/ 
	mov.l	sp, er0							
				/* ߥåڤؤ		*/ 
	mov.l	#STACKTOP, sp					
				/*------- ߵ----------------- */
	ldc.b     r1l, exr                				
				/*  ĤΥ쥸¸                */						
	mov.l	er3, @-er0						
	mov.l	er4, @-er0						
	mov.l	er5, @-er0						
	mov.l	er6, @-er0						
                       /*    ߥå˥åSP   */ 
	push.l	er0							
	jsr	@_inthdr						
				/* --------߶ػ---------------- */ 
	ldc.b     #MAX_IPM, exr            			
     /*  H8ǤǤϡḁָ̇̄ϡɥߵġ     		*/ 
     /* jsr	@_inthdr_enable_int					*/ 
				/* ߥͥȥ󥿤-1 */		   
	mov.l	@_intnest, er0					  	
	dec.l	#1, er0							
	mov.l	er0, @_intnest						
				/* åؤ  			*/ 
	mov.l	@sp, sp							
				/* reqflgΥå     */ 
        mov.w	@__kernel_reqflg, r0		        		
			/* reqflgFALSEʤret_to_task_int 	*/ 
        or.w	r0, r0		/*  reqflgBOOL -> int(16bits)  */
	beq	_ret_to_task_int_inthdr				
				/*  reqflg򥯥ꥢ     	*/ 
	sub.w	r0, r0						
        mov.w	r0, @__kernel_reqflg
				/*  ret_intإ  			*/ 
	jmp	@_kernel_ret_int					
									   
									   
/*   ¿ųߤν 							*/ 
/* 	ȯΥƥȤȽ̸塢߶ػ		*/ 
/* 	ξ֤ǤǤ 					*/ 
/* 	ʳߥͥȥ󥿤Υ󥯥ȤϺѤǤ 		*/ 
									   
_interrupt_from_int_inthdr:						
				/*  ̥ϡɥ߶ػ */
  /*	jsr	@_inthdr_disable_int					*/ 
				/* ߵ				*/ 
	ldc.b     r1l, exr        				
				/*  ĤΥ쥸¸	  	*/ 							
	push.l	er3							
	push.l	er4							
	push.l	er5							
	push.l	er6							
	jsr	@_inthdr						
				/* ߶ػ				*/ 
	ldc.b     #MAX_IPM, exr             			
				/*  ̥ϡɥߵ */	   
  /*	jsr	@_inthdr_enable_int					*/ 
				/* ߥͥȥ󥿤 -1 */		   
	mov.l	@_intnest, er0					  	
	dec.l	#1, er0							
	mov.l	er0, @_intnest						
									   
									   
/*   reqflgFALSEξν 						*/ 
									   
_ret_to_task_int_inthdr:					   
	pop.l	er6		/*  쥸  			*/ 
	pop.l	er5							   
	pop.l	er4							   
	pop.l	er3							   
	pop.l	er2							   
	pop.l	er1							   
	pop.l	er0							   
	rte			/*  ߸  			*/ 

