
        JSPͥ åȰ¸ ݡƥ󥰥 

             Release 1.4.3бǽ: 22-Apr-2007

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

 Copyright (C) 2000-2003 by Embedded and Real-Time Systems Laboratory
                             Toyohashi Univ. of Technology, JAPAN
 Copyright (C) 2004-2005 by Embedded and Real-Time Systems Laboratory
             Graduate School of Information Science, Nagoya Univ., JAPAN

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

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

 @(#) $Id: config.txt,v 1.40 2007/05/28 02:06:45 honda Exp $
------------------------------------------------------------------------


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

JSPͥΥåȰ¸ϡ¸κθץå
¸ƥ¸ȯĶ¸ʬΥƤ롥ȯĶ¸
ؤƤϡ褽ʬôޤäƤ뤬ץå¸ȥ
¸ˤĤƤϡʬôΤʤ櫓ǤϤʤʲΥǡؿ
¿ϡɤΰ¸Ƥ⤫ޤʤߥ졼Ķʤɤ
üʥǤϡƥ¸ȤʤȤͤ롥

JSPͥΥǥХɥ饤ϡȥ󶨲ˤƸƤƤ
Хɥ饤߷ץɥ饤˱褦ǼƤ롥ǥХɥ饤
߷ץɥ饤WGϡʲURLɤ뤳Ȥ
롥
        http://www.ertl.jp/ITRON/GUIDE/device-j.html


ƥ๽۴Ķ

JSPͥϡGNUȯĶɸȤƤꡤե졼䳫ȯ
桼ƥƥϡGNUȯĶȤ߹碌ư褦˼
Ƥ롥ǰʲǤϡGNUȯĶѤ濴롥
ʳγȯĶѤˤϡȯٱ桼ƥƥβ¤ɬפ
ʤäꡤΥ桼ƥƥѤǤʤ롥

(1) åάΤη

åȰ¸ϡץåάΤȥƥάΤ
롥ޤGNUʳγȯĶѤˤϡȯĶάΤ롥
άΤѤʸϡʸ "_" ˸ꤹ롥

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

åȰ¸Υե֤Υǥ쥯ȥconfig β˺
롥ǥ쥯ȥ̾ϡåάΤʲΤ褦˷ꤹ롥
ǥ쥯ȥ̾˴ޤޤʸϤ٤ƾʸȤ롥ʤǥ
쥯ȥ̾ˤϡѾʸ "_" ΤߤȤȤǤ롥

GNUȯĶѤˤϡconfig β˥ץåάΤѤƥץ
¸Υե֤Υǥ쥯ȥʥץå¸ǥ쥯
ˤ򡤤ˤβ˥ƥάΤѤƥƥ¸Υե
Υǥ쥯ȥʥƥ¸ǥ쥯ȥˤ롥

GNUʳγȯĶѤˤϡconfig β˥ץåάΤȳȯ
άΤ "-" Ϣ뤷̾Ρ㤨С"sh3-hitachi"ˤǡץå¸
ǥ쥯ȥ롥ˤβˡƥάΤѤƥƥ
¸ǥ쥯ȥ롥Υǥ쥯ȥˤϡGNUȯĶ
Υǥ쥯ȥ֤ƤեȰۤʤեΤߤ֤ե
뤬֤ƤʤˤϡGNUȯĶѤΥǥ쥯ȥ򻲾Ȥ롥
Makefile.config ˴ؤƤϡGNUȯĶѤΥǥ쥯ȥ򻲾Ȥ
ʤᡤƱƤǤäƤѰդʤФʤʤ

(3) ƥ๽ˡ

ץå¸ǥ쥯ȥꤪӥƥ¸ǥ쥯ȥβˡ
줾졤ƥ๽ˡꤹ뤿 Makefile.config ե
դ롥ΥեϡMakefile 饤󥯥롼ɤ롥

ץå¸ӥƥ¸ Makefile.config ٤
ˤϡȯĶΥޥ̾ꤹΡѥ륪ץ
Ρ¾ΤΤ롥Ǥϡ¾ѿȤˡ
Ĥ롥

(3-1) TEXT_START_ADDRESS        ƥȥƬ
(3-2) DATA_START_ADDRESS        ǡƬ

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

(3-3) LDSCRIPT                  󥫥ץȤΥե̾

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

(4) ȯĶΥޥ̾

(4-1) TARGET            å̾

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

(4-2) CC                Cѥɥ饤Ф̾
(4-3) CXX               C++ѥɥ饤Ф̾
(4-4) AS                ֥̾
(4-5) LD                󥫤̾
(4-6) AR                Ф̾
(4-7) NM                nmץ̾
(4-8) RANLIB            ranlibץ̾
(4-9) OBJCOPY           objcopyץ̾
(4-10) OBJDUMP          objdumpץ̾

GNUʳγȯĶѤˡ줾Υޥɤ̾Τ롥
б륳ޥɤʤ䡤ޥɥѥ᡼ۤʤˤϡ
Makefile ΤΥޥɤƤӽФƤʬѹɬפ롥GNU
ȯĶǤϡ TARGET ѤΤǡɬפϤ


(5) ѥ륪ץ

(5-1) CDEFS             ޥץ-D
(5-2) INCLUDES          󥯥롼ɥեΥǥ쥯ȥꥪץ-I
(5-3) COPTS             ѥФ뤽¾Υץ
(5-4) LDFLAGS           󥫤Ф륪ץ
(5-5) LIBS              饤֥󥯻ΤΥץ

åȤ˰¸ơ٤ƤΥե˶̤륳ѥ륪ץ
ɲäɬפʾˤϡץμ˾˼ѿ롥

ƥ¸ Makefile.config Ǥѿϡ":=" 
ѤơޤǤɲäǹԤ㤨Сץå¸ 
-Wall -g -O2 -m68020-40פȤץɲäˤϡʲ
εҤץå¸ Makefile.config ˴ޤ롥

    COPTS := $(COPTS) -Wall -g -O2 -m68020-40

Фơƥ¸ Makefile.config  Makefile κǽǥ
󥯥롼ɤ뤿ᡤΤ褦θɬפʤѹ˶뤿
Ʊͤ˰Ȥˤ롥

ۤȤɤξˡץå¸ Makefile.config ˤϰʲεҤ
ޤɬפ롥

    GNUȯĶѤ
        INCLUDES := -I$(SRCDIR)/config/$(CPU)

    ¾γȯĶѤ
        INCLUDES := -I$(SRCDIR)/config/$(CPU)-$(TOOL) -I$(SRCDIR)/config/$(CPU)

ޤƥ¸ Makefile.config ˤϰʲεҤޤɬפ
롥

    GNUȯĶѤ
        INCLUDES := $(INCLUDES) -I$(SRCDIR)/config/$(CPU)/$(SYS)

    ¾γȯĶѤ
        INCLUDES := $(INCLUDES) -I$(SRCDIR)/config/$(CPU)-$(TOOL)/$(SYS) \
                                -I$(SRCDIR)/config/$(CPU)/$(SYS)

ޤ֥٥μ̾C٥μ̾Ƭ "_" 
դΤˤʤˤϡ줫 Makefile.config  CDEFS  
-DLABEL_ASM ɲä롥

(5-6) STASK_DIR         ƥॵӥΥ֤줿ǥ쥯ȥ
(5-7) STASK_ASMOBJS     ֥ǵҤ줿ƥॵӥΥ֥
(5-8) STASK_COBJS       CǵҤ줿ƥॵӥΥ֥
(5-9) STASK_CFLAGS      ƥॵӥФ륳ѥ륪ץ
(5-10) STASK_LIBS       ƥॵӥФ饤֥󥯻

ƥॵӥʥƥǥХɥ饤ФʤɡˤΥ
֤줿ǥ쥯ȥꡤ륪֥ȥեΥꥹȡ
򥳥ѥ뤹ݤŬѤ륳ѥ륪ץ󡤤ιɬפʥ
֥󥯻Ԥˤϡ˼ѿ롥

ƥ¸ Makefile.config ǤѿϡCDEFS 
ʤɤƱͤΰɬפǤ롥

(5-11) KERNEL_DIR       ͥΥ֤줿ǥ쥯ȥ
(5-12) KERNEL_ASMOBJS   ֥ǵҤ줿ͥΥ֥
(5-13) KERNEL_COBJS     CǵҤ줿ͥΥ֥
(5-14) KERNEL_CFLAGS    ͥФ륳ѥ륪ץ

ͥΥ֤줿ǥ쥯ȥꡤ륪֥ȥե
Υꥹȡ򥳥ѥ뤹ݤŬѤ륳ѥ륪ץ
ꤹˤϡ˼ѿ롥

ƥ¸ Makefile.config ǤѿϡCDEFS 
ʤɤƱͤΰɬפǤ롥

ۤȤɤξˡץå¸ Makefile.config ˤϰʲεҤ
ޤɬפ롥

    GNUȯĶѤ
        KERNEL_DIR := $(KERNEL_DIR):$(SRCDIR)/config/$(CPU)
        KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) cpu_support.o
        KERNEL_COBJS := $(KERNEL_COBJS) cpu_config.o

    ¾γȯĶѤ
        KERNEL_DIR := $(KERNEL_DIR):$(SRCDIR)/config/$(CPU)-$(TOOL)
        KERNEL_DIR := $(KERNEL_DIR):$(SRCDIR)/config/$(CPU)
        KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) cpu_support.o
        KERNEL_COBJS := $(KERNEL_COBJS) cpu_config.o

ޤƥ¸ǥ쥯ȥ Makefile.config ˤϰʲεҤ
ɬפ롥

    GNUȯĶѤ
        KERNEL_DIR := $(KERNEL_DIR):$(SRCDIR)/config/$(CPU)/$(SYS)
        KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) sys_support.o
        KERNEL_COBJS := $(KERNEL_COBJS) sys_config.o

    ¾γȯĶѤ
        KERNEL_DIR := $(KERNEL_DIR):$(SRCDIR)/config/$(CPU)-$(TOOL)/$(SYS)
        KERNEL_DIR := $(KERNEL_DIR):$(SRCDIR)/config/$(CPU)/$(SYS)
        KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) sys_support.o
        KERNEL_COBJS := $(KERNEL_COBJS) sys_config.o

(6) եåȥե

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

makeoffset.c  genoffset ȤȤǡ㤨СTCB  texptn ե
ɤΥեåͤ TCB_texptn ˥ޥ뤳Ȥ䡤TCB Υ
ƥȥ֥åtskctxbˤ˴ޤޤ pc եɤΥեå
 TCB_pc ˥ޥ뤳ȤǤ롥ޤTCB  enatex ե
ɤΥեå͡ӥåȰ֡ӥåȥޥ򡤤줾 TCB_enatex
TCB_enatex_bitTCB_enatex_mask ˥ޥ뤳ȤǤ롥ޥ
ӥåȰ֤ӥåȥޥϡ륵䥨ǥ
ꤹ뤳ȤǤ롥

GNUȯĶʳѤʤɡλȤߤǥեåȥե
Ǥʤˤϡoffset.h 򥿡åȰ¸ѰդMakefile.config 
 OMIT_MAKEOFFSET ̥륹ȥ󥰰ʳ롥

makeoffset.c  genoffset ˴ؤޥ˥奢ϡǤѰդǤƤ
ʤȤ狼ʤ䡤ǽ­ʤˤϡ̤줿

(7) ȥåץ⥸塼ʤ

åȤˤäƤϡɥ⥸塼ƬȺǸ˥󥯤٤ץ
򡤥åȰ¸Ѱդɬפ롥¿ξ硤ȥ
ץ⥸塼ɥ⥸塼Ƭ˥󥯤ɬפ롥

ɥ⥸塼Ƭ˥󥯤٤ץबˤϡ
Makefile.config ˤơΥ֥ȥե̾ START_OBJS 
Ф륳ѥ롼Ȱ¸ط롼ʤ
ʤʤɥ⥸塼κǸ˥󥯤٤ץबˤϡ
Υ֥ȥե̾ END_OBJS Ф륳ѥ
롼Ȱ¸ط롼ʤФʤʤ

㤨Сȥåץ⥸塼Υե뤬 start.S ξˤϡ
Makefile.config ˼Τ褦ʵҤȤ褤

        # ȥåץ⥸塼Υ֥ȥե̾
        START_OBJS = start.o

        # ȥåץ⥸塼Υѥ롼
        $(START_OBJS): %.o: %.S
                $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<

        # ȥåץ⥸塼ΰ¸ط롼
        $(START_OBJS:.o=.d): %.d: %.S
                @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) \
                        -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend

ޤѥɸ crtbegin.o  crtend.o Ѥˤϡ
Makefile.config ˼Τ褦ʵҤȤ褤

        # ֥ȥե̾
        START_OBJS = $(shell $(CC) -print-file-name=crtbegin.o)
        END_OBJS = $(shell $(CC) -print-file-name=crtend.o)

        # ¸ط롼
        $(START_OBJS:.o=.d): %.d:
        $(END_OBJS:.o=.d): %.d:

ξ硤Υե򥳥ѥ뤹뤳ȤϤʤᡤѥ롼
פǤ롥ޤ¸ط롼ϥߡǤ褤ʰ¸ط롼
뤬ʤȥ顼ˤʤˡ

ʤͥѤΥȥåץ⥸塼뤫ϡmain ؿǤϤʤ
kernel_start ؿưɬפ롥

(8) 󥫥ץ

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


ץꥱѤΥ󥯥롼ɥե

åȰ¸󶡤٤ץꥱѤϼ̤Ǥ롥
ǡ(1)  (2)  tool_defs.h ˴ޤʤФʤ
¾ϡcpu_defs.h ޤ sys_defs.hʤޤϤ餫饤
롼ɤեˤ˴ޤ롥

(1) ѥ¸Υǡ

ѥ¸ΥǡʲΥܥ롥ϡ
typedef ǤϤʤ#define ˤޥʤФʤʤ

(1-1) _int8_            8ӥåȤ
(1-2) _int16_           16ӥåȤ
(1-3) _int32_           32ӥåȤ
(1-4) _int64_           64ӥåȤ

ƥ򡤤Υܥ˥ޥ롥_int32_ ʳϡ
ѥ餬ݡȤƤʤˤɬפʤ_int32_ 
ɬܤǤ롥

(1-5) _bool_            BOOLη

BOOL ϡɸǤ int ˷뤬ԹʾˤϡŬڤ
 _bool_ ˥ޥ롥

(1-6) _vp_int_          VP_INTη

VP_INT ϡɸǤ VP ˷뤬Թʾ㤨С
ݥ󥿤16ӥåȤǡint 32ӥåȤξˤˤϡŬڤʷ _vp_int_ 
˥ޥ롥

(1-7) _intptr_          ݥ󥿤ǼǤ

_intptr_ ϡեޥåȽϤˤơintݥ󥿷ǼǤ
ȤƻѤ롥ʤ硤long Ȥ롥

(2) ѥγĥǽΤΥޥ

(2-1) inline            饤
(2-2) Inline            եΤߤͭʥ饤
(2-3) asm               饤󥢥֥ʺŬ
(2-4) Asm               饤󥢥֥ʺŬ޻ߡ

ǡasm  Asm ϡåȰ¸ѤƤʤ
ɬפʤ

(3) ƥå

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

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

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

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

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

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

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

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

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

(7) ǽɾѥƥϢʥץ

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

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

(8) åȼ̥ޥ

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

(9) ץåΥǥ

(9-1) SIL_ENDIAN

ץåӥåǥξˤ SIL_ENDIAN_BIGʡ1ˡȥ
ǥξˤ SIL_ENDIAN_LITTLEʡ0ˤ˥ޥ롥

(10) ƥ߽

(10-1) kernel_abort(void)

assertޥˤ륢μԤ䡤ӥ뤬̿Ūʥ顼
֤ˡƥߤؿޤϥޥkernel_exit 
ӽФˡͤ뤬ǥХåưפˤ뤿ˤϡ饤ؿ
ޥξǥƥߤΤ˾ޤ
kernel_exit ƤӽФȡ顼ȯξ֤ѲƤ
ޤˡ


ͥѤΥǡؿʤ

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

(0) 󥯥롼ˡ˴ؤ롼

إåե򥤥󥯥롼ɤ뵭ҤϡʲΥ롼˽Τ§Ȥ
롥

ANSI Cɸ।󥯥롼ɥեϡ#include <> ǥ󥯥롼ɤ롥
ޤMakefile ޤ Makefile.config  INCLUDES  -Iץǻ
ꤷǥ쥯ȥˤեϡ#include <> ǥ󥯥롼ɤ롥
ͥե뤫Υ󥯥롼ɤФƤϡʲΥǥ쥯
ȥˤե뤬˳ʥåȤˤ¸ˡ
        jsp/include/
        jsp/config/$(CPU)
        jsp/config/$(CPU)/$(SYS)
        jsp/config/$(CPU)-$(TOOL)
        jsp/config/$(CPU)-$(TOOL)/$(SYS)
        pdic/simple_sio

¾Υ󥯥롼ɥե #include "" ǥ󥯥롼ɤ롥
ͥե뤫Υ󥯥롼ɤФƤϡʲΥǥ쥯ȥ
ˤե뤬˳ʥåȤˤ¸ˡ
        jsp/kernel
        jsp/systask

(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) void t_lock_cpu(void)

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

(3-2) void t_unlock_cpu(void)

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

(3-3) void i_lock_cpu(void)

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

(3-4) void 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)ˡ

(6) ƥcpu_context.h

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

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

(6-1) void create_context(TCB *tcb)

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

(6-2) void activate_context(TCB *tcb)

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

(6-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 ǥå
ΥߡΰݤʬλѤƤ륹åΰ˲Τ


ʤ¸뤿ˡϰ¸εǽǤ alloca ѤƤ롥
gcc  alloca 򥵥ݡȤƤ뤬¾ΥѥѤˤϡ
alloca 򥵥ݡȤƤ뤫ǧɬפǤ롥ޤalloca Ѥ
˥󥯥롼ɥե뤬ɬפʾˤϡtool_config.h 饤󥯥롼
ɬפ롥

(7) åȰ¸νλ

(7-1) void cpu_initialize(void)

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

(7-2) void sys_initialize(void)

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

(7-3) void tool_initialize(void)

ȯĶ¸νͥνǡsys_initialize ³
ƸƤФ롥

3Ĥδؿϡͥ뵯ưkernel_start ؿˤκǽǤν
ƤӽФ롥3ĤδؿƤӽФλǡCPUå֤ˤʤäƤ
ʤФʤʤ

(7-4) void cpu_terminate(void);

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

(7-5) sys_exit(void)

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

(7-6) call_atexit(void)

ȯĶ¸νλɬפ˱ơatexit ˤäϿ줿ؿ
¹Ԥ C++ ˤǥȥ饯μ¹ԤԤ

(8) ߥϥɥ顿CPU㳰ϥɥ

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

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

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

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

(9) CPU㳰ȯΥƥ֤λ

(9-1) BOOL exc_sense_context(VP p_excinf)

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

(9-2) BOOL exc_sense_lock(VP p_excinf)

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

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

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

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

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

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

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

(11-1) CPU_BITMAP_SEARCH

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

(11-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 ΥӥåȤ򥵡
ΤǤˤϡΥޥơӥåȤγդѹ뤳
Ǥ롥

(11-3) UINT PRIMAP_BIT(pri)

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

(12) åȰ¸Υӥʥץ

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

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

(13) ǽɾѥƥϢʥץ

(13-1) SUPPORT_VXGET_TIM

å¸ vxget_timӥѤˡΥ
롥

(13-2) hw_timer.h

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

(14) ͥ̾Υ͡Ȥβcpu_rename.h
     cpu_unrename.hsys_rename.hsys_unrename.h

åȰ¸ѤƤ뼱̾ʥ⥸塼Ĥ̾
򡤦ITRON4.0ͤ˽ä _kernel_ ǻϤޤΤ˥͡हɬפ
롥

Ūˤϡץå¸ѤƤ뼱̻Ҥꥹȥåפե
 cpu_rename.def ˡƥ¸ѤƤ뼱̻Ҥꥹȥå
ե sys_rename.def ˺롥genrename ȤäơΥե
뤫顤줾 cpu_rename.h  cpu_unrename.hsys_rename.h  
sys_unrename.h 롥xxx_rename.def  xxx_rename.h  
xxx_unrename.h ˤϡ$(KERNEL_DIR)/utils/genrename xxxפ
¹ԤФ褤

ޤcpu_config.h Ƭ cpu_rename.h sys_config.h Ƭ 
sys_rename.h 򥤥󥯥롼ɤ롥

genrename եϼΤ褦ƤǤ롥xxx_rename.def 
xxxx Ȥ̻ҤޤޤƤ硤xxx_rename.h ˤϼΤ褦ʥޥ
롥

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

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

ޤxxx_unrename.h ˤϼΤ褦ʥޥ롥

#undef xxxx
#ifdef LABEL_ASM
#undef _xxxx
#endif /* LABEL_ASM */

(15) ȥ졼ΤΥޥtool_config.h

ͥΥȥ졼μϡȯĶ¸ǥȥ졼ΤΥ
뤳ȤˤäƹԤȥ졼ΤΥޥ150
ꡤбޥ롥ȥ졼
ʤˤϡΥޥФ褤

(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)ʥץtool_config.h

new_label  defined_label Ʊɥ쥹뤿Υޥ
褦ʥޥ¸Ǥʤˤϡά뤳ȤǤ롥Υ
ϡtool_config.h ǹԤΤɸȤ롥

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

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

(16-7) __STK_UNITʥץ
(16-8) __MPF_UNITʥץ

ɸǤϡåΰȸĹסΰϡVPΥ˥饤
󤹤롥򡤤礭ñ̤ǥ饤󤵤ɬפˤϡ
__STK_UNIT  __MPF_UNIT 򡤤줾쥢饤󤵤ñ̤Υǡ
롥__STK_UNIT  __MPF_UNIT Υϡ2ζҾǤʤ
Фʤʤ

(16-9) __EMPTY_LABEL(x, y)ʥץtool_config.h

 x Υ 0  y 뤿Υޥ 0 
Ǥ륳ѥGNUȯĶϤ˳ˤǤά뤳Ȥ
롥Υޥϡtool_config.h ǹԤΤɸȤ롥


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

(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) ƥǽ

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


ƥॵӥѤΥǡؿʤ

5.1 ƥ।󥿥ե쥤SILˤΤ

åȰ¸󶡤٤ƥ।󥿥ե쥤SILˤΤ
ϼ̤Ǥ롥ϡcpu_defs.hޤsys_defs.hʤ
Ϥ餫饤󥯥롼ɤեˤ˴ޤ롥ޤؿμΤ
ɬפʾ硤Cξcpu_config.cޤsys_config.cˡ֥
ξcpu_support.Sޤsys_support.S˵Ҥ롥

(1) ԤϢ

(1-1) void sil_dly_nse(UINT dlytim)

dlytimǻꤵ֡ñ: 1ʥáԤĴؿ򥿡åȰ¸
롥

¸ˡϥåȰ¸Ǥ뤬ʲδؿ򥢥֥ǵҤ
Τ򡤥ץå¸˴ޤΤɸŪˡȤ롥֥
ǵҤΤϡѥκŬ˰¸ʤ褦ˤ뤿Ǥ롥
δؿϡǤ¤ꥢԤʤ褦˼٤Ǥ롥

        void sil_dly_nse(UINT dlytim)
        {
                if (dlytim > SIL_DLY_TIM1) {
                        dlytim -= SIL_DLY_TIM1;
                        while (dlytim > SIL_DLY_TIM2) {
                                dlytim -= SIL_DLY_TIM2;
                        }
                }
        }

(1-2) SIL_DLY_TIM1ʥץ
(1-3) SIL_DLY_TIM2ʥץ

sil_dly_nse嵭ɸŪˡǼ¸硤2Ĥ򥷥ƥ
¸ǥޥ롥ʤ2Ĥηץ
ѰդƤ롥˾ϡ̤줿

(2) ߥå֤Ϣʥץ

(2-1) SIL_PRE_LOC
(2-2) SIL_LOC_INT()
(2-3) SIL_UNL_INT()

åȰ¸ǳߥå֤ˡѹˤϡ
Υޥˤˡ롥ޥʤˤϡ 
å¸ˤơͥCPUåεǽѤƳߥå
֤¸롥

(3) ץåΥǥ

(3-1) SIL_ENDIAN

ȥ륨ǥץåǤSIL_ENDIAN_LITTLEʡ0ˡӥåǥ
ץåǤSIL_ENDIAN_BIGʡ1ˤ˥ޥ롥

(4) ǥȿžʥץ

(4-1) VH SIL_REV_ENDIAN_H(VH data)
(4-2) VW SIL_REV_ENDIAN_W(VW data)

ǥȿžΨ褯¸ˡˤϡΥޥ
ˤˡ롥ΥޥʤˤϡɸŪˡ
ǥǥȿžԤ롥

(5) ǥȿžդΥ֥ʥץ

ǥȿžƥɽФߤΨŪˡ硤
֥ؿ򥿡åȰ¸Ѱդå
¸ɸŪ̵ˤ뤿Υޥ롥

(5-1) VH sil_reh_bem(VP mem)                OMIT_SIL_REH_BEM
(5-2) void sil_wrh_bem(VP mem, VH data)     OMIT_SIL_WRH_BEM
(5-3) VW sil_rew_bem(VP mem)                OMIT_SIL_REW_BEM
(5-4) void sil_wrw_bem(VP mem, VW data)     OMIT_SIL_WRW_BEM

ȥ륨ǥץåǤϡΥ֥ؿ򥿡
åȰ¸Ѱդ˼ޥ롥

(5-5) VH sil_reh_lem(VP mem)                OMIT_SIL_REH_LEM
(5-6) void sil_wrh_lem(VP mem, VH data)     OMIT_SIL_WRH_LEM
(5-7) VW sil_rew_lem(VP mem)                OMIT_SIL_REW_LEM
(5-8) void sil_wrw_lem(VP mem, VW data)     OMIT_SIL_WRW_LEM

ӥåǥץåǤϡΥ֥ؿ򥿡
åȰ¸Ѱդ˼ޥ롥

(6) ɸΥؿ̵ʥץ

(6-1) OMIT_SIL_ACCESS

ߥ졼Ķʤɤǡ٤ƤΥ֥ؿ򥿡å
¸Ѱդˤϡå¸ɸŪ̵ˤ
ˡΥޥ롥

5.2 ƥ९åɥ饤ѤΥǡؿʤ

åȰ¸󶡤٤ƥ९åɥ饤ѤΥǡؿ
ʤɤϼ̤Ǥ롥ϡhw_timer.hʤޤϤ餫饤
롼ɤեˤ˴ޤ롥ؿμΤɬפʾˤϡŬڤʥե
Ѱդ롥

(1) INHNO_TIMER

޳ߥϥɥΥ٥ֹޥ򡤥åȰ¸
󶡤롥

(2) ޤ

(2-1) void hw_timer_initialize(void)

ޤ޳ߤŪȯؿ򡤥åȰ
¸󶡤롥޳ߤμϡTIC_NUMETIC_DENOǻꤵ줿
֤Ȱפ롥

(2-2) void hw_timer_int_clear(void)

޳׵򥯥ꥢؿ򡤥åȰ¸󶡤롥

(2-3) void hw_timer_terminate(void)

ޤưߤ޳ߤȯʤ褦ˤؿ򡤥
åȰ¸󶡤롥

(3) ǽɾѥƥﻲȵǽϢʥץ

å¸vxget_timӥѤˡʲ
ǡؿʤɤ򥿡åȰ¸󶡤롥

(3-1) CLOCK

ͤɽΤΥǡ

(3-2) CLOCK hw_timer_get_current(void)

ޤθͤɤ߽Фɽ֤ؿ

(3-3) BOOL hw_timer_fetch_interrupt(void)

޳׵åؿ޳ߤ׵ᤵƤ
TRUE׵ᤵƤʤFALSE֤

(3-4) UINT TO_USEC(CLOCK clock)

ͤɽ1ñ̤Ѵ뤿Υޥʤޤϴؿˡ
hw_timer_get_currentɤ߽Фͤ򡤥޳ȯηв
ñ: 1áˤѴ뤿Ѥ롥

(3-5) BOOL BEFORE_IREQ(CLOCK clock)

ߤػߤ֤ǡޤhw_timer_get_currentƤӽФ³
hw_timer_fetch_interruptƤӽФͤ롥hw_timer_get_current
ƤӽФľ˥ޤã޳ߤ׵ᤵȡ
hw_timer_get_currentϼãľΥ͡ʤclockȤ
֤hw_timer_fetch_interruptTRUE֤Ȥˤʤ롥ξǤ
߻뤿ˡclockͰʾξˤϡ
hw_timer_fetch_interruptTRUE֤Ƥ⡤ȯͤȤߤʤ
ˤ롥BEFORE_IREQϡclockȯͤȤߤʤ٤TRUE
ǤʤFALSE֤ޥʤޤϴؿˤǤ롥

5.3 ꥢ륤󥿥եɥ饤ѤΥǡؿʤ

åȰ¸󶡤٤ꥢ륤󥿥եɥ饤ѤΥǡ
ؿʤɤϼ̤Ǥ롥ϡ̤˵Ҥʤ¤ꡤ
hw_serial.hʤޤϤ饤󥯥롼ɤեˤ˴ޤᡤɬפ
ե졼hw_serial.cfg˵Ҥ롥ؿμΤɬ
ʾˤϡŬڤʥեѰդ롥

ꥢ륤󥿥եɥ饤ФǡåȤΥꥢI/OǥХ
˰¸ʬ򡤥ꥢI/OǥХɥ饤ФȸƤ֡ꥢI/OǥХ
ɥ饤Фϡ褽ITRONǥХɥ饤߷ץɥ饤PDIC
롥PDICեǡ¾Υƥˤⶦ̤˻Ȥǽ
ˤϡpdic/simple_sioǥ쥯ȥ֤

(1) TNUM_PORT

ꥢ륤󥿥եɥ饤ФݡȤ륷ꥢݡȿ
ޥΥޥϡcpu_config.hޤsys_config.hʤޤϤ餫
󥯥롼ɤեˤ롥

(2) ꥢI/OǥХγߥϥɥȤϿ

ꥢI/OǥХγߥϥɥ򥿡åȰ¸󶡤
ͥϿŪAPIhw_serial.cfg˴ޤ롥ꥢI/OǥХ
γϥɥΥ٥ֹϡhw_serial.hʤޤϤ饤󥯥롼
եˤǥޥhw_serial.cfghw_serial.h򥤥󥯥
ɤˡɸȤ롥

(3) void sio_initialize(void)

ꥢI/OǥХɥ饤Ф롼󡥤δؿϡꥢ
󥿥եɥ饤ФΥå¸ν롼󤫤ƤӽФ
롥

(4) SIOPCB

ꥢI/Oݡȴ֥åΥǡhw_serial.hˤϡ
ޤƤФ褤ˡ

(5) SIO_ERDY_SNDSIO_ERDY_RCV

ǽХåμֹSIO_ERDY_SNDˡΥХå
ֹSIO_ERDY_RCV˥ޥ롥ХåζػߡĤԤ
ӥsio_ena_cbrsio_dis_cbrˤѤ롥

(6) ǥХӥ롼

ʲΥǥХӥ롼ϡʾʤȤ˥ꥢI/OݡȤ
γߤػߤ줿֤ǸƤӽФ롥ޤƥȡ
ƥȤΤǸƤӽФ⤢ʤǸƤӽФ
ư褦ˤʤФʤʤˡ

(6-1) SIOPCB *sio_opn_por(ID siopid, VP_INT exinf)

siopidǻꤵ륷ꥢI/OݡȤ򥪡ץ󤹤ؿexinfϥꥢ
I/OݡȤФĥǡХåƤֻ˥ݡȤ̤뤿
Ϥ

(6-2) void sio_cls_por(SIOPCB *siopcb)

siopcbǻꤵ륷ꥢI/OݡȤ򥯥ؿ

(6-3) BOOL sio_snd_chr(SIOPCB *siopcb, char c)

siopcbǻꤵ륷ꥢI/OݡȤˡcǼʸؿ
ʸ쥸줿ˤTRUEʸ
Ƥʤˡʸ쥸ʤäˤFALSE


(6-4) INT sio_rcv_chr(SIOPCB *siopcb)

siopcbǻꤵ륷ꥢI/OݡȤʸɤؿʸ
硤ɤʸΥɤͤȤ֤ʸƤʤ
ˤ-1֤

(6-5) sio_ena_cbr(SIOPCB *siopcb, UINT cbrtn)

siopcbǻꤵ륷ꥢI/OݡȤΡcbrtnǻꤵ륳Х
Ĥ롥cbrtnˤϡSIO_ERDY_SNDSIO_ERDY_RCVǤ롥

(6-6) sio_dis_cbr(SIOPCB *siopcb, UINT cbrtn)

siopcbǻꤵ륷ꥢI/OݡȤΡcbrtnǻꤵ륳Х
ػߤ롥cbrtnˤϡSIO_ERDY_SNDSIO_ERDY_RCVǤ롥

(7) Хå롼

åȰ¸ϡɬפʥߥ󥰤ǡꥢ륤󥿥եɥ饤
Υå¸˴ޤޤʲΥХå롼ƤӽФӤ
ʤФʤʤ줾ΥХåػߤƤϡ
Хå롼ƤӽФƤϤʤʤ

Хå롼ϡʾʤȤ˥ꥢI/OݡȤγߤ
ػߤ줿֤ǡ󥿥ƥȤǸƤӽФexinfˤϡꥢ
I/OݡȤΥץ˻ꤵ줿ĥϤ

(7-1) void sio_ierdy_snd(VP_INT exinf)

ǽХå롼󡥥ꥢI/OݡȤФʸǤ
֤ˤʤä˸ƤӽФꥢ륤󥿥եɥ饤ФϡΥ
Хå롼ǡsio_snd_chrƤӽФƼʸ뤫
٤ʸʤˤǽХåػߤ롥

(7-2) void sio_ierdy_rcv(VP_INT exinf)

ΥХå롼󡥥ꥢI/OݡȤʸ
˸ƤӽФꥢ륤󥿥եɥ饤ФϡΥХå롼
ǡɬsio_rcv_chrƤӽФƼʸФ

5.4 ƥѤΤ

åȰ¸󶡤٤ƥΤϼ̤
롥ϡcpu_config.hޤsys_config.hʤޤϤ餫
󥯥롼ɤեˤ˴ޤ롥

(1) LOGTASK_PORTID

ƥƥϤ륷ꥢݡȤID
ޥ򥿡åȰ¸󶡤롥

(2) ƥϢʥץ

ƥ˴ؤʲΥޥ򥿡åȰ¸󶡤롥
Υޥ򥿡åȰ¸ʤˤϡǥեȤͤ
롥

(2-1) LOGTASK_PRIORITY          ƥνͥ
(2-2) LOGTASK_STACK_SIZE        ƥΥå
(2-3) LOGTASK_INTERVAL          ƥưֳ֡ñ: ߥá


åȰ¸Υҥ

(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ʺѡ

ɤ򻲾ȡ


åȰ¸

ʲϡåȰ¸ǥߥꥹȥåפ
ΤǤ롥

(1) λ

ext_tsk ƤФ˥Υᥤؿ꥿󤷤硤ext_tsk 
ӽФΤƱνԤ褦ˤʤФʤʤưˡ
ᥤؿΥ꥿󥢥ɥ쥹 ext_tsk ϤꤷƤˡ
侩롥

(2) ƥȤǤγߥޥѹ

chg_iXX 򥵥ݡȤ硤ؤκݤˡchg_iXX ˤäꤷ
ߥޥ͡ʥƥȤˤߥޥ͡ˤ򿷤
˰ѤȤ侩롥äˡߤνиǥؤ
սդɬפǤ롥ŪˤϡƱưƤ
ߥޥåѤޤƤˡ򤽤Τޤ޽ᤷƤ
ʤʤ

(3) 㳰μ¹ԥƥ

㳰롼ϥƥȤǼ¹Ԥ뤿ᡤ㳰
롼¹Իˤϥåݥ󥿤åؤƤɬ
ä˳ߤνиդ뤳ȡ 

(4) CPU㳰ϥɥ

CPU㳰ϥɥ¹ԻϡߥޥͤCPU㳰ȯľƱˤʤ
褦ˤ뤳ȡ

(5) ¹Ԥ٤ʤν

¹Ԥ٤ʤschedtsk  NULL˾ˡץåԤ⡼
ɡʥ꡼ץ⡼ɡˤ˰ܹԤȡߤĤȤϡԲ
ʬ˹Ԥʤɬפ롥Բʬ˹Ԥʤʤ硤ߤĤľ
˳ߤꡤǥ¹Բǽ֤ˤʤȡ¹Ԥ٤
ˤ⤫餺ץåԤ⡼ɤˤʤäƤޤ

ޤ¹Ԥ٤ʤߤĤƳߤԤĴ֤ϡruntsk 
 NULL ꤷʤФʤʤΤ褦ꤷʤȡߥϥ
餫 iget_tid ƤӽФݤưͤ˹פʤʤʦITRON4.0 
ͤǤϡ¹Ծ֤Υʤˡiget_tid  TSK_NONE ֤
ȤˤʤäƤꡤiget_tid Υɤϡruntsk  NULL λ TSK_NONE 
֤褦ˤʤäƤˡ

m68k μϡconfig/m68k/cpu_support.S ˡ

dispatcher:
        move.l schedtsk, %a0
        move.l %a0, runtsk              /* schedtsk  runtsk  */
        jbeq dispatcher_1               /* runtsk 뤫 */

ȤʤäƤꡤschedtsk  NULL λˡruntsk  NULL ˤƤ顤
Ԥ롥ʤ顤νȴƤȡschedtsk  NULL 
λˤϡruntsk 򤹤˹ʤΤᡤ¹Ծ֤Υʤ
 iget_tid Ƥ֤ȡ˼¹ԤƤID ֤롥
 
ʾ
