
        JSPJ[l ^[Qbgˑ |[eBOKCh 

             iRelease 1.4.3ΉCŏIXV: 22-Apr-2007j

------------------------------------------------------------------------ 
 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

 L쌠҂́Cȉ (1)`(4) ̏CFree Software Foundation 
 ɂČ\Ă GNU General Public License  Version 2 ɋL
 qĂ𖞂ꍇɌC{\tgEFAi{\tgEFA
 ς̂܂ށDȉjgpEEρEĔzziȉC
 pƌĂԁj邱Ƃ𖳏ŋD
 (1) {\tgEFA\[XR[ȟ`ŗpꍇɂ́CL̒
     \C̗pщL̖ۏ؋K肪Ĉ܂܂̌`Ń\[
     XR[hɊ܂܂Ă邱ƁD
 (2) {\tgEFACCu`ȂǁC̃\tgEFAJɎg
     pł`ōĔzzꍇɂ́CĔzzɔhLgip
     ҃}jAȂǁjɁCL̒쌠\C̗pщL
     ̖ۏ؋Kfڂ邱ƁD
 (3) {\tgEFAC@ɑgݍނȂǁC̃\tgEFAJɎg
     płȂ`ōĔzzꍇɂ́Ĉꂩ̏𖞂
     ƁD
   (a) ĔzzɔhLgip҃}jAȂǁjɁCL̒
       쌠\C̗pщL̖ۏ؋Kfڂ邱ƁD
   (b) Ĕzž`ԂCʂɒ߂@ɂāCTOPPERSvWFNg
       񍐂邱ƁD
 (4) {\tgEFA̗pɂ蒼ړI܂͊ԐړIɐ邢Ȃ鑹
     QCL쌠҂TOPPERSvWFNgƐӂ邱ƁD

 {\tgEFÁCۏ؂Œ񋟂Ă̂łDL쌠҂
 TOPPERSvWFNǵC{\tgEFAɊւāC̓Kp\
 ܂߂āCȂۏ؂sȂD܂C{\tgEFA̗pɂ蒼
 ړI܂͊ԐړIɐȂ鑹QɊւĂC̐ӔC𕉂ȂD

 @(#) $Id: config.txt,v 1.1 2008/06/17 00:04:40 suikan Exp $
------------------------------------------------------------------------


̃hLgł́CJSPJ[l̃^[QbgˑŒ񋟂ׂf[^
^֐ȂǂɂĉD

JSPJ[l̃^[Qbgˑ́Cˑ̍ėplCvZbT
ˑCVXeˑCJˑɕĂDJˑ
ւẮC悻̖S܂Ă邪CvZbTˑƃVXe
ˑɂẮCSmȂ킯ł͂ȂDȉ̃f[^^֐
̑́Cǂ̈ˑŒ`Ă܂ȂDV~[VȂǂ
ɒ[ȃP[Xł́CVXeˑSgȂƂlD

JSPJ[l̃foCXhCóCgɂČĂf
oCXhCo݌vKChCɉ`ŎĂDfoCXhCo
݌vKChCWG̒ԕ񍐂́CȉURL_E[h邱Ƃ
D
        http://www.ertl.jp/ITRON/GUIDE/device-j.html


PDVXe\z

JSPJ[ĺCGNUJWƂĂCRtBM[^Jx
[eBeB́CGNUJƑgݍ킹ē삷悤Ɏ
ĂDňȉł́CGNUJpꍇ𒆐SɐD
ȊO̊Jpꍇɂ́CJx[eBeB̉Kv
ȂCꕔ̃[eBeBgpłȂP[XD

(1) ^[Qbĝ̌

V^[Qbgˑ쐬鎞́CvZbT̂ƃVXê
߂D܂CGNUȊO̊Jpꍇɂ́CJ̂߂D
̗̂ɗp镶́CpC "_" Ɍ肷D

(2) ^[Qbgˑ̃t@Cu߂̃fBNg

^[Qbgˑ̃t@Cu߂̃fBNgCconfig ̉ɍ
DfBNǵC^[Qbĝȉ̂悤Ɍ肷D
CfBNgɊ܂܂pׂ͂ďƂDȂ킿CfB
Ngɂ́CpC "_" ݂̂gƂłD

GNUJpꍇɂ́Cconfig ̉ɃvZbT̂păvZb
Tˑ̃t@Cu߂̃fBNgivZbTˑfBNg
jCɂ̉ɃVXêpăVXeˑ̃t@Cu
߂̃fBNgiVXeˑfBNgj쐬D

GNUȊO̊Jpꍇɂ́Cconfig ̉ɃvZbT̂ƊJ
̂ "-" ŘÁiႦ΁C"sh3-hitachi"jŁCvZbTˑ
fBNg쐬Dɂ̉ɁCVXêpăVXe
ˑfBNg쐬D̃fBNgɂ́CGNUJp
̃fBNgɒuĂt@CƈقȂt@Ĉ݂uDt@C
uĂȂꍇɂ́CGNUJp̃fBNgQƂD
CMakefile.config ɊւẮCGNUJp̃fBNgQƂ
Ȃ߁CełĂpӂȂ΂ȂȂD

(3) VXe\z@̐ݒ

vZbTˑfBNgуVXeˑfBNg̉ɁC
ꂼCVXe\z@ݒ肷邽߂ Makefile.config t@Cp
ӂD̃t@ĆCMakefile CN[hD

vZbTˑуVXeˑ Makefile.config Œ`ׂ
ɂ́CJ̃R}hݒ肷́CRpCIvVݒ
́C̑̂̂Dł́C̑̕ϐƂ̒`̕@
ĐD

(3-1) TEXT_START_ADDRESS        eLXgZNV̐擪Ԓn
(3-2) DATA_START_ADDRESS        f[^ZNV̐擪Ԓn

eZNV̐擪Ԓn̎w肪Kvȏꍇɂ́C̕ϐɐ擪Ԓn
`D

(3-3) LDSCRIPT                  JXNvg̃t@C

p̃JXNvgpꍇɂ́C̕ϐɃJXNvg̃t@
C`Dt@ĆCconfig fBNg̑΃pXŎw
肷D

(4) J̃R}h̐ݒ

(4-1) TARGET            ^[Qbg

GNUJ configure ꍇɎw肷^[QbgŁCRpC
̃R}h̐擪ɕt^镶iŌ "-" ͕svjɒ`D
Ⴆ΁CTARGET  m68k-unknown-elf ɒ`ꂽꍇɂ́CRpC
 m68k-unknown-elf-gcc gD̕ϐ`Ȃꍇɂ́C
PȂ gcc gDGNUȊO̊Jpꍇɂ́C`Kv
ȂD

(4-2) CC                CRpChCo̖
(4-3) CXX               C++RpChCo̖
(4-4) AS                AZu̖
(4-5) LD                J̖
(4-6) AR                A[JCo̖
(4-7) NM                nmvO̖
(4-8) RANLIB            ranlibvO̖
(4-9) OBJCOPY           objcopyvO̖
(4-10) OBJDUMP          objdumpvO̖

GNUȊO̊JpꍇɁCꂼ̃R}ĥ̖ɒ`D
ΉR}hȂꍇCR}hp[^قȂꍇɂ́C
Makefile ̂̃R}hĂяoĂ镔ύXKvDGNU
Jł́C TARGET pĒ`̂ŁC`Kv͂
D

(5) RpCIvV̐ݒ

(5-1) CDEFS             }N`IvVi-Dj
(5-2) INCLUDES          CN[ht@C̃fBNgwIvVi-Ij
(5-3) COPTS             RpCɑ΂邻̑̃IvV
(5-4) LDFLAGS           Jɑ΂IvV
(5-5) LIBS              CuNŵ߂̃IvV

^[QbgɈˑāCׂẴ\[Xt@CɋʂRpCIvV
̒ǉKvȏꍇɂ́CIvV̎ޖɏɎϐɒ`D

VXeˑ Makefile.config ł̕ϐ`鎞́C":=" 
pāC܂ł̒`ɒǉ`ōsDႦ΁CvZbTˑ 
u-Wall -g -O2 -m68020-40vƂIvVǉꍇɂ́Cȉ
̋LqvZbTˑ Makefile.config Ɋ܂߂D

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

ɑ΂āCVXeˑ Makefile.config  Makefile ̍ŏŃC
N[h邽߁Ĉ悤Ȕz͕KvȂCύXɋ邽߂
lɈƂɂD

قƂǂ̏ꍇɁCvZbTˑ Makefile.config ɂ͈ȉ̋Lq
܂߂KvD

    GNUJpꍇ
        INCLUDES := -I$(SRCDIR)/config/$(CPU)

    ̑̊Jpꍇ
        INCLUDES := -I$(SRCDIR)/config/$(CPU)-$(TOOL) -I$(SRCDIR)/config/$(CPU)

܂CVXeˑ Makefile.config ɂ͈ȉ̋Lq܂߂Kv
D

    GNUJpꍇ
        INCLUDES := $(INCLUDES) -I$(SRCDIR)/config/$(CPU)/$(SYS)

    ̑̊Jpꍇ
        INCLUDES := $(INCLUDES) -I$(SRCDIR)/config/$(CPU)-$(TOOL)/$(SYS) \
                                -I$(SRCDIR)/config/$(CPU)/$(SYS)

܂CAZuꃌx̎ʖCCꃌx̎ʖ̐擪 "_" 
t̂ɂȂꍇɂ́Cꂩ Makefile.config  CDEFS  
-DLABEL_ASM ǉD

(5-6) STASK_DIR         VXeT[rX̃\[XuꂽfBNg
(5-7) STASK_ASMOBJS     AZuŋLqꂽVXeT[rX̃IuWFNg
(5-8) STASK_COBJS       CŋLqꂽVXeT[rX̃IuWFNg
(5-9) STASK_CFLAGS      VXeT[rXɑ΂RpCIvV
(5-10) STASK_LIBS       VXeT[rXɑ΂郉CuNw

VXeT[rXiVXeO^XNfoCXhCoȂǁj̃\[X
uꂽfBNgC\IuWFNgt@C̃XgC
RpCۂɓKpRpCIvVC̍\ɕKvȃ
CuNwsꍇɂ́CɎϐɒ`D

VXeˑ Makefile.config ł̕ϐ`鎞́CCDEFS 
ȂǂƓl̈KvłD

(5-11) KERNEL_DIR       J[l̃\[XuꂽfBNg
(5-12) KERNEL_ASMOBJS   AZuŋLqꂽJ[l̃IuWFNg
(5-13) KERNEL_COBJS     CŋLqꂽJ[l̃IuWFNg
(5-14) KERNEL_CFLAGS    J[lɑ΂RpCIvV

J[l̃\[XuꂽfBNgC\IuWFNgt@
C̃XgCRpCۂɓKpRpCIvV
w肷ꍇɂ́CɎϐɒ`D

VXeˑ Makefile.config ł̕ϐ`鎞́CCDEFS 
ȂǂƓl̈KvłD

قƂǂ̏ꍇɁCvZbTˑ Makefile.config ɂ͈ȉ̋Lq
܂߂KvD

    GNUJpꍇ
        KERNEL_DIR := $(KERNEL_DIR):$(SRCDIR)/config/$(CPU)
        KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) cpu_support.o
        KERNEL_COBJS := $(KERNEL_COBJS) cpu_config.o

    ̑̊Jpꍇ
        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

܂CVXeˑfBNg Makefile.config ɂ͈ȉ̋Lq
߂KvD

    GNUJpꍇ
        KERNEL_DIR := $(KERNEL_DIR):$(SRCDIR)/config/$(CPU)/$(SYS)
        KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) sys_support.o
        KERNEL_COBJS := $(KERNEL_COBJS) sys_config.o

    ̑̊Jpꍇ
        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) ItZbgt@C̐

AZuŋLqvOCC̍\̂ɃANZX
ꍇɂ́C\̂̊etB[h̃ItZbgQƂ邱ƂKvłD 
JSPJ[lł́CKvȃItZbglt@CiWł offset.hjɏo
͂邽߂̎dg݂ƂāCmakeoffset.c  genoffset pӂĂD
makeoffset.c ́Cǂ̃ItZbglt@Cɏo͂邩w肷
ŁC^[QbgˑŗpӂKvDgenoffset ́C_łGNU
Jɂ̂ݑΉĂD

makeoffset.c  genoffset gƂŁCႦ΁CTCB  texptn tB[
h̃ItZbgl TCB_texptn Ƀ}N`邱ƂCTCB ̃^XN
ReLXgubNitskctxbjɊ܂܂ pc tB[h̃ItZbgl
 TCB_pc Ƀ}N`邱ƂłD܂CTCB  enatex tB[
h̃ItZbglCrbgʒuCrbg}XNCꂼ TCB_enatexC
TCB_enatex_bitCTCB_enatex_mask Ƀ}N`邱ƂłD}N
`rbgʒurbg}XŃCANZXTCYGfBAw
肷邱ƂłD

GNUJȊOpꍇȂǁC̎dg݂ŃItZbgt@C𐶐
łȂɂ́Coffset.h ^[QbgˑŗpӂCMakefile.config 
 OMIT_MAKEOFFSET kXgOȊOɒ`D

makeoffset.c  genoffset Ɋւ}jÁC_ł͗pӂłĂ
ȂDg킩ȂꍇC@\Ȃꍇɂ́CkꂽD

(7) X^[gAbvW[Ȃ

^[QbgɂẮC[hW[̐擪ƍŌɃNׂvO
C^[QbgˑŗpӂKvD̏ꍇCX^[gAb
vW[[hW[̐擪ɃNKvD

[hW[̐擪ɃNׂvOꍇɂ́C
Makefile.config ɂāC̃IuWFNgt@C START_OBJS ɒ
`Cɑ΂RpC[ƈˑ֌W쐬[`Ȃ
ȂȂD[hW[̍ŌɃNׂvOꍇɂ́C
̃IuWFNgt@C END_OBJS ɒ`Cɑ΂RpC
[ƈˑ֌W쐬[`Ȃ΂ȂȂD

Ⴆ΁CX^[gAbvW[̃\[Xt@C start.S ̏ꍇɂ́C
Makefile.config Ɏ̂悤ȋLqƂ悢D

        # X^[gAbvW[̃IuWFNgt@C
        START_OBJS = start.o

        # X^[gAbvW[̃RpC[
        $(START_OBJS): %.o: %.S
                $(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<

        # X^[gAbvW[̈ˑ֌W쐬[
        $(START_OBJS:.o=.d): %.d: %.S
                @$(PERL) $(SRCDIR)/utils/makedep -C $(CC) \
                        -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend

܂CRpCɕW crtbegin.o  crtend.o pꍇɂ́C
Makefile.config Ɏ̂悤ȋLqƂ悢D

        # IuWFNgt@C
        START_OBJS = $(shell $(CC) -print-file-name=crtbegin.o)
        END_OBJS = $(shell $(CC) -print-file-name=crtend.o)

        # ˑ֌W쐬[
        $(START_OBJS:.o=.d): %.d:
        $(END_OBJS:.o=.d): %.d:

̏ꍇC̃t@CRpC邱Ƃ͂Ȃ߁CRpC[
͕svłD܂Cˑ֌W쐬[̓_~[ł悢iˑ֌W쐬[
ȂƃG[ɂȂjD

ȂCJ[lp̃X^[gAbvW[́Cmain ֐ł͂ȂC
kernel_start ֐NKvD

(8) JXNvg

JɕW̃JXNvggpłȂꍇɂ́C^[Qbgˑ
ŗpӂD


QDAvP[Vp̃CN[ht@C

^[QbgˑŒ񋟂ׂAvP[Vp̒`͎̒ʂłD
̒`̒ŁC(1)  (2)  tool_defs.h Ɋ܂߂Ȃ΂Ȃ
D̑̒`́Ccpu_defs.h ܂ sys_defs.hi܂͂炩C
N[ht@CjɊ܂߂D

(1) RpCˑ̃f[^^̒`

RpCˑ̃f[^^ȉ̃V{ɒ`D̒`́C
typedef ł͂ȂC#define ɂ}N`Ȃ΂ȂȂD

(1-1) _int8_            8rbg̐^
(1-2) _int16_           16rbg̐^
(1-3) _int32_           32rbg̐^
(1-4) _int64_           64rbg̐^

eTCY̐^C̃V{Ƀ}N`D_int32_ ȊÓC
RpCT|[gĂȂꍇɂ͒`KvȂD_int32_ ̒
`͕K{łD

(1-5) _bool_            BOOĽ^

BOOL ́CWł int Ɍ^`邪Cŕssȏꍇɂ́CK؂
^ _bool_ Ƀ}N`D

(1-6) _vp_int_          VP_INŤ^

VP_INT ́CWł VP Ɍ^`邪CŕssȏꍇiႦ΁C
|C^16rbgŁCint 32rbg̏ꍇjɂ́CK؂Ȍ^ _vp_int_ 
Ƀ}N`D

(1-7) _intptr_          |C^i[ł鐮^

_intptr_ ́CtH[}bgo͂ɂāCint^|C^^i[ł鐮
^ƂĎgpD`ȂꍇClong gD

(2) RpC̊g@\̂߂̃}N`

(2-1) inline            CCw
(2-2) Inline            t@Ĉ݂ɗLȃCCw
(2-3) asm               CCAZuiœKj
(2-4) Asm               CCAZuiœK}~j

̒ŁCasm  Asm ́C^[QbgˑŗpĂȂΒ`
KvȂD

(3) ^CeBbN̒`

(3-1) TIC_NUME          ^CeBbN̎̕qiP: 1~bj
(3-2) TIC_DENO          ^CeBbN̎̕iP: 1~bj

(4) ݃nh^CPUOnh֘A̒`

(4-1) INHNO             ݃nhԍ̃f[^^
(4-2) EXCNO             CPUOnhԍ̃f[^^

(5) ݃}XNƊ݃}XN̕ύX^QƊ֘A̒`iIvVj

chg_ixxCget_ixx ^[QbgˑɃT|[gꍇɂ́Cȉ̒`
ѐ錾^[QbgˑŒ񋟂DxxCxxxxCXXXX ́C^[Qbg
ɓK؂ȕɒ߂Dxxxx  XXXX ́C4łȂĂ悢D

(5-1) IXXXX                             ݃}XÑf[^^
(5-2) ER chg_ixx(IXXXX ixxxx)           chg_ixx ̃vg^Cv錾
(5-3) ER get_ixx(IXXXX *p_ixxxx)        get_ixx ̃vg^Cv錾

(6) ݔԍƊ݂̋֎~^֘A̒`iIvVj

dis_intCena_int ^[QbgˑɃT|[gꍇɂ́Cȉ̒`
ѐ錾^[QbgˑŒ񋟂D

(6-1) INTNO                             ݔԍ̃f[^^
(6-2) ER dis_int(INTNO intno)           dis_int ̃vg^Cv錾
(6-3) ER ena_int(INTNO intno)           ena_int ̃vg^Cv錾

(7) \]pVXe֘A̒`iIvVj

JSPJ[ĺCւ̗pړÏƂĂ邱ƂC^[Qb
gˑɁC\]p̃T[rXR[ vxget_tim T|[g\ƂĂ
Dvxget_tim T|[gꍇɂ́Cȉ̒`ѐ錾^[Qbg
ˑŒ񋟂D

(7-1) SYSUTIM                           \]pVXẽf[^^
(7-2) ER vxget_tim(SYSUTIM *p_sysutim)  vxget_tim ̃vg^Cv錾

(8) ^[Qbgʃ}N̒`

cpu_defs.h ł̓vZbT́icpu_defs.h ̒uĂfBNg
啶ɂ́jCsys_defs.h ł̓VXéisys_defs.h ̒u
ĂfBNg啶ɂ́j}N`D

(9) vZbT̃GfBA̒`

(9-1) SIL_ENDIAN

vZbTrbOGfBȀꍇɂ SIL_ENDIAN_BIGi1jCg
GfBȀꍇɂ SIL_ENDIAN_LITTLEi0jɃ}N`D

(10) VXe̒~̒`

(10-1) kernel_abort(void)

assert}NɂAT[V̎sCT[rXR[vIȃG[
ԂꍇɁCVXe~֐܂̓}NDkernel_exit 
яo@l邪CfobOeՂɂ邽߂ɂ́CCC֐
}NŒ`C̏ŃVXe~鏈ɒ`̂]܂
ikernel_exit ĂяoƁCG[_̏ԂωĂ
܂jD


RDJ[lp̃f[^^֐Ȃ

^[QbgˑŒ񋟂ׂJ[lp̃f[^^֐Ȃǂ͎̒ʂ
D̃f[^^}N̒`Ɗ֐̃vg^Cv錾́CʂɋL
qȂCcpu_config.h ܂ sys_config.hi܂͂炩CN
[ht@CjɊ܂߂D܂C֐̎̂́CC̏ꍇ 
cpu_config.c ܂ sys_config.c ɁCAZȕꍇ 
cpu_support.S ܂ sys_support.S ɋLqD

(0) CN[h@Ɋւ郋[

wb_t@CCN[hLq́Cȉ̃[ɏ]̂Ƃ
D

ANSI C̕WCN[ht@ĆC#include <c> ŃCN[hD
܂CMakefile ܂ Makefile.config  INCLUDES  -IIvVŎw
肵fBNgɂt@ĆC#include <c> ŃCN[hD
J[l\t@C̃CN[hɑ΂ẮCȉ̃fBN
gɂt@CɊYi^[QbgɂˑjD
        jsp/include/
        jsp/config/$(CPU)
        jsp/config/$(CPU)/$(SYS)
        jsp/config/$(CPU)-$(TOOL)
        jsp/config/$(CPU)-$(TOOL)/$(SYS)
        pdic/simple_sio

̑̃CN[ht@C #include "c" ŃCN[hDJ[
l\t@C̃CN[hɑ΂ẮCȉ̃fBNg
ɂt@CɊYi^[QbgɂˑjD
        jsp/kernel
        jsp/systask

(1) ^XNReLXgubÑf[^^

(1-1) CTXB

^[Qbgˑ̃^XNReLXgۑ邽߂ɁCTCB ɎƂ
Kvȃf[^\̌^D

(2) VXeԎQ

(2-1) BOOL sense_context(void)

݂̎sReLXgC^XNReLXg̏ꍇ FALSEC^XNR
eLXg̏ꍇ TRUE Ԃ֐D

(2-2) BOOL sense_lock(void)

݂̃VXeԂCCPUbNԂ̏ꍇ TRUECCPUbNԂ
 FALSE Ԃ֐D

(2-3) BOOL t_sense_lock(void)

^XNReLXgɂāC݂̃VXeԂCCPUbNԂ̏ꍇ
 TRUECCPUbNԂ̎ FALSE Ԃ֐D̊֐C^X
NReLXgĂ΂邱Ƃ͂ȂD

(2-4) BOOL i_sense_lock(void)

^XNReLXgɂāC݂̃VXeԂCCPUbNԂ̏
 TRUECCPUbNԂ̎ FALSE Ԃ֐D̊֐C^X
NReLXgĂ΂邱Ƃ͂ȂD

 Iɂ́Csense_lock 񋟂Ă t_sense_lock  
i_sense_lock ͕KvȂCt t_sense_lock  i_sense_lock 񋟂
Ă sense_lock 邱Ƃ͂ł邪C^[QbgɈˑɍ
s邽߂ɁC^[Qbgˑ3̊֐񋟂邱
ƂĂD

(3) CPUbNƂ̉

(3-1) void t_lock_cpu(void)

^XNReLXgɂāCCPUbNԂCCPUbNԂɑJ
֐D̊֐CCPUbNԂŌĂ΂邱Ƃ͂ȂD܂C^
XNReLXgĂ΂邱ƂȂD

(3-2) void t_unlock_cpu(void)

^XNReLXgɂāCCPUbNԂCCPUbNԂɑJ
֐D̊֐CCPUbNԂŌĂ΂邱Ƃ͂ȂD܂C
^XNReLXgĂ΂邱ƂȂD

(3-3) void i_lock_cpu(void)

^XNReLXgɂāCCPUbNԂCCPUbNԂɑJ
ڂ֐D̊֐CCPUbNԂŌĂ΂邱Ƃ͂ȂD܂C^
XNReLXgĂ΂邱ƂȂD

(3-4) void i_unlock_cpu(void)

^XNReLXgɂāCCPUbNԂCCPUbNԂɑJ
ڂ֐D̊֐CCPUbNԂŌĂ΂邱Ƃ͂ȂD܂C
^XNReLXgĂ΂邱ƂȂD

(4) ^XNfBXpb`

(4-1) void dispatch(void)

^XNfBXpb`iȉCPɃfBXpb`ƌj𖾎IɌĂԂ
߂̊֐D^XNReLXgĂ΂ꂽT[rXR[CCPUb
NԂŌĂ΂D

̊֐Ă΂ƁC֐Ă񂾃^XÑReLXgۑC s
ł^XN̒ōōD揇ʂ̃^XNischedtskj̃ReLXg𕜋A
ĎsԂƂDsł^XNȂꍇischedtsk  NULL ̏
jɂ́C݂āCsł^XNł܂ő҂DŁC
sł^XNł̂҂ԂɋNꂽ݃nh̏oŁC
fBXpb`Ă΂Ȃ悤ɑ΍􂷂邱ƂKvłD̓Iɂ́C
sł^XNł̂҂ԁCꎞIɔ^XNReLXgɐ؂
邩CfBXpb`ۗ悤ɂD

VɎsԂɂȂ^XNC^XNO[`̋N𖞂
Ă΁C^XNO[`ND܂C̊֐Ăяo
^XNɎsԂɂȂC^XNO[`̋N
Ă΁C^XNO[`̋NsD^XNO[`
̋Nɂ́C^[Qbgˑ񋟂 calltex ܂ call_texrtn 
p邱ƂłD

(4-2) void exit_and_dispatch(void)

ݎs̃ReLXĝāCfBXpb`Ăяo߂̊֐D^
XNReLXgĂ΂ꂽT[rXR[i̓Iɂ́Cext_tskj
܂̓J[l̏CCPUbNԂŌĂ΂D

̊֐Ă΂ƁC֐Ă񂾃^XÑReLXgۑCs
ł^XN̒ōōD揇ʂ̃^XNischedtskj̃ReLXg𕜋A
ĎsԂƂDsł^XNȂꍇischedtsk  NULL ̏
j̏́Cdispatch ƓlłD

VɎsԂɂȂ^XNC^XNO[`̋N𖞂
Ă΁C^XNO[`ND

̊֐́CJ[l̏Ă΂邽߂ɁC^XNReL
XgĂ΂Ăł邱ƂKvłDȂC̊֐
̓^[ȂD

(5) ݃nh^CPUOnh̏o

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

INTHDR_ENTRY(inthdr) ͋NԒn inthdr ̊݃nhĂяoo
[`𐶐}NCINT_ENTRY(inthdr) ͐o
[`̐擪̃x𓾂邽߂̃}NłDINT_ENTRY(inthdr) 
郉x́C݃nhubNɏo[`̐
Ԓno^邽߂ɎgDo[`𐶐KvȂ
ꍇɂ́CINTHDR_ENTRY(inthdr) P extern 錾ɓWJ΂悢D

݃nh̏óCsReLXg^XNReLXg
؂芷CXNb`WX^ۑāC݃nhĂяoD
݃nh߂ƁC̎sReLXgɖ߂ƂƂɁCKvɉ
fBXpb`ƃ^XNO[`̋NsDfBXpb`ƃ^
XNO[`̋ŃC̓Iɂ͎̂悤ɍsD

(a) ȉ̏́C݃nh^XNReLXgsɋNꂽ
ꍇŁCreqflg  TRUE ̎̂ݍsD

(b) enadsp  TRUE ŁCsԂ̃^XNiruntskjƎsł^XN
ōōD揇ʂ̃^XNischedtskjvĂȂꍇɂ́CO҂̃^
XÑReLXgۑC҂̃^XÑReLXg𕜋AĎs
ԂƂDsł^XNȂꍇischedtsk  NULL ̏ꍇjɂ́C
݂āCsł^XNł܂ő҂DłCsł
^XNł̂҂ԂɋNꂽ݃nh̏oŁC^XNfB
Xpb`Ă΂Ȃ悤ɂ邱ƂKvł邪Co^X
NReLXgŎsĂ΁Cɑ΍􂷂Kv͂ȂD

(c) sԂ̃^XNi(b) Ń^XNfBXpb`sꍇ́CVɎ
sԂƂȂ^XNj^XNO[`̋N𖞂Ă
΁C^XNO[`ND܂C(b) Ń^XNfBXpb`
sꍇ́C܂ŎsԂł^XNɎsԂɂȂC
^XNO[`̋N𖞂Ă΁C^XNO[`
̋NsD^XNO[`̋Nɂ́C^[Qbgˑ
񋟂 calltex ܂ call_texrtn p邱ƂłD

̃}NŐ郋[`ł́CL̏̈ꕔ݂̂sCc̏
͕ʂɗpӂ[`ɔCĂ悢D̓Iɂ́C^XNfBXpb`
ƃ^XNO[`̋ŃCʂɃ[`Ƃėpӂ̂K
ł낤D

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

EXCHDR_ENTRY(exchdr) ͋NԒn exchdr CPUOnhĂяoo
[`𐶐}NCEXC_ENTRY(exchdr) ͐o
[`̐擪̃x𓾂邽߂̃}NłDEXC_ENTRY(exchdr) 
郉x́CCPUOnhubNɏo[`
擪Ԓno^邽߂ɎgDo[`𐶐Kv
ꍇɂ́CEXCHDR_ENTRY(exchdr) P extern 錾ɓWJ΂悢D

CPUOnh̏óCsReLXg^XNReLXg
ɐ؂芷CXNb`WX^ۑāCCPUOnhĂяoD
CPUOnhɂ́CVP^̃p[^ p_excinf nD̃p[^
́CCPUOɊւۑX^bN̈ւ̃|C^ł邱Ƃ
z肵Ă邪C̓Iɂ̓^[Qbgɒ߂D

CPUOnh߂ƁC̎sReLXgɖ߂ƂƂɁCKv
ă^XNfBXpb`ƃ^XNO[`̋NsD^X
NfBXpb`ƃ^XNO[`̋ŃC݃nh̏o
̏ꍇƓlłiL (a)`(c)jD

(6) ^XNReLXgݒ菈icpu_context.hj

^[Qbgˑ̃^XNReLXgݒ肷邽߂ create_context  
activate_context 2̊֐pӂD2̊֐ĂяoƂŁC^
XÑReLXgi̓Iɂ́C^XNReLXgubN̓eƃ^X
ÑX^bN̈j^XNNłԂɐݒ肷D2̊֐͌Ă
^C~OقȂ邾ŖmȖS͂ȂCǂ̂悤ȏ͂ǂ
̊֐ōsȂ΂ȂȂƂ͂ȂD

̊֐̐錾у}N̒`́Ccpu_context.h Ɋ܂߂D́C
cpu_config.h 鎞_ł TCB `ĂȂ߂łD

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

^XNx~ԂɈڍs鎞ɌĂ΂D̓Iɂ́C^XN̐
iJSPJ[lł́CCRE_TSK Ń^XN𐶐邽߁C^XNǗW[
̏jƃ^XN̏Iiext_tskCter_tskjɌĂ΂D

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

^XNsłԂɈڍs鎞ɌĂ΂D̓Iɂ́Cact_tsk Ń^
XNN鎞C^XN̏Iiext_tskCter_tskjɋNṽL[
COɂċN鎞CTA_ACT w肵ă^XN𐶐i^
XNǗW[̏jɌĂ΂D

(6-3) ACTIVATED_STACK_SIZEiIvVj

ext_tsk X^bNɊmۂ_~[̈̃TCY`邽߂̃}ND
_~[̈悪KvȂꍇ́C̃}N`Kv͂ȂD

ext_tsk ́C^XNIC^XNɑ΂ create_context 
ĂԁD܂C^XN̋NvL[COĂꍇɂ́C^XN
ɑ΂ activate_context ĂԁDcreate_context  activate_context 
́CΏۃ^XÑX^bN̈ꍇ邪Cꂪ ext_tsk
iтĂ΂֐jgpĂX^bN̈ƏdȂꍇC
̎gpĂX^bN̈Ŕj󂷂錋ʂɂȂD

ACTIVATE_STACK_SIZE Ccreate_context  activate_context 
X^bN̈̃TCYiɂ́CX^bN̒ꂩ牽oCg߂܂ł
邩jɃ}N`ĂƁCext_tsk ŃX^bNɒ`TC
Ỹ_~[̈mۂC̎gpĂX^bN̈j󂷂̂h
D

ȂC邽߂ɁCnˑ̋@\ł alloca pĂD
gcc  alloca T|[gĂ邪C̃RpCpꍇɂ́C
alloca T|[gĂ邩mFKvłD܂Calloca pꍇ
ɃCN[ht@CKvȏꍇɂ́Ctool_config.h CN[h
KvD

(7) ^[Qbgˑ̏^I

(7-1) void cpu_initialize(void)

vZbTˑ̏DJ[l̏ŁCJ[l̊eW
[OɌĂ΂D

(7-2) void sys_initialize(void)

VXeˑ̏DJ[l̏ŁCcpu_initialize ɑ
ČĂ΂D

(7-3) void tool_initialize(void)

Jˑ̏DJ[l̏ŁCsys_initialize ɑ
ČĂ΂D

3̊֐́CJ[lNikernel_start ֐j̍ŏł̏
ĂяoD3̊֐Ăяo̎_ŁCCPUbNԂɂȂĂ
Ȃ΂ȂȂD

(7-4) void cpu_terminate(void);

vZbTˑ̏IDJ[l̏IŌĂ΂D

(7-5) sys_exit(void)

VXȅIDJ[l̏IŁCcpu_terminate ɑČĂ΂
D̊֐̓^[ȂDROMj^VXeł́CROMj
^ďoŎ邱Ƃz肵ĂD

(7-6) call_atexit(void)

Jˑ̏IDKvɉāCatexit ɂēo^ꂽ֐
s C++ ɂfXgN^̎ssD

(8) ݃nh^CPUOnh̒`

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

݃nhԍ inhno ̋NԒn inthdr ɐݒ肷D݊Ǘ@
\̏Ă΂D

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

CPUOnhԍ excno ̋NԒn exchdr ɐݒ肷DCPUOn
hǗ@\̏Ă΂D

(9) CPUO_̃VXeԂ̎Q

(9-1) BOOL exc_sense_context(VP p_excinf)

CPUOReLXgC^XNReLXg̏ꍇ FALSEC
^XNReLXg̏ꍇ TRUE Ԃ֐DCPUOnhĂ΂
T[rXR[Ă΂Dp_excinf ɂ́CCPUOnhւ̈
̂܂ܓnD

(9-2) BOOL exc_sense_lock(VP p_excinf)

CPUOReLXgCCPUbNԂ̏ꍇ TRUECCPUbN
Ԃ̎ FALSE Ԃ֐DCPUOnhĂ΂ꂽT[rXR
[Ă΂Dp_excinf ɂ́CCPUOnhւ̈̂܂
nD

(10) TCB ̃tB[h̃rbg̒`iIvVj

TCB ̃tB[h̔zu͐\ɑ傫eƎv邽߁C^[Qb
gˑɃtB[h̃rbgύXł悤ɂĂD̓Iɂ́C
2̃tB[h̃rbgύXłD̃}N`Ȃ
ꍇCŏrbgƂȂD

(10-1) TBIT_TCB_TSTAT           tstati^XNԁj̃rbg
(10-2) TBIT_TCB_PRIORITY        priorityiDxjtB[h̃rbg

32rbgvZbT̏ꍇɂ́C 8 ɒ`̂IłD

(11) rbg}bvT[`ɃrbgT[`߂g߂̒`iIvVj

vZbTrbgT[`߂ꍇCfBL[̃rbg}bvT[
`ɂ̖߂p悢D̏ꍇCȉ̊֐у}N
^[QbgˑŒ`D

(11-1) CPU_BITMAP_SEARCH

vZbT̃rbgT[`߂pꍇC̃}N`D̃}
N`邱ƂɂC^[Qbgˑ bitmap_search 
D

(11-2) UINT bitmap_search(UINT bitmap)

rbgT[`s֐Dbitmap  1 ̃rbg̓Cłʂ̂̂T
[`C̃rbgԍԂDrbgԍ́CŉʃrbgiLSBj 0 
Dbitmap ̉16rbgɁCK 1 ̃rbgiȂ킿Cbitmap 
 0 w肳邱Ƃ͂ȂjƂ肵Ă悢D

WCuɃrbgT[`߂p ffs ꍇCffs p 
bitmap_search ̂悤ɒ`΂悢D
        #define bitmap_search(bitmap)   (ffs(bitmap) - 1)

vZbT̎rbgT[`߂Cłʂ 1 ̃rbgT[`
̂łꍇɂ́C̃}N`āCrbg̊tύX邱
łD

(11-3) UINT PRIMAP_BIT(pri)

^XNDx̓\iōDx 0 ƂjCɑΉrb
g}bvɕϊDftHg̒`͎̒ʂD
        #define PRIMAP_BIT(pri)         (1 << (pri))

(12) ^[Qbgˑ̃T[rXR[iIvVj

ȉ̃T[rXR[^[QbgˑɃT|[gꍇɂ́C̏
[`^[QbgˑŒ`D

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

(13) \]pVXe֘A̒`iIvVj

(13-1) SUPPORT_VXGET_TIM

^[Qbgˑ vxget_timT[rXR[pꍇɁC̃}
N`D

(13-2) hw_timer.h

^[Qbgˑ̃^C}W[̃CN[ht@CD^[Qbg
 vxget_timT[rXR[pꍇC^[Qbgˑ̃^C}
W[KvɂȂD̂߂̃CN[ht@Cł 
hw_timer.h ́CVXeT[rX̃VXeNbNhCoŗp
ƋʂɂĂD

(14) J[l̓ʖ̃l[Ƃ̉icpu_rename.hC
     cpu_unrename.hCsys_rename.hCsys_unrename.hj

^[QbgˑŗpĂ鎯ʖiW[ɕʖj
CITRON4.0dlɏ] _kernel_ Ŏn܂̂Ƀl[Kv
D

̓Iɂ́CvZbTˑŗpĂ鎯ʎqXgAbvt@C
 cpu_rename.def ɁCVXeˑŗpĂ鎯ʎqXgAbv
t@C sys_rename.def ɍ쐬Dgenrename gāC̃t@
CCꂼ cpu_rename.h  cpu_unrename.hCsys_rename.h  
sys_unrename.h 𐶐Dxxx_rename.def  xxx_rename.h  
xxx_unrename.h 𐶐ɂ́Cu$(KERNEL_DIR)/utils/genrename xxxv
s΂悢D

܂Ccpu_config.h ̐擪 cpu_rename.h Csys_config.h ̐擪 
sys_rename.h CN[hD

genrename t@Ĉ͎悤ȓełDxxx_rename.def 
xxxx Ƃʎq܂܂ĂꍇCxxx_rename.h ɂ͎̂悤ȃ}N
`D

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

ŁCLABEL_ASM ́CAZuꃌx̎ʖCCꃌx̎
ʖ̐擪 "_" t̂ɂȂꍇɒ`ׂ}Nłi`
̕@ɂẮuVXe\z@̐ݒvQƁjD

܂Cxxx_unrename.h ɂ͎̂悤ȃ}N`D

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

(15) g[XÔ߂̃}N`itool_config.hj

J[l̃g[XO̎擾́CJˑŃg[XÔ߂̃}
N`邱ƂɂčsDg[XÔ߂̃}N͖150
C擾OɑΉ}N`Dg[XO擾
Ȃꍇɂ́C̃}Nɒ`΂悢D

(16) ̑

(16-1) TARGET_NAME

NbZ[W̃^[QbgD

(16-2) void sys_putc(char c)

^[QbgVXe̒჌x̕o̓[`DROMj^VXe
ł́CROMj^ĂяoŎ邱Ƃz肵ĂD

(16-3) OMIT_CALLTEXiIvVj

^[Qbgˑ calltex 񋟂KvȂꍇɁC̃}N
`Dڂ́Cu^XNO[`̋N֐Ƃ̒ŎQƂ
 TCB ̃tB[hv̐߂QƂ̂ƁD

(16-4) LABEL_ALIAS(new_label, defined_label)iIvVCtool_config.hj

new_label  defined_label ƓAhXɒ`邽߂̃}ND
悤ȃ}NłȂꍇɂ́C`ȗ邱ƂłD̃}
N`́Ctool_config.h ̒ōŝWƂD

(16-5) COPYRIGHT_CPUiIvVj
(16-6) COPYRIGHT_SYSiIvVj

J[lÑbZ[WɁCꂼvZbTˑуVXe
̒쌠\ǉ邽߂̃}ND

(16-7) __STK_UNITiIvVj
(16-8) __MPF_UNITiIvVj

Wł́CX^bN̈ƌŒ蒷v[̈́CVP^̃TCYɃAC
DC傫PʂŃACKvꍇɂ́C
__STK_UNIT  __MPF_UNIT CꂼACPʂ̃f[^^ɒ
`DC__STK_UNIT  __MPF_UNIT ̃TCÝC2̋ЏłȂ
΂ȂȂD

(16-9) __EMPTY_LABEL(x, y)iIvVCtool_config.hj

^ x ̃TCY 0 ̔z y `邽߂̃}NDTCY 0 ̔z`
łRpCiGNUJ͂ɊYjł͒`ȗ邱Ƃ
D̃}N`́Ctool_config.h ̒ōŝWƂD


SD^[Qbgˑp邱Ƃł^[Qbgˑ̕ϐE֐

(1) ^XNǗ֘A̕ϐ

(1-1) TCB *runtsk

sԂ̃^XNivZbTReLXgĂ^XNj TCB 
w|C^DsԂ̃^XNȂꍇ NULL ɂDT[rXR[
̏ŁC^XNiT[rXR[Ăяo^XNjɊւ
QƂꍇ runtsk gDJ[l̏ȊOŁC̕ϐ
̂́C^XNfBXpb`iȂ킿C^[Qbgˑĵ
łD

(1-2) TCB *schedtsk

sł^XN̒ōōD揇ʂ̃^XN TCB w|C^Ds
ł^XNȂꍇ NULL ƂȂDfBXpb`֎~ԂȂǁCfBX
pb`ۗĂԂ́Cruntsk ƈvĂƂ͌ȂD̕
̂̓XPW[݂̂ŁC^[Qbgˑ͂̕ϐ
Ă͂ȂȂD

(1-3) BOOL reqflg

݃nh^CPUOnh̏oɁC^XNfBXpb`܂
^XNO[`̋Nv邱ƂtOD̕ϐ̓T[
rXR[i^[QbgˑjŃZbgC݃nh^CPU
Onh̏oi^[QbgˑjŎQƁ^NAD

(1-4) BOOL enadsp

^XNfBXpb`ԂłiȂ킿C^XNfBXpb`֎~
łȂjƂtOD̕ϐ̓T[rXR[idis_dspCena_dspC
^[Qbgˑ chg_ixxj̒ŏD

܂C^XNfBXpb`i^[Qbgˑj̒ŁCsł^XN
ł̂҂ԂɋNꂽ݃nh̏oŃ^XNfBXpb`
Ă΂Ȃ悤ɂ邽߂ɁC̕ϐꎞI FALSE ɐݒ肷邱
łD

(2) ^XNO[`̋N֐Ƃ̒ŎQƂ TCB ̃tB[h

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

^XNO[`̋Ns֐Dcalltex ́CsԂ̃^XN
^XNO[`̋N𖞂Ă΁Ccall_texrtn Ăяo
Dcall_texrtn ́C^XNO[`̌ĂяosD^XNO
[`ĂяóCꎞICPUbND

̊֐́CfBXpb`⊄݃nh^CPUOnh̏o
CCPUbNԂŌĂ΂邱Ƃz肵ĂDcalltex Ăяo
̂łȒPł邪Csグ邽߂ɂ́CÑ`FbN
AZuŋLqCcall_texrtn Ăяo悢D`FbN
NɂẮC^[Qbgˑ calltex ̃\[XR[hQ
Ƃ邱ƁD܂̏ꍇɂ́COMIT_CALLTEX }N`邱ƂŁC^
[Qbgˑ calltex 菜D

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

call_texrtn Ăяo߂ɁCÑ`FbNAZuŋLq
ꍇɂ́CTCB ̂̃tB[hQƂKvD

(3) VXeO@\

ُ펖ۂʒm邽߂ɁCVXeO@\ւ̃Oo͊֐p邱
łDVXeO@\ɂẮC[UY}jAQƂ邱ƁD


TDVXeT[rXp̃f[^^֐Ȃ

5.1 VXeC^tF[XCiSILĵ߂̒`

^[QbgˑŒ񋟂ׂVXeC^tF[XCiSILĵ
̒`͎̒ʂłD̒`́Ccpu_defs.h܂sys_defs.hi
͂炩CN[ht@CjɊ܂߂D܂C֐̎̂
KvȏꍇCC̏ꍇcpu_config.c܂sys_config.cɁCAZu
̏ꍇcpu_support.S܂sys_support.SɋLqD

(1) ԑ҂֘A

(1-1) void sil_dly_nse(UINT dlytim)

dlytimŎw肳鎞ԁiP: 1imbj҂֐^[QbgˑŒ
D

@̓^[Qbgˑł邪Cȉ̊֐AZuŋLq
̂CvZbTˑɊ܂߂̂WIȕ@ƂDAZu
ŋLq̂́CRpC̍œKɈˑȂ悤ɂ邽߂łD
̊֐́Cł胁ANZXsȂ悤ɎׂłD

        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_TIM1iIvVj
(1-3) SIL_DLY_TIM2iIvVj

sil_dly_nseL̕WIȕ@ŎꍇC2̒萔VXe
ˑŃ}N`DȂC2̒萔̌vO
pӂĂD]́CkꂽD

(2) ݃bNԂ̐֘AiIvVj

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

^[QbgˑŊ݃bNԂ̐@ύXꍇɂ́C
̃}Nɂ̕@`D}N`Ȃꍇɂ́C ^[
QbgˑɂāCJ[lCPUbN̋@\pĊ݃bN
ԂD

(3) vZbT̃GfBA̒`

(3-1) SIL_ENDIAN

gGfBAvZbTłSIL_ENDIAN_LITTLEi0jCrbOGfB
AvZbTłSIL_ENDIAN_BIGi1jɃ}N`D

(4) GfBA̔]iIvVj

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

GfBA̔]悭@ꍇɂ́C̃}N
ɂ̕@`D̃}N`Ȃꍇɂ́CWIȕ@
ŃGfBA̔]sD

(5) GfBA]t̃ԃANZXiIvVj

GfBA𔽓]ăǏo^݂Iȕ@ꍇC
Y郁ԃANZX֐^[QbgˑŗpӂC^[Qbg
ˑ̕WIȒ`𖳌ɂ邽߂̃}N`D

(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

gGfBAvZbTł́C̃ԃANZX֐^[
QbgˑŗpӂCEɎ}N`D

(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

rbOGfBAvZbTł́C̃ԃANZX֐^[
QbgˑŗpӂCEɎ}N`D

(6) W̃ANZX֐̖iIvVj

(6-1) OMIT_SIL_ACCESS

V~[VȂǂŁCׂẴԃANZX֐^[Qbg
ˑŗpӂꍇɂ́C^[Qbgˑ̕WIȒ`𖳌ɂ
߂ɁC̃}N`D

5.2 VXeNbNhCop̃f[^^֐Ȃ

^[QbgˑŒ񋟂ׂVXeNbNhCop̃f[^^֐
Ȃǂ͎̒ʂłD̒`́Chw_timer.hi܂͂炩C
N[ht@CjɊ܂߂D֐̎̂Kvȏꍇɂ́CK؂ȃt@
CpӂD

(1) INHNO_TIMER

^C}݃nh̃xN^ԍ`}NC^[Qbgˑ
񋟂D

(2) ^C}̐

(2-1) void hw_timer_initialize(void)

^C}C^C}݂Iɔ֐C^[Qbg
Œ񋟂D^C}݂̎́CTIC_NUMETIC_DENOŎw肳ꂽ
ԂƈvD

(2-2) void hw_timer_int_clear(void)

^C}ݗvNA֐C^[QbgˑŒ񋟂D

(2-3) void hw_timer_terminate(void)

^C}̓~C^C}݂𔭐Ȃ悤ɂ֐C^[
QbgˑŒ񋟂D

(3) \]pVXeQƋ@\֘AiIvVj

^[Qbgˑvxget_timT[rXR[pꍇɁCȉ
f[^^֐Ȃǂ^[QbgˑŒ񋟂D

(3-1) CLOCK

^C}l̓\̂߂̃f[^^D

(3-2) CLOCK hw_timer_get_current(void)

^C}̌ݒlǂݏoC\ŕԂ֐D

(3-3) BOOL hw_timer_fetch_interrupt(void)

^C}ݗv`FbN֐D^C}݂vĂꍇ
TRUECvĂȂꍇFALSEԂD

(3-4) UINT TO_USEC(CLOCK clock)

^C}l̓\C1ʕbPʂɕϊ邽߂̃}Ni܂͊֐jD
hw_timer_get_currentœǂݏolC^C}ݔ̌oߎ
iP: 1ʕbjɕϊ邽߂ɗpD

(3-5) BOOL BEFORE_IREQ(CLOCK clock)

݂֎~ԂŁC܂hw_timer_get_currentĂяoC
hw_timer_fetch_interruptĂяoꍇlDhw_timer_get_current
ĂяoɃ^C}ɒBC^C}݂vƁC
hw_timer_get_current͎ɒB钼Õ^C}liCclockƂj
ԂChw_timer_fetch_interruptTRUEԂƂɂȂD̏󋵂ł
ݎ𓾂邽߂ɁCclocklȏ̏ꍇɂ́C
hw_timer_fetch_interruptTRUEԂĂCݔO̒lƂ݂Ȃ
ɂDBEFORE_IREQ́CclockݔO̒lƂ݂ȂׂꍇTRUEC
łȂꍇFALSEԂ}Ni܂͊֐jłD

5.3 VAC^tF[XhCop̃f[^^֐Ȃ

^[QbgˑŒ񋟂ׂVAC^tF[XhCop̃f[^^
֐Ȃǂ͎̒ʂłD̒`́CʂɋLqȂC
hw_serial.hi܂͂CN[ht@CjɊ܂߁CKv
RtBM[Vhw_serial.cfgɋLqD֐̎̂Kv
ȏꍇɂ́CK؂ȃt@CpӂD

VAC^tF[XhCo̒ŁC^[Qbg̃VAI/OfoCX
Ɉˑ镔CVAI/OfoCXhCoƌĂԁDVAI/OfoC
XhCóC悻CITRONfoCXhCo݌vKChCPDIC
DPDICɑt@CŁC̃VXeɂʂɎg\
ꍇɂ́Cpdic/simple_siofBNgɒuD

(1) TNUM_PORT

VAC^tF[XhCoT|[gVA|[g`
}ND̃}ŃCcpu_config.h܂sys_config.hi܂͂炩
CN[ht@CjŒ`D

(2) VAI/OfoCX̊݃nhƂ̓o^

VAI/OfoCX̊݃nh^[QbgˑŒ񋟂C
J[lɓo^ÓIAPIhw_serial.cfgɊ܂߂DVAI/OfoCX
̊nh̃xN^ԍ́Chw_serial.hi܂͂CN[h
t@CjŃ}N`Chw_serial.cfghw_serial.hCN
[h@WƂD

(3) void sio_initialize(void)

VAI/OfoCXhCo郋[`D̊֐́CVA
C^tF[XhCõ^[Qbgˑ̏[`Ăяo
D

(4) SIOPCB

VAI/O|[gǗubÑf[^^ihw_serial.hɂ́C^錾
܂Ă΂悢jD

(5) SIO_ERDY_SNDSIO_ERDY_RCV

M\R[obN̎ʔԍSIO_ERDY_SNDɁCMʒmR[obN
ʔԍSIO_ERDY_RCVɃ}N`DR[obN̋֎~^s
T[rXR[isio_ena_cbrsio_dis_cbrjŗpD

(6) foCXT[rX[`

ȉ̃foCXT[r[`́CiȂƂjVAI/O|[g
݂̊֎~ꂽԂŌĂяoD܂C^XNReLXgC^
XNReLXĝŌĂяoꍇiŌĂяo
삷悤ɂȂ΂ȂȂjD

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

siopidŎw肳VAI/O|[gI[v֐Dexinf̓VA
I/O|[gɑ΂gŁCR[obNĂԎɃ|[gʂ邽
߂ɓnD

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

siopcbŎw肳VAI/O|[gN[Y֐D

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

siopcbŎw肳VAI/O|[gɁCcŎ镶𑗐M֐D
𑗐MWX^ɓꂽꍇɂTRUECOɑM̑MI
ĂȂ߂ɁC𑗐MWX^ɓȂꍇɂFALSE
D

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

siopcbŎw肳VAI/O|[g當ǂފ֐DM
ꍇCǂ񂾕̃R[h͐̒lƂĕԂCMĂȂ
ɂ-1ԂD

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

siopcbŎw肳VAI/O|[ǵCcbrtnŎw肳R[ob
NDcbrtnɂ́CSIO_ERDY_SNDSIO_ERDY_RCVwłD

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

siopcbŎw肳VAI/O|[ǵCcbrtnŎw肳R[ob
N֎~Dcbrtnɂ́CSIO_ERDY_SNDSIO_ERDY_RCVwłD

(7) R[obN[`

^[Qbgˑ́CKvȃ^C~OŁCVAC^tF[XhCo
̃^[QbgˑɊ܂܂ȉ̃R[obN[`Ăяoт
Ȃ΂ȂȂDCꂼ̃R[obN֎~Ă鎞́C
R[obN[`ĂяoĂ͂ȂȂD

R[obN[`́CiȂƂjVAI/O|[g݂̊
֎~ꂽԂŁC^XNReLXgŌĂяoDexinfɂ́CVA
I/O|[g̃I[vɎw肳ꂽgnD

(7-1) void sio_ierdy_snd(VP_INT exinf)

M\R[obN[`DVAI/O|[gɑ΂ĕMł
ԂɂȂꍇɌĂяoDVAC^tF[XhCóC̃R
[obN[`̒ŁCsio_snd_chrĂяoĎ̕𑗐M邩C
MׂȂꍇɂ͑M\R[obN֎~D

(7-2) void sio_ierdy_rcv(VP_INT exinf)

MʒmR[obN[`DVAI/O|[g當Mꍇ
ɌĂяoDVAC^tF[XhCóC̃R[obN[`
̒ŁCKsio_rcv_chrĂяoĎMoD

5.4 VXeO^XNp̂߂̒`

^[QbgˑŒ񋟂ׂVXeO^XN̂߂̒`͎̒ʂ
D̒`́Ccpu_config.h܂sys_config.hi܂͂炩
CN[ht@CjɊ܂߂D

(1) LOGTASK_PORTID

VXeO^XNCVXeOo͂VA|[gID`
}N^[QbgˑŒ񋟂D

(2) VXeO^XN֘A̒`iIvVj

VXeO^XNɊւȉ̃}N^[QbgˑŒ񋟂D
̃}N^[QbgˑŒ`Ȃꍇɂ́CftHg̒lg
D

(2-1) LOGTASK_PRIORITY          VXeO^XN̏Dx
(2-2) LOGTASK_STACK_SIZE        VXeO^XÑX^bNTCY
(2-3) LOGTASK_INTERVAL          VXeO^XN̓ԊuiP: ~bj


UD^[Qbgˑ̃qg

(1) ^XNfBXpb`2ʂ̎j

^XNfBXpb`̎jƂāCReLXg̕ۑEAƃ^XN
O[`̋NÃ[`ōsjijAƌĂԁj
ƁCReLXg̕ۑEs^XN̑IEReLXg̕Aƃ^X
NO[`̋N΂΂̃[`ōsjijB
ĂԁjDjB́CۑReLXg󋵂ɉĕKvŏ
ɂ邱ƂeՂɂȂƂ_DCV~[V
̏ꍇC@ɂĂ͕jB̂Ȃ\lD

^XNO[`̋NӏƂϓ_݂ꍇC2̕jɂ
ӂׂႢDȉCɂD^XN1ƃ^XN22
^XNC^XN1̕Dx̂ƂDŏC^XN2s
Ɋ݃nhNC̒^XN1NꂽʁC^X
N2^XN1ɂăvGvgꂽ̂ƂDŁC^XN1^
XN2ɑ΂ă^XNO[`̋NvC҂Ԃɓ
T[rXR[𔭍sČʃ^XN2ɃfBXpb`󋵂l
D̎C^XNfBXpb`́C^XN2ɑ΂ă^XNO[
`̋NsKv邪CȀꍇɂ́C^XN1疾I
Ă΂ꂽfBXpb`̒Ń^XNO[`̋Nŝ
΂āCjB̏ꍇɂ́C^XN2̃ReLXg𕜋A郋[`֕
CReLXg𕜋A鏈ɑƂă^XNO[`
̋NsD

JSPJ[lł́CjÂ邩jB̂邩^[QbgˑɔC
ƂƂD̂߂ɁC^XNO[`̋N^XNfBXpb
`Ɋ܂߂dlƂĂD

(2) ݃nh̏o

݃nh̏o̓éCvZbT̊݃A[LeN`
傫قȂ邪C悻̗͎̏̒ʂłDCPUOn
h̏oCnƂẮC悻̗͓̏
lłDCvZbT݂CPUOňقȂ鈵ꍇ́C
ۂ̏o͂ȂقȂ̂ƂȂD

        ------------------------------------------------------------
        WX^̕ۑiɃXNb`WX^j
        ݃X^bN֐؊iłÕnĥ݁j

        o^ꂽ݃nȟďo

        ^XNX^bN֐؊iłÕnĥ݁j
        if (łÕnh && reqflg) {
                if (enadsp && runtsk != schedtsk) {
                        ^XNfBXpb`
                        ^XNO[`̋Nicalltexj
                }
                else  {
                        ^XNO[`̋Nicalltexj
                }
        }
        WX^̕AiɃXNb`WX^j
        ݏ̃^[

        unhv́C݃nhCPUOnh̑́D
        ułÕnhv́u߂悪^XNvƌ邱Ƃ
           łD
        ------------------------------------------------------------

̒ŁCif̏ꍇł^XNO[`̋N
sKv邱ƂiC^XNO[`̋Ns
ۃ^XN͈قȂjCif͎̂悤ɍœKłꍇD

        ------------------------------------------------------------
                if (enadsp && runtsk != schedtsk) {
                        ^XNfBXpb`
                }
                ^XNO[`̋Nicalltexj
        ------------------------------------------------------------


VDM68Ki68LC040jp̃^[Qbgˑ

(1) O

ׂẴ^XNX[p[oCU[hŎs邱ƂƂC[U[h
pȂD

(2) sReLXgCPUbN

^XNReLXg̓}X^[hC^XNReLXg͊݃[h
sDsense_context ́CSR ̃}X^^݃[hrbgQƂ
@ŎD

IPM  7 ̎iNMI ׂĂ݂̊֎~j̎ɌC 
CPUbNԂł̂ƂDsense_lock ́CSR  IPM QƂ
@ŎDNMI ̓J[l̊ǗO݂̊Ȃ̂ŁCCPUbNԂ 
NMI 󂯕t͍̂xȂD

chg_ipm T|[g邩ǂCSUPPORT_CHG_IPM `邩ǂ
ύXłD^XNReLXg IPM ύXꍇɂ́Cchg_ipm g
Ȃ΂ȂȂDchg_ipm T|[gȂꍇɂ́C^XNReLX
g IPM ύX邱Ƃ͂łȂD܂C^XNReLXgł́CIPM 
͏ 0 ɂȂĂD

chg_ipm T|[gꍇłCchg_ipm g IPM  7 ɕύX邱
Ƃ͋ȂD́Cchg_ipm  loc_cpu^unl_cpu ̊֌WGɂȂ邽
߂łD܂CIPM  1`6 ̎ɂC^XNfBXpb`͕ۗȂD 
IPM ́C^XNfBXpb`ɂāCVsԂɂȂ^XNֈ
pD̂߁C^XNsɁCʂ̃^XNɂ IPM ύX
ꍇD́CfBXpb`jBŎꍇɂ͑f
ł邪CjAŎꍇɂ͂ IPM ̐ݒ菈D
jAŎꍇɂ́CIPM  1`6 ̎ɂ^XNfBXpb`͕ۗ
ƂyłD

(3) ݃nho

M68KiM68020ȏjł́C݃nh̋NɂāCgpX^bN
IɊ݃X^bN֐؂芷邽߁C݃X^bNւ̐؊
͕KvȂDłÕnhł邩ǂ́CX^bNɐς܂ꂽ 
SR ̃}X^^݃[hrbgQƂĔ肵ĂD^XNfBX
pb`ƃ^XNO[`̋ŃCret_int [`ɔCĂ
D

reqflg `FbNOɊ݂֎~̂́C݂֎~ȂƁC 
reqflg `FbNɋNꂽ݃nhŃfBXpb`v
ꂽꍇɁCfBXpb`sȂ߂łD

interrupt_entry:
        movem.l %d0-%d1/%a0-%a1, -(%sp) /* XNb`WX^ۑ */
        jsr <݃nh>            /* ݃nhĂяo */
        movem.l (%sp)+, %d0-%d1/%a0-%a1 /* XNb`WX^𕜋A */
        btst.b #4, (%sp)                /* ߂悪݃[hȂ */
        jbeq 1f                         /*           Ƀ^[ */
        ori.w #0x0700, %sr              /* ݋֎~ */
        tst.l reqflg                    /* reqflg  TRUE ł */
        jbne ret_int                    /*              ret_int  */
1:      rte

(4) CPUOnho

M68Kł́CCPUOnh̋NɂĊ݃[hւ̈ڍs͂炸C
gpX^bN͐؂芷ȂD̂߁CCPUOnhŊ
[hɐ؂芷ĂD܂CłÕnhł邩ǂ𔻒肷
邽߂ɁC݃[hɐ؂芷O SR X^bNɕۑD^X
NfBXpb`ƃ^XNO[`̋ŃCret_exc [`
CĂD

CPUOnhւ̈́COX^bNt[̐擪ԒniȂ킿C 
CPUOnh̏oĂ΂ꂽ̃X^bN|C^jƂĂ
D

reqflg `FbNOɊ݂֎~̂́C݂֎~ȂƁC 
reqflg `FbNɋNꂽ݃nhŃfBXpb`v
ꂽꍇɁCfBXpb`sȂ߂łD

exception_entry:
        movem.l %d0-%d1/%a0-%a1, -(%sp) /* XNb`WX^ۑ */
        lea.l 16(%sp), %a0              /* Ot[̐擪 A0  */
        move.w %sr, %d0                 /* SR  D0  */
        and.w #~0x1000, %sr             /* ݃[h */
        move.l %d0, -(%sp)              /*  SR X^bNɕۑ */
        move.l %a0, -(%sp)              /* A0 Ƃēn */
        jsr <CPUOnh>           /* CPUOnhĂяo */
        addq.l #4, %sp                  /* ̂Ă */
        move.l (%sp)+, %d0
        and.w #0x1000, %d0              /* ݃[hȂ */
        jbeq 1f                         /*       Ƀ^[ */
        or.w #0x1700, %sr               /* }X^[hE݋֎~ */
        tst.l reqflg                    /* reqflg  TRUE ł */
        jbne ret_exc                    /*              ret_exc  */
1:      movem.l (%sp)+, %d0-%d1/%a0-%a1 /* XNb`WX^𕜋A */
        rte

(5) jÃfBXpb`

ȉ̃R[hł́Cchg_ipm ̓T|[gĂȂD܂C̗pȂR
[gł邽߁CeXgĂȂD

CTXB ́uVP mspv݂̂܂ލ\̂ƂD^XÑReLXǵC
}̂悤Ƀ^XÑX^bNɕۑDXNb`WX^iD0`D1CA0
`A1jƂ̑̃WX^ʁXɐςނ̂́C^XNO[`̋N
ɓs悢߂łD

 *    +-----------------------------------+  TCB ɕۑĂ MSP
 *    |                D2                 |
 *      +-----------------------------------+
 *                  . . . . . .
 *      +-----------------------------------+
 *      |                D7                 |
 *      +-----------------------------------+
 *      |                A2                 |
 *      +-----------------------------------+
 *                  . . . . . .
 *      +-----------------------------------+
 *      |                A6                 |
 *      +-----------------------------------+
 *      |                D0                 |
 *      +-----------------------------------+
 *      |                D1                 |
 *      +-----------------------------------+
 *      |                A0                 |
 *      +-----------------------------------+
 *      |                A1                 |
 *      +-----------------+-----------------+
 *      |        SR       |   PC (16bit)  |
 *      +-----------------+-----------------+
 *    |   PC (16bit)  |    O     |
 *    +-----------------+-----------------+  fBXpb`NO MSP

dispatch ́Ctrap_dispatch  TRAP߂ŌĂԊ֐ƂD

exit_and_dispatch:
        or.w #0x1000, %sr               /* }X^[h */
        jbra dispatch_1

trap_dispatch:
        movem.l %d0-%d1/%a0-%a1, -(%sp) /* XNb`WX^ۑ */
        movem.l %d2-%d7/%a2-%a6, -(%sp) /* c̃WX^ۑ */
        move.l runtsk, %a0              /* ReLXgۑ */
        move.l %sp, TCB_msp(%a0)
dispatch_1:
        move.l schedtsk, %a0
        move.l %a0, runtsk              /* schedtsk  runtsk  */
        jbeq dispatch_3                 /* schedtsk 邩H */
        move.l TCB_msp(%a0), %sp        /* ReLXg𕜋A */
        movem.l (%sp)+, %d2-%d7/%a2-%a6 /* WX^𕜋A */
        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                 /* ^XNO[`̌ďo */
dispatch_2:
        movem.l (%sp)+, %d0-%d1/%a0-%a1 /* XNb`WX^𕜋A */
        rte

dispatch_3:
        stop #0x2000                    /* ݑ҂i݃[hj */
        /*
         *  Ŋ݃[hɐ؂芷̂́CŔ銄ݏ
         *  ɂǂ̃X^bNgƂ̉ƁC݃nh
         *  ̃^XNfBXpb`̖h~Ƃ2̈ӖD
         */
        or.w #0x1700, %sr               /* }X^[hE݋֎~ */
        tst.l reqflg                    /* reqflg  FALSE Ȃ */
        jbeq dispatch_3                 /*        dispatch_3  */
        clr.l reqflg                    /* reqflg NA */
        jbra dispatch_1

ret_int:
        /*
         *  ł́C݃[hE݋֎~ԁD
         */
        move.l %a1, -(%sp)              /* A1 ݃X^bNɕۑ */
        movec.l %msp, %a1               /* ^XNX^bN A1  */
        move.l (%sp)+, -(%a1)           /* A1 ^XNX^bNɐς */
        movem.l %d0-%d1/%a0, -(%a1)     /* XNb`WX^ς */
        clr.l reqflg                    /* reqflg NA */
        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  */

        /* fBXpb` */
        movem.l %d2-%d7/%a2-%a6, -(%a1) /* WX^ۑ */
        move.l %a1, TCB_msp(%a0)        /* ^XNX^bNۑ */
ret_int_1:
        move.l schedtsk, %a0
        move.l %a0, runtsk              /* schedtsk  runtsk  */
        jbne ret_int_2                  /* schedtsk 邩H */
ret_int_1x:
        stop #0x2000                    /* ݑ҂i݃nhj */
        or.w #0x0700, %sr               /* ݋֎~ */
        tst.l reqflg                    /* reqflg  FALSE Ȃ */
        jbeq ret_int_1x                 /*        ret_int_1x  */
        clr.l reqflg                    /* reqflg NA */
        jbra ret_int_1
ret_int_2:
        move.l TCB_msp(%a0), %a1        /* ^XNX^bN A1  */
        movem.l (%a1)+, %d2-%d7/%a2-%a6 /* WX^𕜋A */

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     /* XNb`WX^𕜋A */
        move.l (%a1)+, -(%sp)           /* A1 ݃X^bNɕۑ */
        movec.l %a1, %msp               /* A1 ^XNX^bN */
        move.l (%sp)+, %a1              /* A1 ݃X^bN畜A */
        rte

ret_int_5:
        move.w 16(%a1), %d0             /* ߂ SR  D0  */
        move.l TCB_exinf(%a0), -(%a1)   /* exinf ^XNX^bN */
        move.l TCB_texptn(%a0), -(%a1)  /* texptn ^XNX^bN */
        move.l #ret_tex, -(%a1)         /* #ret_tex ^XNX^bN */
        clr.l TCB_enatex(%a0)           /* runtsk->enatex NA */
        clr.l TCB_texptn(%a0)           /* runtsk->texptn NA */
        move.w #O, -(%a1)        /* OX^bNt[ */
        move.l TCB_texrtn(%a0), -(%a1)
        move.w %d0, -(%a1)
        movec.l %a1, %msp               /* A1 ^XNX^bN */
        rte

^XNO[`ďõX^bN

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

ret_tex:
        addq.l #8, %sp                  /* GÂĂ */
        or.w #0x0700, %sr               /* ݋֎~ */
        jsr call_texrtn                 /* ^XNO[`̋N */
        movem.l (%sp)+, %d0-%d1/%a0-%a1 /* XNb`WX^𕜋A */
        rte

(6) jBi̗pj

\[XR[hQƁD


WD^[Qbgˑ̒ӓ_

ȉ́C^[QbgˑŃ~Xȓ_XgAbv
̂łD

(1) ^XNI

ext_tsk Ă΂Ƀ^XÑC֐烊^[ꍇCext_tsk 
яôƓ̏s悤ɂȂ΂ȂȂD^XNNɁC
C֐̃^[AhX ext_tsk ̔Ԓnɐݒ肵Ă@
D

(2) ^XNReLXgł̊݃}XN̕ύX

chg_iXX T|[gꍇC^XNؑւ̍ۂɁCchg_iXX ɂĐݒ肵
݃}XN̒li^XNReLXgɂ銄݃}XN̒ljV
^XNɈpƂ𐄏DɁC݂̏oŃ^XNؑւs
ӏ͒ӂKvłD̓Iɂ́CȑOɓ^XNĂ
݃}XNX^bNɐς܂ĂꍇɁĈ܂܏߂Ă
ȂȂD

(3) ^XNO̎sReLXg

^XNO[`̓^XNReLXgŎs邽߁C^XNO
[`sɂ̓X^bN|C^^XNX^bNwĂKv
iɊ݂̏oŒӂ邱Ɓj D

(4) CPUOnh

CPUOnhśC݃}XN̒lCPUOOƓɂȂ
悤ɂ邱ƁD

(5) sׂ^XNȂꍇ̏

sׂ^XNȂischedtsk  NULLjꍇɁCvZbT҂[
hiX[v[hjɈڍs鏈ƁC݂鏈Ƃ́Cs
ɍsȂKvDsɍsȂȂꍇC݂
Ɋ݂C̒Ń^XNs\ԂɂȂƁCsׂ^X
Nɂ炸vZbT҂[hɂȂĂ܂D

܂Csׂ^XNȂC݂Ċ݂҂Ԃ́Cruntsk 
 NULL ɐݒ肵Ȃ΂ȂȂD̂悤ɐݒ肵ȂƁC݃nh
 iget_tid Ăяoۂ̓삪dlɍvȂȂiITRON4.0 
dlł́CsԂ̃^XNȂꍇɁCiget_tid  TSK_NONE Ԃ
ƂɂȂĂCiget_tid ̃R[h́Cruntsk  NULL ̎ TSK_NONE 
Ԃ悤ɂȂĂjD

m68k ̎́iconfig/m68k/cpu_support.S jC

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

ƂȂĂCschedtsk  NULL ̎ɁCruntsk  NULL ɂĂC
ݑ҂ɓDȂC̏ĂƁCschedtsk  NULL 
̎ɂ́Cruntsk ɍXVȂD̂߁CsԂ̃^XNȂ
ꍇ iget_tid ĂԂƁCOɎsĂ^XNID ԂD
 
ȏ
