
	 JSPͥ åȰ¸ 󥿥ե 

	    Release 1.2бǽ: 8-Oct-2001

------------------------------------------------------------------------ 
 TOPPERS/JSP Kernel
     Toyohashi Open Platform for Embedded Real-Time Systems/
     Just Standard Profile Kernel

 Copyright (C) 2000,2001 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN

 嵭ԤϡFree Software Foundation ˤäƸɽƤ 
 GNU General Public License  Version 2 ˵ҤƤ狼
 ξΤ줫˸¤ꡤܥեȥܥեȥ
 ѤΤޤࡥʲƱˤѡʣѡۡʰʲ
 ѤȸƤ֡ˤ뤳Ȥ̵ǵ롥
 (1) ܥեȥ򥽡ɤηѤˤϡ嵭
     ɽѾ浪Ӳ̵ݾڵ꤬Τޤޤηǥ
     ˴ޤޤƤ뤳ȡ
 (2) ܥեȥѲǽʥХʥꥳɡʥ֥륪
     ȥե饤֥ʤɡˤηѤˤϡ
     ȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭ɽ
     Ѿ浪Ӳ̵ݾڵǺܤ뤳ȡ
 (3) ܥեȥԲǽʥХʥꥳɤηޤϵ
     ߹ѤˤϡΤ줫ξȡ
   (a) ѤȼɥȡѼԥޥ˥奢ʤɡˤˡ嵭
       ɽѾ浪Ӳ̵ݾڵǺܤ뤳ȡ
   (b) Ѥη֤̤ˡˤäơ嵭Ԥ𤹤
       ȡ
 (4) ܥեȥѤˤľŪޤϴŪ뤤ʤ»
     ⡤嵭Ԥդ뤳ȡ

 ܥեȥϡ̵ݾڤ󶡤ƤΤǤ롥嵭Ԥϡ
 ܥեȥ˴ؤơŬѲǽޤơʤݾڤԤ
 ʤޤܥեȥѤˤľŪޤϴŪ
 ʤ»˴ؤƤ⡤Ǥʤ

 @(#) $Id: config.txt,v 1.11 2001/10/08 08:41:26 hiro Exp $
------------------------------------------------------------------------


ΥɥȤǤϡJSPͥΥåȰ¸󶡤٤ǡ
ؿʤɤˤĤƲ⤹롥

JSPͥΥåȰ¸ϡ¸κθå
ץå¸ȥåȥƥ¸ʬΥƤ롥ץå
¸ȥƥ¸δ֤ˤΤʬôϤʤΤʲΥǡ
ؿʤɤϡץå¸ȥƥ¸ΤɤƤ⤫
ޤʤߥ졼ĶʤɤζüʥǤϡ٤Ƥץ
¸Ƥ褤


ƥ๽۴Ķ

(1) åȰ¸Υե֤Υǥ쥯ȥ

åȰ¸ϡץåάΤȥƥάΤ
ᡤconfig β˥ץå¸Υե֤Υǥ쥯ȥꡤ
ץå¸ǥ쥯ȥβ˥ƥ¸Υե֤
ǥ쥯ȥ롥Υǥ쥯ȥ̾ѤʸϡѾʸ
 "_" ˸ꤹ롥

(2) ƥ๽ˡ

ץå¸ǥ쥯ȥꤪӥƥ¸ǥ쥯ȥβˡ
줾졤ѥˡꤹ뤿 Makefile.config եѰ
̤꤬ɬפʤˤϡѰդʤƤ褤ˡΥե
ϡMakefile 饤󥯥롼ɤ롥

ʲǤϡåȰ¸ Makefile.config ٤ѿˤĤ
롥

(2-1) TARGET

GNUγȯĶ configure ˻ꤹ륿å̾ǡѥ
Υޥ̾ƬͿʸʺǸ "-" סˤ롥
㤨СTARGET  m68k-unknown-elf 줿ˤϡѥ
 m68k-unknown-elf-gcc Ȥ롥ѿʤˤϡ
ñʤ gcc Ȥ롥

(2-2) CPU_CDEFS		ץå¸ɬפʥޥ
(2-3) CPU_CFLAGS	ץå¸ɬפʥѥ륪ץ
(2-4) CPU_LDFLAGS	ץå¸ɬפʥ󥯥ץ
(2-5) CPU_LIBS		ץå¸ɬפʥ饤֥
(2-6) SYS_CDEFS		ƥ¸ɬפʥޥ
(2-7) SYS_CFLAGS	ƥ¸ɬפʥѥ륪ץ
(2-8) SYS_LDFLAGS	ƥ¸ɬפʥ󥯥ץ
(2-9) SYS_LIBS		ƥ¸ɬפʥ饤֥

åȰ¸ˡޥѥ륪ץ󡤥󥯥ץ
饤֥꤬ɬפʾϡѿ롥

äˡ֥٥μ̾C٥μ̾Ƭ "_" 
դΤˤʤˤϡCPU_CFLAGSʤޤϡSYS_CFLAGSˤ 
-DLABEL_ASM 롥

(2-10) TEXT_START_ADDRESS	ƥȥƬ
(2-11) DATA_START_ADDRESS	ǡƬ

ƥƬϤλ꤬ɬפʾˤϡѿƬϤ
롥

(2-12) LDSCRIPT			󥫥ץȤΥե̾

ѤΥ󥫥ץȤѤˤϡѿ˥󥫥ץȤΥե
̾롥ե̾ϡconfig ǥ쥯ȥ꤫Хѥǻ
ꤹ롥

(3) եåȥե

֥ǵҤץफ顤Cι¤Τ˥
ˤϡ¤ΤγƥեɤΥեåȤ򻲾Ȥ뤳ȤɬפǤ롥 
JSPͥǤϡɬפʥեåͤե˽Ϥ뤿λȤߤ
ơmakeoffset.c  genoffset ѰդƤ롥makeoffset.c ϡɤ
եåͤե˽Ϥ뤫ꤹΤǡåȰ¸
Ѱդɬפ롥

(4) ȥåץ⥸塼

ͥѤΥȥåץ⥸塼򡤥åȰ¸Ѱդɬ
롥ͥѤΥȥåץ⥸塼뤫ϡmain ؿǤϤʤ 
kernel_start ؿư롥

(5) 󥫥ץ

ȯĶɸΥ󥫥ץȤѤǤʤˤϡåȰ¸
Ѱդ롥


ץꥱѤΥ󥯥롼ɥե

åȰ¸󶡤٤ץꥱѤϼ̤Ǥ롥
ϡcpu_defs.h ޤ sys_defs.hʤޤϤ餫饤󥯥
ɤեˤ˴ޤ롥

(1) ƥå

(1-1) TIC_NUME		ƥåμʬҡñ: 1ߥá
(1-2) TIC_DENO		ƥåμʬñ: 1ߥá

(2) ߥϥɥ顿CPU㳰ϥɥϢ

(2-1) INHNO		ߥϥɥֹΥǡ
(2-2) EXCNO		CPU㳰ϥɥֹΥǡ

(3) ߥޥȳߥޥѹȴϢʥץ

chg_ixxget_ixx 򥿡åȰ¸˥ݡȤˤϡʲ
򥿡åȰ¸󶡤롥xxxxxxXXXX ϡå
Ŭڤʸ롥xxxx  XXXX ϡ4ʸǤʤƤ褤

(3-1) IXXXX				ߥޥΥǡ
(3-2) ER chg_ixx(IXXXX ixxxx)		chg_ixx Υץȥ
(3-2) ER get_ixx(IXXXX *p_ixxxx)	get_ixx Υץȥ

(4) ֹȳߤζػߡĴϢʥץ

dis_intena_int 򥿡åȰ¸˥ݡȤˤϡʲ
򥿡åȰ¸󶡤롥

(4-1) INTNO				ֹΥǡ
(4-2) ER dis_int(INTNO intno)		dis_int Υץȥ
(4-3) ER ena_int(INTNO intno)		ena_int Υץȥ

(5) ǽɾѥƥϢʥץ

JSPͥϡؤѤŪΰĤȤƤ뤳Ȥ顤
Ȱ¸ˡǽɾѤΥӥ vxget_tim 򥵥ݡȲǽȤƤ
롥vxget_tim 򥵥ݡȤˤϡʲ򥿡å
¸󶡤롥

(5-1) SYSUTIM				ǽɾѥƥΥǡ
(5-2) ER vxget_tim(SYSUTIM *p_sysutim)	vxget_tim Υץȥ

(6) åȼ̥ޥ

cpu_defs.h Ǥϥץå̾cpu_defs.h ֤Ƥǥ쥯ȥ̾
ʸˤΡˡsys_defs.h Ǥϥƥ̾sys_defs.h ֤Ƥ
ǥ쥯ȥ̾ʸˤΡˤޥ롥


ͥѤΥǡؿʤ

åȰ¸󶡤٤ͥѤΥǡؿʤɤϼ̤
롥ΥǡޥȴؿΥץȥϡ̤˵
Ҥʤ¤ꡤcpu_config.h ޤ sys_config.hʤޤϤ餫饤
롼ɤեˤ˴ޤ롥ޤؿμΤϡCξ 
cpu_config.c ޤ sys_config.c ˡ֥ξ 
cpu_support.S ޤ sys_support.S ˵Ҥ롥

(1) ƥȥ֥åΥǡ

(1-1) CTXB

åȰ¸ΥƥȤ¸뤿ˡTCB ˻ĤȤ
ɬפʥǡ¤η

(2) ƥֻ

(2-1) BOOL sense_context(void)

ߤμ¹ԥƥȤƥȤξ FALSE󥿥
ƥȤξ TRUE ֤ؿ

(2-2) BOOL sense_lock(void)

ߤΥƥ֤CPUå֤ξ TRUECPUå֤
 FALSE ֤ؿ

(2-3) BOOL t_sense_lock(void)

ƥȤˤơߤΥƥ֤CPUå֤ξ
 TRUECPUå֤λ FALSE ֤ؿδؿ󥿥
ƥȤƤФ뤳ȤϤʤ

(2-4) BOOL i_sense_lock(void)

󥿥ƥȤˤơߤΥƥ֤CPUå֤ξ
 TRUECPUå֤λ FALSE ֤ؿδؿ
ƥȤƤФ뤳ȤϤʤ

 Ūˤϡsense_lock 󶡤Ƥ t_sense_lock  
i_sense_lock ɬפʤդ t_sense_lock  i_sense_lock 󶡤
Ƥ sense_lock ¸뤳ȤϤǤ뤬åȤ˰¸˹
¹ԸΨ¸뤿ˡåȰ¸3Ĥδؿ󶡤뤳
ȤƤ롥

(3) CPUåȤβ

(3-1) BOOL t_lock_cpu(void)

ƥȤˤơCPUå֤顤CPUå֤
ؿδؿCPUå֤ǸƤФ뤳ȤϤʤޤ
ƥȤƤФ뤳Ȥʤ

(3-2) BOOL t_unlock_cpu(void)

ƥȤˤơCPUå֤顤CPUå֤
ؿδؿCPUå֤ǸƤФ뤳ȤϤʤޤ
󥿥ƥȤƤФ뤳Ȥʤ

(3-3) BOOL i_lock_cpu(void)

󥿥ƥȤˤơCPUå֤顤CPUå֤
ܤؿδؿCPUå֤ǸƤФ뤳ȤϤʤޤ
ƥȤƤФ뤳Ȥʤ

(3-4) BOOL i_unlock_cpu(void)

󥿥ƥȤˤơCPUå֤顤CPUå֤
ܤؿδؿCPUå֤ǸƤФ뤳ȤϤʤޤ
ƥȤƤФ뤳Ȥʤ

(4) ǥѥå

(4-1) void dispatch(void)

ǥѥåʰʲñ˥ǥѥåȸˤŪ˸Ƥ֤
δؿƥȤƤФ줿ӥ顤CPU
֤ǸƤФ롥

δؿƤФȡؿƤΥƥȤ¸ ¹
Ǥ륿Ǻǹ̤ͥΥschedtskˤΥƥȤ
Ƽ¹Ծ֤Ȥ롥¹ԤǤ륿ʤschedtsk  NULL ξ
ˤˤϡߤĤơ¹ԤǤ륿ǤޤԤġǡ
¹ԤǤ륿ǤΤԤĴ֤˵ư줿ߥϥɥνиǡ
ǥѥå㤬ƤФʤ褦к뤳ȤɬפǤ롥Ūˤϡ
¹ԤǤ륿ǤΤԤĴ֡Ū󥿥ƥȤڤ
뤫ǥѥåػ߾֤ˤ롥

˼¹Ծ֤ˤʤä㳰롼εư
ƤС㳰롼ư롥ޤδؿƤӽФ
˼¹Ծ֤ˤʤä㳰롼εư
ƤС㳰롼εưԤ㳰롼
εưˤϡåΩ󶡤 calltex ޤ call_texrtn 
Ѥ뤳ȤǤ롥

(4-2) void exit_and_dispatch(void)

߼¹ΥƥȤΤơǥѥåƤӽФδؿ
ƥȤƤФ줿ӥʶŪˤϡext_tsk˽
ޤϥͥν顤CPUå֤ǸƤФ롥

δؿƤФȡؿƤΥƥȤ¸¹
Ǥ륿Ǻǹ̤ͥΥschedtskˤΥƥȤ
Ƽ¹Ծ֤Ȥ롥¹ԤǤ륿ʤschedtsk  NULL ξ
ˤνϡdispatch ƱͤǤ롥

˼¹Ծ֤ˤʤä㳰롼εư
ƤС㳰롼ư롥

δؿϡͥνƤФ뤿ˡ󥿥ƥ
ȤƤФƤǤ뤳ȤɬפǤ롥ʤδؿ
ϥ꥿󤷤ʤ

(5) ߥϥɥ顿CPU㳰ϥɥν

(5-1) INTHDR_ENTRY(inthdr)
(5-2) INT_ENTRY(inthdr)

INTHDR_ENTRY(inthdr) ϵưϤ inthdr γߥϥɥƤӽФ
롼ޥINT_ENTRY(inthdr) 
롼ƬΥ٥뤿ΥޥǤ롥INT_ENTRY(inthdr) 
٥ϡߥϥɥ֥å˽롼
ƬϤϿ뤿˻Ȥ롥롼ɬפʤ
ˤϡINTHDR_ENTRY(inthdr) ñ extern ŸФ褤

ߥϥɥνϡ¹ԥƥȤ󥿥ƥȤ
ڤ괹å쥸¸ơߥϥɥƤӽФ
ߥϥɥ餫ȡμ¹ԥƥȤ᤹ȤȤˡɬפ˱
ǥѥåȥ㳰롼εưԤǥѥåȥ
㳰롼εưϡŪˤϼΤ褦˹Ԥ

(a) ʲνϡߥϥɥ餬ƥȼ¹˵ư줿
ǡreqflg  TRUE λΤ߹Ԥ

(b) enadsp  TRUE ǡ¹Ծ֤Υruntskˤȼ¹ԤǤ륿
Ǻǹ̤ͥΥschedtskˤפƤʤˤϡԤΥ
ΥƥȤ¸ԤΥΥƥȤƼ¹Ծ
֤Ȥ롥¹ԤǤ륿ʤschedtsk  NULL ξˤˤϡ
ߤĤơ¹ԤǤ륿ǤޤԤġǤ⡤¹ԤǤ
륿ǤΤԤĴ֤˵ư줿ߥϥɥνиǡǥ
ѥå㤬ƤФʤ褦ˤ뤳ȤɬפǤ뤬󥿥
ƥȤǼ¹ԤƤСäкɬפϤʤ

(c) ¹Ծ֤Υ(b) ǥǥѥåԤäϡ˼
Ծ֤Ȥʤäˤ㳰롼εưƤ
С㳰롼ư롥ޤ(b) ǥǥѥå
ԤäϡޤǼ¹Ծ֤Ǥä˼¹Ծ֤ˤʤä
㳰롼εưƤС㳰롼
εưԤ㳰롼εưˤϡåΩ
 calltex ޤ call_texrtn Ѥ뤳ȤǤ롥

Υޥ롼Ǥϡ嵭νΰΤߤԤĤν
̤Ѱդ롼ǤƤ褤Ūˤϡǥѥå
ȥ㳰롼εưϡ̤˥롼ȤѰդΤŬ
Ǥ

(5-3) EXCHDR_ENTRY(exchdr)
(5-4) EXC_ENTRY(exchdr)

EXCHDR_ENTRY(exchdr) ϵưϤ exchdr CPU㳰ϥɥƤӽФ
롼ޥEXC_ENTRY(exchdr) 
롼ƬΥ٥뤿ΥޥǤ롥EXC_ENTRY(exchdr) 
٥ϡCPU㳰ϥɥ֥å˽롼
ƬϤϿ뤿˻Ȥ롥롼ɬפ
ˤϡEXCHDR_ENTRY(exchdr) ñ extern ŸФ褤

CPU㳰ϥɥνϡ¹ԥƥȤ󥿥ƥ
ڤ괹å쥸¸ơCPU㳰ϥɥƤӽФ
CPU㳰ϥɥˤϡVPΥѥ᡼ p_excinf ϤΥѥ᡼
ϡCPU㳰˴ؤ¸åΰؤΥݥ󥿤Ǥ뤳Ȥ
ꤷƤ뤬Ūˤϥå롥

CPU㳰ϥɥ餫ȡμ¹ԥƥȤ᤹ȤȤˡɬפ
ƥǥѥåȥ㳰롼εưԤ
ǥѥåȥ㳰롼εưϡߥϥɥν
ξƱͤǤʾ嵭 (a)(c)ˡ

(7) ƥcpu_context.h

åȰ¸ΥƥȤꤹ뤿 create_context  
activate_context 2ĤδؿѰդ롥2ĤδؿƤӽФȤǡ
ΥƥȡʶŪˤϡƥȥ֥åƤȥ
Υåΰˤ򥿥ưǤ֤ꤹ롥2ĤδؿϸƤ
륿ߥ󥰤ۤʤΤʬôϤʤɤΤ褦ʽϤɤ
δؿǹԤʤФʤʤȤϤʤ

δؿӥޥϡcpu_context.h ˴ޤ롥ϡ
cpu_config.h Ǥ TCB ƤʤǤ롥

(7-1) void create_context(TCB tcb)

ٻ߾֤˰ܹԤ˸ƤФ롥Ūˤϡ
JSPͥǤϡCRE_TSK ǥ뤿ᡤ⥸塼
νˤȥνλext_tskter_tskˤ˸ƤФ롥

(7-2) void activate_context(TCB tcb)

¹ԤǤ֤˰ܹԤ˸ƤФ롥Ūˤϡact_tsk ǥ
ưνλext_tskter_tskˤ˵ư׵Υ塼
󥰤ˤƵưTA_ACT °ꤷƥʥ
⥸塼νˤ˸ƤФ롥

(7-3) ACTIVATED_STACK_SIZEʥץ

ext_tsk å˳ݤߡΰΥ뤿Υޥ
ߡΰ褬ɬפʤϡΥޥɬפϤʤ

ext_tsk ϡλ塤Ф create_context 
Ƥ֡ޤεư׵᤬塼󥰤Ƥˤϡ
Ф activate_context Ƥ֡create_context  activate_context 
ϡоݥΥåΰ񤭴礬뤬줬 ext_tsk
ʤӤƤФؿˤѤƤ륹åΰȽŤʤä硤
ʬλѤƤ륹åΰʬ˲̤ˤʤ롥

ACTIVATE_STACK_SIZE create_context  activate_context 񤭴
륹åΰΥʸ̩ˤϡå줫鲿ХȤޤǤ
뤫ˤ˥ޥƤȡext_tsk ǥå
ΥߡΰݤʬλѤƤ륹åΰ˲Τ


(8) åȰ¸νλ

(8-1) void cpu_initialize(void)

ץå¸νͥνǡͥγƥ⥸
˸ƤФ롥

(8-2) void sys_initialize(void)

ƥ¸νͥνǡcpu_initialize ³
ƸƤФ롥

(8-3) void cpu_terminate(void);

ץå¸νλͥνλǸƤФ롥

(8-4) sys_exit(void)

ƥνλͥνλǡcpu_terminate ³ƸƤФ
롥δؿϥ꥿󤷤ʤROM˥ĥƥǤϡROM
ƽФǼ¸뤳ȤꤷƤ롥

(9) ߥϥɥ顿CPU㳰ϥɥ

(9-1) void define_inh(INHNO inhno, FP inthdr)

ߥϥɥֹ inhno εưϤ inthdr ꤹ롥ߴ
ǽνƤФ롥

(9-2) void define_exc(EXCNO excno, FP exchdr)

CPU㳰ϥɥֹ excno εưϤ exchdr ꤹ롥CPU㳰ϥ
ɥǽνƤФ롥

(10) CPU㳰ȯΥƥ֤λ

(10-1) BOOL exc_sense_context(VP p_excinf)

CPU㳰ȯƥȤƥȤξ FALSE
ƥȤξ TRUE ֤ؿCPU㳰ϥɥ餫ƤФ
ӥƤФ롥p_excinf ˤϡCPU㳰ϥɥؤΰ
ΤޤϤ롥

(10-2) BOOL exc_sense_lock(VP p_excinf)

CPU㳰ȯƥȤCPUå֤ξ TRUECPUå
֤λ FALSE ֤ؿCPU㳰ϥɥ餫ƤФ줿ӥ
ƤФ롥p_excinf ˤϡCPU㳰ϥɥؤΰΤޤ
Ϥ롥

(11) TCB ΥեɤΥӥåʥץ

TCB Υեɤ֤ǽ礭ƶȻפ뤿ᡤ
Ȱ¸˥եɤΥӥåѹǤ褦ˤƤ롥Ūˤϡ
2ĤΥեɤΥӥåѹǤ롥Υޥʤ
硤ǾӥåȤʤ롥

(11-1) TBIT_TCB_TSTAT		tstatʥ֡ˤΥӥå
(11-2) TBIT_TCB_PRIORITY	priorityͥ١˥եɤΥӥå

32ӥåȥץåξˤϡ 8 ΤΨŪǤ롥

(12) ӥåȥޥåץ˥ӥåȥ̿Ȥʥץ

ץåӥåȥ̿ľ硤ǥ塼Υӥåȥޥåץ
ˤ̿ѤΨ褤ξ硤ʲδؿӥޥ
åȰ¸롥

(12-1) CPU_BITMAP_SEARCH

ץåΥӥåȥ̿Ѥ硤Υޥ롥Υ
뤳ȤˤꡤåΩ bitmap_search 
롥

(12-2) UINT bitmap_search(UINT bitmap)

ӥåȥԤؿbitmap  1 ΥӥåȤ⡤ǤⲼ̤ΤΤ
Υӥåֹ֤ӥåֹϡǲ̥ӥåȡLSBˤ 0 
롥bitmap β16ӥåȤˡɬ 1 ΥӥåȤʤʤbitmap 
 0 ꤵ뤳ȤϤʤˤȤꤷƤ褤

ɸ饤֥˥ӥåȥ̿Ѥ ffs 硤ffs Ѥ 
bitmap_search 򼡤Τ褦Ф褤
	#define	bitmap_search(bitmap)	(ffs(bitmap) - 1)

ץåλĥӥåȥ̿᤬Ǥ̤ 1 ΥӥåȤ򥵡
ΤǤˤϡΥޥơӥåȤγդѹ뤳
Ǥ롥

(12-3) UINT PRIMAP_BIT(pri)

ͥ٤ɽʺǹͥ٤ 0 Ȥˤ򡤤бӥ
ȥޥåפѴ롥ǥեȤϼ̤ꡥ
	#define	PRIMAP_BIT(pri)		(1 << (pri))

(13) åȰ¸Υӥʥץ

ʲΥӥ򥿡åȰ¸˥ݡȤˤϡν
򥿡åȰ¸롥

(13-1) chg_ixx
(13-2) get_ixx
(13-3) dis_int
(13-4) ena_int

(14) ǽɾѥƥϢʥץ

(14-1) SUPPORT_VXGET_TIM

åΩ vxget_timӥѤˡΥޥ
롥

(14-2) hw_timer.h

åȰ¸Υޥ⥸塼Υ󥯥롼ɥե롥åΩ
 vxget_timӥѤ硤åȰ¸Υޥ
塼뤬ɬפˤʤ롥ΤΥ󥯥롼ɥեǤ hw_timer.h 
ϡƥॵӥΥƥ९åɥ饤ФѤΤȶ̤ˤ
롥

(15) ͥ̾Υ͡

åȰ¸ѤƤ뼱̾ʥ⥸塼Ĥ̾
򡤦ITRON4.0ͤ˽ä _kernel_ ǻϤޤΤ˥͡हɬפ
롥ŪˤϡåȰ¸ xxxx Ȥ̾ѤƤ
ϡΤ褦ʥޥԤ

#ifndef OMIT_RENAME
#define xxxx		_kernel_xxxx
#ifdef LABEL_ASM
#define _xxxx		__kernel_xxxx
#endif /* LABEL_ASM */
#endif /* OMIT_RENAME */

ǡLABEL_ASM ϡ֥٥μ̾C٥μ
̾Ƭ "_" դΤˤʤ٤ޥǤ
ˡˤĤƤϡ֥ƥ๽ˡפ򻲾ȡˡ

ޤ OMIT_RENAME ϡͥ̾Υ͡
٤ޥǤ뤬СǤϥݡȤԴǤꡤƤ
ѥǤʤ

(16) ¾

(16-1) TARGET_NAME

ưåΥå̾

(16-2) void sys_putc(char c)

åȥƥ٥ʸϥ롼ROM˥ĥ
ǤϡROM˥ƤӽФǼ¸뤳ȤꤷƤ롥

(16-3) OMIT_CALLTEXʥץ

åΩ calltex 󶡤ɬפʤˡΥޥ
롥ܤϡ֥㳰롼εưؿȤǻȤ 
TCB Υեɡפ򻲾ȤΤȡ

(16-4) LABEL_ALIAS(new_label, defined_label)ʥץ

new_label  defined_label Ʊɥ쥹뤿Υޥ
褦ʥޥ¸Ǥʤˤϡά뤳ȤǤ롥

(16-5) COPYRIGHT_CPUʥץ
(16-6) COPYRIGHT_SYSʥץ

ͥ뵯ưΥåˡ줾ץå¸ӥƥ
¸ɽɲä뤿Υޥ


åȰ¸Ѥ뤳ȤǤ륿åΩѿؿ

(1) Ϣѿ

(1-1) TCB *runtsk

¹Ծ֤ΥʡץåƥȤäƤ륿ˤ TCB 
ؤݥ󥿡¹Ծ֤Υʤ NULL ˤ롥ӥ
νǡʥӥƤӽФˤ˴ؤ
򻲾Ȥ runtsk Ȥͥνʳǡѿ
񤭴ΤϡǥѥåʤʤåȰ¸ˤΤ
Ǥ롥

(1-2) TCB *schedtsk

¹ԤǤ륿Ǻǹ̤ͥΥ TCB ؤݥ󥿡¹
Ǥ륿ʤ NULL Ȥʤ롥ǥѥåػ߾֤ʤɡǥ
ѥåαƤ֤ϡruntsk ȰפƤȤϸ¤ʤ
񤭴Τϥ塼ΤߤǡåȰ¸Ϥѿ
ƤϤʤʤ

(1-3) BOOL reqflg

ߥϥɥ顿CPU㳰ϥɥνиˡǥѥåޤ
㳰롼εư׵᤹뤳Ȥ򼨤ե饰ѿϥ
ӥʥåΩˤǥåȤߥϥɥ顿CPU㳰
ϥɥνиʥåȰ¸ˤǻȡꥢ롥

(1-4) BOOL enadsp

ǥѥåľ֤Ǥʤʤǥѥåػ߾
ǤʤˤȤ򼨤ե饰ѿϥӥdis_dspena_dsp
åȰ¸ chg_ixx˽ǽ񤭴롥

ޤǥѥåʥåȰ¸ˤǡ¹ԤǤ륿
ǤΤԤĴ֤˵ư줿ߥϥɥνиǥǥѥå
ƤФʤ褦ˤ뤿ˡѿŪ FALSE ꤹ뤳
Ǥ롥

(2) 㳰롼εưؿȤǻȤ TCB Υե

(2-1) void calltex(void)
(2-2) void call_texrtn(void)

㳰롼εưԤؿcalltex ϡ¹Ծ֤Υ
㳰롼εưƤСcall_texrtn Ƥӽ
call_texrtn ϡ㳰롼θƤӽФԤ㳰
롼ƤӽФϡŪCPUå롥

δؿϡǥѥåߥϥɥ顿CPU㳰ϥɥνи
顤CPUå֤ǸƤФ뤳ȤꤷƤ롥calltex Ƥӽ
ΤǤñǤ뤬¹ԸΨ夲뤿ˤϡưΥå
֥ǵҤcall_texrtn ƤӽФ褤å
ưˤĤƤϡåΩ calltex Υɤ򻲾
뤳ȡޤξˤϡOMIT_CALLTEX ޥ뤳Ȥǡ
åΩ calltex 롥

(2-3) BOOL enatex
(2-4) TEXPTN texptn

call_texrtn ƤӽФˡưΥå򥢥֥ǵ
ˤϡTCB ΤΥեɤ򻲾Ȥɬפ롥

(3) ƥǽ

۾ݤΤ뤿ˡƥǽؤΥϴؿѤ뤳
Ǥ롥ƥǽˤĤƤϡ桼ޥ˥奢򻲾Ȥ뤳ȡ


åȰ¸Υҥ

(1) ǥѥå2̤μ

ǥѥåμˤȤơƥȤ¸ȥ
㳰롼εưϢΥ롼ǹԤˡʤAȸƤ֡
ȡƥȤ¸¹Ԥ륿򡦥ƥȤȥ
㳰롼εưФФΥ롼ǹԤˡʤB
Ƥ֡ˤ롥Bϡ¸륳ƥȾ˱ɬ׺Ǿ
¤ˤ뤳ȤưפˤʤȤ롥ߥ졼Ķ
ξ硤¸ˡˤäƤBΤʤǽͤ롥

㳰롼εưսȤߤ硤2Ĥˤˤ
αդ٤㤤롥ʲˤ롥1ȥ22Ĥ
ꡤ1ͥ٤⤤ΤȤ롥ǽ顤2¹
˳ߥϥɥ餬ư졤椫饿1ư줿̡
21ˤäƥץꥨץȤ줿ΤȤ롥ǡ1
2Фƥ㳰롼εư׵ᤷ塤Ԥ֤
ӥȯԤη̥2˥ǥѥåͤ
롥λǥѥåϡ2Фƥ㳰롼
εưԤɬפ뤬Aξˤϡ1Ū
ƤФ줿ǥѥåǥ㳰롼εưԤΤ
ФơBξˤϡ2ΥƥȤ롼ʬ
塤ƥȤ³Ȥƥ㳰롼
εưԤ롥

JSPͥǤϡAΤ뤫BΤ뤫򥿡åȰ¸Ǥ
ȤȤ롥Τˡ㳰롼εư򥿥ǥѥ
˴ޤͤȤƤ롥

(2) ߥϥɥν

ߥϥɥνƤϡץåγߥƥ
礭ۤʤ뤬褽νήϼ̤Ǥ롥CPU㳰ϥ
ɥν⡤ϤȤƤϡ褽νήƱ
ͤǤ롥ץåߤCPU㳰ǰۤʤ밷򤹤ϡ
ºݤνϤʤۤʤäΤȤʤ롥

	------------------------------------------------------------
	쥸¸ʼ˥å쥸
	ߥåڴʺǤ⳰¦ΥϥɥΤߡ

	Ͽ줿ߥϥɥθƽФ

	åڴʺǤ⳰¦ΥϥɥΤߡ
	if (Ǥ⳰¦Υϥɥ && reqflg) {
		if (enadsp && runtsk != schedtsk) {
			ǥѥå
			㳰롼εưcalltex
		}
		else  {
			㳰롼εưcalltex
		}
	}
	쥸ʼ˥å쥸
	߽Υ꥿

	֥ϥɥפϡߥϥɥCPU㳰ϥɥΡ
	ֺǤ⳰¦Υϥɥפϡ褬פȸ뤳Ȥ
	   Ǥ롥
	------------------------------------------------------------

ǡ¦ifʸξǤ⥿㳰롼εư
Ԥɬפ뤳Ȥʤ㳰롼εưԤ
ݥϰۤʤˡ¦ifʸϼΤ褦˺ŬǤ礬롥

	------------------------------------------------------------
		if (enadsp && runtsk != schedtsk) {
			ǥѥå
		}
		㳰롼εưcalltex
	------------------------------------------------------------


m68k68LC040ѤΥåȰ¸

(1) 

٤ƤΥ򥹡ѡХ⡼ɤǼ¹Ԥ뤳ȤȤ桼⡼ɤ
Ѥʤ

(2) ¹ԥƥȤCPUå

ƥȤϥޥ⡼ɡ󥿥ƥȤϳߥ⡼ɤ
¹Ԥ롥sense_context ϡSR Υޥߥ⡼ɥӥåȤ򻲾Ȥ
ˡǼ¸롥

IPM  7 λNMI ٤ƤγߤػߤˤĤλ˸¤ꡤ 
CPUå֤ǤΤȤ롥sense_lock ϡSR  IPM 򻲾Ȥ
ˡǼ¸롥NMI ϥͥδγߤʤΤǡCPUå֤ 
NMI դΤϺ٤ʤ

chg_ipm 򥵥ݡȤ뤫ɤSUPPORT_CHG_IPM 뤫ɤ
ѹǤ롥ƥȤ IPM ѹˤϡchg_ipm 
ʤФʤʤchg_ipm 򥵥ݡȤʤˤϡƥ
Ȥ IPM ѹ뤳ȤϤǤʤĤޤꡤƥȤǤϡIPM 
Ͼ 0 ˤʤäƤ롥

chg_ipm 򥵥ݡȤǤ⡤chg_ipm Ȥä IPM  7 ѹ뤳
Ȥϵʤϡchg_ipm  loc_cpuunl_cpu δطʣˤʤ뤿
Ǥ롥ޤIPM  16 λˤ⡤ǥѥåαʤ 
IPM ϡǥѥåˤäơ¹Ծ֤ˤʤäذ
Ѥ롥Τᡤ¹ˡ̤Υˤä IPM ѹ
礬롥ϡǥѥåBǼˤľ
Ǥ뤬AǼˤϤ IPM 롥
AǼˤϡIPM  16 λˤ⥿ǥѥåα
ȤڤǤ롥

(3) ߥϥɥ

m68kM68020ʾˤǤϡߥϥɥεưˤäơѤ륹å
ưŪ˳ߥåڤ괹뤿ᡤߥåؤڴ
ɬפʤǤ⳰¦ΥϥɥǤ뤫ɤϡåѤޤ줿 
SR Υޥߥ⡼ɥӥåȤ򻲾ȤȽꤷƤ롥ǥ
ѥåȥ㳰롼εưϡret_int 롼ǤƤ
롥

reqflg å˳ߤػߤΤϡߤػߤʤȡ 
reqflg å˵ư줿ߥϥɥǥǥѥå
ᤵ줿ˡǥѥåԤʤǤ롥

interrupt_entry:
	movem.l %d0-%d1/%a0-%a1, -(%sp)	/* å쥸¸ */
	jsr <ߥϥɥ>		/* ߥϥɥƤӽФ */
	movem.l (%sp)+, %d0-%d1/%a0-%a1	/* å쥸 */
	btst.b #4, (%sp)		/* 褬ߥ⡼ɤʤ */
	jbeq 1f				/*           ˥꥿ */
	ori.w #0x0700, %sr		/* ߶ػ */
	tst.l reqflg			/* reqflg  TRUE Ǥ */
	jbne ret_int			/*              ret_int  */
1:	rte

(4) CPU㳰ϥɥ

m68kǤϡCPU㳰ϥɥεưˤäƳߥ⡼ɤؤΰܹԤϤ餺
Ѥ륹åڤ괹ʤΤᡤCPU㳰ϥɥǳ
⡼ɤڤ괹Ƥ롥ޤǤ⳰¦ΥϥɥǤ뤫ɤȽꤹ
뤿ˡߥ⡼ɤڤ괹 SR 򥹥å¸롥
ǥѥåȥ㳰롼εưϡret_exc 롼
ǤƤ롥

CPU㳰ϥɥؤΰϡ㳰åե졼Ƭϡʤʤ 
CPU㳰ϥɥνƤФ줿ľΥåݥ󥿡ˤȤƤ
롥

reqflg å˳ߤػߤΤϡߤػߤʤȡ 
reqflg å˵ư줿ߥϥɥǥǥѥå
ᤵ줿ˡǥѥåԤʤǤ롥

exception_entry:
	movem.l %d0-%d1/%a0-%a1, -(%sp)	/* å쥸¸ */
	lea.l 16(%sp), %a0		/* 㳰ե졼Ƭ A0  */
	move.w %sr, %d0			/* SR  D0  */
	and.w #~0x1000, %sr		/* ߥ⡼ */
	move.l %d0, -(%sp)		/*  SR 򥹥å¸ */
	move.l %a0, -(%sp)		/* A0 ȤϤ */
	jsr <CPU㳰ϥɥ>		/* CPU㳰ϥɥƤӽФ */
	addq.l #4, %sp			/* ΤƤ */
	move.l (%sp)+, %d0
	and.w #0x1000, %d0		/* ߥ⡼ɤʤ */
	jbeq 1f				/*       ˥꥿ */
	or.w #0x1700, %sr		/* ޥ⡼ɡ߶ػ */
	tst.l reqflg			/* reqflg  TRUE Ǥ */
	jbne ret_exc			/*              ret_exc  */
1:	movem.l (%sp)+, %d0-%d1/%a0-%a1	/* å쥸 */
	rte

(5) AΥǥѥå

ʲΥɤǤϡchg_ipm ϥݡȤƤʤޤѤʤä
ȤǤ뤿ᡤưƥȤ򤷤Ƥʤ

CTXB ϡVP mspפΤߤޤ๽¤ΤȤ롥ΥƥȤϡ
ޤΤ褦˥Υå¸롥å쥸D0D1A0
A1ˤȤ¾Υ쥸̡ѤΤϡ㳰롼εư
Թ礬褤Ǥ롥

 *   	+-----------------------------------+  TCB ¸Ƥ MSP
 *  	|                D2                 |
 *	+-----------------------------------+
 *		    . . . . . .
 *	+-----------------------------------+
 *	|                D7                 |
 *	+-----------------------------------+
 *	|                A2                 |
 *	+-----------------------------------+
 *		    . . . . . .
 *	+-----------------------------------+
 *	|                A6                 |
 *	+-----------------------------------+
 *	|                D0                 |
 *	+-----------------------------------+
 *	|                D1                 |
 *	+-----------------------------------+
 *	|                A0                 |
 *	+-----------------------------------+
 *	|                A1                 |
 *	+-----------------+-----------------+
 *	|        SR       |   PC (16bit)  |
 *	+-----------------+-----------------+
 *  	|   PC (16bit)  |    㳰     |
 *  	+-----------------+-----------------+  ǥѥå㵯ư MSP

dispatch ϡtrap_dispatch  TRAP̿ǸƤִؿȤ롥

exit_and_dispatch:
	or.w #0x1000, %sr		/* ޥ⡼ */
	jbra dispatch_1

trap_dispatch:
	movem.l %d0-%d1/%a0-%a1, -(%sp)	/* å쥸¸ */
	movem.l %d2-%d7/%a2-%a6, -(%sp)	/* ĤΥ쥸¸ */
	move.l runtsk, %a0		/* ƥȤ¸ */
	move.l %sp, TCB_msp(%a0)
dispatch_1:
	move.l schedtsk, %a0
	move.l %a0, runtsk		/* schedtsk  runtsk  */
	jbeq dispatch_3			/* schedtsk 뤫 */
	move.l TCB_msp(%a0), %sp	/* ƥȤ */
	movem.l (%sp)+, %d2-%d7/%a2-%a6	/* 쥸 */
	btst.b #TCB_enatex_bit, TCB_enatex(%a0)
	jbeq dispatch_2			/* enatex  FALSE ʤ꥿ */
	tst.l TCB_texptn(%a0)		/* texptn  0 ʤ꥿ */
	jbeq dispatch_2
	jsr call_texrtn			/* 㳰롼θƽФ */
dispatch_2:
	movem.l (%sp)+, %d0-%d1/%a0-%a1	/* å쥸 */
	rte

dispatch_3:
	stop #0x2000			/* Ԥʳߥ⡼ɡ */
	/*
	 *  ǳߥ⡼ɤڤ괹Τϡȯ߽
	 *  ˤɤΥåȤȤβȡߥϥɥ
	 *  ΥǥѥåɻߤȤ2Ĥΰ̣롥
	 */
	or.w #0x1700, %sr		/* ޥ⡼ɡ߶ػ */
	tst.l reqflg			/* reqflg  FALSE ʤ */
	jbeq dispatch_3			/*        dispatch_3  */
	clr.l reqflg			/* reqflg 򥯥ꥢ */
	jbra dispatch_1

ret_int:
	/*
	 *  Ǥϡߥ⡼ɡ߶ػ߾֡
	 */
	move.l %a1, -(%sp)		/* A1 ߥå¸ */
	movec.l %msp, %a1		/* å A1  */
	move.l (%sp)+, -(%a1)		/* A1 򥿥åѤ */
	movem.l %d0-%d1/%a0, -(%a1)	/* å쥸Ѥ */
	clr.l reqflg			/* reqflg 򥯥ꥢ */
	move.l runtsk, %a0		/* A0  runtsk */
	tst.l enadsp			/* enadsp  FALSE ʤ */
	jbeq ret_int_3			/*         ret_int_3  */
	cmp.l schedtsk, %a0		/* runtsk  schedtsk Ʊʤ */
	jbeq ret_int_3			/*                  ret_int_3  */

	/* ǥѥå */
	movem.l %d2-%d7/%a2-%a6, -(%a1)	/* 쥸¸ */
	move.l %a1, TCB_msp(%a0)	/* å¸ */
ret_int_1:
	move.l schedtsk, %a0
	move.l %a0, runtsk		/* schedtsk  runtsk  */
	jbne ret_int_2			/* schedtsk 뤫 */
ret_int_1x:
	stop #0x2000			/* Ԥʳߥϥɥ */
	or.w #0x0700, %sr		/* ߶ػ */
	tst.l reqflg			/* reqflg  FALSE ʤ */
	jbeq ret_int_1x			/*        ret_int_1x  */
	clr.l reqflg			/* reqflg 򥯥ꥢ */
	jbra ret_int_1
ret_int_2:
	move.l TCB_msp(%a0), %a1	/* å A1  */
	movem.l (%a1)+, %d2-%d7/%a2-%a6	/* 쥸 */

ret_int_3:
	btst.b #TCB_enatex_bit, TCB_enatex(%a0)
	jbeq ret_int_4			/* enatex  FALSE ʤ꥿ */
	tst.l TCB_texptn(%a0)		/* texptn  0 Ǥʤ */
	jbne ret_int_5			/*           ret_int_5  */
ret_int_4
	movem.l (%a1)+, %d0-%d1/%a0	/* å쥸 */
	move.l (%a1)+, -(%sp)		/* A1 ߥå¸ */
	movec.l %a1, %msp		/* A1 򥿥å */
	move.l (%sp)+, %a1		/* A1 ߥå */
	rte

ret_int_5:
	move.w 16(%a1), %d0		/*  SR  D0  */
	move.l TCB_exinf(%a0), -(%a1)	/* exinf 򥿥å */
	move.l TCB_texptn(%a0), -(%a1)	/* texptn 򥿥å */
	move.l #ret_tex, -(%a1)		/* #ret_tex 򥿥å */
	clr.l TCB_enatex(%a0)		/* runtsk->enatex 򥯥ꥢ */
	clr.l TCB_texptn(%a0)		/* runtsk->texptn 򥯥ꥢ */
	move.w #㳰, -(%a1)	/* 㳰åե졼 */
	move.l TCB_texrtn(%a0), -(%a1)
	move.w %d0, -(%a1)
	movec.l %a1, %msp		/* A1 򥿥å */
	rte

㳰롼ƽФΥå

 *   	+-----------------------------------+
 *  	|             ret_tex               |
 *	+-----------------------------------+
 *	|              texptn               |
 *	+-----------------------------------+
 *	|              exinf                |
 *	+-----------------------------------+
 *	|                D0                 |
 *	+-----------------------------------+
 *	|                D1                 |
 *	+-----------------------------------+
 *	|                A0                 |
 *	+-----------------------------------+
 *	|                A1                 |
 *	+-----------------+-----------------+
 *	|        SR       |   PC (16bit)  |
 *	+-----------------+-----------------+
 *  	|   PC (16bit)  |    㳰     |
 *  	+-----------------+-----------------+

ret_tex:
	addq.l #8, %sp			/* ꥢΤƤ */
	or.w #0x0700, %sr		/* ߶ػ */
	jsr call_texrtn			/* 㳰롼εư */
	movem.l (%sp)+, %d0-%d1/%a0-%a1	/* å쥸 */
	rte

(6) Bʺѡ

ɤ򻲾ȡ

ʾ
