OSDN Git Service

import
authorryuz <ryuz>
Wed, 16 Aug 2006 16:27:04 +0000 (16:27 +0000)
committerryuz <ryuz>
Wed, 16 Aug 2006 16:27:04 +0000 (16:27 +0000)
355 files changed:
cfgrtr/build/bcc55/bmake.mak [new file with mode: 0755]
cfgrtr/build/gcc/gmake.mak [new file with mode: 0755]
cfgrtr/build/vc60/h4acfg.dsp [new file with mode: 0755]
cfgrtr/build/vc60/h4acfg.dsw [new file with mode: 0755]
cfgrtr/include/analyze.h [new file with mode: 0755]
cfgrtr/include/apidef.h [new file with mode: 0755]
cfgrtr/include/apiinc.h [new file with mode: 0755]
cfgrtr/include/attini.h [new file with mode: 0755]
cfgrtr/include/attisr.h [new file with mode: 0755]
cfgrtr/include/crealm.h [new file with mode: 0755]
cfgrtr/include/crecyc.h [new file with mode: 0755]
cfgrtr/include/credtq.h [new file with mode: 0755]
cfgrtr/include/creflg.h [new file with mode: 0755]
cfgrtr/include/crembf.h [new file with mode: 0755]
cfgrtr/include/crembx.h [new file with mode: 0755]
cfgrtr/include/crempf.h [new file with mode: 0755]
cfgrtr/include/cresem.h [new file with mode: 0755]
cfgrtr/include/cretsk.h [new file with mode: 0755]
cfgrtr/include/defercd.h [new file with mode: 0755]
cfgrtr/include/defexc.h [new file with mode: 0755]
cfgrtr/include/definh.h [new file with mode: 0755]
cfgrtr/include/deftex.h [new file with mode: 0755]
cfgrtr/include/idlstk.h [new file with mode: 0755]
cfgrtr/include/intstk.h [new file with mode: 0755]
cfgrtr/include/intstk.txt [new file with mode: 0755]
cfgrtr/include/knlheap.h [new file with mode: 0755]
cfgrtr/include/maxtmout.h [new file with mode: 0755]
cfgrtr/include/maxtpri.h [new file with mode: 0755]
cfgrtr/include/parpack.h [new file with mode: 0755]
cfgrtr/include/read.h [new file with mode: 0755]
cfgrtr/include/readcfg.h [new file with mode: 0755]
cfgrtr/include/timtic.h [new file with mode: 0755]
cfgrtr/source/analyze.cpp [new file with mode: 0755]
cfgrtr/source/apidef.cpp [new file with mode: 0755]
cfgrtr/source/apiinc.cpp [new file with mode: 0755]
cfgrtr/source/attini.cpp [new file with mode: 0755]
cfgrtr/source/attisr.cpp [new file with mode: 0755]
cfgrtr/source/crealm.cpp [new file with mode: 0755]
cfgrtr/source/crecyc.cpp [new file with mode: 0755]
cfgrtr/source/credtq.cpp [new file with mode: 0755]
cfgrtr/source/creflg.cpp [new file with mode: 0755]
cfgrtr/source/crembf.cpp [new file with mode: 0755]
cfgrtr/source/crembx.cpp [new file with mode: 0755]
cfgrtr/source/crempf.cpp [new file with mode: 0755]
cfgrtr/source/cresem.cpp [new file with mode: 0755]
cfgrtr/source/cretsk.cpp [new file with mode: 0755]
cfgrtr/source/defercd.cpp [new file with mode: 0755]
cfgrtr/source/defexc.cpp [new file with mode: 0755]
cfgrtr/source/definh.cpp [new file with mode: 0755]
cfgrtr/source/deftex.cpp [new file with mode: 0755]
cfgrtr/source/hos4cfg.cpp [new file with mode: 0755]
cfgrtr/source/idlstk.cpp [new file with mode: 0755]
cfgrtr/source/intstk.cpp [new file with mode: 0755]
cfgrtr/source/knlheap.cpp [new file with mode: 0755]
cfgrtr/source/maxtmout.cpp [new file with mode: 0755]
cfgrtr/source/maxtpri.cpp [new file with mode: 0755]
cfgrtr/source/parpack.cpp [new file with mode: 0755]
cfgrtr/source/read.cpp [new file with mode: 0755]
cfgrtr/source/timtic.cpp [new file with mode: 0755]
document/profile.txt [new file with mode: 0755]
kernel/build/arm/ADuC7019/gcc/gmake.mak [new file with mode: 0755]
kernel/build/arm/ADuC7019/rvct/gmake.mak [new file with mode: 0755]
kernel/build/common/gmake.inc [new file with mode: 0755]
kernel/build/h8/h8300ha/ch38/gmake.mak [new file with mode: 0755]
kernel/build/h8/h8s2600a/ch38/gmake.mak [new file with mode: 0755]
kernel/build/mn103/mn1030/gcc/gmake.mak [new file with mode: 0755]
kernel/build/sh/sh2/gcc/gmake.mak [new file with mode: 0755]
kernel/build/sh/sh2/hew/hosv4a.Hbp [new file with mode: 0755]
kernel/build/sh/sh2/hew/hosv4a.hws [new file with mode: 0755]
kernel/build/sh/sh2/hew/hosv4a.tws [new file with mode: 0755]
kernel/build/sh/sh2/hew/hosv4a/Readme.txt [new file with mode: 0755]
kernel/build/sh/sh2/hew/hosv4a/hosv4a.hwp [new file with mode: 0755]
kernel/build/sh/sh2/shc/gmake.mak [new file with mode: 0755]
kernel/build/win/win32/gcc/gmake.mak [new file with mode: 0755]
kernel/build/win/win32/vc60/hosv4a.dsp [new file with mode: 0755]
kernel/build/win/win32/vc60/hosv4a.dsw [new file with mode: 0755]
kernel/include/arch/irc/arm/ADuC7019/irc.h [new file with mode: 0755]
kernel/include/arch/irc/arm/ADuC7019/ircatr.h [new file with mode: 0755]
kernel/include/arch/irc/none/irc.h [new file with mode: 0755]
kernel/include/arch/irc/none/ircatr.h [new file with mode: 0755]
kernel/include/arch/proc/arm/arm_v4t/proc.h [new file with mode: 0755]
kernel/include/arch/proc/arm/arm_v4t/procatr.h [new file with mode: 0755]
kernel/include/arch/proc/arm/arm_v6/proc.h [new file with mode: 0755]
kernel/include/arch/proc/arm/arm_v6/procatr.h [new file with mode: 0755]
kernel/include/arch/proc/h8/h8300h/proc.h [new file with mode: 0755]
kernel/include/arch/proc/h8/h8300h/procatr.h [new file with mode: 0755]
kernel/include/arch/proc/h8/h8300ha/proc.h [new file with mode: 0755]
kernel/include/arch/proc/h8/h8300ha/procatr.h [new file with mode: 0755]
kernel/include/arch/proc/h8/h8300hn/proc.h [new file with mode: 0755]
kernel/include/arch/proc/h8/h8300hn/procatr.h [new file with mode: 0755]
kernel/include/arch/proc/h8/h8s2600a/proc.h [new file with mode: 0755]
kernel/include/arch/proc/h8/h8s2600a/procatr.h [new file with mode: 0755]
kernel/include/arch/proc/mn103/mn1030/proc.h [new file with mode: 0755]
kernel/include/arch/proc/mn103/mn1030/procatr.h [new file with mode: 0755]
kernel/include/arch/proc/sh/sh2/proc.h [new file with mode: 0755]
kernel/include/arch/proc/sh/sh2/procatr.h [new file with mode: 0755]
kernel/include/arch/proc/win/win32/proc.h [new file with mode: 0755]
kernel/include/arch/proc/win/win32/procatr.h [new file with mode: 0755]
kernel/include/config/cfgerr.h [new file with mode: 0755]
kernel/include/config/cfghok.h [new file with mode: 0755]
kernel/include/config/cfgknl.h [new file with mode: 0755]
kernel/include/config/cfgsys.h [new file with mode: 0755]
kernel/include/core/basetyp.h [new file with mode: 0755]
kernel/include/core/cmpl.h [new file with mode: 0755]
kernel/include/core/core.h [new file with mode: 0755]
kernel/include/core/dsp.h [new file with mode: 0755]
kernel/include/core/hep.h [new file with mode: 0755]
kernel/include/core/objhdl.h [new file with mode: 0755]
kernel/include/core/objid.h [new file with mode: 0755]
kernel/include/core/opttyp.h [new file with mode: 0755]
kernel/include/core/que.h [new file with mode: 0755]
kernel/include/core/rdq.h [new file with mode: 0755]
kernel/include/core/sys.h [new file with mode: 0755]
kernel/include/core/tmq.h [new file with mode: 0755]
kernel/include/core/toq.h [new file with mode: 0755]
kernel/include/itron.h [new file with mode: 0755]
kernel/include/kernel.h [new file with mode: 0755]
kernel/include/object/flgobj.h [new file with mode: 0755]
kernel/include/object/inhobj.h [new file with mode: 0755]
kernel/include/object/isrobj.h [new file with mode: 0755]
kernel/include/object/mbxobj.h [new file with mode: 0755]
kernel/include/object/mpfobj.h [new file with mode: 0755]
kernel/include/object/semobj.h [new file with mode: 0755]
kernel/include/object/tskobj.h [new file with mode: 0755]
kernel/include/parser/parserr.h [new file with mode: 0755]
kernel/include/parser/parshok.h [new file with mode: 0755]
kernel/include/parser/parsknl.h [new file with mode: 0755]
kernel/include/parser/parssys.h [new file with mode: 0755]
kernel/source/arch/irc/arm/ADuC7019/intc.c [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v4t/gcc/armctx.S [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v4t/gcc/armirq.S [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v4t/rvct/armctx.s [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v4t/rvct/armirq.s [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v5/rvct/armctx.s [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v5/rvct/armirq.s [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v6/rvct/armctx.s [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v6/rvct/armirq.s [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300/ctxctl.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/ctxctl.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/intctl.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/mk_vec/mk_vec.c [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_001.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_002.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_003.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_004.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_005.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_006.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_007.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_008.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_009.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_010.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_011.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_012.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_013.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_014.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_015.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_016.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_017.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_018.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_019.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_020.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_021.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_022.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_023.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_024.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_025.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_026.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_027.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_028.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_029.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_030.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_031.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_032.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_033.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_034.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_035.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_036.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_037.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_038.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_039.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_040.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_041.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_042.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_043.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_044.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_045.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_046.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_047.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_048.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_049.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_050.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_051.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_052.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_053.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_054.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_055.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_056.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_057.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_058.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_059.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_060.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_061.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_062.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_063.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8300ha/vect_dmy.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8s2600a/ctxctl.src [new file with mode: 0755]
kernel/source/arch/proc/h8/h8s2600a/intctl.src [new file with mode: 0755]
kernel/source/arch/proc/mn103/mn1030/gcc/ctxctl.S [new file with mode: 0755]
kernel/source/arch/proc/mn103/mn1030/gcc/intctl.S [new file with mode: 0755]
kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S [new file with mode: 0755]
kernel/source/arch/proc/sh/sh2/gcc/intctl.S [new file with mode: 0755]
kernel/source/arch/proc/sh/sh2/shc/ctxctl.src [new file with mode: 0755]
kernel/source/arch/proc/sh/sh2/shc/dmyhdr.src [new file with mode: 0755]
kernel/source/arch/proc/sh/sh2/shc/exchdr.src [new file with mode: 0755]
kernel/source/arch/proc/sh/sh2/shc/inthdr.src [new file with mode: 0755]
kernel/source/arch/proc/sh/sh2/shc/mk_vec/mk_vec.c [new file with mode: 0755]
kernel/source/arch/proc/win/win32/ctxctl.c [new file with mode: 0755]
kernel/source/core/dsp/dsp_tsk.c [new file with mode: 0755]
kernel/source/core/dsp/ent_tsk.c [new file with mode: 0755]
kernel/source/core/dsp/idl_lop.c [new file with mode: 0755]
kernel/source/core/hep/alc_hep.c [new file with mode: 0755]
kernel/source/core/hep/cre_hep.c [new file with mode: 0755]
kernel/source/core/hep/fre_hep.c [new file with mode: 0755]
kernel/source/core/que/add_que.c [new file with mode: 0755]
kernel/source/core/que/adf_que.c [new file with mode: 0755]
kernel/source/core/que/adp_que.c [new file with mode: 0755]
kernel/source/core/que/nxt_que.c [new file with mode: 0755]
kernel/source/core/que/rmh_que.c [new file with mode: 0755]
kernel/source/core/que/rmv_que.c [new file with mode: 0755]
kernel/source/core/que/rot_que.c [new file with mode: 0755]
kernel/source/core/que/trm_que.c [new file with mode: 0755]
kernel/source/core/tmq/add_tmq.c [new file with mode: 0755]
kernel/source/core/tmq/rmv_tmq.c [new file with mode: 0755]
kernel/source/core/tmq/sig_tmq.c [new file with mode: 0755]
kernel/source/core/toq/add_toq.c [new file with mode: 0755]
kernel/source/core/toq/rmv_toq.c [new file with mode: 0755]
kernel/source/core/toq/sig_toq.c [new file with mode: 0755]
kernel/source/object/flg/acre_flg.c [new file with mode: 0755]
kernel/source/object/flg/clr_flg.c [new file with mode: 0755]
kernel/source/object/flg/cre_flg.c [new file with mode: 0755]
kernel/source/object/flg/del_flg.c [new file with mode: 0755]
kernel/source/object/flg/kchk_flg.c [new file with mode: 0755]
kernel/source/object/flg/kcre_flg.c [new file with mode: 0755]
kernel/source/object/flg/pol_flg.c [new file with mode: 0755]
kernel/source/object/flg/ref_flg.c [new file with mode: 0755]
kernel/source/object/flg/set_flg.c [new file with mode: 0755]
kernel/source/object/flg/twai_flg.c [new file with mode: 0755]
kernel/source/object/flg/wai_flg.c [new file with mode: 0755]
kernel/source/object/inh/def_inh.c [new file with mode: 0755]
kernel/source/object/inh/end_inh.c [new file with mode: 0755]
kernel/source/object/inh/exe_inh.c [new file with mode: 0755]
kernel/source/object/inh/sta_inh.c [new file with mode: 0755]
kernel/source/object/isr/acre_isr.c [new file with mode: 0755]
kernel/source/object/isr/exe_isr.c [new file with mode: 0755]
kernel/source/object/isr/kcre_isr.c [new file with mode: 0755]
kernel/source/object/mbx/acre_mbx.c [new file with mode: 0755]
kernel/source/object/mbx/kadd_msg.c [new file with mode: 0755]
kernel/source/object/mbx/kcre_mbx.c [new file with mode: 0755]
kernel/source/object/mbx/krmv_msg.c [new file with mode: 0755]
kernel/source/object/mbx/rcv_mbx.c [new file with mode: 0755]
kernel/source/object/mbx/snd_mbx.c [new file with mode: 0755]
kernel/source/object/mpf/acre_mpf.c [new file with mode: 0755]
kernel/source/object/mpf/get_mpf.c [new file with mode: 0755]
kernel/source/object/mpf/kcre_mpf.c [new file with mode: 0755]
kernel/source/object/mpf/pget_mpf.c [new file with mode: 0755]
kernel/source/object/mpf/rel_mpf.c [new file with mode: 0755]
kernel/source/object/sem/acre_sem.c [new file with mode: 0755]
kernel/source/object/sem/cre_sem.c [new file with mode: 0755]
kernel/source/object/sem/del_sem.c [new file with mode: 0755]
kernel/source/object/sem/kcre_sem.c [new file with mode: 0755]
kernel/source/object/sem/kwai_sem.c [new file with mode: 0755]
kernel/source/object/sem/pol_sem.c [new file with mode: 0755]
kernel/source/object/sem/ref_sem.c [new file with mode: 0755]
kernel/source/object/sem/sig_sem.c [new file with mode: 0755]
kernel/source/object/sem/twai_sem.c [new file with mode: 0755]
kernel/source/object/sem/wai_sem.c [new file with mode: 0755]
kernel/source/object/sys/dis_dsp.c [new file with mode: 0755]
kernel/source/object/sys/ena_dsp.c [new file with mode: 0755]
kernel/source/object/sys/get_tid.c [new file with mode: 0755]
kernel/source/object/sys/loc_cpu.c [new file with mode: 0755]
kernel/source/object/sys/sns_ctx.c [new file with mode: 0755]
kernel/source/object/sys/sns_dsp.c [new file with mode: 0755]
kernel/source/object/sys/sns_loc.c [new file with mode: 0755]
kernel/source/object/sys/sta_knl.c [new file with mode: 0755]
kernel/source/object/sys/unl_cpu.c [new file with mode: 0755]
kernel/source/object/tim/isig_tim.c [new file with mode: 0755]
kernel/source/object/tsk/acre_tsk.c [new file with mode: 0755]
kernel/source/object/tsk/act_tsk.c [new file with mode: 0755]
kernel/source/object/tsk/can_wup.c [new file with mode: 0755]
kernel/source/object/tsk/cre_tsk.c [new file with mode: 0755]
kernel/source/object/tsk/dly_tsk.c [new file with mode: 0755]
kernel/source/object/tsk/ext_tsk.c [new file with mode: 0755]
kernel/source/object/tsk/kcre_tsk.c [new file with mode: 0755]
kernel/source/object/tsk/ref_tsk.c [new file with mode: 0755]
kernel/source/object/tsk/rel_wai.c [new file with mode: 0755]
kernel/source/object/tsk/slp_tsk.c [new file with mode: 0755]
kernel/source/object/tsk/tcb2id.c [new file with mode: 0755]
kernel/source/object/tsk/tget_que.c [new file with mode: 0755]
kernel/source/object/tsk/wup_tsk.c [new file with mode: 0755]
sample/h8/h83069/ch38/dbsct.c [new file with mode: 0755]
sample/h8/h83069/ch38/gmake.mak [new file with mode: 0755]
sample/h8/h83069/ch38/lowlvl.src [new file with mode: 0755]
sample/h8/h83069/ch38/lowsrc.c [new file with mode: 0755]
sample/h8/h83069/ch38/lowsrc.h [new file with mode: 0755]
sample/h8/h83069/ch38/sbrk.c [new file with mode: 0755]
sample/h8/h83069/ch38/sbrk.h [new file with mode: 0755]
sample/h8/h83069/ch38/startup.src [new file with mode: 0755]
sample/h8/h83069/ch38/typedefine.h [new file with mode: 0755]
sample/h8/h83069/ch38/vcttbl.src [new file with mode: 0755]
sample/h8/h83069/main.c [new file with mode: 0755]
sample/h8/h83069/ostimer.c [new file with mode: 0755]
sample/h8/h83069/ostimer.h [new file with mode: 0755]
sample/h8/h83069/sample.c [new file with mode: 0755]
sample/h8/h83069/sample.h [new file with mode: 0755]
sample/h8/h83069/system.cfg [new file with mode: 0755]
sample/sh/sh7045/gcc/crt0.S [new file with mode: 0755]
sample/sh/sh7045/gcc/gmake.mak [new file with mode: 0755]
sample/sh/sh7045/gcc/sample.c [new file with mode: 0755]
sample/sh/sh7045/gcc/sample.h [new file with mode: 0755]
sample/sh/sh7045/gcc/sample.x [new file with mode: 0755]
sample/sh/sh7045/gcc/system.cfg [new file with mode: 0755]
sample/sh/sh7045/gcc/vector.S [new file with mode: 0755]
sample/sh/sh7144/main.c [new file with mode: 0755]
sample/sh/sh7144/ostimer.c [new file with mode: 0755]
sample/sh/sh7144/ostimer.h [new file with mode: 0755]
sample/sh/sh7144/regs_sh7144.h [new file with mode: 0755]
sample/sh/sh7144/sample.c [new file with mode: 0755]
sample/sh/sh7144/sample.h [new file with mode: 0755]
sample/sh/sh7144/sci1.c [new file with mode: 0755]
sample/sh/sh7144/sci1.h [new file with mode: 0755]
sample/sh/sh7144/shc/dbsct.c [new file with mode: 0755]
sample/sh/sh7144/shc/gmake.mak [new file with mode: 0755]
sample/sh/sh7144/shc/readme.txt [new file with mode: 0755]
sample/sh/sh7144/shc/sim_io.src [new file with mode: 0755]
sample/sh/sh7144/shc/startup.src [new file with mode: 0755]
sample/sh/sh7144/shc/vcttbl.src [new file with mode: 0755]
sample/sh/sh7144/system.cfg [new file with mode: 0755]
sample/win/win32/gcc/gmake.mak [new file with mode: 0755]
sample/win/win32/main.c [new file with mode: 0755]
sample/win/win32/ostimer.c [new file with mode: 0755]
sample/win/win32/ostimer.h [new file with mode: 0755]
sample/win/win32/sample.c [new file with mode: 0755]
sample/win/win32/sample.h [new file with mode: 0755]
sample/win/win32/system.cfg [new file with mode: 0755]
sample/win/win32/vc60/cfg.bat [new file with mode: 0755]
sample/win/win32/vc60/sample.dsp [new file with mode: 0755]
sample/win/win32/vc60/sample.dsw [new file with mode: 0755]
sample/win/win32/wintimer.c [new file with mode: 0755]
sample/win/win32/wintimer.h [new file with mode: 0755]
test/que/test_que.c [new file with mode: 0755]
test/que/test_que.dsp [new file with mode: 0755]
test/que/test_que.dsw [new file with mode: 0755]
tools/cmtcnv/cmtcnv.c [new file with mode: 0755]
tools/cmtcnv/cmtcnv.dsp [new file with mode: 0755]
tools/cmtcnv/cmtcnv.dsw [new file with mode: 0755]

diff --git a/cfgrtr/build/bcc55/bmake.mak b/cfgrtr/build/bcc55/bmake.mak
new file mode 100755 (executable)
index 0000000..6d23e5f
--- /dev/null
@@ -0,0 +1,83 @@
+# -----------------------------------------------------------------------------
+#  Hyper Operating System V4  コンフィギュレーター                             
+#   Borland-C++ Version 5.5 用 メイクファイル                                  
+#                                                                              
+#                                       Copyright (C) 1998-2006 by Project HOS 
+#                                       http://sourceforge.jp/projects/hos/    
+# -----------------------------------------------------------------------------
+
+
+# ツール
+CC   = bcc32
+LINK = bcc32
+
+
+# オプション
+CFLAGS = -c -O2 -I..\..\include -I..\..\..\kernel\include -I..\..\..\kernel\include\arch\proc\$(ARCH_PROC) -I..\..\..\kernel\include\arch\irc\$(ARCH_IRC)
+LFLAGS = 
+
+
+# ターゲット
+!ifndef TARGET
+TARGET   = h4acfg
+!endif
+
+OBJS_DIR = objs\$(TARGET)
+
+
+# オブジェクトファイル
+OBJS = $(OBJS_DIR)\hos4cfg.obj \
+       $(OBJS_DIR)\analyze.obj \
+       $(OBJS_DIR)\parpack.obj \
+       $(OBJS_DIR)\read.obj            \
+       $(OBJS_DIR)\defercd.obj \
+       $(OBJS_DIR)\intstk.obj  \
+       $(OBJS_DIR)\idlstk.obj  \
+       $(OBJS_DIR)\knlheap.obj \
+       $(OBJS_DIR)\maxtpri.obj \
+       $(OBJS_DIR)\apidef.obj  \
+       $(OBJS_DIR)\apiinc.obj  \
+       $(OBJS_DIR)\cretsk.obj  \
+       $(OBJS_DIR)\deftex.obj  \
+       $(OBJS_DIR)\cresem.obj  \
+       $(OBJS_DIR)\creflg.obj  \
+       $(OBJS_DIR)\credtq.obj  \
+       $(OBJS_DIR)\crembx.obj  \
+       $(OBJS_DIR)\crempf.obj  \
+       $(OBJS_DIR)\crembf.obj  \
+       $(OBJS_DIR)\timtic.obj  \
+       $(OBJS_DIR)\crecyc.obj  \
+       $(OBJS_DIR)\crealm.obj  \
+       $(OBJS_DIR)\defexc.obj  \
+       $(OBJS_DIR)\attini.obj  \
+       $(OBJS_DIR)\definh.obj  \
+       $(OBJS_DIR)\attisr.obj
+
+.path.cpp = ..\..\source
+.path.obj = $(OBJS_DIR)
+
+.suffixes:
+.suffixes: .cpp
+
+
+# ターゲット生成
+$(TARGET): mkdir_objs $(OBJS)
+       $(LINK) -e$(TARGET) $(OBJS)
+
+mkdir_objs:
+       -mkdir objs
+       -mkdir $(OBJS_DIR)
+
+
+# クリーンアップ
+clean:
+       del $(OBJS) $(TARGET)
+
+# 推論規則
+.cpp.obj:
+       $(CC) $(CFLAGS) -o$@ $< 
+
+
+# -----------------------------------------------------------------------------
+#  Copyright (C) 1998-2006 by Project HOS                                      
+# -----------------------------------------------------------------------------
diff --git a/cfgrtr/build/gcc/gmake.mak b/cfgrtr/build/gcc/gmake.mak
new file mode 100755 (executable)
index 0000000..c448af8
--- /dev/null
@@ -0,0 +1,74 @@
+# -----------------------------------------------------------------------------
+#  HOS-V4a configulator
+#
+#                                       Copyright (C) 1998-2006 by Project HOS 
+#                                       http://sourceforge.jp/projects/hos/
+# -----------------------------------------------------------------------------
+
+
+
+# ツール
+CC   = g++
+LINK = g++
+
+
+# オプション
+CFLAGS = -O2 -pipe -Wall -I../../include -I../../../kernel/include -I../../../kernel/include/arch/proc/$(ARCH_PROC) -I../../../kernel/include/arch/irc/$(ARCH_IRC)
+LFLAGS = 
+
+
+# ターゲット
+TARGET ?= h4acfg
+
+# オブジェクトディレクトリ
+OBJS_DIR = objs_$(TARGET)
+
+
+# オブジェクトファイル
+OBJS = $(OBJS_DIR)/hos4cfg.o \
+       $(OBJS_DIR)/analyze.o \
+       $(OBJS_DIR)/parpack.o \
+       $(OBJS_DIR)/read.o    \
+       $(OBJS_DIR)/defercd.o \
+       $(OBJS_DIR)/intstk.o  \
+       $(OBJS_DIR)/idlstk.o  \
+       $(OBJS_DIR)/knlheap.o \
+       $(OBJS_DIR)/maxtpri.o \
+       $(OBJS_DIR)/apidef.o  \
+       $(OBJS_DIR)/apiinc.o  \
+       $(OBJS_DIR)/cretsk.o  \
+       $(OBJS_DIR)/deftex.o  \
+       $(OBJS_DIR)/cresem.o  \
+       $(OBJS_DIR)/creflg.o  \
+       $(OBJS_DIR)/credtq.o  \
+       $(OBJS_DIR)/crembx.o  \
+       $(OBJS_DIR)/crempf.o  \
+       $(OBJS_DIR)/crembf.o  \
+       $(OBJS_DIR)/timtic.o  \
+       $(OBJS_DIR)/crecyc.o  \
+       $(OBJS_DIR)/crealm.o  \
+       $(OBJS_DIR)/defexc.o  \
+       $(OBJS_DIR)/attini.o  \
+       $(OBJS_DIR)/definh.o  \
+       $(OBJS_DIR)/attisr.o
+
+
+VPATH=../../source
+
+
+# ターゲット生成
+$(TARGET): mkdir_objs $(OBJS)
+       $(LINK) $(LFLAGS) $(OBJS) -o $(TARGET)
+
+mkdir_objs:
+       mkdir -p $(OBJS_DIR)
+
+clean:
+       rm -f $(TARGET) $(TARGET).exe $(OBJS)
+
+$(OBJS_DIR)/%.o :: %.cpp
+       $(CC) $(CFLAGS) -c $< -o $@
+
+
+
+# end of file
diff --git a/cfgrtr/build/vc60/h4acfg.dsp b/cfgrtr/build/vc60/h4acfg.dsp
new file mode 100755 (executable)
index 0000000..d159599
--- /dev/null
@@ -0,0 +1,313 @@
+# Microsoft Developer Studio Project File - Name="h4acfg" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** \95Ò\8fW\82µ\82È\82¢\82Å\82­\82¾\82³\82¢ **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=h4acfg - Win32 Debug\r
+!MESSAGE \82±\82ê\82Í\97L\8cø\82ÈÒ²¸Ì§²Ù\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81\82±\82ÌÌßÛ¼Þª¸Ä\82ðËÞÙÄÞ\82·\82é\82½\82ß\82É\82Í NMAKE \82ð\8eg\97p\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+!MESSAGE [Ò²¸Ì§²Ù\82Ì´¸½Îß°Ä] ºÏÝÄÞ\82ð\8eg\97p\82µ\82Ä\8eÀ\8ds\82µ\82Ä\82­\82¾\82³\82¢\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "h4acfg.mak".\r
+!MESSAGE \r
+!MESSAGE NMAKE \82Ì\8eÀ\8ds\8e\9e\82É\8d\\90¬\82ð\8ew\92è\82Å\82«\82Ü\82·\r
+!MESSAGE ºÏÝÄޠײÝ\8fã\82ÅϸÛ\82Ì\90Ý\92è\82ð\92è\8b`\82µ\82Ü\82·\81B\97á:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "h4acfg.mak" CFG="h4acfg - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE \91I\91ð\89Â\94\\82ÈËÞÙÄÞ Ó°ÄÞ:\r
+!MESSAGE \r
+!MESSAGE "h4acfg - Win32 Release" ("Win32 (x86) Console Application" \97p)\r
+!MESSAGE "h4acfg - Win32 Debug" ("Win32 (x86) Console Application" \97p)\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "h4acfg - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /W3 /GX /O2 /I "../../include" /I "../../../kernel/include" /I "../../../kernel/include/arch/proc/win32" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x411 /d "NDEBUG"\r
+# ADD RSC /l 0x411 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "h4acfg - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../include" /I "../../../kernel/include" /I "../../../kernel/include/arch/proc/win/win32" /I "../../../kernel/include/arch/irc/none" /D "_CONSOLE" /D "WIN32" /D "_DEBUG" /D "_MBCS" /FR /YX /FD /D /GZ /c\r
+# ADD BASE RSC /l 0x411 /d "_DEBUG"\r
+# ADD RSC /l 0x411 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "h4acfg - Win32 Release"\r
+# Name "h4acfg - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\analyze.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\apidef.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\apiinc.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\attini.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\attisr.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\crealm.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\crecyc.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\credtq.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\creflg.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\crembf.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\crembx.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\crempf.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\cresem.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\cretsk.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\defercd.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\defexc.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\definh.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\deftex.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\hos4cfg.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\idlstk.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\intstk.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\knlheap.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\maxtmout.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\maxtpri.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\parpack.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\read.cpp\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\source\timtic.cpp\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\analyze.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\apidef.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\apiinc.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\attini.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\attisr.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\crealm.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\crecyc.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\credtq.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\creflg.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\crembf.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\crembx.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\crempf.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\cresem.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\cretsk.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\defercd.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\defexc.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\definh.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\deftex.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\idlstk.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\intstk.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\knlheap.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\maxtmout.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\maxtpri.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\kernel\include\object\mpfobj.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\parpack.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\read.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\readcfg.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\include\timtic.h\r
+# End Source File\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/cfgrtr/build/vc60/h4acfg.dsw b/cfgrtr/build/vc60/h4acfg.dsw
new file mode 100755 (executable)
index 0000000..8b20e73
--- /dev/null
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# \8cx\8d\90\82±\82ÌÜ°¸½Íß°½ Ì§²Ù \82ð\95Ò\8fW\82Ü\82½\82Í\8dí\8f\9c\82µ\82È\82¢\82Å\82­\82¾\82³\82¢!\r
+\r
+###############################################################################\r
+\r
+Project: "h4acfg"=".\h4acfg.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
diff --git a/cfgrtr/include/analyze.h b/cfgrtr/include/analyze.h
new file mode 100755 (executable)
index 0000000..5d5dd91
--- /dev/null
@@ -0,0 +1,32 @@
+// ---------------------------------------------------------------------------
+//  HOS V4 コンフィギュレーター                                               
+//    構文解析クラス                                                          
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG__Analyze_h__
+#define __HOSV4CFG__Analyze_h__
+
+
+
+// 構文解析クラス
+class CAnalyze
+{
+public:
+       static int  SplitState(char* pszApiName, char* pszParams, const char *pszState);        // ステートメントをAPI名とパラメーターに分割
+       static int  SearchChar(char* pszBuf, const char* &pszText, char c);             // 特定文字のまでの切り出し
+       static int  GetParameter(char* pszBuf, const char* &pszText);                   // パラメーターの切り出し
+       static int  DecodeText(char *pszBuf, const char* pszText);                              // 文字列定数を展開する
+       static void SpaceCut(char* pszText);                    // 前後の空白を削除する
+};
+
+
+#endif // __HOSV4CFG__Analyze_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/apidef.h b/cfgrtr/include/apidef.h
new file mode 100755 (executable)
index 0000000..68962d7
--- /dev/null
@@ -0,0 +1,54 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    API定義クラス                                                           
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_ApiDef_h__
+#define __HOSV4CFG_ApiDef_h__
+
+
+#include "parpack.h"
+
+
+#define API_MAX_OBJS           1024            // 最大オブジェクト数
+#define API_MAX_PARAM          4096            // 最大パラメータ文字数
+
+
+// API定義クラス
+class CApiDef
+{
+public:
+       CApiDef();                              // コンストラクタ
+       virtual ~CApiDef();             // デストラクタ
+
+       virtual int   AnalyzeApi(const char* pszApiName, const char* pszParams) = 0;    // APIの解析
+       virtual int   AutoId(void);                                                     // 自動ID番号割り当て
+       virtual void  WriteId(FILE* fp);                                        // ID 定義ファイル書き出し
+       virtual void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       virtual void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+       virtual void  WriteCfgStart(FILE* fp);                          // cfgファイル起動部書き出し
+
+protected:
+       virtual int   AddParams(const char* pszParams);         // パラメーター追加
+       virtual int   IdToObjNum(int iId);                                      // IDをオブジェクト番号に変換
+
+       CParamPack* m_pParamPacks[API_MAX_OBJS];                        // パラメーターリスト
+       int         m_iId[API_MAX_OBJS];                                        // ID番号リスト
+       int         m_iObjs;                                                            // オブジェクト数
+       int         m_iResObj;                                                          // 予約オブジェクト数
+       int         m_iMaxId;                                                           // 最大ID 番号
+       int         m_iParams;                                                          // パラメーター数
+       int         m_iParamSyntax[PARAMPACK_MAX];                      // パラメーター構文
+};
+
+
+#endif // __HOSV4CFG_ApiDef_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/apiinc.h b/cfgrtr/include/apiinc.h
new file mode 100755 (executable)
index 0000000..0b7eee2
--- /dev/null
@@ -0,0 +1,36 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    INCLUDE API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_ApiInclude_h__
+#define __HOSV4CFG_ApiInclude_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// INCLUDE 用
+class CApiInclude : public CApiDef
+{
+public:
+       CApiInclude();          // コンストラクタ
+       ~CApiInclude();         // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);                                                     // 自動ID番号割り当て
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+};
+
+
+#endif // __HOSV4CFG_ApiInclude_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/attini.h b/cfgrtr/include/attini.h
new file mode 100755 (executable)
index 0000000..02aff2d
--- /dev/null
@@ -0,0 +1,36 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    ATT_INI API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_ApiAttIni_h__
+#define __HOSV4CFG_ApiAttIni_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// ATT_INI 用
+class CApiAttIni : public CApiDef
+{
+public:
+       CApiAttIni();           // コンストラクタ
+       ~CApiAttIni();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);                                                     // 自動ID番号割り当て
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル定義部書き出し
+};
+
+
+#endif // __HOSV4CFG_ApiAttIni_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/attisr.h b/cfgrtr/include/attisr.h
new file mode 100755 (executable)
index 0000000..9bfc6dc
--- /dev/null
@@ -0,0 +1,37 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    ATT_ISR API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_AttIsr_h__
+#define __HOSV4CFG_AttIsr_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// ATT_ISR 用
+class CApiAttIsr : public CApiDef
+{
+public:
+       CApiAttIsr();           // コンストラクタ
+       ~CApiAttIsr();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);
+       void  WriteCfgDef(FILE* fp);    // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);    // cfgファイル初期化部書き出し
+};
+
+
+#endif // __HOSV4CFG_AttIsr_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/crealm.h b/cfgrtr/include/crealm.h
new file mode 100755 (executable)
index 0000000..dd75b1f
--- /dev/null
@@ -0,0 +1,38 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_ALM API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_CreAlm_h__
+#define __HOSV4CFG_CreAlm_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// CRE_ALM 用
+class CApiCreAlm : public CApiDef
+{
+public:
+       CApiCreAlm();           // コンストラクタ
+       ~CApiCreAlm();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       void  WriteId(FILE* fp);                                        // ID 定義ファイル書き出し
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル起動部書き出し
+};
+
+
+#endif // __HOSV4CFG_CreAlm_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/crecyc.h b/cfgrtr/include/crecyc.h
new file mode 100755 (executable)
index 0000000..c9ddefb
--- /dev/null
@@ -0,0 +1,38 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_CYC API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_CreCyc_h__
+#define __HOSV4CFG_CreCyc_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// CRE_CYC 用
+class CApiCreCyc : public CApiDef
+{
+public:
+       CApiCreCyc();           // コンストラクタ
+       ~CApiCreCyc();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       void  WriteId(FILE* fp);                                        // ID 定義ファイル書き出し
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル起動部書き出し
+};
+
+
+#endif // __HOSV4CFG_CreCyc_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/credtq.h b/cfgrtr/include/credtq.h
new file mode 100755 (executable)
index 0000000..5dff9f5
--- /dev/null
@@ -0,0 +1,38 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_DTQ API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_CreDtq_h__
+#define __HOSV4CFG_CreDtq_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// CRE_DTQ 用
+class CApiCreDtq : public CApiDef
+{
+public:
+       CApiCreDtq();           // コンストラクタ
+       ~CApiCreDtq();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       void  WriteId(FILE* fp);                                        // ID 定義ファイル書き出し
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル起動部書き出し
+};
+
+
+#endif // __HOSV4CFG_CreDtq_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/creflg.h b/cfgrtr/include/creflg.h
new file mode 100755 (executable)
index 0000000..9c80747
--- /dev/null
@@ -0,0 +1,42 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_FLG API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_CreFlg_h__
+#define __HOSV4CFG_CreFlg_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// CRE_FLG 用
+class CApiCreFlg : public CApiDef
+{
+public:
+       CApiCreFlg();           // コンストラクタ
+       ~CApiCreFlg();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       void  WriteId(FILE* fp);                                        // ID 定義ファイル書き出し
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル起動部書き出し
+
+protected:
+       void  WriteFlgcbRam(FILE *fp, int iObj);
+       void  WriteFlgcbRom(FILE *fp, int iObj);
+};
+
+
+#endif // __HOSV4CFG_CreFlg_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/crembf.h b/cfgrtr/include/crembf.h
new file mode 100755 (executable)
index 0000000..b93c9fd
--- /dev/null
@@ -0,0 +1,38 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_MBF API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_CreMbf_h__
+#define __HOSV4CFG_CreMbf_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// CRE_MBF 用
+class CApiCreMbf : public CApiDef
+{
+public:
+       CApiCreMbf();           // コンストラクタ
+       ~CApiCreMbf();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       void  WriteId(FILE* fp);                                        // ID 定義ファイル書き出し
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル起動部書き出し
+};
+
+
+#endif // __HOSV4CFG_CreMbf_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/crembx.h b/cfgrtr/include/crembx.h
new file mode 100755 (executable)
index 0000000..655b51a
--- /dev/null
@@ -0,0 +1,38 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_MBX API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_CreMbx_h__
+#define __HOSV4CFG_CreMbx_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// CRE_MBX 用
+class CApiCreMbx : public CApiDef
+{
+public:
+       CApiCreMbx();           // コンストラクタ
+       ~CApiCreMbx();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       void  WriteId(FILE* fp);                                        // ID 定義ファイル書き出し
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル起動部書き出し
+};
+
+
+#endif // __HOSV4CFG_CreMbx_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/crempf.h b/cfgrtr/include/crempf.h
new file mode 100755 (executable)
index 0000000..7f4d9af
--- /dev/null
@@ -0,0 +1,38 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_MPF API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_CreMpf_h__
+#define __HOSV4CFG_CreMpf_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// CRE_MPF 用
+class CApiCreMpf : public CApiDef
+{
+public:
+       CApiCreMpf();           // コンストラクタ
+       ~CApiCreMpf();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       void  WriteId(FILE* fp);                                        // ID 定義ファイル書き出し
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル起動部書き出し
+};
+
+
+#endif // __HOSV4CFG_CreMpf_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/cresem.h b/cfgrtr/include/cresem.h
new file mode 100755 (executable)
index 0000000..7150c79
--- /dev/null
@@ -0,0 +1,42 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_SEM API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_CreSem_h__
+#define __HOSV4CFG_CreSem_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// CRE_SEM 用
+class CApiCreSem : public CApiDef
+{
+public:
+       CApiCreSem();           // コンストラクタ
+       ~CApiCreSem();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       void  WriteId(FILE* fp);                                        // ID 定義ファイル書き出し
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル起動部書き出し
+
+protected:
+       void  WriteSemcbRam(FILE *fp, int iObj);        // SEMCB情報書き出し(RAM部)
+       void  WriteSemcbRom(FILE *fp, int iObj);        // SEMCB情報書き出し(ROM部)
+};
+
+
+#endif // __HOSV4CFG_CreSem_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/cretsk.h b/cfgrtr/include/cretsk.h
new file mode 100755 (executable)
index 0000000..e7a1f37
--- /dev/null
@@ -0,0 +1,43 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_TSK API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_CreTak_h__
+#define __HOSV4CFG_CreTak_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// CRE_TSK 用
+class CApiCreTsk : public CApiDef
+{
+public:
+       CApiCreTsk();           // コンストラクタ
+       ~CApiCreTsk();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);                                                     // 自動ID番号割り当て
+       void  WriteId(FILE* fp);                                                // ID 定義ファイル書き出し
+       void  WriteCfgDef(FILE* fp);                                    // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                                    // cfgファイル初期化部書き出し
+       void  WriteCfgStart(FILE* fp);                                  // cfgファイル起動部書き出し
+
+protected:
+       void  WriteTcbRam(FILE *fp, int iObj);          // TCB情報書き出し(RAM部)
+       void  WriteTcbRom(FILE *fp, int iObj);          // TCB情報書き出し(ROM部)
+};
+
+
+#endif // __HOSV4CFG_CreTak_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/defercd.h b/cfgrtr/include/defercd.h
new file mode 100755 (executable)
index 0000000..59f28bb
--- /dev/null
@@ -0,0 +1,42 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    エラーコード管理                                                        
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_DefErrorCode_h__
+#define __HOSV4CFG_DefErrorCode_h__
+
+
+// 正常系エラーコード定義 */
+#define CFG_ERR_NOPROC                 (-2)    // 未処理
+#define CFG_ERR_COMPLETE               (-1)    // 完了
+#define CFG_ERR_OK                             0               // 正常
+
+// 異常系エラーコード定義
+#define CFG_ERR_EOF                            1               // 予期せぬEOF
+#define CFG_ERR_CR                             2               // 不正な改行
+#define CFG_ERR_STATE_LEN              3               // 1ステートが長すぎる
+#define CFG_ERR_SYNTAX                 4               // 構文エラー
+#define CFG_ERR_PAREN                  5               // ()の不整合
+#define CFG_ERR_BRACE                  6               // {}の不整合
+#define CFG_ERR_SEMICOLON              7               // セミコロンが無い
+#define CFG_ERR_TEXT                   8               // 不正な文字列定数
+#define CFG_ERR_ID_CONFLICT            9               // ID衝突
+#define CFG_ERR_PARAM                  10              // パラメーター不正
+#define CFG_ERR_MULTIDEF               11              // 唯一であるべき定義が複数
+#define CFG_ERR_DEF_CONFLICT   12              // ID衝突
+
+
+const char* GetErrMessage(int iErr);
+
+
+#endif // __HOSV4CFG_DefErrorCode_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/defexc.h b/cfgrtr/include/defexc.h
new file mode 100755 (executable)
index 0000000..ba83ec0
--- /dev/null
@@ -0,0 +1,41 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    DEF_EXC API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_DefExc_h__
+#define __HOSV4CFG_DefExc_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// DEF_EXC 用
+class CApiDefExc : public CApiDef
+{
+public:
+       CApiDefExc();           // コンストラクタ
+       ~CApiDefExc();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);
+       void  WriteCfgDef(FILE* fp);    // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);    // cfgファイル初期化部書き出し
+
+protected:
+       int m_iMaxExcNo;
+       int m_iMinExcNo;
+};
+
+
+#endif // __HOSV4CFG_DefExc_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/definh.h b/cfgrtr/include/definh.h
new file mode 100755 (executable)
index 0000000..14b16fc
--- /dev/null
@@ -0,0 +1,37 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    ATT_INI API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_ApiDefInh_h__
+#define __HOSV4CFG_ApiDefInh_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// ATT_INI 用
+class CApiDefInh : public CApiDef
+{
+public:
+       CApiDefInh();           // コンストラクタ
+       ~CApiDefInh();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);                                                     // 自動ID番号割り当て
+       void  WriteCfgDef(FILE* fp);
+       void  WriteCfgStart(FILE* fp);                          // cfgファイル定義部書き出し
+};
+
+
+#endif // __HOSV4CFG_ApiDefInh_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/deftex.h b/cfgrtr/include/deftex.h
new file mode 100755 (executable)
index 0000000..dfc0700
--- /dev/null
@@ -0,0 +1,37 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    DEF_TEX API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_DefTex_h__
+#define __HOSV4CFG_DefTex_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// DEF_TEX 用
+class CApiDefTex : public CApiDef
+{
+public:
+       CApiDefTex();           // コンストラクタ
+       ~CApiDefTex();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);                                                     // 自動ID番号割り当て
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);                            // cfgファイル初期化部書き出し
+};
+
+
+#endif // __HOSV4CFG_DefTex_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/idlstk.h b/cfgrtr/include/idlstk.h
new file mode 100755 (executable)
index 0000000..8ac60cd
--- /dev/null
@@ -0,0 +1,36 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_IDL_STK API の処理                                                  
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_IdleStack_h__
+#define __HOSV4CFG_IdleStack_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// HOS_KERNEL_HEAP 用
+class CApiIdleStack : public CApiDef
+{
+public:
+       CApiIdleStack();                // コンストラクタ
+       ~CApiIdleStack();               // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);
+       void  WriteCfgDef(FILE* fp);            // cfgファイル定義部書き出し
+};
+
+
+#endif // __HOSV4CFG_IdleStack_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/intstk.h b/cfgrtr/include/intstk.h
new file mode 100755 (executable)
index 0000000..d19feab
--- /dev/null
@@ -0,0 +1,39 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_INT_STK API の処理                                                  
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_IntStack_h__
+#define __HOSV4CFG_IntStack_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// HOS_KERNEL_HEAP 用
+class CApiIntStack : public CApiDef
+{
+public:
+       CApiIntStack();         // コンストラクタ
+       ~CApiIntStack();                // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);
+       void  WriteCfgDef(FILE* fp);            // cfgファイル定義部書き出し
+
+protected:
+       char  m_szStackPointer[API_MAX_PARAM];
+};
+
+
+#endif // __HOSV4CFG_IntStack_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/intstk.txt b/cfgrtr/include/intstk.txt
new file mode 100755 (executable)
index 0000000..cfc6f5f
--- /dev/null
@@ -0,0 +1,36 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_INT_STK API の処理                                              
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_IntStack_h__
+#define __HOSV4CFG_IntStack_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// HOS_KERNEL_HEAP 用
+class CApiIntStack : public CApiDef
+{
+public:
+       CApiIntStack();         // コンストラクタ
+       ~CApiIntStack();                // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);
+       void  WriteCfgDef(FILE* fp);            // cfgファイル定義部書き出し
+};
+
+
+#endif // __HOSV4CFG_IntStack_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/knlheap.h b/cfgrtr/include/knlheap.h
new file mode 100755 (executable)
index 0000000..49552b1
--- /dev/null
@@ -0,0 +1,37 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_KERNEL_HEAP API の処理                                              
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_KernelHeap_h__
+#define __HOSV4CFG_KernelHeap_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// HOS_KERNEL_HEAP 用
+class CApiKernelHeap : public CApiDef
+{
+public:
+       CApiKernelHeap();               // コンストラクタ
+       ~CApiKernelHeap();              // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);
+       void  WriteCfgDef(FILE* fp);            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);            // cfgファイル起動部書き出し
+};
+
+
+#endif // __HOSV4CFG_KernelHeap_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/maxtmout.h b/cfgrtr/include/maxtmout.h
new file mode 100755 (executable)
index 0000000..afa0d5f
--- /dev/null
@@ -0,0 +1,41 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_MAX_TPRI API の処理                                                 
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_ApiMaxTimout_h__
+#define __HOSV4CFG_ApiMaxTimout_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// HOS_MAX_TIMOUT 用
+class CApiMaxTimout : public CApiDef
+{
+public:
+       CApiMaxTimout();                // コンストラクタ
+       ~CApiMaxTimout();               // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);                                                     // 自動ID番号割り当て
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+
+protected:
+       int m_iMaxTimout;
+};
+
+
+#define DEFAULT_MAXTIMOUT      16
+
+#endif // HOSV4CFG_ApiMaxTimout
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/maxtpri.h b/cfgrtr/include/maxtpri.h
new file mode 100755 (executable)
index 0000000..27a34b9
--- /dev/null
@@ -0,0 +1,43 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_MAX_TPRI API の処理                                                 
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_ApiMaxTpri_h__
+#define __HOSV4CFG_ApiMaxTpri_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// HOS_MAX_TPRI 用
+class CApiMaxTpri : public CApiDef
+{
+public:
+       CApiMaxTpri();          // コンストラクタ
+       ~CApiMaxTpri();         // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);                                                     // 自動ID番号割り当て
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+
+protected:
+       int m_iMaxPri;
+};
+
+
+#define DEFAULT_MAXTPRI        16
+
+
+#endif // __HOSV4CFG_ApiMaxTpri_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
+
diff --git a/cfgrtr/include/parpack.h b/cfgrtr/include/parpack.h
new file mode 100755 (executable)
index 0000000..ab95034
--- /dev/null
@@ -0,0 +1,37 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    パラメーター格納クラス                                                  
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG__ParamPack_h__
+#define __HOSV4CFG__ParamPack_h__
+
+
+#define PARAMPACK_MAX  16
+
+
+// パラメーター格納クラス
+class CParamPack
+{
+public:
+       CParamPack();           // コンストラクタ
+       ~CParamPack();          // デストラクタ
+
+       void        SetParam(int iIndex, const char *pszParam); // パラメーター設定
+       const char* GetParam(int iIndex);                                               // パラメーター取得
+
+protected:
+       char *m_pszParam[PARAMPACK_MAX];
+};
+
+
+#endif // __HOSV4CFG__ParamPack_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/read.h b/cfgrtr/include/read.h
new file mode 100755 (executable)
index 0000000..579369d
--- /dev/null
@@ -0,0 +1,51 @@
+// ---------------------------------------------------------------------------
+//  HOS V4 コンフィギュレーター Ver 1.00                                      
+//    データ読み込みクラス                                                    
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+
+#ifndef __HOSV4CFG_Read_h__
+#define __HOSV4CFG_Read_h__
+
+
+#define READ_MAX_PATH          1024    // 最大パス名
+#define READ_MAX_STATE         4096    // 1ステートの最大文字数
+
+
+// データ読み込みクラス
+class CRead
+{
+public:
+       CRead(FILE *fp, const char *name);                      // コンストラクタ
+       ~CRead();                                               // デストラクタ
+
+       int ReadState(char *szState);   // 1ステート読み込み
+       int GetPhysicalLineNum(void)    // 実際に読み込み中のファイルの行番号取得
+       { return m_iPhysicalLineNum; }
+       int GetLogicalLineNum(void)     // cppを通す前のファイルの行番号取得
+       { return m_iLogicalLineNum; }
+       const char *GetLogicalInputFile(void)
+       { return m_szLogicalInputFile; }
+
+protected:
+       int SkipPreProcessorLine(char* szText, int iCount);     // プリプロセッサラインのスキップ
+       int ReadString(int cDelimiter, char* szText, int& iCount);      // 文字列読み込み
+
+       FILE *m_fpRead;                                 // 読み込み用ファイルポインタ
+       int  m_iPhysicalLineNum;                        // 実際に読み込み中のファイルの行番号
+       int  m_iLogicalLineNum;                         // cppを通す前のファイルの行番号
+       bool m_blLineTop;                               // 行の先頭
+       char m_szLogicalInputFile[READ_MAX_PATH];       // cppを通す前のファイル名
+};
+
+
+#endif // __HOSV4CFG_Read_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/include/readcfg.h b/cfgrtr/include/readcfg.h
new file mode 100755 (executable)
index 0000000..893947d
--- /dev/null
@@ -0,0 +1,17 @@
+
+#ifndef TRUE
+#define TRUE   1
+#endif
+
+#ifndef FALSE
+#define FALSE  0
+#endif
+
+
+#include "config/cfgsys.h"
+#include "parser/parssys.h"
+#include "procatr.h"
+#include "ircatr.h"
+#include "config/cfgknl.h"
+#include "parser/parsknl.h"
+
diff --git a/cfgrtr/include/timtic.h b/cfgrtr/include/timtic.h
new file mode 100755 (executable)
index 0000000..3b16f4c
--- /dev/null
@@ -0,0 +1,41 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_TIM_TIC API の処理                                                  
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#ifndef __HOSV4CFG_ApiTimTic_h__
+#define __HOSV4CFG_ApiTimTic_h__
+
+
+#include "apidef.h"
+#include "parpack.h"
+
+
+// HOS_TIM_TIC 用
+class CApiTimTic : public CApiDef
+{
+public:
+       CApiTimTic();           // コンストラクタ
+       ~CApiTimTic();          // デストラクタ
+
+       int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
+       int   AutoId(void);                                                     // ID 定義ファイル書き出し
+       void  WriteId(FILE* fp);                                        // cfgファイル定義部書き出し
+       void  WriteCfgDef(FILE* fp);                            // cfgファイル定義部書き出し
+
+protected:
+       int m_iNume;    // タイムティックの周期の分子
+       int m_iDeno;    // タイムティックの周期の分母
+};
+
+
+#endif // __HOSV4CFG_ApiTimTic_h__
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/analyze.cpp b/cfgrtr/source/analyze.cpp
new file mode 100755 (executable)
index 0000000..0d3548e
--- /dev/null
@@ -0,0 +1,259 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    構文解析クラス                                                          
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <string.h>
+#include <ctype.h>
+#include "defercd.h"
+#include "analyze.h"
+
+
+
+// ステートメントをAPI名とパラメーターに分割
+int CAnalyze::SplitState(char* pszApiName, char* pszParams, const char *pszState)
+{
+       int iErr;
+
+       // コマンド名の切り出し
+       while ( *pszState != '(' )
+       {
+               if ( *pszState == '\0' )
+               {
+                       return CFG_ERR_SYNTAX;
+               }
+               *pszApiName++ = *pszState++;
+       }
+       *pszApiName = '\0';
+       pszState++;
+
+       // パラメーター部の切り出し
+       iErr = SearchChar(pszParams, pszState, ')');
+       if ( iErr != CFG_ERR_OK )
+       {
+               return iErr;
+       }
+
+       // 後続チェック
+       if ( *pszState != '\0' )
+       {
+               return CFG_ERR_SEMICOLON;
+       }
+
+       return CFG_ERR_OK;
+}
+
+
+// 特定文字のまでの切り出し
+int CAnalyze::SearchChar(char* pszBuf, const char* &pszText, char c)
+{
+       char cDelimiter = 0;
+       bool blText = false;
+       bool blEsc  = false;
+       int  iErr;
+
+       for ( ; ; )
+       {
+               // 終端チェック
+               if ( *pszText == '\0' )
+               {
+                       iErr = CFG_ERR_SYNTAX;
+                       break;
+               }
+
+               // 文字チェック
+               if ( *pszText == c )
+               {
+                       pszText++;
+                       iErr = CFG_ERR_OK;
+                       break;
+               }
+
+               // '\' の次の文字は無条件にエスケープ
+               if ( blEsc )
+               {
+                       *pszBuf++ = *pszText++;
+                       blEsc = false;
+                       continue;
+               }
+               blEsc = false;
+
+               // '\' チェック
+               if ( *pszBuf == '\\' )
+               {
+                       *pszBuf++ = *pszText++;
+                       blEsc = true;
+                       continue;
+               }
+
+               // 文字列開始チェック
+               if ( !blText && *pszText == '\"' || *pszText == '\'' )
+               {
+                       cDelimiter = *pszText;
+                       *pszBuf++ = *pszText++;
+                       blText = true;
+                       continue;
+               }
+
+               // 文字列内部
+               if ( blText )
+               {
+                       if ( *pszText == cDelimiter )
+                       {
+                               *pszBuf++ = *pszText++;
+                               blText = false;
+                       }
+                       else
+                       {
+                               *pszBuf++ = *pszText++;
+                       }
+                       continue;
+               }
+
+               // '{' チェック
+               if ( *pszText == '{' )
+               {
+                       *pszBuf++ = *pszText++;
+                       iErr = SearchChar(pszBuf, pszText, '}');
+                       if ( iErr != CFG_ERR_OK )
+                       {
+                               iErr = CFG_ERR_BRACE;
+                       }
+                       pszBuf  += strlen(pszBuf);
+                       *pszBuf++ = '}';
+                       continue;
+               }
+
+               // '(' チェック
+               if ( *pszText == '(' )
+               {
+                       *pszBuf++ = *pszText++;
+                       iErr = SearchChar(pszBuf, pszText, ')');
+                       if ( iErr != CFG_ERR_OK )
+                       {
+                               iErr = CFG_ERR_PAREN;
+                       }
+                       pszBuf  += strlen(pszBuf);
+                       *pszBuf++ = ')';
+                       continue;
+               }
+
+               *pszBuf++ = *pszText++;
+       }
+
+       *pszBuf = '\0';
+
+       return iErr;
+}
+
+
+// パラメーターの切り出し
+int CAnalyze::GetParameter(char* pszBuf, const char* &pszText)
+{
+       int iErr;
+
+       // コンマまで切り出す
+       iErr = SearchChar(pszBuf, pszText, ',');
+       if ( iErr == CFG_ERR_SYNTAX )
+       {
+               // 括弧対応OKで終端ならコンマが見つからなくても可
+               iErr = CFG_ERR_OK;
+       }
+
+       return iErr;
+}
+
+
+// 文字列定数を展開する
+int CAnalyze::DecodeText(char *pszBuf, const char* pszText)
+{
+       bool blEsc = false;
+
+       if ( *pszText++ != '\"') 
+       {
+               return CFG_ERR_TEXT;
+       }
+
+       for ( ; ; )
+       {
+               if ( *pszText == '\0' )
+               {
+                       return CFG_ERR_TEXT;
+               }
+
+               // 前の文字が '\' なら読み飛ばし
+               if ( blEsc )
+               {
+                       *pszBuf++ = *pszText++;
+                       blEsc = false;
+                       continue;
+               }
+
+               // エスケープ文字チェック
+               if ( *pszText == '\\' )
+               {
+                       pszText++;
+                       blEsc = true;
+                       continue;
+               }
+
+               // 終端チェック
+               if ( *pszText == '\"' )
+               {
+                       pszText++;
+                       break;
+               }
+
+               *pszBuf++ = *pszText++;
+       }
+
+       // 完結していなければエラー
+       if ( *pszText != '\0' )
+       {
+                       return CFG_ERR_TEXT;
+       }
+
+       *pszBuf = '\0';
+
+       return CFG_ERR_OK;
+}
+
+
+// 前後の空白を削除する
+void CAnalyze::SpaceCut(char* pszText)
+{
+       char *pszTmp;
+       int  i = 0;
+
+       pszTmp = pszText;
+
+       // 先頭の空白を読み飛ばす
+       while ( *pszTmp == ' ' )
+       {
+               pszTmp++;
+       }
+
+       // コピー
+       while ( *pszTmp != '\0' )
+       {
+               pszText[i++] = *pszTmp++;
+       }
+
+       // 末尾の空白を削除
+       while ( i > 0 && pszText[i - 1] == ' ' )
+       {
+               i--;
+       }
+
+       pszText[i] = '\0';
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/apidef.cpp b/cfgrtr/source/apidef.cpp
new file mode 100755 (executable)
index 0000000..1bbea33
--- /dev/null
@@ -0,0 +1,242 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター
+//    API定義クラス
+//
+//                                    Copyright (C) 1998-2003 by Project HOS
+//                                    http://sourceforge.jp/projects/hos/
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "defercd.h"
+#include "apidef.h"
+#include "analyze.h"
+
+
+
+// コンストラクタ
+CApiDef::CApiDef()
+{
+       int i;
+
+       m_iMaxId = 0;
+       m_iObjs  = 0;
+       m_iResObj = 0;
+       for ( i = 0; i < API_MAX_OBJS; i++ )
+       {
+               m_pParamPacks[i] = NULL;
+               m_iId[i]         = 0;
+       }
+}
+
+
+// デストラクタ
+CApiDef::~CApiDef()
+{
+       int i;
+
+       for ( i = 0; i < API_MAX_OBJS; i++ )
+       {
+               delete m_pParamPacks[i];
+       }
+}
+
+
+// パラメーター追加(超手抜き)
+int CApiDef::AddParams(const char* pszParams)
+{
+       char szParamBlock[API_MAX_PARAM];
+       char szParam[API_MAX_PARAM];
+       int  iErr = 0;
+       int  iIndex = 0;
+       int  i, j;
+
+       // パラメータ格納用オブジェクト生成
+       m_pParamPacks[m_iObjs] = new CParamPack();
+
+       for ( i = 0; i < m_iParams; i++ )
+       {
+               if ( m_iParamSyntax[i] == 0 )
+               {
+                       // 単独パラメーター切り出し
+                       iErr = CAnalyze::GetParameter(szParam, pszParams);
+                       if ( iErr != CFG_ERR_OK )
+                       {
+                               break;
+                       }
+
+                       // パラメーター追加
+                       CAnalyze::SpaceCut(szParam);
+                       m_pParamPacks[m_iObjs]->SetParam(iIndex++, szParam);
+               }
+               else
+               {
+                       // 空白読み飛ばし
+                       while ( *pszParams == ' ' )
+                       {
+                               pszParams++;
+                       }
+
+                       // ブロック開始チェック
+                       if ( *pszParams++ != '{' )
+                       {
+                               iErr = CFG_ERR_SYNTAX;
+                               break;
+                       }
+                       
+                       // ブロック切り出し
+                       iErr = CAnalyze::SearchChar(szParamBlock, pszParams, '}');
+                       if ( iErr != CFG_ERR_OK )
+                       {
+                               break;
+                       }
+
+                       // ブロック内読み出し
+                       const char* pszParamBlock = szParamBlock;
+                       for ( j = 0; j < m_iParamSyntax[i] + 1; j++ )
+                       {
+                               // 単独パラメーター切り出し
+                               iErr = CAnalyze::GetParameter(szParam, pszParamBlock);
+                               if ( iErr != CFG_ERR_OK )
+                               {
+                                       break;
+                               }
+
+                               // パラメーター追加
+                               CAnalyze::SpaceCut(szParam);
+                               if ( szParam[0] == '\0')
+                               {
+                                       break;
+                               }
+                               m_pParamPacks[m_iObjs]->SetParam(iIndex++, szParam);
+                       }
+                       if ( iErr != CFG_ERR_OK )
+                       {
+                               iErr = CFG_ERR_SYNTAX;
+                               break;
+                       }
+                       if ( j != m_iParamSyntax[i] )
+                       {
+                               iErr = CFG_ERR_PARAM;
+                               break;
+                       }
+               }
+       }
+
+       if ( iErr == CFG_ERR_OK )
+       {
+               m_iObjs++;
+       }
+
+       return iErr;
+}
+
+
+// 自動ID番号割り当て
+int CApiDef::AutoId(void)
+{
+       bool blUsedId[255];
+       int iId;
+       int i;
+
+       // 変数初期化
+       for ( i = 0; i < 255; i++ )
+       {
+               blUsedId[i] = false;
+       }
+
+       // 固定値指定のIDをサーチ
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               iId = atoi(m_pParamPacks[i]->GetParam(0));
+               if ( iId > 0 )
+               {
+                       if ( m_iId[i] != 0 )
+                       {
+                               return CFG_ERR_ID_CONFLICT;             // ID衝突
+                       }
+                       m_iId[i] = iId;
+                       blUsedId[iId - 1] = true;
+                       if ( iId > m_iMaxId )
+                       {
+                               m_iMaxId = iId;
+                       }
+               }
+       }
+
+       // ID 自動割当
+       iId = 1;
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( m_iId[i] == 0 )
+               {
+                       // 使用済みIDのスキップ
+                       while ( blUsedId[iId - 1] )
+                       {
+                               iId++;
+                       }
+                       m_iId[i] = iId++;
+               }
+       }
+       iId--;
+
+       if ( iId > m_iMaxId )
+       {
+               m_iMaxId = iId;
+       }
+
+       // 最大ID番号を予約オブジェクト数分増加
+       if ( m_iMaxId < m_iObjs + m_iResObj )
+       {
+               m_iMaxId = m_iObjs + m_iResObj;
+       }
+
+       return 0;
+}
+
+
+// IDをオブジェクト番号に変換
+int CApiDef::IdToObjNum(int iId)
+{
+       int i;
+
+       // IDの一致するオブジェクトを探す
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( m_iId[i] == iId )
+               {
+                       return i;
+               }
+       }
+
+       return -1;
+}
+
+
+
+// ID 定義ファイル書き出し
+void CApiDef::WriteId(FILE* fpId)
+{
+}
+
+
+// cfgファイル定義部書き出し
+void CApiDef::WriteCfgDef(FILE* fpCfg)
+{
+}
+
+// cfgファイル初期化部書き出し
+void CApiDef::WriteCfgIni(FILE* fpCfg)
+{
+}
+
+// cfgファイル起動部書き出し
+void CApiDef::WriteCfgStart(FILE* fpCfg)
+{
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/apiinc.cpp b/cfgrtr/source/apiinc.cpp
new file mode 100755 (executable)
index 0000000..ce00f96
--- /dev/null
@@ -0,0 +1,94 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    INCLUDE API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "apiinc.h"
+#include "analyze.h"
+
+
+
+// コンストラクタ
+CApiInclude::CApiInclude()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParams         = 1;
+}
+
+
+// デストラクタ
+CApiInclude::~CApiInclude()
+{
+}
+
+
+
+// APIの解析
+int CApiInclude::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       char szBuf[4096];
+       int  iErr;
+       
+       // API名チェック
+       if ( strcmp(pszApiName, "INCLUDE") != 0 )
+       {
+               return CFG_ERR_NOPROC;
+       }
+
+       // パラメーター追加
+       iErr = AddParams(pszParams);
+       if ( iErr != CFG_ERR_OK )
+       {
+               return iErr;
+       }
+
+       // 文字列の展開
+       iErr = CAnalyze::DecodeText(szBuf, m_pParamPacks[m_iObjs - 1]->GetParam(0));
+       if ( iErr != CFG_ERR_OK )
+       {
+               return iErr;
+       }
+       m_pParamPacks[m_iObjs - 1]->SetParam(0, szBuf);
+
+       return CFG_ERR_OK;
+}
+
+
+// 文字列を展開
+int CApiInclude::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiInclude::WriteCfgDef(FILE* fp)
+{
+       int i;
+
+       if ( m_iObjs == 0)
+       {
+               return;
+       }
+
+       fputs("\n", fp);
+
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               fprintf(fp, "#include %s\n", m_pParamPacks[i]->GetParam(0));
+       }
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/attini.cpp b/cfgrtr/source/attini.cpp
new file mode 100755 (executable)
index 0000000..7efcd0c
--- /dev/null
@@ -0,0 +1,83 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    ATT_INI API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "attini.h"
+#include "analyze.h"
+
+#define ATTINI_INIATR          0
+#define ATTINI_EXINF           1
+#define ATTINI_INIRTN          2
+
+
+// コンストラクタ
+CApiAttIni::CApiAttIni()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 3;          // 単独パラメーター
+       m_iParams         = 1;
+}
+
+
+// デストラクタ
+CApiAttIni::~CApiAttIni()
+{
+}
+
+
+
+// APIの解析
+int CApiAttIni::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "ATT_INI") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// 文字列を展開
+int CApiAttIni::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiAttIni::WriteCfgStart(FILE* fp)
+{
+       int i;
+
+       if ( m_iObjs == 0)
+       {
+               return;
+       }
+
+       fputs("\n\t/* call initialize routine*/\n", fp);
+
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               fprintf(
+                       fp,
+                       "\t((FP)(%s))((VP_INT)(%s));\n",
+                       m_pParamPacks[i]->GetParam(ATTINI_INIRTN),
+                       m_pParamPacks[i]->GetParam(ATTINI_EXINF)
+                       );
+       }
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/attisr.cpp b/cfgrtr/source/attisr.cpp
new file mode 100755 (executable)
index 0000000..38d8d49
--- /dev/null
@@ -0,0 +1,121 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4a  コンフィギュレーター                           
+//    ATT_ISR API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "attisr.h"
+#include "analyze.h"
+#include "readcfg.h"
+
+
+#define ATTISR_ISRATR          0
+#define ATTISR_EXINF           1
+#define ATTISR_INTNO           2
+#define ATTISR_ISR                     3
+
+
+// コンストラクタ
+CApiAttIsr::CApiAttIsr()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 4;          // 4つのパラメーターブロック
+       m_iParams         = 1;
+}
+
+// デストラクタ
+CApiAttIsr::~CApiAttIsr()
+{
+}
+
+
+// 自動ID番号割り当て
+int CApiAttIsr::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// APIの解析
+int CApiAttIsr::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "ATT_ISR") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "KERNEL_MAX_ISRID") == 0 )
+       {
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+               
+               int iId;
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+               
+               m_iMaxId = iId;
+               
+               return CFG_ERR_OK;
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiAttIsr::WriteCfgDef(FILE* fp)
+{
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*        interrupt control objects           */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+       
+       // 割り込み管理テーブル生成
+       if ( _KERNEL_IRCATR_TMAX_INHNO - _KERNEL_IRCATR_TMIN_INHNO + 1 > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n"
+                       "_KERNEL_T_INTINF _kernel_int_tbl[%d];\n\n",
+                       _KERNEL_IRCATR_TMAX_INHNO - _KERNEL_IRCATR_TMIN_INHNO + 1);
+       }
+
+       if ( m_iMaxId > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n"
+                       "_KERNEL_T_ISRCB *_kernel_isrcb_tbl[%d];\n",
+                       m_iMaxId);
+       }
+
+       fprintf(
+                       fp,
+               "const ID        _kernel_max_isrid = %d;\n",
+               m_iMaxId);
+}
+
+
+// cfgファイル初期化部書き出し
+void  CApiAttIsr::WriteCfgIni(FILE* fp)
+{
+
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/crealm.cpp b/cfgrtr/source/crealm.cpp
new file mode 100755 (executable)
index 0000000..7858d7c
--- /dev/null
@@ -0,0 +1,254 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_ALM API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "crealm.h"
+#include "analyze.h"
+
+
+#define CREALM_ALMID           0
+#define CREALM_ALMATR          1
+#define CREALM_EXINF           2
+#define CREALM_ALMHDR          3
+
+
+
+// コンストラクタ
+CApiCreAlm::CApiCreAlm()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 3;          // 3パラメーターのブロック
+       m_iParams = 2;
+}
+
+
+// デストラクタ
+CApiCreAlm::~CApiCreAlm()
+{
+}
+
+
+// APIの解析
+int CApiCreAlm::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "CRE_ALM") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "HOS_MAX_ALMID") == 0 )
+       {
+               int iId;
+
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( m_iResObj > 0 )
+               {
+                       return CFG_ERR_DEF_CONFLICT;
+               }
+
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMaxId = iId;
+
+               return CFG_ERR_OK;
+       }
+       else if ( strcmp(pszApiName, "HOS_RES_ALMOBJ") == 0 )
+       {
+               int iId;
+
+                if ( m_iMaxId > 0 )
+               {
+                        return CFG_ERR_DEF_CONFLICT;
+               }
+
+                if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                        return CFG_ERR_PARAM;
+               }
+
+                m_iResObj += iId;
+
+                return CFG_ERR_OK;
+        }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// ID 定義ファイル書き出し
+void CApiCreAlm::WriteId(FILE* fp)
+{
+       int i;
+
+       // ID 直接指定でないオブジェクトが在るかどうかサーチ
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CREALM_ALMID)) == 0 )
+               {
+                       break;
+               }
+       }
+       if ( i == m_iObjs )
+       {
+               return;
+       }
+
+       fputs("\n\n/* alarm handler ID definetion */\n", fp);
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CREALM_ALMID)) == 0 )
+               {
+                       fprintf(
+                               fp,
+                               "#define %s\t\t%d\n",
+                               m_pParamPacks[i]->GetParam(CREALM_ALMID),
+                               m_iId[i]);
+               }
+       }
+
+       fprintf( fp,"\n#define TMAX_ALMID\t\t%d\n", m_iMaxId );
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiCreAlm::WriteCfgDef(FILE* fp)
+{
+       int  i, j;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*       create alarm handler objects         */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       if ( m_iObjs > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* alarm handler control block for rom area */\n"
+                       "const T_KERNEL_ALMCB_ROM kernel_almcb_rom[%d] =\n"
+                       "\t{\n",
+                       m_iObjs);
+
+               // コントロールブロック(ROM部)出力
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(
+                               fp,
+                               "\t\t{(ATR)(%s), (VP_INT)(%s), (FP)(%s)},\n",
+                               m_pParamPacks[i]->GetParam(CREALM_ALMATR),
+                               m_pParamPacks[i]->GetParam(CREALM_EXINF),
+                               m_pParamPacks[i]->GetParam(CREALM_ALMHDR));
+               }
+               fprintf(fp, "\t};\n");
+       }
+
+       // コントロールブロック(RAM部)出力
+       if ( m_iObjs > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* alarm handler control block for ram area */\n"
+                       "T_KERNEL_ALMCB_RAM kernel_almcb_ram[%d];\n",
+                       m_iObjs);
+       }
+
+       // コントロールブロックテーブル出力
+       if ( m_iMaxId > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* alarm handler control block table */\n"
+                       "T_KERNEL_ALMCB_RAM *kernel_almcb_ram_tbl[%d] =\n"
+                       "\t{\n",
+                       m_iMaxId);
+
+               for ( i = 0; i < m_iMaxId; i++ )
+               {
+                       // ID検索
+                       for ( j = 0; j < m_iObjs; j++ )
+                       {
+                               if ( m_iId[j] == i + 1 )
+                               {
+                                       break;
+                               }
+                       }
+                       if ( j < m_iObjs )
+                       {
+                               // オブジェクトが存在した場合
+                               fprintf(fp, "\t\t&kernel_almcb_ram[%d],\n", j);
+                       }
+                       else
+                       {
+                               // オブジェクトが無い場合
+                               fputs("\t\tNULL,\n", fp);
+                       }
+               }
+               fputs("\t};\n", fp);
+       }
+
+       // テーブルサイズ情報出力
+       fprintf(
+               fp,
+               "\n/* alarm handler control block count */\n"
+               "const INT kernel_almcb_cnt = %d;\n",
+               m_iMaxId);
+}
+
+
+// cfgファイル初期化部書き出し
+void  CApiCreAlm::WriteCfgIni(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       // 初期化部出力
+       fprintf(
+               fp,
+               "\t\n\t\n"
+               "\t/* initialize alarm handler control block */\n"
+               "\tfor ( i = 0; i < %d; i++ )\n"
+               "\t{\n"
+               "\t\tkernel_almcb_ram[i].almcb_rom = &kernel_almcb_rom[i];\n"
+               "\t}\n",
+               m_iObjs);
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiCreAlm::WriteCfgStart(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       fputs("\tkernel_ini_alm();\t\t/* initialize alarm handler */\n", fp);
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/crecyc.cpp b/cfgrtr/source/crecyc.cpp
new file mode 100755 (executable)
index 0000000..477c241
--- /dev/null
@@ -0,0 +1,257 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_CYC API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "crecyc.h"
+#include "analyze.h"
+
+
+
+#define CRECYC_CYCID           0
+#define CRECYC_CYCATR          1
+#define CRECYC_EXINF           2
+#define CRECYC_CYCHDR          3
+#define CRECYC_CYCTIM          4
+#define CRECYC_CYCPHS          5
+
+
+
+// コンストラクタ
+CApiCreCyc::CApiCreCyc()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 5;          // 5パラメーターのブロック
+       m_iParams = 2;
+}
+
+// デストラクタ
+CApiCreCyc::~CApiCreCyc()
+{
+}
+
+
+// APIの解析
+int CApiCreCyc::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "CRE_CYC") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "HOS_MAX_CYCID") == 0 )
+       {
+               int iId;
+
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( m_iResObj > 0 )
+               {
+                       return CFG_ERR_DEF_CONFLICT;
+               }
+
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMaxId = iId;
+
+               return CFG_ERR_OK;
+       }
+       else if ( strcmp(pszApiName, "HOS_RES_CYCOBJ") == 0 )
+       {
+               int iId;
+
+                if ( m_iMaxId > 0 )
+               {
+                        return CFG_ERR_DEF_CONFLICT;
+               }
+
+                if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                        return CFG_ERR_PARAM;
+               }
+
+                m_iResObj += iId;
+
+                return CFG_ERR_OK;
+        }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// ID 定義ファイル書き出し
+void CApiCreCyc::WriteId(FILE* fp)
+{
+       int i;
+
+       // ID 直接指定でないオブジェクトが在るかどうかサーチ
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CRECYC_CYCID)) == 0 )
+               {
+                       break;
+               }
+       }
+       if ( i == m_iObjs )
+       {
+               return;
+       }
+
+       fputs("\n\n/* cyclic handler ID definetion */\n", fp);
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CRECYC_CYCID)) == 0 )
+               {
+                       fprintf(
+                               fp,
+                               "#define %s\t\t%d\n",
+                               m_pParamPacks[i]->GetParam(CRECYC_CYCID),
+                               m_iId[i]);
+               }
+       }
+
+       fprintf( fp,"\n#define TMAX_CYCID\t\t%d\n", m_iMaxId );
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiCreCyc::WriteCfgDef(FILE* fp)
+{
+       int  i, j;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*       create cyclic handler objects        */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       if ( m_iObjs > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* cyclic handler control block for rom area */\n"
+                       "const T_KERNEL_CYCCB_ROM kernel_cyccb_rom[%d] =\n"
+                       "\t{\n",
+                       m_iObjs);
+
+               // コントロールブロック(ROM部)出力
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(
+                               fp,
+                               "\t\t{(ATR)(%s), (VP_INT)(%s), (FP)(%s), (RELTIM)(%s)},\n",
+                               m_pParamPacks[i]->GetParam(CRECYC_CYCATR),
+                               m_pParamPacks[i]->GetParam(CRECYC_EXINF),
+                               m_pParamPacks[i]->GetParam(CRECYC_CYCHDR),
+                               m_pParamPacks[i]->GetParam(CRECYC_CYCTIM));
+               }
+               fprintf(fp, "\t};\n");
+       }
+
+       // コントロールブロック(RAM部)出力
+       if ( m_iObjs > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* cyclic handler control block for ram area */\n"
+                       "T_KERNEL_CYCCB_RAM kernel_cyccb_ram[%d];\n",
+                       m_iObjs);
+       }
+
+       // コントロールブロックテーブル出力
+       if ( m_iMaxId > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* cyclic handler control block table */\n"
+                       "T_KERNEL_CYCCB_RAM *kernel_cyccb_ram_tbl[%d] =\n"
+                       "\t{\n",
+                       m_iMaxId);
+
+               for ( i = 0; i < m_iMaxId; i++ )
+               {
+                       // ID検索
+                       for ( j = 0; j < m_iObjs; j++ )
+                       {
+                               if ( m_iId[j] == i + 1 )
+                               {
+                                       break;
+                               }
+                       }
+                       if ( j < m_iObjs )
+                       {
+                               // オブジェクトが存在した場合
+                               fprintf(fp, "\t\t&kernel_cyccb_ram[%d],\n", j);
+                       }
+                       else
+                       {
+                               // オブジェクトが無い場合
+                               fputs("\t\tNULL,\n", fp);
+                       }
+               }
+               fputs("\t};\n", fp);
+       }
+
+       // テーブルサイズ情報出力
+       fprintf(
+               fp,
+               "\n/* cyclic handler control block count */\n"
+               "const INT kernel_cyccb_cnt = %d;\n",
+               m_iMaxId);
+}
+
+
+// cfgファイル初期化部書き出し
+void  CApiCreCyc::WriteCfgIni(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       // 初期化部出力
+       fprintf(
+               fp,
+               "\t\n\t\n"
+               "\t/* initialize cyclic handler control block */\n"
+               "\tfor ( i = 0; i < %d; i++ )\n"
+               "\t{\n"
+               "\t\tkernel_cyccb_ram[i].cyccb_rom = &kernel_cyccb_rom[i];\n"
+               "\t}\n",
+               m_iObjs);
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiCreCyc::WriteCfgStart(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       fputs("\tkernel_ini_cyc();\t\t/* initialize cyclic handler */\n", fp);
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/credtq.cpp b/cfgrtr/source/credtq.cpp
new file mode 100755 (executable)
index 0000000..49b17dd
--- /dev/null
@@ -0,0 +1,285 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_DTQ API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "credtq.h"
+#include "analyze.h"
+
+
+
+#define CREDTQ_DTQID           0
+#define CREDTQ_DTQATR          1
+#define CREDTQ_DTQCNT          2
+#define CREDTQ_DTQ                     3
+
+
+
+// コンストラクタ
+CApiCreDtq::CApiCreDtq()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 3;          // 3パラメーターのブロック
+       m_iParams = 2;
+}
+
+// デストラクタ
+CApiCreDtq::~CApiCreDtq()
+{
+}
+
+
+// APIの解析
+int CApiCreDtq::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "CRE_DTQ") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "HOS_MAX_DTQID") == 0 )
+       {
+               int iId;
+
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( m_iResObj > 0 )
+               {
+                       return CFG_ERR_DEF_CONFLICT;
+               }
+
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMaxId = iId;
+
+               return CFG_ERR_OK;
+       }
+       else if ( strcmp(pszApiName, "HOS_RES_DTQOBJ") == 0 )
+       {
+               int iId;
+
+                if ( m_iMaxId > 0 )
+               {
+                        return CFG_ERR_DEF_CONFLICT;
+               }
+
+                if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                        return CFG_ERR_PARAM;
+               }
+
+                m_iResObj += iId;
+
+                return CFG_ERR_OK;
+        }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// ID 定義ファイル書き出し
+void CApiCreDtq::WriteId(FILE* fp)
+{
+       int i;
+
+       // ID 直接指定でないオブジェクトが在るかどうかサーチ
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CREDTQ_DTQID)) == 0 )
+               {
+                       break;
+               }
+       }
+       if ( i == m_iObjs )
+       {
+               return;
+       }
+
+       fputs("\n\n/* data queue ID definetion */\n", fp);
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CREDTQ_DTQID)) == 0 )
+               {
+                       fprintf(
+                               fp,
+                               "#define %s\t\t%d\n",
+                               m_pParamPacks[i]->GetParam(CREDTQ_DTQID),
+                               m_iId[i]);
+               }
+       }
+
+       fprintf( fp,"\n#define TMAX_DTQID\t\t%d\n", m_iMaxId );
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiCreDtq::WriteCfgDef(FILE* fp)
+{
+       const char* pszParam;
+       bool blOutput;
+       int  i, j;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*        create data queue objects           */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       // データキュー領域出力
+       blOutput = false;
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               pszParam = m_pParamPacks[i]->GetParam(CREDTQ_DTQ);
+               if ( strcmp(pszParam, "NULL") == 0 )
+               {
+                       if ( !blOutput )
+                       {
+                               fputs("\n/* data que area */\n", fp);
+                               blOutput = true;
+                       }
+
+                       fprintf(
+                               fp,
+                               "static VP_INT kernel_dtq%d_dtq[%s];\n",
+                               m_iId[i],
+                               m_pParamPacks[i]->GetParam(CREDTQ_DTQCNT));
+               }
+       }
+
+       if ( m_iObjs > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* data queue control block for rom area */\n"
+                       "const T_KERNEL_DTQCB_ROM kernel_dtqcb_rom[%d] =\n"
+                       "\t{\n",
+                       m_iObjs);
+
+               // コントロールブロック(ROM部)出力
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(
+                               fp,
+                               "\t\t{(ATR)(%s), (UINT)(%s), ",
+                               m_pParamPacks[i]->GetParam(CREDTQ_DTQATR),
+                               m_pParamPacks[i]->GetParam(CREDTQ_DTQCNT));
+                       pszParam = m_pParamPacks[i]->GetParam(CREDTQ_DTQ);
+                       if ( strcmp(pszParam, "NULL") == 0 )
+                       {
+                               fprintf(fp,     "kernel_dtq%d_dtq},\n", m_iId[i]);
+                       }
+                       else
+                       {
+                               fprintf(fp,     "(VP_INT *)(%s)},\n", pszParam);
+                       }
+               }
+               fprintf(fp, "\t};\n");
+       }
+
+       // コントロールブロック(RAM部)出力
+       if ( m_iObjs > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* data queue control block for ram area */\n"
+                       "T_KERNEL_DTQCB_RAM kernel_dtqcb_ram[%d];\n",
+                       m_iObjs);
+       }
+
+       // コントロールブロックテーブル出力
+       if ( m_iMaxId > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* data queue control block table */\n"
+                       "T_KERNEL_DTQCB_RAM *kernel_dtqcb_ram_tbl[%d] =\n"
+                       "\t{\n",
+                       m_iMaxId);
+
+               for ( i = 0; i < m_iMaxId; i++ )
+               {
+                       // ID検索
+                       for ( j = 0; j < m_iObjs; j++ )
+                       {
+                               if ( m_iId[j] == i + 1 )
+                               {
+                                       break;
+                               }
+                       }
+                       if ( j < m_iObjs )
+                       {
+                               // オブジェクトが存在した場合
+                               fprintf(fp, "\t\t&kernel_dtqcb_ram[%d],\n", j);
+                       }
+                       else
+                       {
+                               // オブジェクトが無い場合
+                               fputs("\t\tNULL,\n", fp);
+                       }
+               }
+               fputs("\t};\n", fp);
+       }
+
+       // テーブルサイズ情報出力
+       fprintf(
+               fp,
+               "\n/* data queue control block count */\n"
+               "const INT kernel_dtqcb_cnt = %d;\n",
+               m_iMaxId);
+}
+
+
+// cfgファイル初期化部書き出し
+void  CApiCreDtq::WriteCfgIni(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       // 初期化部出力
+       fprintf(
+               fp,
+               "\t\n\t\n"
+               "\t/* initialize data queue control block */\n"
+               "\tfor ( i = 0; i < %d; i++ )\n"
+               "\t{\n"
+               "\t\tkernel_dtqcb_ram[i].dtqcb_rom = &kernel_dtqcb_rom[i];\n"
+               "\t}\n",
+               m_iObjs);
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiCreDtq::WriteCfgStart(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       fputs("\tkernel_ini_dtq();\t\t/* initialize data queue */\n", fp);
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/creflg.cpp b/cfgrtr/source/creflg.cpp
new file mode 100755 (executable)
index 0000000..5a789b5
--- /dev/null
@@ -0,0 +1,263 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_FLG API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "creflg.h"
+#include "analyze.h"
+#include "readcfg.h"
+
+
+#define CREFLG_FLGID           0
+#define CREFLG_FLGATR          1
+#define CREFLG_IFLGPTN         2
+
+
+
+// コンストラクタ
+CApiCreFlg::CApiCreFlg()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 2;          // 2パラメーターのブロック
+       m_iParams = 2;
+}
+
+// デストラクタ
+CApiCreFlg::~CApiCreFlg()
+{
+}
+
+
+// APIの解析
+int CApiCreFlg::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "CRE_FLG") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "KERNEL_MAX_FLGID") == 0 )
+       {
+               int iId;
+
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMaxId = iId;
+
+               return CFG_ERR_OK;
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// ID 定義ファイル書き出し
+void CApiCreFlg::WriteId(FILE* fp)
+{
+       int i;
+
+       // %jp{コメントを出力}
+       fputs("\n\n/* event flag ID definetion */\n", fp);
+
+       // %jp{ID定義を出力}
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CREFLG_FLGID)) == 0 )
+               {
+                       fprintf(
+                               fp,
+                               "#define %s\t\t%d\n",
+                               m_pParamPacks[i]->GetParam(CREFLG_FLGID),
+                               m_iId[i]);
+               }
+       }
+
+       // %jp{ID最大値定義を出力}
+       fprintf( fp,
+               "\n"
+               "#ifdef  TMAX_FLGID\n"
+               "#undef  TMAX_FLGID\n"
+               "#endif\n"
+               "\n"
+               "#define TMAX_FLGID\t\t%d\n\n", m_iMaxId);
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiCreFlg::WriteCfgDef(FILE* fp)
+{
+       int  i;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*        create eventflag objects            */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+
+       if ( m_iMaxId > 0 )
+       {
+#if _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_BLKARRAY
+#if _KERNEL_FLGCB_ROM
+       // %jp{ブロック配列&ROM分離}
+       {
+               // %jp{RAM部出力}
+               fprintf(fp, "\n_KERNEL_T_FLGCB _kernel_flgcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t{");
+                               WriteSemcbRam(fp, iObjNum);
+                               fprintf(fp, "},\n");
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{0},\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");
+
+               // %jp{ROM部出力}
+               fprintf(fp, "\nconst _KERNEL_T_FLGCB_ROM _kernel_flgcb_rom_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t{");
+                               WriteSemcbRom(fp, iObjNum);
+                               fprintf(fp, "},\n");
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{0},\n");
+                       }
+               }
+               fprintf(fp, "\t};\n\n");
+       }
+#else
+       // ブロック配列&統合TCB
+       {
+               // %jp{RAM部出力}
+               fprintf(fp, "\n_KERNEL_T_FLGCB _kernel_flgcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t{");
+                               WriteFlgcbRam(fp, iObjNum);
+                               WriteFlgcbRom(fp, iObjNum);
+                               fprintf(fp, "},\n");
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{0},\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");
+       }
+#endif
+#elif _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_PTRARRAY
+#if _KERNEL_FLGCB_ROM
+       // ポインタ配列&ROM分離
+       {
+       }
+#else
+       // ポインタ配列&統合TCB
+       {
+       }
+#endif
+#endif
+       }
+
+       // テーブルサイズ情報出力
+       fprintf(
+               fp,
+               "\nconst ID     _kernel_max_flgid = %d;\n",
+               m_iMaxId);
+}
+
+
+
+void CApiCreFlg::WriteFlgcbRam(FILE *fp, int iObj)
+{
+#if _KERNEL_FLGCB_QUE
+       fprintf(fp, "{0}, ");                                                                                                           /* %jp{キュー} */
+#endif
+
+#if _KERNEL_FLGCB_FLGPTN
+       fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CREFLG_IFLGPTN));           /* %jp{} */
+#endif
+}
+
+
+void CApiCreFlg::WriteFlgcbRom(FILE *fp, int iObj)
+{
+#if _KERNEL_FLGCB_FLGATR
+       fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CREFLG_FLGATR));            /* %jp{イベントフラグ属性} */
+#endif
+}
+
+
+
+
+
+// cfgファイル初期化部書き出し
+void  CApiCreFlg::WriteCfgIni(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       // 初期化部出力
+       fprintf(
+               fp,
+               "\t\n\t\n"
+               "\t/* initialize event flag control block */\n"
+               "\tfor ( i = 0; i < %d; i++ )\n"
+               "\t{\n"
+               "\t\tkernel_flgcb_ram[i].flgcb_rom = &kernel_flgcb_rom[i];\n"
+               "\t}\n",
+               m_iObjs);
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiCreFlg::WriteCfgStart(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       fputs("\tkernel_ini_flg();\t\t/* initialize event flag */\n", fp);
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/crembf.cpp b/cfgrtr/source/crembf.cpp
new file mode 100755 (executable)
index 0000000..8b84493
--- /dev/null
@@ -0,0 +1,291 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_MBF API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "crembf.h"
+#include "analyze.h"
+
+
+#define CREMBF_MBFID           0
+#define CREMBF_MBFATR          1
+#define CREMBF_MAXMSZ          2
+#define CREMBF_MBFSZ           3
+#define CREMBF_MBF                     4
+
+
+// コンストラクタ
+CApiCreMbf::CApiCreMbf()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 4;          // 4パラメーターのブロック
+       m_iParams = 2;
+}
+
+// デストラクタ
+CApiCreMbf::~CApiCreMbf()
+{
+}
+
+
+
+// APIの解析
+int CApiCreMbf::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "CRE_MBF") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "HOS_MAX_MBFID") == 0 )
+       {
+               int iId;
+
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( m_iResObj > 0 )
+               {
+                       return CFG_ERR_DEF_CONFLICT;
+               }
+
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMaxId = iId;
+
+               return CFG_ERR_OK;
+       }
+       else if ( strcmp(pszApiName, "HOS_RES_MBFOBJ") == 0 )
+       {
+               int iId;
+
+                if ( m_iMaxId > 0 )
+               {
+                        return CFG_ERR_DEF_CONFLICT;
+               }
+
+                if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                        return CFG_ERR_PARAM;
+               }
+
+                m_iResObj += iId;
+
+                return CFG_ERR_OK;
+        }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// ID 定義ファイル書き出し
+void CApiCreMbf::WriteId(FILE* fp)
+{
+       int i;
+
+       // ID 直接指定でないオブジェクトが在るかどうかサーチ
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CREMBF_MBFID)) == 0 )
+               {
+                       break;
+               }
+       }
+       if ( i == m_iObjs )
+       {
+               return;
+       }
+
+       fputs("\n\n/* message buffer ID definetion */\n", fp);
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CREMBF_MBFID)) == 0 )
+               {
+                       fprintf(
+                               fp,
+                               "#define %s\t\t%d\n",
+                               m_pParamPacks[i]->GetParam(CREMBF_MBFID),
+                               m_iId[i]);
+               }
+       }
+
+       fprintf( fp,"\n#define TMAX_MBFID\t\t%d\n", m_iMaxId );
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiCreMbf::WriteCfgDef(FILE* fp)
+{
+       const char* pszParam;
+       bool blOutput;  int  i, j;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*      create message buffer objects         */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       // バッファ領域出力
+       blOutput = false;
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               pszParam = m_pParamPacks[i]->GetParam(CREMBF_MBF);
+               if ( strcmp(pszParam, "NULL") == 0 )
+               {
+                       if ( !blOutput )
+                       {
+                               fputs("\n/* message buffer area */\n", fp);
+                               blOutput = true;
+                       }
+
+                       fprintf(
+                               fp,
+                               "static VP kernel_mbf%d[(%s)];\n",
+                               m_iId[i],
+                               m_pParamPacks[i]->GetParam(CREMBF_MBFSZ));
+               }
+       }
+
+       if ( m_iObjs > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* message buffer control block for rom area */\n"
+                       "const T_KERNEL_MBFCB_ROM kernel_mbfcb_rom[%d] =\n"
+                       "\t{\n",
+                       m_iObjs);
+
+               // コントロールブロック(ROM部)出力
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(
+                               fp,
+                               "\t\t{(ATR)(%s), (UINT)(%s), (SIZE)(%s),",
+                               m_pParamPacks[i]->GetParam(CREMBF_MBFATR),
+                               m_pParamPacks[i]->GetParam(CREMBF_MAXMSZ),
+                               m_pParamPacks[i]->GetParam(CREMBF_MBFSZ));
+                       pszParam = m_pParamPacks[i]->GetParam(CREMBF_MBF);
+                       if ( strcmp(pszParam, "NULL") == 0 )
+                       {
+                               fprintf(
+                                       fp,
+                                       "(VP)kernel_mbf%d},\n",
+                                       m_iId[i]);
+                       }
+                       else
+                       {
+                               fprintf(
+                                       fp,
+                                       "(VP)(%s)},\n",
+                                       m_pParamPacks[i]->GetParam(CREMBF_MBF));
+                       }
+               }
+               fprintf(fp, "\t};\n");
+       }
+
+       // コントロールブロック(RAM部)出力
+       if ( m_iObjs > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* message buffer control block for ram area */\n"
+                       "T_KERNEL_MBFCB_RAM kernel_mbfcb_ram[%d];\n",
+                       m_iObjs);
+       }
+
+       // コントロールブロックテーブル出力
+       if ( m_iMaxId > 0 )
+       {
+               fprintf(
+                       fp,
+                       "\n/* message buffer control block table */\n"
+                       "T_KERNEL_MBFCB_RAM *kernel_mbfcb_ram_tbl[%d] =\n"
+                       "\t{\n",
+                       m_iMaxId);
+
+               for ( i = 0; i < m_iMaxId; i++ )
+               {
+                       // ID検索
+                       for ( j = 0; j < m_iObjs; j++ )
+                       {
+                               if ( m_iId[j] == i + 1 )
+                               {
+                                       break;
+                               }
+                       }
+                       if ( j < m_iObjs )
+                       {
+                               // オブジェクトが存在した場合
+                               fprintf(fp, "\t\t&kernel_mbfcb_ram[%d],\n", j);
+                       }
+                       else
+                       {
+                               // オブジェクトが無い場合
+                               fputs("\t\tNULL,\n", fp);
+                       }
+               }
+               fputs("\t};\n", fp);
+       }
+
+       // 個数情報出力
+       fprintf(
+               fp,
+               "\n/* mail box control block count */\n"
+               "const INT kernel_mbfcb_cnt = %d;\n",
+               m_iMaxId);
+}
+
+
+// cfgファイル初期化部書き出し
+void  CApiCreMbf::WriteCfgIni(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       // 初期化部出力
+       fprintf(
+               fp,
+               "\t\n\t\n"
+               "\t/* initialize message buffer control block */\n"
+               "\tfor ( i = 0; i < %d; i++ )\n"
+               "\t{\n"
+               "\t\tkernel_mbfcb_ram[i].mbfcb_rom = &kernel_mbfcb_rom[i];\n"
+               "\t}\n",
+               m_iObjs);
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiCreMbf::WriteCfgStart(FILE* fp)
+{
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       fputs("\tkernel_ini_mbf();\t\t/* initialize message buffer */\n", fp);
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/crembx.cpp b/cfgrtr/source/crembx.cpp
new file mode 100755 (executable)
index 0000000..04abf8e
--- /dev/null
@@ -0,0 +1,114 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_MBX API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "crembx.h"
+#include "analyze.h"
+
+
+#define CREMBX_MBXID           0
+#define CREMBX_MBXATR          1
+#define CREMBX_MAXPRI          2
+#define CREMBX_MPRIHD          3
+
+
+
+// コンストラクタ
+CApiCreMbx::CApiCreMbx()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 3;          // 3パラメーターのブロック
+       m_iParams = 2;
+}
+
+// デストラクタ
+CApiCreMbx::~CApiCreMbx()
+{
+}
+
+
+
+// APIの解析
+int CApiCreMbx::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "CRE_MBX") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "KERNEL_MAX_MBXID") == 0 )
+       {
+               int iId;
+
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMaxId = iId;
+
+               return CFG_ERR_OK;
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// ID 定義ファイル書き出し
+void CApiCreMbx::WriteId(FILE* fp)
+{
+
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiCreMbx::WriteCfgDef(FILE* fp)
+{
+       const char* pszParam;
+       bool blOutput;
+       int  i, j;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*         create mailbox objects             */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       fprintf(fp, "\n\n_KERNEL_T_MBXCB _kernel_mbxcb_tbl[64];\n");
+       fprintf(fp, "\n\nconst ID _kernel_max_mbxid = 64;\n");
+}
+
+
+// cfgファイル初期化部書き出し
+void  CApiCreMbx::WriteCfgIni(FILE* fp)
+{
+
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiCreMbx::WriteCfgStart(FILE* fp)
+{
+
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/crempf.cpp b/cfgrtr/source/crempf.cpp
new file mode 100755 (executable)
index 0000000..08da5b0
--- /dev/null
@@ -0,0 +1,114 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    CRE_MPF API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "crempf.h"
+#include "analyze.h"
+
+
+#define CREMPF_MPFID           0
+#define CREMPF_MPFATR          1
+#define CREMPF_BLKCNT          2
+#define CREMPF_BLKSZ           3
+#define CREMPF_MPF                     4
+
+
+
+// コンストラクタ
+CApiCreMpf::CApiCreMpf()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 4;          // 4パラメーターのブロック
+       m_iParams = 2;
+}
+
+// デストラクタ
+CApiCreMpf::~CApiCreMpf()
+{
+}
+
+
+
+// APIの解析
+int CApiCreMpf::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "CRE_MPF") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "KERNEL_MAX_MPFID") == 0 )
+       {
+               int iId;
+
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMaxId = iId;
+
+               return CFG_ERR_OK;
+       }
+       
+       return CFG_ERR_NOPROC;
+}
+
+
+// ID 定義ファイル書き出し
+void CApiCreMpf::WriteId(FILE* fp)
+{
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiCreMpf::WriteCfgDef(FILE* fp)
+{
+       const char* pszParam;
+       bool blOutput;
+       int  i, j;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*   create fixed size memory-pool objects    */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       fprintf(fp, "\n\n_KERNEL_T_MPFCB _kernel_mpfcb_tbl[64];\n");
+       fprintf(fp, "\n\nconst ID _kernel_max_mpfid = 64;\n");
+}
+
+
+// cfgファイル初期化部書き出し
+void  CApiCreMpf::WriteCfgIni(FILE* fp)
+{
+
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiCreMpf::WriteCfgStart(FILE* fp)
+{
+
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/cresem.cpp b/cfgrtr/source/cresem.cpp
new file mode 100755 (executable)
index 0000000..d4dc2c7
--- /dev/null
@@ -0,0 +1,306 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4 Advance configurator                           
+//    CRE_SEM API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2006 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "cresem.h"
+#include "analyze.h"
+#include "readcfg.h"
+
+
+#define CRESEM_SEMID           0
+#define CRESEM_SEMATR          1
+#define CRESEM_SEMCNT          2
+#define CRESEM_MAXSEM          3
+
+
+
+// コンストラクタ
+CApiCreSem::CApiCreSem()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 3;          // 3パラメーターのブロック
+       m_iParams = 2;
+}
+
+// デストラクタ
+CApiCreSem::~CApiCreSem()
+{
+}
+
+
+// APIの解析
+int CApiCreSem::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "CRE_SEM") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "KERNEL_MAX_SEMID") == 0 )
+       {
+               int iId;
+
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMaxId = iId;
+
+               return CFG_ERR_OK;
+       }
+       
+       return CFG_ERR_NOPROC;
+}
+
+
+// ID 定義ファイル書き出し
+void CApiCreSem::WriteId(FILE* fp)
+{
+       int i;
+
+       // %jp{コメントを出力}
+       fputs("\n\n/* Semaphore object ID definetion */\n\n", fp);
+
+
+       // %jp{ID定義を出力}
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CRESEM_SEMID)) == 0 )
+               {
+                       fprintf(
+                               fp,
+                               "#define %s\t\t%d\n",
+                               m_pParamPacks[i]->GetParam(CRESEM_SEMID),
+                               m_iId[i]);
+               }
+       }
+       
+       // %jp{ID最大値定義を出力}
+       fprintf( fp,
+               "\n"
+               "#ifdef  TMAX_SEMID\n"
+               "#undef  TMAX_SEMID\n"
+               "#endif\n"
+               "\n"
+               "#define TMAX_SEMID\t\t%d\n\n", m_iMaxId );
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiCreSem::WriteCfgDef(FILE* fp)
+{
+       int  i;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*         create semaphore objects           */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       if ( m_iMaxId > 0 )
+       {
+#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY
+#if _KERNEL_SEMCB_SPLIT_RO
+       // %jp{ブロック配列&ROM分離}
+       {
+               // %jp{RAM部出力}
+               fprintf(fp, "\n_KERNEL_T_SEMCB _kernel_semcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t{");
+                               WriteSemcbRam(fp, iObjNum);
+                               fprintf(fp, "},\n");
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{0},\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");
+
+               // %jp{ROM部出力}
+               fprintf(fp, "\nconst _KERNEL_T_SEMCB_RO _kernel_semcb_ro_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t{");
+                               WriteSemcbRom(fp, iObjNum);
+                               fprintf(fp, "},\n");
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{0},\n");
+                       }
+               }
+               fprintf(fp, "\t};\n\n");
+       }
+#else
+       // %jp{ブロック配列&統合TCB}
+       {
+               // %jp{RAM部出力}
+               fprintf(fp, "\n_KERNEL_T_SEMCB _kernel_semcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t{");
+                               WriteSemcbRam(fp, iObjNum);
+                               WriteSemcbRom(fp, iObjNum);
+                               fprintf(fp, "},\n");
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{{0}, },\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");
+       }
+#endif
+#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY
+#if _KERNEL_SEMCB_SPLIT_RO
+       // %jp{ポインタ配列&ROM分離}
+       {
+               fprintf(fp, "\n");
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(fp, "const _KERNEL_T_SEMCB_RO _kernel_semcb_ro_blk_%d = {", m_iId[i]);
+                       WriteSemcbRom(fp, i);
+                       fprintf(fp, "};\n");
+               }
+               fprintf(fp, "\n");
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(fp, "_KERNEL_T_SEMCB _kernel_semcb_blk_%d = {", m_iId[i]);
+                       WriteSemcbRam(fp, i);
+                       fprintf(fp, "};\n");
+               }
+               fprintf(fp, "\n");
+               fprintf(fp, "\n_KERNEL_T_SEMCB *_kernel_semcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t&_kernel_semcb_blk_%d,\n", i);
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\tNULL,\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");          
+       }
+#else
+       // %jp{ポインタ配列&統合TCB}
+       {
+               fprintf(fp, "\n");
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(fp, "_KERNEL_T_SEMCB _kernel_semcb_blk_%d = {", m_iId[i]);
+                       WriteSemcbRam(fp, i);
+                       WriteSemcbRom(fp, i);
+                       fprintf(fp, "};\n");
+               }
+               fprintf(fp, "\n");
+               fprintf(fp, "\n_KERNEL_T_SEMCB *_kernel_semcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t&_kernel_semcb_blk_%d,\n", i);
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\tNULL,\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");          
+       }
+#endif
+#endif
+       }
+
+       // テーブルサイズ情報出力
+       fprintf(
+               fp,
+               "\nconst ID     _kernel_max_semid = %d;\n",
+               m_iMaxId);
+}
+
+
+void CApiCreSem::WriteSemcbRam(FILE *fp, int iObj)
+{
+#if _KERNEL_SEMCB_QUE
+       fprintf(fp, "{0}, ");                                                                                                           /* %jp{キュー} */
+#endif
+
+#if _KERNEL_SEMCB_SEMCNT
+       fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRESEM_SEMCNT));            /* %jp{セマフォの資源数} */
+#endif
+}
+
+
+void CApiCreSem::WriteSemcbRom(FILE *fp, int iObj)
+{
+#if _KERNEL_SEMCB_SEMATR
+       fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRESEM_SEMATR));            /* %jp{セマフォ属性} */
+#endif
+
+#if _KERNEL_SEMCB_MAXSEM
+       fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRESEM_MAXSEM));            /* %jp{セマフォの最大資源数} */
+#endif
+}
+
+
+
+// cfgファイル初期化部書き出し
+void  CApiCreSem::WriteCfgIni(FILE* fp)
+{
+#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY && _KERNEL_SEMCB_SPLIT_RO
+       if ( m_iObjs <= 0 )
+       {
+               return;
+       }
+
+       fprintf(fp, "\n\t/* semaphores */\n");
+       for ( int i = 0; i < m_iObjs; i++ )
+       {
+               fprintf(fp, "\t_kernel_semcb_blk_%d.semcb_ro = &_kernel_semcb_ro_blk_%d;\n", m_iId[i], m_iId[i]);
+       }       
+#endif
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiCreSem::WriteCfgStart(FILE* fp)
+{
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2006 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/cretsk.cpp b/cfgrtr/source/cretsk.cpp
new file mode 100755 (executable)
index 0000000..f1e8a7e
--- /dev/null
@@ -0,0 +1,440 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4 Advance Configulator                          
+//    CRE_TSK API                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2006 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "readcfg.h"
+#include "defercd.h"
+#include "cretsk.h"
+#include "analyze.h"
+
+
+// parameter
+#define CRETSK_TSKID           0
+#define CRETSK_TSKATR          1
+#define CRETSK_EXINF           2
+#define CRETSK_TASK                    3
+#define CRETSK_ITSKPRI         4
+#define CRETSK_STKSZ           5
+#define CRETSK_STK                     6
+
+
+
+// %jp{コンストラクタ}%en{constructor}
+CApiCreTsk::CApiCreTsk()
+{
+       // %jp{パラメーター構文設定}
+       m_iParamSyntax[0] = 0;          // %jp{単独パラメーター}
+       m_iParamSyntax[1] = 6;          // %jp{6パラメーターのブロック}
+       m_iParams = 2;
+}
+
+
+// %jp{デストラクタ}%en{destructor}
+CApiCreTsk::~CApiCreTsk()
+{
+}
+
+
+// %jp{APIの解析}
+int CApiCreTsk::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "CRE_TSK") == 0 )
+       {
+               return AddParams(pszParams);                            // %jp{APIとしてパラメータ分解を行う}
+       }
+       else if ( strcmp(pszApiName, "KERNEL_MAX_TSKID") == 0 )
+       {
+               if ( m_iMaxId > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+               
+               int iId;
+               if ( (iId = atoi(pszParams)) <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+               
+               m_iMaxId = iId;
+               
+               return CFG_ERR_OK;
+       }
+       
+       return CFG_ERR_NOPROC;
+}
+
+
+// 自動ID番号割り当て
+int CApiCreTsk::AutoId(void)
+{
+       if ( m_iMaxId == 0 )
+       {
+               m_iMaxId = _KERNEL_TMAX_TSKID;
+       }
+
+       return CApiDef::AutoId();
+}
+
+
+
+// %jp{ID 定義ファイル書き出し}
+void CApiCreTsk::WriteId(FILE* fp)
+{
+       int i;
+       
+       // %jp{コメントを出力}
+       fputs("\n\n/* Task object ID definetion */\n\n", fp);
+
+       // %jp{ID定義を出力}
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( atoi(m_pParamPacks[i]->GetParam(CRETSK_TSKID)) == 0 )
+               {
+                       fprintf(
+                               fp,
+                               "#define %s\t\t%d\n",
+                               m_pParamPacks[i]->GetParam(CRETSK_TSKID),
+                               m_iId[i]);
+               }
+       }
+       
+       // %jp{ID最大値定義を出力}
+       fprintf( fp,
+               "\n"
+               "#ifdef  TMAX_TSKID\n"
+               "#undef  TMAX_TSKID\n"
+               "#endif\n"
+               "\n"
+               "#define TMAX_TSKID\t\t%d\n\n", m_iMaxId );
+}
+
+
+
+// %jp{cfgファイル定義部書き出し}
+void CApiCreTsk::WriteCfgDef(FILE* fp)
+{
+       const char* pszParam;
+       int         i;
+       
+       // %jp{コメント出力}
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*          create task objects               */\n"
+               "/* ------------------------------------------ */\n\n"
+               , fp);
+       
+       
+       // %jp{スタック領域出力}
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               pszParam = m_pParamPacks[i]->GetParam(CRETSK_STK);
+               if ( strcmp(pszParam, "NULL") == 0 )
+               {
+                       fprintf(
+                               fp,
+                               "static VP _kernel_tsk%d_stk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\n",
+                               m_iId[i],
+                               m_pParamPacks[i]->GetParam(CRETSK_STKSZ));
+               }
+       }
+       
+
+#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY
+#if _KERNEL_TCB_SPLIT_RO
+       // %jp{ブロック配列&ROM分離}
+       {
+               // %jp{RAM部出力}
+               fprintf(fp, "\n_KERNEL_T_TCB _kernel_tcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t{");
+                               WriteTcbRam(fp, iObjNum);
+                               fprintf(fp, "},\n");
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{{0}, },\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");
+
+               // %jp{ROM部出力}
+               fprintf(fp, "\nconst _KERNEL_T_TCB_RO _kernel_tcb_ro_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t{");
+                               WriteTcbRom(fp, iObjNum);
+                               fprintf(fp, "},\n");
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{0},\n");
+                       }
+               }
+               fprintf(fp, "\t};\n\n");
+       }
+#else
+       // ブロック配列&統合TCB
+       {
+               // %jp{RAM部出力}
+               fprintf(fp, "\n_KERNEL_T_TCB _kernel_tcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t{");
+                               WriteTcbRam(fp, iObjNum);
+                               WriteTcbRom(fp, iObjNum);
+                               fprintf(fp, "},\n");
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\t{{0}, },\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");
+       }
+#endif
+#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY
+#if _KERNEL_TCB_SPLIT_RO
+       // ポインタ配列&ROM分離
+       {
+               fprintf(fp, "\n");
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(fp, "const _KERNEL_T_TCB_RO _kernel_tcb_ro_blk_%d = {", m_iId[i]);
+                       WriteTcbRom(fp, i);
+                       fprintf(fp, "};\n");
+               }
+               fprintf(fp, "\n");
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(fp, "_KERNEL_T_TCB _kernel_tcb_blk_%d = {", m_iId[i]);
+                       WriteTcbRam(fp, i);
+                       fprintf(fp, "};\n");
+               }
+               fprintf(fp, "\n");
+               fprintf(fp, "\n_KERNEL_T_TCB *_kernel_tcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t&_kernel_tcb_blk_%d,\n", i);
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\tNULL,\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");          
+       }
+#else
+       // ポインタ配列&統合TCB
+       {
+               fprintf(fp, "\n");
+               for ( i = 0; i < m_iObjs; i++ )
+               {
+                       fprintf(fp, "_KERNEL_T_TCB _kernel_tcb_blk_%d = {", m_iId[i]);
+                       WriteTcbRam(fp, i);
+                       WriteTcbRom(fp, i);
+                       fprintf(fp, "};\n");
+               }
+               fprintf(fp, "\n");
+               fprintf(fp, "\n_KERNEL_T_TCB *_kernel_tcb_tbl[%d] =\n\t{\n", m_iMaxId);
+               for ( i = 1; i <= m_iMaxId; i++ )
+               {
+                       int iObjNum = IdToObjNum(i);
+                       if ( iObjNum >= 0 )
+                       {
+                               fprintf(fp, "\t\t&_kernel_tcb_blk_%d,\n", i);
+                       }
+                       else
+                       {
+                               fprintf(fp, "\t\tNULL,\n");
+                       }
+               }
+               fprintf(fp, "\t};\n");          
+       }
+#endif
+#endif
+       
+       // %jp{タスク情報出力}
+       fprintf(
+               fp,
+               "\nconst ID     _kernel_max_tskid = %d;\n",
+               m_iMaxId);
+}
+
+
+
+void CApiCreTsk::WriteTcbRam(FILE *fp, int iObj)
+{
+#if _KERNEL_TCB_CTXCB
+       fprintf(fp, "{0}, ");                           /* %jp{タスクのコンテキスト} */
+#endif
+
+#if _KERNEL_TCB_QUE
+       fprintf(fp, "NULL, ");                          /* %jp{属しているキュー} */
+#endif
+
+#if _KERNEL_TCB_QUEOBJ
+#if _KERNEL_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST
+       fprintf(fp, "0, ");                                     /* %jp{キューに接続する為のオブジェクト} */
+#elif _KERNEL_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST
+       fprintf(fp, "0, 0, ");                          /* %jp{キューに接続する為のオブジェクト} */
+#endif
+#endif
+       
+#if _KERNEL_TCB_TOQOBJ
+       fprintf(fp, "0, 0, 0, ");                       /* %jp{タイムアウトキュー} */
+#endif
+
+#if _KERNEL_TCB_TSKSTAT
+       fprintf(fp, "0, ");                                     /* %jp{タスク状態} */
+#endif
+
+#if _KERNEL_TCB_TSKPRI
+       fprintf(fp, "0, ");                                     /* %jp{タスクの現在優先度} */
+#endif
+
+#if _KERNEL_TCB_TSKBPRI
+       fprintf(fp, "0, ");                                     /* %jp{タスクのベース優先度} */
+#endif
+
+#if _KERNEL_TCB_TSKWAIT
+       fprintf(fp, "0, ");                                     /* %jp{待ち要因} */
+#endif
+
+#if _KERNEL_TCB_WOBJID
+       fprintf(fp, "0, ");                                     /* %jp{待ち対象のオブジェクトのID番号} */
+#endif
+
+#if _KERNEL_TCB_ACTCNT
+       fprintf(fp, "0, ");                                     /* %jp{起動要求キューイング回数} */
+#endif
+
+#if _KERNEL_TCB_WUPCNT
+       fprintf(fp, "0, ");                                     /* %jp{起床要求キューイング回数} */
+#endif
+
+#if _KERNEL_TCB_SUSCNT
+       fprintf(fp, "0, ");                                     /* %jp{強制待ち要求ネスト回数} */
+#endif
+
+#if _KERNEL_TCB_ERCD
+       fprintf(fp, "0, ");                                     /* ercd */
+#endif
+
+#if _KERNEL_TCB_DATA
+       fprintf(fp, "0, ");                                     /* data */
+#endif
+
+#if _KERNEL_TCB_TSKID
+       fprintf(fp, "0, ");                                     /* tskid */
+#endif
+}
+
+
+void CApiCreTsk::WriteTcbRom(FILE *fp, int iObj)
+{
+#if _KERNEL_TCB_TSKATR
+       fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_TSKATR));    /**< %jp{タスク属性} */
+#endif
+
+#if _KERNEL_TCB_EXINF  /* exinf */
+       fprintf(fp, "(_KERNEL_TSK_T_EXINF)(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_EXINF));                /* %jp{タスクの拡張情報} */
+#endif
+
+#if _KERNEL_TCB_TASK
+       fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_TASK));              /* %jp{タスクの起動番地} */
+#endif
+
+#if _KERNEL_TCB_ITSKPRI
+       fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_ITSKPRI));   /* %jp{タスクの起動時優先度} */
+#endif
+
+#if _KERNEL_TCB_STKSZ
+       fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_STKSZ));             /* %jp{タスクのスタックのサイズ(バイト数)} */
+#endif
+
+#if _KERNEL_TCB_STK
+       if ( strcmp(m_pParamPacks[iObj]->GetParam(CRETSK_STK), "NULL") == 0 )
+       {
+               fprintf(fp, "_kernel_tsk%d_stk, ", m_iId[iObj];
+       }
+       else
+       {
+               fprintf(fp, "(%s), ", m_pParamPacks[iObj]->GetParam(CRETSK_STK));       /* %jp{タスクのスタック領域の先頭番地} */
+       }
+#endif
+
+#if _KERNEL_TCB_ISP
+       if ( strcmp(m_pParamPacks[iObj]->GetParam(CRETSK_STK), "NULL") == 0 )
+       {
+               fprintf(fp, "((VB*)_kernel_tsk%d_stk + sizeof(_kernel_tsk%d_stk)), ", m_iId[iObj], m_iId[iObj]);
+       }
+       else
+       {
+               fprintf(fp, "(VP)((VB *)(%s) + (SIZE)(%s)), ", m_pParamPacks[iObj]->GetParam(CRETSK_STK), m_pParamPacks[iObj]->GetParam(CRETSK_STKSZ));
+       }
+#endif
+}
+
+
+
+// cfgファイル初期化部書き出し
+void  CApiCreTsk::WriteCfgIni(FILE* fp)
+{
+#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY && _KERNEL_TCB_SPLIT_RO
+       if ( m_iObjs <= 0 )
+       {
+               return;
+       }
+
+       fprintf(fp, "\n\t/* Tasks */\n");
+       for ( int i = 0; i < m_iObjs; i++ )
+       {
+               fprintf(fp, "\t_kernel_tcb_blk_%d.tcb_ro = &_kernel_tcb_ro_blk_%d;\n", m_iId[i], m_iId[i]);
+       }       
+#endif
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiCreTsk::WriteCfgStart(FILE* fp)
+{
+       int i;
+
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               if ( strstr(m_pParamPacks[i]->GetParam(CRETSK_TSKATR), "TA_ACT") != NULL )
+               {
+                       fprintf(fp,
+                               "\tact_tsk(%s);\n",
+                               m_pParamPacks[i]->GetParam(CRETSK_TSKID));
+               }
+       }
+}
+
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2006 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/defercd.cpp b/cfgrtr/source/defercd.cpp
new file mode 100755 (executable)
index 0000000..89d7430
--- /dev/null
@@ -0,0 +1,44 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    エラーコード管理                                                        
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include "defercd.h"
+
+
+static const char *szErrMsg[] =
+       {
+               "unanticipated EOF.",           // 予期せぬEOF
+               "illegal CR.",                          // 不正な改行
+               "status too long.",                     // 1ステートが長すぎる
+               "syntax error." ,                       // 構文エラー
+               "expect \')\' but found.",      // ()の不整合
+               "expect \'}\' but found.",      // {}の不整合
+               "expect \';\' but found.",      // セミコロンが無い
+               "illegal text.",                        // 不正な文字列定数
+               "conflict ID.",                         // ID衝突
+               "illegal parameter.",            // パラメーター不正
+               "multiple definition.",         // 唯一であるべきAPI定義が複数
+               "conflict definition.",          // 定義衝突
+       };
+
+
+// エラー文字列取得
+const char* GetErrMessage(int iErr)
+{
+       if ( iErr < 1 || iErr > (int)(sizeof(szErrMsg)/sizeof(char *)) )
+       {
+               return "unknown expression error.";
+       }
+
+       return szErrMsg[iErr - 1];
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/defexc.cpp b/cfgrtr/source/defexc.cpp
new file mode 100755 (executable)
index 0000000..0d5fb5e
--- /dev/null
@@ -0,0 +1,156 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    DEF_EXC API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "defexc.h"
+#include "analyze.h"
+
+
+#define DEFEXC_EXCNO           0
+#define DEFEXC_EXCATR          1
+#define DEFEXC_EXCHDR          2
+
+
+// コンストラクタ
+CApiDefExc::CApiDefExc()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 2;          // 2つのパラメーターブロック
+       m_iParams = 2;
+
+       m_iMaxExcNo = 0;
+       m_iMinExcNo = 0;
+}
+
+// デストラクタ
+CApiDefExc::~CApiDefExc()
+{
+}
+
+
+// 自動ID番号割り当て
+int CApiDefExc::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// APIの解析
+int CApiDefExc::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "DEF_EXC") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "HOS_MAX_EXCNO") == 0 )
+       {
+               int iExcNo;
+
+               if ( m_iMaxExcNo > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( (iExcNo = atoi(pszParams)) < 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMaxExcNo = iExcNo;
+
+               return CFG_ERR_OK;
+       }
+       else if ( strcmp(pszApiName, "HOS_MIN_EXCNO") == 0 )
+       {
+               int iExcNo;
+
+               if ( m_iMinExcNo > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( (iExcNo = atoi(pszParams)) < 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iMinExcNo = iExcNo;
+
+               return CFG_ERR_OK;
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiDefExc::WriteCfgDef(FILE* fp)
+{
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*    CPU exception handler control objects   */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       // 割り込み管理テーブル生成
+       fputs("\n/* interrupt control */\n", fp);
+
+       if ( m_iMaxExcNo - m_iMinExcNo + 1 > 0 )
+       {
+               fprintf(
+                       fp,
+                       "T_KERNEL_EXCCB kernel_exccb_tbl[%d];\t\t/* CPU exception handler control block table */\n",
+                       m_iMaxExcNo - m_iMinExcNo + 1);
+       }
+
+       fprintf(
+               fp,
+               "const INT      kernel_exccb_cnt = %d;\t\t/* CPU exception handler control block count */\n"
+               "const EXCNO    kernel_min_excno = %d;\t\t/* minimum CPU exception handler number */\n",
+               m_iMaxExcNo - m_iMinExcNo + 1,
+               m_iMinExcNo);   
+}
+
+
+// cfgファイル初期化部書き出し
+void  CApiDefExc::WriteCfgIni(FILE* fp)
+{
+       int i;
+
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       // コメント出力
+       fputs("\n\t/* initialize CPU exception handler table */\n", fp);
+       
+       // 初期化部出力
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               fprintf(
+                       fp,
+                       "\tkernel_exccb_tbl[%s].exchdr = (FP)(%s);\n",
+                       m_pParamPacks[i]->GetParam(DEFEXC_EXCNO),
+                       m_pParamPacks[i]->GetParam(DEFEXC_EXCHDR));
+       }
+}
+
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/definh.cpp b/cfgrtr/source/definh.cpp
new file mode 100755 (executable)
index 0000000..4157217
--- /dev/null
@@ -0,0 +1,89 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    DEF_INH API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "definh.h"
+#include "analyze.h"
+#include "readcfg.h"
+
+
+#define ATTINI_INIATR          0
+#define ATTINI_EXINF           1
+#define ATTINI_INIRTN          2
+
+
+// コンストラクタ
+CApiDefInh::CApiDefInh()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 2;          // 2個のパラメーターブロック
+       m_iParams         = 2;
+}
+
+
+// デストラクタ
+CApiDefInh::~CApiDefInh()
+{
+}
+
+
+
+// APIの解析
+int CApiDefInh::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "DEF_INH") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// 文字列を展開
+int CApiDefInh::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+// cfgファイル定義部書き出し
+void  CApiDefInh::WriteCfgDef(FILE* fp)
+{
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*        define interrupt handler            */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       fprintf(fp,
+               "\n\n"
+#if !_KERNEL_SPT_DEF_INH
+               "const "
+#endif
+               "_KERNEL_T_INHINF _kernel_inh_tbl[%d];\n\n",
+               KERNEL_TMAX_INH_INHNO - KERNEL_TMIN_INH_INHNO + 1);
+
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiDefInh::WriteCfgStart(FILE* fp)
+{
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/deftex.cpp b/cfgrtr/source/deftex.cpp
new file mode 100755 (executable)
index 0000000..de879b7
--- /dev/null
@@ -0,0 +1,126 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    DEF_TEX API の処理                                                      
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "deftex.h"
+#include "analyze.h"
+
+
+#define DEFTEX_TSKID           0
+#define DEFTEX_TEXATR          1
+#define DEFTEX_TEXRTN          2
+
+
+
+// コンストラクタ
+CApiDefTex::CApiDefTex()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 2;          // 2パラメーターのブロック
+       m_iParams = 2;
+}
+
+// デストラクタ
+CApiDefTex::~CApiDefTex()
+{
+}
+
+
+// APIの解析
+int CApiDefTex::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "DEF_TEX") == 0 )
+       {
+               return AddParams(pszParams);
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// 自動ID番号割り当て
+int CApiDefTex::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiDefTex::WriteCfgDef(FILE* fp)
+{
+       int  i;
+
+       if ( m_iObjs <= 0 )
+       {
+               return;
+       }
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*          task exception objects            */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       fprintf(
+               fp,
+               "\n/* task exception control block */\n"
+               "const T_KERNEL_TEXCB_RAM kernel_texcb_ram[%d] =\n"
+               "\t{\n",
+               m_iObjs);
+
+       // コントロールブロック(ROM部)出力
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               fprintf(
+                       fp,
+                       "\t\t{0, (FP)(%s)},\n",
+                       m_pParamPacks[i]->GetParam(DEFTEX_TEXRTN));
+       }
+       fprintf(fp, "\t};\n");
+}
+
+
+// cfgファイル初期化部書き出し
+void  CApiDefTex::WriteCfgIni(FILE* fp)
+{
+       int i;
+
+       // オブジェクト存在チェック
+       if ( m_iObjs == 0 )
+       {
+               return;
+       }
+
+       // 初期化部出力
+       fputs(
+               "\t\n\t\n"
+               "\t/* initialize task exception handler */\n",
+               fp);
+
+       for ( i = 0; i < m_iObjs; i++ )
+       {
+               fprintf(
+                       fp,
+                       "\tkernel_tcb_ram_tbl[(%s) - TMIN_TSKID]->texcb = &kernel_texcb_rom[%d];\n",
+                       m_pParamPacks[i]->GetParam(DEFTEX_TSKID),
+                       i);
+       }
+}
+
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/hos4cfg.cpp b/cfgrtr/source/hos4cfg.cpp
new file mode 100755 (executable)
index 0000000..9876056
--- /dev/null
@@ -0,0 +1,413 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4 Advance コンフィギュレーター                           
+//    メインルーチン                                                          
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "readcfg.h"
+#include "defercd.h"
+#include "read.h"
+#include "analyze.h"
+#include "apiinc.h"
+#include "idlstk.h"
+#include "intstk.h"
+#include "knlheap.h"
+#include "timtic.h"
+#include "maxtpri.h"
+#include "cretsk.h"
+#include "deftex.h"
+#include "cresem.h"
+#include "creflg.h"
+#include "credtq.h"
+#include "crembx.h"
+#include "crembf.h"
+#include "crempf.h"
+#include "crecyc.h"
+#include "crealm.h"
+#include "definh.h"
+#include "attisr.h"
+#include "attini.h"
+#include "defexc.h"
+
+
+#define DEFAULT_INPUTFILE              "system.i"
+#define DEFAULT_IDFILE                 "kernel_id.h"
+#define DEFAULT_CFGFILE                        "kernel_cfg.c"
+
+
+int  ReadConfigFile(FILE* fpConfig);   // コンフィギュレーションファイル読み込み
+void WriteIdFile(FILE* fp);                            // ID 定義ヘッダファイル出力
+void WriteCfgFile(FILE* fp);                   // C 言語ソース出力
+void PrintUsage(void);
+
+
+CApiInclude    g_ApiInclude;
+CApiIdleStack  g_ApiIdleStack;
+CApiMaxTpri    g_ApiMaxTpri;
+CApiIntStack   g_IntStack;
+CApiKernelHeap g_ApiKernelHeap;
+CApiTimTic     g_ApiTimTic;
+CApiCreTsk     g_ApiCreTsk;
+CApiDefTex     g_ApiDefTex;
+CApiCreSem     g_ApiCreSem;
+CApiCreFlg     g_ApiCreFlg;
+CApiCreDtq     g_ApiCreDtq;
+CApiCreMbx     g_ApiCreMbx;
+CApiCreMbf     g_ApiCreMbf;
+CApiCreMpf     g_ApiCreMpf;
+CApiCreCyc     g_ApiCreCyc;
+CApiCreAlm     g_ApiCreAlm;
+CApiDefInh     g_ApiDefInh;
+CApiAttIsr     g_ApiAttIsr;
+CApiAttIni     g_ApiAttIni;
+CApiDefExc     g_ApiDefExc;
+
+static const char *s_szPhysicalInputFile  = NULL;
+static const char *s_szIdFile             = DEFAULT_IDFILE;
+static const char *s_szCfgFile            = DEFAULT_CFGFILE;
+
+// API定義リスト
+static CApiDef* g_ApiList[] =
+       {
+               &g_ApiInclude,
+               &g_ApiIdleStack,
+               &g_IntStack,
+               &g_ApiKernelHeap,
+//             &g_ApiTimTic,
+               &g_ApiCreTsk,
+//             &g_ApiDefTex,
+               &g_ApiCreSem,
+               &g_ApiCreFlg,
+//             &g_ApiCreDtq,
+               &g_ApiCreMbx,
+//             &g_ApiCreMbf,
+               &g_ApiCreMpf,
+//             &g_ApiCreCyc,
+//             &g_ApiCreAlm,
+               &g_ApiDefInh,
+               &g_ApiAttIsr,
+               &g_ApiAttIni,
+//             &g_ApiDefExc,
+       };
+
+#define API_COUNT      ((int)(sizeof(g_ApiList) / sizeof(CApiDef*)))           // API個数
+
+
+
+
+// メイン関数
+int main(int argc, char *argv[])
+{
+       FILE* fpInput;
+       FILE* fpCfg;
+       FILE* fpId;
+       int  iErr;
+       int  i;
+
+       // コマンドライン解析
+       for ( i = 1; i < argc; i++ )
+       {
+               if ( strcmp(argv[i], "-c") == 0 )
+               {
+                       i++;
+                       if ( i >= argc )
+                       {
+                               fprintf(stderr, "option error \"-c\"\n");
+                               PrintUsage();
+                               return 1;
+                       }
+                       s_szCfgFile = argv[i];
+               }
+               else if ( strcmp(argv[i], "-i") == 0 )
+               {
+                       i++;
+                       if ( i >= argc )
+                       {
+                               fprintf(stderr, "option error \"-i\"\n");
+                               PrintUsage();
+                               return 1;
+                       }
+                       s_szIdFile = argv[i];
+               }
+               else if ( strcmp(argv[i], "-help") == 0 )
+               {
+                       PrintUsage();
+                       return 0;
+               }
+               else if ( argv[i][0] == '-' && argv[i][1] != '\0' )
+               {
+                       fprintf(stderr, "unknown option \"%s\"\n", argv[i]);
+                       PrintUsage();
+                       return 1;
+               }
+               else
+               {
+                       if ( s_szPhysicalInputFile != NULL )
+                       {
+                               fprintf(stderr, "too many input files\n");
+                               PrintUsage();
+                               return 1;
+                       }
+                       s_szPhysicalInputFile = argv[i];
+               }
+       }
+
+       // 入力ファイル省略時のデフォルト設定
+       if ( s_szPhysicalInputFile == NULL )
+       {
+               s_szPhysicalInputFile = DEFAULT_INPUTFILE;
+       }
+
+       // 入力ファイルオープン
+       if ( strcmp(s_szPhysicalInputFile, "-") == 0) {
+               s_szPhysicalInputFile = "stdin";
+               fpInput = stdin;
+       }
+       else if ( (fpInput = fopen(s_szPhysicalInputFile, "r")) == NULL )
+       {
+               fprintf(stderr, "could not open file \"%s\"\n", s_szPhysicalInputFile);
+               return 1;
+       }
+       
+       // コンフィギュレーションファイル読み込み
+       iErr = ReadConfigFile(fpInput) != 0;
+       fclose(fpInput);
+       if ( iErr != 0 )
+       {
+               return 1;
+       }
+
+       // 自動ID番号割り当て
+       for ( i = 0; i < API_COUNT; i++ )
+       {
+               g_ApiList[i]->AutoId();
+       }
+
+       // ID 定義ファイルオープン
+       if ( (fpId = fopen(s_szIdFile, "w")) == NULL )
+       {
+               fprintf(stderr, "could not open file \"%s\"\n", s_szIdFile);
+               return 1;
+       }
+
+       WriteIdFile(fpId);
+
+       fclose(fpId);
+
+
+       // Cfgファイルオープン
+       if ( (fpCfg = fopen(s_szCfgFile, "w")) == NULL )
+       {
+               fprintf(stderr, "could not open file \"%s\"\n", s_szCfgFile);
+               return 1;
+       }
+
+       WriteCfgFile(fpCfg);
+
+       fclose(fpCfg);
+
+       return 0;
+}
+
+
+// コンフィギュレーションファイル読み込み
+int ReadConfigFile(FILE* fpConfig)
+{
+       char szState[READ_MAX_STATE];
+       char szApiName[READ_MAX_STATE];
+       char szParams[READ_MAX_STATE];
+       int  iErr;
+       int  i;
+
+       CRead read(fpConfig, s_szPhysicalInputFile);    // 読み出しオブジェクト生成
+
+       // 読み込み
+       while ( (iErr = read.ReadState(szState)) != CFG_ERR_COMPLETE )
+       {
+               // 読み込みエラーチェック
+               if ( iErr != CFG_ERR_OK )
+               {
+                       fprintf(stderr, "%s line(%d) : %s\n",
+                               read.GetLogicalInputFile(),
+                               read.GetLogicalLineNum(), GetErrMessage(iErr));
+                       return 1;
+               }
+               
+               // 構文解析
+               iErr = CAnalyze::SplitState(szApiName, szParams, szState);
+               if ( iErr != CFG_ERR_OK )
+               {
+                       fprintf(stderr, "%s line(%d) : %s\n",
+                               read.GetLogicalInputFile(),
+                               read.GetLogicalLineNum(), GetErrMessage(iErr));
+                       return 1;
+               }
+               CAnalyze::SpaceCut(szApiName);
+               CAnalyze::SpaceCut(szParams);
+
+               // API検索
+               iErr = CFG_ERR_SYNTAX;
+               for ( i = 0; i < API_COUNT; i++ )
+               {
+                       iErr = g_ApiList[i]->AnalyzeApi(szApiName, szParams);
+                       if ( iErr != CFG_ERR_NOPROC )
+                       {
+                               break;
+                       }
+               }
+               if ( iErr != CFG_ERR_OK )
+               {
+                       fprintf(stderr, "%s line(%d) : %s\n",
+                                       read.GetLogicalInputFile(),
+                                       read.GetLogicalLineNum(), GetErrMessage(iErr));
+                       return 1;
+               }
+       }
+
+       return 0;
+}
+
+
+// ID定義ヘッダファイル出力
+void WriteIdFile(FILE* fp)
+{
+       int i;
+
+       /* ヘッダ出力 */
+       fputs(
+               "/* ------------------------------------------------------------------------ */\n"
+               "/*  HOS-V4a  kernel configuration                                           */\n"
+               "/*    kernel object ID definition                                           */\n"
+               "/*                                                                          */\n"
+               "/* ------------------------------------------------------------------------ */\n"
+               "\n\n"
+               "#ifndef __KERNEL__kernel_id_h__\n"
+               "#define __KERNEL__kernel_id_h__\n"
+               "\n"
+               , fp);
+
+       // ID 定義ファイル出力
+       for ( i = 0; i < API_COUNT; i++ )
+       {
+               g_ApiList[i]->WriteId(fp);
+       }
+
+       // フッタ出力
+       fputs(
+               "\n\n\n"
+               "#endif\t/* __KERNEL__kernel_id_h__ */\n"
+               "\n\n"
+               "/* ------------------------------------------------------------------------ */\n"
+               "/*  End of file                                                             */\n"
+               "/* ------------------------------------------------------------------------ */\n"
+               , fp);
+}
+
+
+// C 言語ソース出力
+void WriteCfgFile(FILE* fp)
+{
+       int i;
+
+       /* ヘッダ出力 */
+       fprintf(
+               fp,
+               "/* ------------------------------------------------------------------------ */\n"
+               "/*  HOS-V4a  kernel configuration                                           */\n"
+               "/*    kernel object create and initialize                                   */\n"
+               "/*                                                                          */\n"
+               "/* ------------------------------------------------------------------------ */\n"
+               "\n\n");
+
+       fprintf(fp, "#include \"kernel.h\"\n");
+       fprintf(fp, "#include \"arch/proc/%s/procatr.h\"\n", _KERNEL_PROCATR_INC_PATH);
+       fprintf(fp, "#include \"arch/proc/%s/proc.h\"\n",    _KERNEL_PROCATR_INC_PATH);
+       fprintf(fp, "#include \"arch/irc/%s/ircatr.h\"\n",   _KERNEL_IRCATR_INC_PATH);
+       fprintf(fp, "#include \"arch/irc/%s/irc.h\"\n",      _KERNEL_IRCATR_INC_PATH);
+       fprintf(fp, "#include \"config/cfgknl.h\"\n");
+       fprintf(fp, "#include \"parser/parsknl.h\"\n");
+       fprintf(fp, "#include \"core/opttyp.h\"\n");
+       fprintf(fp, "#include \"core/objid.h\"\n");
+       fprintf(fp, "#include \"core/objhdl.h\"\n");
+       fprintf(fp, "#include \"object/tskobj.h\"\n");
+       fprintf(fp, "#include \"object/semobj.h\"\n");
+       fprintf(fp, "#include \"object/flgobj.h\"\n");
+       fprintf(fp, "#include \"object/mbxobj.h\"\n");
+       fprintf(fp, "#include \"object/mpfobj.h\"\n");
+       fprintf(fp, "#include \"object/inhobj.h\"\n");
+       fprintf(fp, "#include \"object/isrobj.h\"\n");
+       
+//     fprintf(fp, "#include \"%s\"\n", s_szIdFile);
+       fprintf(fp, "#include \"kernel_id.h\"\n", s_szIdFile);
+
+
+       // ID 定義ファイル出力
+       for ( i = 0; i < API_COUNT; i++ )
+       {
+               g_ApiList[i]->WriteCfgDef(fp);
+       }
+
+       // 初期化関数コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*          initialize functions              */\n"
+               "/* ------------------------------------------ */\n",
+               fp);
+
+       // 初期化関数出力
+       fputs(
+               "\n/* object initialize */\n"
+               "void _kernel_cfg_ini(void)\n"
+               "{\n",
+               fp);
+       for ( i = 0; i < API_COUNT; i++ )
+       {
+               g_ApiList[i]->WriteCfgIni(fp);
+       }
+       fputs("}\n", fp);
+
+       // 初期化関数出力
+       fputs(
+               "\n/* start up */\n"
+               "void _kernel_cfg_sta(void)\n"
+               "{\n",
+               fp);
+       for ( i = 0; i < API_COUNT; i++ )
+       {
+               g_ApiList[i]->WriteCfgStart(fp);
+       }
+       fputs("}\n", fp);
+
+       // フッタ出力
+       fputs(
+               "\n\n"
+               "/* ------------------------------------------------------------------------ */\n"
+               "/*  End of file                                                             */\n"
+               "/* ------------------------------------------------------------------------ */\n"
+               , fp);
+}
+
+// 使い方表示
+void PrintUsage(void)
+{
+       fprintf(stderr,
+               "usage: hos4cfg [options] [input-file]\n"
+               "options are:\n"
+               "   -i FILE    specify auto-assginment headerfile (default: " DEFAULT_IDFILE ")\n"
+               "   -c FILE    specify kernel configuration file  (default: " DEFAULT_CFGFILE ")\n"
+               "   -help      show this help\n"
+               "\n"
+               "input-file (default: " DEFAULT_INPUTFILE ")\n");
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2006 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/idlstk.cpp b/cfgrtr/source/idlstk.cpp
new file mode 100755 (executable)
index 0000000..9d9978d
--- /dev/null
@@ -0,0 +1,110 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_IDL_STK API の処理                                                  
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "idlstk.h"
+#include "analyze.h"
+
+
+#define IDLSTK_STKSZ           0
+#define IDLSTK_STK                     1
+
+
+// コンストラクタ
+CApiIdleStack::CApiIdleStack()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParams = 2;
+}
+
+
+// デストラクタ
+CApiIdleStack::~CApiIdleStack()
+{
+}
+
+
+// 自動ID番号割り当て
+int CApiIdleStack::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// APIの解析
+int CApiIdleStack::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "KERNEL_IDL_STK") == 0 )
+       {
+               if ( m_iObjs > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               return AddParams(pszParams);
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiIdleStack::WriteCfgDef(FILE* fp)
+{
+       const char* pszSize;
+       const char* pszStack;
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*                 idle stack                 */\n"
+               "/* ------------------------------------------ */\n\n"
+               , fp);
+
+       // パラメータ読み出し
+       if ( m_iObjs > 0 )
+       {
+               pszSize  = m_pParamPacks[0]->GetParam(IDLSTK_STKSZ);
+               pszStack = m_pParamPacks[0]->GetParam(IDLSTK_STK);
+       }
+       else
+       {
+               pszSize  = "128";               // 指定が無ければデフォルトサイズ
+               pszStack = "NULL";              // 指定が無ければNULL(自動生成)
+       }
+
+       // アイドルループ用スタック出力
+       if ( strcmp(pszStack, "NULL") == 0 )
+       {
+               fprintf(
+                       fp,
+                       "VP         _kernel_idl_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* idle stack block*/\n"
+                       "const VP   _kernel_idl_stk   = (VP)(_kernel_idl_stkblk);\t/* idle stack */\n"
+                       "const SIZE _kernel_idl_stksz = (SIZE)sizeof(_kernel_idl_stkblk);\t/* idle stack size */\n",
+                       pszSize);
+       }
+       else
+       {
+               fprintf(
+                       fp,
+                       "const VP   _kernel_idl_stk   = (VP)(%s);\t/* idle stack */\n"
+                       "const SIZE _kernel_idl_stksz = (SIZE)(%s);\t/* idle stack */\n",
+                       pszStack,pszSize);
+       }
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/intstk.cpp b/cfgrtr/source/intstk.cpp
new file mode 100755 (executable)
index 0000000..f1cfbdb
--- /dev/null
@@ -0,0 +1,158 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_INT_STK API の処理                                                  
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "intstk.h"
+#include "analyze.h"
+#include "readcfg.h"
+
+
+#define INTSTK_STKSZ           0
+#define INTSTK_STK                     1
+
+
+// コンストラクタ
+CApiIntStack::CApiIntStack()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParams = 2;
+
+       // スタックポインタ
+       m_szStackPointer[0] = '\0';
+}
+
+
+// デストラクタ
+CApiIntStack::~CApiIntStack()
+{
+}
+
+
+// 自動ID番号割り当て
+int CApiIntStack::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// APIの解析
+int CApiIntStack::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "KERNEL_INT_STK") == 0 )
+       {
+               if ( m_iObjs > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               if ( m_szStackPointer[0] != '\0' )
+               {
+                       return CFG_ERR_DEF_CONFLICT;
+               }
+
+               return AddParams(pszParams);
+       }
+       else if ( strcmp(pszApiName, "KERNEL_INT_ISP") == 0 )
+       {
+               if ( m_iObjs > 0 )
+               {
+                       return CFG_ERR_DEF_CONFLICT;
+               }
+
+               if ( m_szStackPointer[0] != '\0' )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               strcpy(m_szStackPointer, pszParams);
+               return CFG_ERR_OK;
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiIntStack::WriteCfgDef(FILE* fp)
+{
+       const char* pszSize;
+       const char* pszStack;
+       int i;
+
+       // パラメータ読み出し
+       if ( m_iObjs <= 0 && m_szStackPointer[0] == '\0' )
+       {
+               return ;
+       }
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*             interrupt stack                */\n"
+               "/* ------------------------------------------ */\n\n"
+               , fp);
+
+       // 割り込み用スタックポインタ出力
+       if ( m_szStackPointer[0] != '\0' )
+       {
+               fprintf(
+                       fp,
+                       "const VP _kernel_int_isp[1] = {(VP)(%s)};\t/* interrupt initial stack pointer */\n",
+                       m_szStackPointer);
+       }
+       else
+       {
+               pszSize  = m_pParamPacks[0]->GetParam(INTSTK_STKSZ);
+               pszStack = m_pParamPacks[0]->GetParam(INTSTK_STK);
+               
+               if ( strcmp(pszStack, "NULL") == 0 )
+               {
+                       fprintf(
+                               fp,
+                               "VP         _kernel_int_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* interrupt stack block*/\n",
+                               pszSize, _KERNE_INTSTK_NUM);
+                               pszStack = "_kernel_int_stkblk";
+               }
+               else
+               {
+                       fprintf(
+                               fp,
+                               "const VP _kernel_int_isp[1] = {(VP)((VB *)(%s) + (%s))};\t/* interrupt initial stack pointer */\n",
+                               pszStack, pszSize);
+               }
+
+               fprintf(
+                       fp,
+                       "\n/* interrupt initial stack pointer */\n"
+                       "const VP   _kernel_int_isp[%d] =\n{\n",
+                       _KERNE_INTSTK_NUM);
+
+               for ( i = 0; i < _KERNE_INTSTK_NUM; i++ )
+               {
+                       fprintf(
+                               fp,
+                                       "\t(VP)((VB *)(%s) + ((((%s) / %d) & ~(sizeof(VP) - 1)) * %d)),\n",
+                                       pszStack, pszSize, _KERNE_INTSTK_NUM, i+1);
+               }
+
+               fprintf(
+                       fp,
+                       "};\n\n");
+       }
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2006 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/knlheap.cpp b/cfgrtr/source/knlheap.cpp
new file mode 100755 (executable)
index 0000000..537fc38
--- /dev/null
@@ -0,0 +1,108 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_KERNEL_HEAP API の処理                                              
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "knlheap.h"
+#include "analyze.h"
+
+
+
+// コンストラクタ
+CApiKernelHeap::CApiKernelHeap()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParams = 1;
+}
+
+
+// デストラクタ
+CApiKernelHeap::~CApiKernelHeap()
+{
+}
+
+
+// 自動ID番号割り当て
+int CApiKernelHeap::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// APIの解析
+int CApiKernelHeap::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       if ( strcmp(pszApiName, "KERNEL_HEP_MEM") == 0 )
+       {
+               if ( m_iObjs > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               return AddParams(pszParams);
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiKernelHeap::WriteCfgDef(FILE* fp)
+{
+       if ( m_iObjs <= 0 )
+       {
+               return;
+       }
+
+       if ( strcmp(m_pParamPacks[0]->GetParam(0), "0") == 0 )
+       {
+               return;
+       }
+
+       // コメント出力
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*                kernel heap                 */\n"
+               "/* ------------------------------------------ */\n"
+               , fp);
+
+       // ヒープ領域生成
+       fprintf(
+               fp,
+               "\n"
+               "VP _kernel_heap_mem[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* kernel heap */\n",
+               m_pParamPacks[0]->GetParam(0));
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiKernelHeap::WriteCfgIni(FILE* fp)
+{
+       if ( m_iObjs <= 0 )
+       {
+               return;
+       }
+       
+       if ( strcmp(m_pParamPacks[0]->GetParam(0), "0") == 0 )
+       {
+               return;
+       }
+       
+       fputs("\t_KERNEL_SYS_INI_MEM(_kernel_heap_mem, sizeof(_kernel_heap_mem));\t\t/* initialize kernel heap */\n\n", fp);
+}
+
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/maxtmout.cpp b/cfgrtr/source/maxtmout.cpp
new file mode 100755 (executable)
index 0000000..4ca2904
--- /dev/null
@@ -0,0 +1,92 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_MAX_TIMOUT API の処理                                               
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "maxtmout.h"
+#include "analyze.h"
+
+
+
+// コンストラクタ
+CApiMaxTimout::CApiMaxTimout()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParams         = 1;
+
+       m_iMaxTimout = 0;
+}
+
+
+// デストラクタ
+CApiMaxTimout::~CApiMaxTimout()
+{
+}
+
+
+
+// APIの解析
+int CApiMaxTimout::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       // API名チェック
+       if ( strcmp(pszApiName, "HOS_MAX_TIMOUT") != 0 )
+       {
+               return CFG_ERR_NOPROC;
+       }
+
+       if ( m_iMaxTimout > 0 )
+       {
+               return CFG_ERR_MULTIDEF;
+       }
+
+       if ( atoi(pszParams) <= 0 )
+       {
+               return CFG_ERR_PARAM;
+       }
+       m_iMaxTimout = atoi(pszParams);
+
+       return CFG_ERR_OK;
+}
+
+
+// 文字列を展開
+int CApiMaxTimout::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiMaxTimout::WriteCfgDef(FILE* fp)
+{
+       if ( m_iMaxTimout == 0 )
+       {
+               m_iMaxTimout = DEFAULT_MAXTIMOUT;
+       }
+
+       fprintf(
+               fp,
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*          create time-out queue             */\n"
+               "/* ------------------------------------------ */\n"
+               "\n"
+               "T_MKNL_TIMOUT mknl_timout[%d];\n"
+               "const INT     mknl_timout_size = %d;\n",
+               m_iMaxTimout,
+               m_iMaxTimout);
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/maxtpri.cpp b/cfgrtr/source/maxtpri.cpp
new file mode 100755 (executable)
index 0000000..b622528
--- /dev/null
@@ -0,0 +1,94 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_MAX_TPRI API の処理                                                 
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "maxtpri.h"
+#include "analyze.h"
+
+
+
+// コンストラクタ
+CApiMaxTpri::CApiMaxTpri()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParams         = 1;
+
+       m_iMaxPri = 0;
+}
+
+
+// デストラクタ
+CApiMaxTpri::~CApiMaxTpri()
+{
+}
+
+
+
+// APIの解析
+int CApiMaxTpri::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       // API名チェック
+       if ( strcmp(pszApiName, "HOS_MAX_TPRI") != 0 )
+       {
+               return CFG_ERR_NOPROC;
+       }
+
+       // 多重定義チェック
+       if ( m_iMaxPri > 0 )
+       {
+               return CFG_ERR_MULTIDEF;
+       }
+
+       if ( atoi(pszParams) <= 0 )
+       {
+               return CFG_ERR_PARAM;
+       }
+       m_iMaxPri = atoi(pszParams);
+
+       return CFG_ERR_OK;
+}
+
+
+// 文字列を展開
+int CApiMaxTpri::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiMaxTpri::WriteCfgDef(FILE* fp)
+{
+       if ( m_iMaxPri == 0 )
+       {
+               m_iMaxPri = DEFAULT_MAXTPRI;
+
+       }
+
+       fprintf(
+               fp,
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*           create ready queue               */\n"
+               "/* ------------------------------------------ */\n"
+               "\n"
+               "T_MKNL_QUE mknl_rdq_tbl[%d];\n"
+               "const INT  mknl_rdq_cnt = %d;\n",
+               m_iMaxPri,
+               m_iMaxPri);
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/parpack.cpp b/cfgrtr/source/parpack.cpp
new file mode 100755 (executable)
index 0000000..15072d5
--- /dev/null
@@ -0,0 +1,68 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    パラメーター格納クラス                                                  
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <string.h>
+#include "parpack.h"
+
+
+// コンストラクタ
+CParamPack::CParamPack()
+{
+       int i;
+
+       for ( i = 0; i < PARAMPACK_MAX; i++ )
+       {
+               m_pszParam[i] = NULL;
+       }
+}
+
+
+// デストラクタ
+CParamPack::~CParamPack()
+{
+       int i;
+
+       for ( i = 0; i < PARAMPACK_MAX; i++ )
+       {
+               delete[] m_pszParam[i];
+       }
+}
+
+
+// パラメーター設定
+void CParamPack::SetParam(int iIndex, const char *pszParam)
+{
+       if ( iIndex < 0 || iIndex >= PARAMPACK_MAX )
+       {
+               return;
+       }
+
+       delete[] m_pszParam[iIndex];
+
+       m_pszParam[iIndex] = new char[strlen(pszParam) + 1];
+       strcpy(m_pszParam[iIndex], pszParam);
+}
+
+
+// パラメーター取得
+const char* CParamPack::GetParam(int iIndex)
+{
+       if ( iIndex < 0 || iIndex >= PARAMPACK_MAX )
+       {
+               return NULL;
+       }
+
+       return m_pszParam[iIndex];
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/read.cpp b/cfgrtr/source/read.cpp
new file mode 100755 (executable)
index 0000000..8087293
--- /dev/null
@@ -0,0 +1,272 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    データ読み込みクラス                                                    
+//                                                                            
+//                                    Copyright (C) 1998-2002 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <ctype.h>
+#include "defercd.h"
+#include "read.h"
+
+
+// コンストラクタ
+CRead::CRead(FILE *fp, const char *name)
+{
+       m_fpRead    = fp;
+       m_iPhysicalLineNum = m_iLogicalLineNum = 1;
+       m_blLineTop = true;
+       strncpy(m_szLogicalInputFile, name, READ_MAX_PATH - 1);
+       m_szLogicalInputFile[READ_MAX_PATH - 1] = '\0';
+}
+
+
+// デストラクタ
+CRead::~CRead()
+{
+}
+
+
+// 1ステート読み込み
+int CRead::ReadState(char *szState)
+{
+       bool blEsc   = false;
+       bool blSpace = true;    // true で始めて先頭の空白を読み飛ばす
+       int  iCount = 0;
+       int  iErr;
+       int  c;
+
+       for ( ; ; )
+       {
+               // 1文字読み込み
+               if ( (c = fgetc(m_fpRead)) == EOF )
+               {
+                       if ( blEsc || iCount != 0 )
+                       {
+                               iErr = CFG_ERR_EOF;     // 予期せぬEOF
+                       }
+                       else
+                       {
+                               iErr = CFG_ERR_COMPLETE;        // 完了
+                       }
+                       break;
+               }
+
+               // サイズチェック
+               if ( iCount >= READ_MAX_STATE - 1 )
+               {
+                       iErr = CFG_ERR_STATE_LEN;
+                       break;
+               }
+
+               // 行頭が # ならスキップ
+               if ( m_blLineTop && c == '#' )
+               {
+                       iErr = SkipPreProcessorLine(szState, iCount);
+                       if ( iErr != CFG_ERR_OK )
+                       {
+                               break;
+                       }
+                       continue;
+               }
+
+               // 改行文字の処理
+               if ( c == '\n' )
+               {
+                       m_iPhysicalLineNum++;
+                       m_iLogicalLineNum++;
+                       m_blLineTop = true;
+               }
+               else
+               {
+                       m_blLineTop = false;
+               }
+
+               // 空白文字のスキップ
+               if ( isspace(c) || c == '\n' )
+               {
+                       if ( !blSpace )
+                       {
+                               szState[iCount++] = ' ';
+                               blSpace = true;
+                       }
+                       continue;
+               }
+               blSpace = false;
+
+               // 文字列の処理
+               if ( c == '\"' || c == '\'' )
+               {
+                       szState[iCount++] = c;
+                       iErr = ReadString(c, szState, iCount);
+                       if ( iErr != CFG_ERR_OK )
+                       {
+                               break;
+                       }
+                       continue;
+               }
+
+               // ステート完了文字なら
+               if ( c == ';' )
+               {
+                       iErr = CFG_ERR_OK;
+                       break;
+               }
+
+               // 文字の読み込み
+               szState[iCount++] = c;
+       }
+
+       // 末尾の空白文字削除
+       if ( iCount > 0 && szState[iCount - 1] == ' ' )
+       {
+               iCount--;
+       }
+
+       szState[iCount] = '\0';
+
+       return iErr;
+}
+
+
+// プリプロセッサラインのスキップ
+int CRead::SkipPreProcessorLine(char* szText, int iCountOrg)
+{
+       int  c;
+       int iCount = iCountOrg;
+       long tmpLineNum;
+       char *p1, *p2;
+
+       for ( ; ; )
+       {
+               // 1文字読み込み
+               if ( (c = fgetc(m_fpRead)) == EOF )
+               {
+                       return CFG_ERR_OK;
+               }
+
+               // サイズチェック
+               if ( iCount >= READ_MAX_STATE - 1 )
+               {
+                       return CFG_ERR_STATE_LEN;
+               }
+
+               // 行末のチェック
+               if ( c == '\n' )
+               {
+                       m_iPhysicalLineNum++;
+                       m_iLogicalLineNum++;
+
+                       szText[iCount] = '\0';
+
+                       // #line 123 "filename"
+                       // # 123 "filename"
+                       // の形式のどちらでも受け付ける
+                       if (strncmp(&szText[iCountOrg], "line", 4) == 0)
+                               iCountOrg += 4;
+
+                       // #line123
+                       // #12
+                       // などを排除
+                       if (!isspace(szText[iCountOrg]))
+                               return CFG_ERR_OK;
+
+                       // 行番号読み込み
+                       tmpLineNum = strtol(&szText[iCountOrg], &p1, 10);
+                       if (p1 == &szText[iCountOrg])
+                               return CFG_ERR_OK;
+
+                       // # 123a
+                       // など行番号の後ろに余分なものがついている場合を排除
+                       if (!isspace(*p1) && *p1 != '\0')
+                               return CFG_ERR_OK;
+
+                       // 読み込んだ行番号を反映
+                       m_iLogicalLineNum = tmpLineNum;
+
+                       // ファイル名を探す
+                       while (isspace(*p1))
+                               p1++;
+                       if (*p1 != '\"')
+                               return CFG_ERR_OK;
+                       p1++;
+                       p2 = strchr(p1, '\"');
+                       if (p2 == NULL)
+                               return CFG_ERR_OK;
+                       *p2 = '\0';
+
+                       // ファイル名を反映
+                       strncpy(m_szLogicalInputFile, p1, READ_MAX_PATH - 1);
+                       m_szLogicalInputFile[READ_MAX_PATH - 1] = '\0';
+
+                       return CFG_ERR_OK;
+               }
+
+               // 文字の読み込み
+               szText[iCount++] = c;
+       }
+}
+
+
+// 文字列読み込み
+int CRead::ReadString(int cDelimiter, char* szText, int& iCount)
+{
+       bool blEsc  = false;
+       int c;
+
+       for ( ; ; )
+       {
+               // 1文字読み込み
+               if ( (c = fgetc(m_fpRead)) == EOF )
+               {
+                       return CFG_ERR_EOF;     // 予期せぬEOF
+               }
+
+               // サイズチェック
+               if ( iCount >= READ_MAX_STATE - 1 )
+               {
+                       return CFG_ERR_STATE_LEN;
+               }
+
+               // 改行チェック
+               if ( c == '\n' )
+               {
+                       return CFG_ERR_CR;              // 不正な改行
+               }
+
+               // 文字の設定
+               szText[iCount++] = c;
+
+               // \ の次は無条件にスキップ
+               if ( blEsc )
+               {
+                       blEsc  = false;
+                       continue;
+               }
+
+               // \ のチェック
+               if ( c == '\\' )
+               {
+                       blEsc  = true;
+                       continue;
+               }
+
+               blEsc  = false;
+
+               // デリミタ文字なら完了
+               if ( c == cDelimiter )
+               {
+                       return CFG_ERR_OK;
+               }
+       }
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2002 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/cfgrtr/source/timtic.cpp b/cfgrtr/source/timtic.cpp
new file mode 100755 (executable)
index 0000000..b86a031
--- /dev/null
@@ -0,0 +1,119 @@
+// ---------------------------------------------------------------------------
+//  Hyper Operating System V4  コンフィギュレーター                           
+//    HOS_TIM_TIC API の処理                                                  
+//                                                                            
+//                                    Copyright (C) 1998-2003 by Project HOS  
+//                                    http://sourceforge.jp/projects/hos/     
+// ---------------------------------------------------------------------------
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include "defercd.h"
+#include "timtic.h"
+#include "analyze.h"
+
+
+#define TIMTIC_NUME            0
+#define TIMTIC_DENO            1
+
+
+// コンストラクタ
+CApiTimTic::CApiTimTic()
+{
+       // パラメーター構文設定
+       m_iParamSyntax[0] = 0;          // 単独パラメーター
+       m_iParamSyntax[1] = 0;          // 単独パラメーター
+       m_iParams         = 2;
+
+       m_iNume = 1;
+       m_iDeno = 1;
+}
+
+
+// デストラクタ
+CApiTimTic::~CApiTimTic()
+{
+}
+
+
+
+// APIの解析
+int CApiTimTic::AnalyzeApi(const char* pszApiName, const char* pszParams)
+{
+       int iNume;
+       int iDeno;
+       int iErr;
+
+       // API名チェック
+       if ( strcmp(pszApiName, "HOS_TIM_TIC") == 0 )
+       {
+               if ( m_iObjs > 0 )
+               {
+                       return CFG_ERR_MULTIDEF;
+               }
+
+               iErr = AddParams(pszParams);
+               if ( iErr != CFG_ERR_OK )
+               {
+                       return iErr;
+               }
+       
+               iNume = atoi(m_pParamPacks[m_iObjs - 1]->GetParam(TIMTIC_NUME));
+               iDeno = atoi(m_pParamPacks[m_iObjs - 1]->GetParam(TIMTIC_DENO));
+               if ( iNume <= 0 || iDeno <= 0 )
+               {
+                       return CFG_ERR_PARAM;
+               }
+
+               m_iNume = iNume;
+               m_iDeno = iDeno;
+               
+               return CFG_ERR_OK;
+       }
+
+       return CFG_ERR_NOPROC;
+}
+
+
+// 文字列を展開
+int CApiTimTic::AutoId(void)
+{
+       return CFG_ERR_OK;
+}
+
+
+// ID 定義ファイル書き出し
+void CApiTimTic::WriteId(FILE* fp)
+{
+       fprintf(
+               fp,
+               "\n\n"
+               "/* time tic */\n"
+               "#define TIC_NUME\t\t%d\n"
+               "#define TIC_DENO\t\t%d\n",
+               m_iNume,
+               m_iDeno);
+}
+
+
+// cfgファイル定義部書き出し
+void  CApiTimTic::WriteCfgDef(FILE* fp)
+{
+       fputs(
+               "\n\n\n"
+               "/* ------------------------------------------ */\n"
+               "/*               set time tic                 */\n"
+               "/* ------------------------------------------ */\n"
+               "\n"
+               "const UW kernel_tic_deno = TIC_DENO;\n"
+               "const UW kernel_tic_div  = TIC_NUME / TIC_DENO;\n"
+               "const UW kernel_tic_mod  = TIC_NUME % TIC_DENO;\n",
+               fp);
+}
+
+
+// ---------------------------------------------------------------------------
+//  Copyright (C) 1998-2003 by Project HOS                                    
+// ---------------------------------------------------------------------------
diff --git a/document/profile.txt b/document/profile.txt
new file mode 100755 (executable)
index 0000000..57b4c4e
--- /dev/null
@@ -0,0 +1,18 @@
+<プロファイル候補(config以下の設定サンプル案)>
+minimum  ここまで小さく出来るのだというのを誇示するためのものw。実用無視のジョークのような設定
+tiny     実用最小レベルのセット
+car      自動車プロファイル
+compact  スタンダードプロファイルからタスク例外処理とか少し抜いたもの
+standard スタンダードプロファイルぴったりの設定
+midium   動的生成を使う場合のに現実的なライン
+full     実用範囲のフルセット
+maximum  ここまで大きく出来るのだというのを誇示するためのもの。実用無視のジョークのような設定(64bitのIDとか?)
+
+
+realtime リアルタイム保証のことしか考えてないセッティング
+         (TA_TPRIしかない、でもmtxはある、でも動的生成は無い、でもレディーキューアルゴはリッチとかの偏ったセッティングw)
+
+no-realtime 裏を返してTSS向けなな設定もあり?
+        (TA_FIFOしかない、そもそもタスク優先度がないとか(笑)。タイマハンドラからrot_rdqしてTSSしてつかう?
+          キュー操作がとことん単純な分、平均パフォーマンスは出るかも)。
+
diff --git a/kernel/build/arm/ADuC7019/gcc/gmake.mak b/kernel/build/arm/ADuC7019/gcc/gmake.mak
new file mode 100755 (executable)
index 0000000..abb8905
--- /dev/null
@@ -0,0 +1,123 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for ADuC7019/20/21/22/24/25/26/27
+#
+# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+#
+# Copyright (C) 1998-2006 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+# アーキテクチャパス
+ARCH_PROC ?= arm/arm_v4t
+ARCH_IRC  ?= arm/ADuC7019
+ARCH_CC   ?= gcc
+
+
+# ディレクトリ定義
+TOP_DIR      = ../../../../..
+KNL_DIR      = $(TOP_DIR)/kernel
+OBJS_DIR     = objs_$(TARGET)
+
+# インクルードディレクトリ定義
+INC_KNL_DIR  = $(KNL_DIR)/include
+INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR  = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+
+# ソースディレクトリ定義
+SRC_KNL_DIR      = $(KNL_DIR)/source
+SRC_PROC_DIR     = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR      = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+SRC_IRC_ASM_DIR  = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# コンフィギュレータ定義
+CFGRTR_DIR   = $(TOP_DIR)/cfgrtr/build/gcc
+CFGRTR       = h4acfg-ADuC7026
+
+
+# 共通設定インクルード
+include $(TOP_DIR)/kernel/build/common/gmake.inc
+
+
+# ターゲットライブラリファイル名
+TARGET_LIB = $(TARGET).a
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_DIR)/gcc/armctx.S          \
+         $(SRC_PROC_DIR)/gcc/armirq.S
+
+
+# C言語ファイルの追加
+CSRCS += $(SRC_IRC_DIR)/intc.c
+
+
+# 検索パスの追加
+VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR)
+
+
+# Tools
+CC     = arm-elf-gcc
+ASM    = arm-elf-gcc
+LIBR   = arm-elf-ar
+DEPEND = arm-elf-gcc -M
+LINT   = splint
+AWK    = gawk
+LINT   = splint
+MKDIR  = mkdir
+RM     = rm
+
+
+# オプションフラグ
+AFLAGS    += -c -Wall -mcpu=arm7tdmi
+CFLAGS    += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR)       \
+             -c -Wall -mcpu=arm7tdmi
+LFLAGS    += 
+LINTFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) -weak 
+
+
+# オブジェクトファイル
+OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS)))))   \
+       $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS)))))
+
+
+all: $(ASRCS) $(CSRCS) $(TARGET_LIB) $(CFGRTR)
+
+
+$(TARGET_LIB): mkdir_objs $(OBJS)
+       $(LIBR) -r $(TARGET_LIB) $(OBJS)
+
+mkdir_objs:
+       $(MKDIR) -p $(OBJS_DIR)
+
+
+$(CFGRTR):
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+clean:
+       $(RM) -f $(TARGET) $(OBJS) $(CFGRTR)
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+
+lint:
+       $(LINT) $(LINTFLAGS) $(CSRCS)
+
+depend:
+       $(DEPEND) $(CFLAGS) $(CSRCS) | awk '/^[^ ]/{print "$(OBJS_DIR)/"$$0} /^ /{print $$0}' > $(OBJS_DIR)/depend.inc
+
+
+-include $(OBJS_DIR)/depend.inc
+
+
+# 推論規則
+$(OBJS_DIR)/%.o :: %.c
+       $(CC) $(CFLAGS) -c $< -o $@
+
+$(OBJS_DIR)/%.o :: %.S
+       $(ASM) $(AFLAGS) $< -o $@
+
+
+# end of file
diff --git a/kernel/build/arm/ADuC7019/rvct/gmake.mak b/kernel/build/arm/ADuC7019/rvct/gmake.mak
new file mode 100755 (executable)
index 0000000..e3cc621
--- /dev/null
@@ -0,0 +1,116 @@
+# ----------------------------------------------------------------------------
+#
+#
+#
+# ----------------------------------------------------------------------------
+
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+# アーキテクチャパス
+ARCH_PROC ?= arm_v4t
+ARCH_IRC  ?= arm/ADuC7026
+
+
+
+# ディレクトリ定義
+TOP_DIR      = ../../../../..
+KNL_DIR      = $(TOP_DIR)/kernel
+OBJS_DIR     = objs_$(TARGET)
+
+# インクルードディレクトリ定義
+INC_KNL_DIR  = $(KNL_DIR)/include
+INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR  = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+
+# ソースディレクトリ定義
+SRC_KNL_DIR  = $(KNL_DIR)/source
+SRC_PROC_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+SRC_IRC_DIR  = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+
+# コンフィギュレータ定義
+CFGRTR_DIR   = $(TOP_DIR)/cfgrtr/build/gcc
+CFGRTR       = h4acfg-$(ARCH_PROC)
+
+
+# 共通設定インクルード
+include $(TOP_DIR)/kernel/build/common/gmake.inc
+
+
+# ターゲットライブラリファイル名
+TARGET_LIB = $(TARGET).a
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_DIR)/rvds/armctx.s         \
+         $(SRC_PROC_DIR)/rvds/armirq.s
+
+
+# C言語ファイルの追加
+CSRCS += $(SRC_IRC_DIR)/armintc.c
+
+
+# 検索パスの追加
+VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR)/rvct:$(SRC_IRC_DIR)
+
+
+# Tools
+CC     = armcc --thumb
+ASM    = armasm
+LIBR   = armar
+DEPEND = armcc -M
+LINT   = splint
+MKDIR  = mkdir
+RM     = rm
+
+
+# オプションフラグ
+AFLAGS    += --cpu=ARM7TDMI
+CFLAGS    += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) --thumb --apcs /interwork --cpu=ARM7TDMI
+LFLAGS    += 
+LINTFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) -weak 
+
+
+# オブジェクトファイル
+OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS)))))   \
+       $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS)))))
+
+
+all: $(TARGET_LIB) $(CFGRTR)
+
+
+$(TARGET_LIB): mkdir_objs $(OBJS)
+       $(LIBR) -r $(TARGET_LIB) $(OBJS)
+
+mkdir_objs:
+       $(MKDIR) -p $(OBJS_DIR)
+
+
+$(CFGRTR):
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC)
+       cp $(CFGRTR_DIR)/$(CFGRTR) .
+
+clean:
+       $(RM) -f $(TARGET) $(OBJS) $(CFGRTR)
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) clean
+
+lint:
+       $(LINT) $(LINTFLAGS) $(CSRCS)
+
+depend:
+       $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc
+
+
+-include $(OBJS_DIR)/depend.inc
+
+
+# 推論規則
+$(OBJS_DIR)/%.o :: %.c
+       $(CC) $(CFLAGS) -c $< -o $@
+
+$(OBJS_DIR)/%.o :: %.s
+       $(ASM) $(AFLAGS) $< -o $@
+
+
+# end of file
diff --git a/kernel/build/common/gmake.inc b/kernel/build/common/gmake.inc
new file mode 100755 (executable)
index 0000000..205a937
--- /dev/null
@@ -0,0 +1,103 @@
+
+KERNEL_DIR  = $(TOP_DIR)/kernel
+SRC_DIR     = $(KERNEL_DIR)/source
+INC_DIR     = $(KERNEL_DIR)/include
+
+CORE_DIR    = $(SRC_DIR)/core
+OBJ_DIR     = $(SRC_DIR)/object
+
+DSP_DIR     = $(CORE_DIR)/dsp
+QUE_DIR     = $(CORE_DIR)/que
+TOQ_DIR     = $(CORE_DIR)/toq
+HEP_DIR     = $(CORE_DIR)/hep
+
+SYSOBJ_DIR  = $(OBJ_DIR)/sys
+TSKOBJ_DIR  = $(OBJ_DIR)/tsk
+SEMOBJ_DIR  = $(OBJ_DIR)/sem
+FLGOBJ_DIR  = $(OBJ_DIR)/flg
+MBXOBJ_DIR  = $(OBJ_DIR)/mbx
+MPFOBJ_DIR  = $(OBJ_DIR)/mpf
+INHOBJ_DIR  = $(OBJ_DIR)/inh
+ISROBJ_DIR  = $(OBJ_DIR)/isr
+TIMOBJ_DIR  = $(OBJ_DIR)/tim
+
+
+VPATH := $(VPATH):$(DSP_DIR):$(QUE_DIR):$(TOQ_DIR):$(HEP_DIR):$(SYSOBJ_DIR):$(TSKOBJ_DIR)
+VPATH := $(VPATH):$(SEMOBJ_DIR):$(FLGOBJ_DIR):$(MBXOBJ_DIR):$(MPFOBJ_DIR):$(INHOBJ_DIR):$(ISROBJ_DIR):$(TIMOBJ_DIR)
+
+
+CSRCS += $(DSP_DIR)/ent_tsk.c          \
+         $(DSP_DIR)/dsp_tsk.c          \
+         $(DSP_DIR)/idl_lop.c          \
+         $(QUE_DIR)/add_que.c          \
+         $(QUE_DIR)/adf_que.c          \
+         $(QUE_DIR)/adp_que.c          \
+         $(QUE_DIR)/rmv_que.c          \
+         $(QUE_DIR)/rmh_que.c          \
+         $(QUE_DIR)/trm_que.c          \
+         $(QUE_DIR)/nxt_que.c          \
+         $(QUE_DIR)/rot_que.c          \
+         $(TOQ_DIR)/sig_toq.c          \
+         $(TOQ_DIR)/add_toq.c          \
+         $(TOQ_DIR)/rmv_toq.c          \
+         $(HEP_DIR)/cre_hep.c          \
+         $(HEP_DIR)/alc_hep.c          \
+         $(HEP_DIR)/fre_hep.c          \
+         $(SYSOBJ_DIR)/sta_knl.c       \
+         $(SYSOBJ_DIR)/get_tid.c       \
+         $(SYSOBJ_DIR)/loc_cpu.c       \
+         $(SYSOBJ_DIR)/unl_cpu.c       \
+         $(SYSOBJ_DIR)/sns_loc.c       \
+         $(SYSOBJ_DIR)/ena_dsp.c       \
+         $(SYSOBJ_DIR)/dis_dsp.c       \
+         $(SYSOBJ_DIR)/sns_dsp.c       \
+         $(SYSOBJ_DIR)/sns_ctx.c       \
+         $(TSKOBJ_DIR)/acre_tsk.c      \
+         $(TSKOBJ_DIR)/kcre_tsk.c      \
+         $(TSKOBJ_DIR)/act_tsk.c       \
+         $(TSKOBJ_DIR)/ext_tsk.c       \
+         $(TSKOBJ_DIR)/slp_tsk.c       \
+         $(TSKOBJ_DIR)/wup_tsk.c       \
+         $(TSKOBJ_DIR)/can_wup.c       \
+         $(TSKOBJ_DIR)/rel_wai.c       \
+         $(TSKOBJ_DIR)/dly_tsk.c       \
+         $(TSKOBJ_DIR)/ref_tsk.c       \
+         $(SEMOBJ_DIR)/cre_sem.c       \
+         $(SEMOBJ_DIR)/acre_sem.c      \
+         $(SEMOBJ_DIR)/kcre_sem.c      \
+         $(SEMOBJ_DIR)/sig_sem.c       \
+         $(SEMOBJ_DIR)/wai_sem.c       \
+         $(SEMOBJ_DIR)/pol_sem.c       \
+         $(SEMOBJ_DIR)/twai_sem.c      \
+         $(SEMOBJ_DIR)/ref_sem.c       \
+         $(FLGOBJ_DIR)/cre_flg.c       \
+         $(FLGOBJ_DIR)/acre_flg.c      \
+         $(FLGOBJ_DIR)/kcre_flg.c      \
+         $(FLGOBJ_DIR)/set_flg.c       \
+         $(FLGOBJ_DIR)/clr_flg.c       \
+         $(FLGOBJ_DIR)/wai_flg.c       \
+         $(FLGOBJ_DIR)/pol_flg.c       \
+         $(FLGOBJ_DIR)/twai_flg.c      \
+         $(FLGOBJ_DIR)/kchk_flg.c      \
+         $(FLGOBJ_DIR)/ref_flg.c       \
+         $(MBXOBJ_DIR)/acre_mbx.c      \
+         $(MBXOBJ_DIR)/kcre_mbx.c      \
+         $(MBXOBJ_DIR)/snd_mbx.c       \
+         $(MBXOBJ_DIR)/rcv_mbx.c       \
+         $(MBXOBJ_DIR)/kadd_msg.c      \
+         $(MBXOBJ_DIR)/krmv_msg.c      \
+         $(MPFOBJ_DIR)/acre_mpf.c      \
+         $(MPFOBJ_DIR)/kcre_mpf.c      \
+         $(MPFOBJ_DIR)/get_mpf.c       \
+         $(MPFOBJ_DIR)/pget_mpf.c      \
+         $(MPFOBJ_DIR)/rel_mpf.c       \
+         $(INHOBJ_DIR)/def_inh.c       \
+         $(INHOBJ_DIR)/sta_inh.c       \
+         $(INHOBJ_DIR)/exe_inh.c       \
+         $(INHOBJ_DIR)/end_inh.c       \
+         $(ISROBJ_DIR)/acre_isr.c      \
+         $(ISROBJ_DIR)/kcre_isr.c      \
+         $(ISROBJ_DIR)/exe_isr.c       \
+         $(TIMOBJ_DIR)/isig_tim.c
+
+
diff --git a/kernel/build/h8/h8300ha/ch38/gmake.mak b/kernel/build/h8/h8300ha/ch38/gmake.mak
new file mode 100755 (executable)
index 0000000..f0ceb37
--- /dev/null
@@ -0,0 +1,128 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for H8/300H
+#
+# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+#
+# Copyright (C) 1998-2006 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+# アーキテクチャパス
+ARCH_PROC ?= h8/h8300ha
+ARCH_IRC  ?= none
+ARCH_CC   ?= ch83
+
+
+# ディレクトリ定義
+TOP_DIR      = ../../../../..
+KNL_DIR      = $(TOP_DIR)/kernel
+OBJS_DIR     = objs_$(TARGET)
+
+# インクルードディレクトリ定義
+INC_KNL_DIR  = $(KNL_DIR)/include
+INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR  = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+
+# ソースディレクトリ定義
+SRC_KNL_DIR      = $(KNL_DIR)/source
+SRC_PROC_DIR     = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR      = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+SRC_IRC_ASM_DIR  = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# コンフィギュレータ定義
+CFGRTR_DIR   = $(TOP_DIR)/cfgrtr/build/gcc
+CFGRTR       = h4acfg-h8300ha
+
+
+# 共通設定インクルード
+include $(TOP_DIR)/kernel/build/common/gmake.inc
+
+
+# ターゲットライブラリファイル名
+TARGET_LIB = $(TARGET).lib
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.src                \
+
+#         $(SRC_PROC_ASM_DIR)/gcc/intctl.src
+
+
+# C言語ファイルの追加
+# CSRCS += $(SRC_IRC_DIR)/intc.c
+
+
+# 検索パスの追加
+VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR)
+
+
+# Tools
+CC     = ch38
+ASM    = asm38
+LIBR   = optlnk
+DEPEND = depend
+LINT   = splint
+AWK    = gawk
+MKDIR  = mkdir
+RM     = rm
+
+
+# オプションフラグ
+AFLAGS    += -CP=300HA:24 -DEBug
+CFLAGS    += -CP=300HA:24 -DEBug -I=$(INC_KNL_DIR) -I=$(INC_PROC_DIR) -I=$(INC_IRC_DIR)
+LFLAGS    += -FOrm=Library
+LINTFLAGS += -weak -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR)
+
+
+
+# オブジェクトファイル
+OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(CSRCS)))))   \
+       $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(ASRCS)))))
+
+
+all: $(TARGET_LIB) mk_cfgrtr
+
+
+$(TARGET_LIB): mkdir_objs $(OBJS)
+       echo -Input=$(OBJS) | sed "s/ /,/g" > $(OBJ_DIR)/subcmd.txt
+       echo -OUtput=$(TARGET_LIB) >> $(OBJ_DIR)/subcmd.txt
+       echo -FOrm=Library >> $(OBJ_DIR)/subcmd.txt
+       $(RM) -f $(TARGET_LIB)
+       $(LIBR) -SU=$(OBJ_DIR)/subcmd.txt
+
+mkdir_objs:
+       $(MKDIR) -p $(OBJS_DIR)
+
+
+mk_cfgrtr:
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+clean:
+       $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) $(OBJS_DIR)/*.lst
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+
+#lint:
+#      $(LINT) $(LINTFLAGS) $(CSRCS)
+
+#depend:
+#      $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc
+
+
+-include $(OBJS_DIR)/depend.inc
+
+
+# 推論規則
+$(OBJS_DIR)/%.obj :: %.c
+       $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst)
+
+$(OBJS_DIR)/%.obj :: %.src
+       $(ASM) $(AFLAGS) $< -OB=$@
+
+
+# end of file
diff --git a/kernel/build/h8/h8s2600a/ch38/gmake.mak b/kernel/build/h8/h8s2600a/ch38/gmake.mak
new file mode 100755 (executable)
index 0000000..0e5b6c6
--- /dev/null
@@ -0,0 +1,192 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for H8/300H
+#
+# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+#
+# Copyright (C) 1998-2006 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+# アーキテクチャパス
+ARCH_PROC ?= h8/h8s2600a
+ARCH_IRC  ?= none
+ARCH_CC   ?= ch83
+
+
+# ディレクトリ定義
+TOP_DIR      = ../../../../..
+KNL_DIR      = $(TOP_DIR)/kernel
+OBJS_DIR     = objs_$(TARGET)
+
+# インクルードディレクトリ定義
+INC_KNL_DIR  = $(KNL_DIR)/include
+INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR  = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+
+# ソースディレクトリ定義
+SRC_KNL_DIR      = $(KNL_DIR)/source
+SRC_PROC_DIR     = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR      = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+SRC_IRC_ASM_DIR  = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# コンフィギュレータ定義
+CFGRTR_DIR   = $(TOP_DIR)/cfgrtr/build/gcc
+CFGRTR       = h4acfg-h8s2600a
+
+
+# 共通設定インクルード
+include $(TOP_DIR)/kernel/build/common/gmake.inc
+
+
+# ターゲットライブラリファイル名
+TARGET_LIB = $(TARGET).lib
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.src                \
+         $(SRC_PROC_ASM_DIR)/intctl.src                \
+         $(SRC_PROC_ASM_DIR)/vect_001.src      \
+         $(SRC_PROC_ASM_DIR)/vect_002.src      \
+         $(SRC_PROC_ASM_DIR)/vect_003.src      \
+         $(SRC_PROC_ASM_DIR)/vect_004.src      \
+         $(SRC_PROC_ASM_DIR)/vect_005.src      \
+         $(SRC_PROC_ASM_DIR)/vect_006.src      \
+         $(SRC_PROC_ASM_DIR)/vect_007.src      \
+         $(SRC_PROC_ASM_DIR)/vect_008.src      \
+         $(SRC_PROC_ASM_DIR)/vect_009.src      \
+         $(SRC_PROC_ASM_DIR)/vect_010.src      \
+         $(SRC_PROC_ASM_DIR)/vect_011.src      \
+         $(SRC_PROC_ASM_DIR)/vect_012.src      \
+         $(SRC_PROC_ASM_DIR)/vect_013.src      \
+         $(SRC_PROC_ASM_DIR)/vect_014.src      \
+         $(SRC_PROC_ASM_DIR)/vect_015.src      \
+         $(SRC_PROC_ASM_DIR)/vect_016.src      \
+         $(SRC_PROC_ASM_DIR)/vect_017.src      \
+         $(SRC_PROC_ASM_DIR)/vect_018.src      \
+         $(SRC_PROC_ASM_DIR)/vect_019.src      \
+         $(SRC_PROC_ASM_DIR)/vect_020.src      \
+         $(SRC_PROC_ASM_DIR)/vect_021.src      \
+         $(SRC_PROC_ASM_DIR)/vect_022.src      \
+         $(SRC_PROC_ASM_DIR)/vect_023.src      \
+         $(SRC_PROC_ASM_DIR)/vect_024.src      \
+         $(SRC_PROC_ASM_DIR)/vect_025.src      \
+         $(SRC_PROC_ASM_DIR)/vect_026.src      \
+         $(SRC_PROC_ASM_DIR)/vect_027.src      \
+         $(SRC_PROC_ASM_DIR)/vect_028.src      \
+         $(SRC_PROC_ASM_DIR)/vect_029.src      \
+         $(SRC_PROC_ASM_DIR)/vect_030.src      \
+         $(SRC_PROC_ASM_DIR)/vect_031.src      \
+         $(SRC_PROC_ASM_DIR)/vect_032.src      \
+         $(SRC_PROC_ASM_DIR)/vect_033.src      \
+         $(SRC_PROC_ASM_DIR)/vect_034.src      \
+         $(SRC_PROC_ASM_DIR)/vect_035.src      \
+         $(SRC_PROC_ASM_DIR)/vect_036.src      \
+         $(SRC_PROC_ASM_DIR)/vect_037.src      \
+         $(SRC_PROC_ASM_DIR)/vect_038.src      \
+         $(SRC_PROC_ASM_DIR)/vect_039.src      \
+         $(SRC_PROC_ASM_DIR)/vect_040.src      \
+         $(SRC_PROC_ASM_DIR)/vect_041.src      \
+         $(SRC_PROC_ASM_DIR)/vect_042.src      \
+         $(SRC_PROC_ASM_DIR)/vect_043.src      \
+         $(SRC_PROC_ASM_DIR)/vect_044.src      \
+         $(SRC_PROC_ASM_DIR)/vect_045.src      \
+         $(SRC_PROC_ASM_DIR)/vect_046.src      \
+         $(SRC_PROC_ASM_DIR)/vect_047.src      \
+         $(SRC_PROC_ASM_DIR)/vect_048.src      \
+         $(SRC_PROC_ASM_DIR)/vect_049.src      \
+         $(SRC_PROC_ASM_DIR)/vect_050.src      \
+         $(SRC_PROC_ASM_DIR)/vect_051.src      \
+         $(SRC_PROC_ASM_DIR)/vect_052.src      \
+         $(SRC_PROC_ASM_DIR)/vect_053.src      \
+         $(SRC_PROC_ASM_DIR)/vect_054.src      \
+         $(SRC_PROC_ASM_DIR)/vect_055.src      \
+         $(SRC_PROC_ASM_DIR)/vect_056.src      \
+         $(SRC_PROC_ASM_DIR)/vect_057.src      \
+         $(SRC_PROC_ASM_DIR)/vect_058.src      \
+         $(SRC_PROC_ASM_DIR)/vect_059.src      \
+         $(SRC_PROC_ASM_DIR)/vect_060.src      \
+         $(SRC_PROC_ASM_DIR)/vect_061.src      \
+         $(SRC_PROC_ASM_DIR)/vect_062.src      \
+         $(SRC_PROC_ASM_DIR)/vect_063.src      \
+         $(SRC_PROC_ASM_DIR)/vect_dmy.src
+
+
+
+# C言語ファイルの追加
+# CSRCS += $(SRC_IRC_DIR)/intc.c
+
+
+# 検索パスの追加
+VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR)
+
+
+# Tools
+CC     = ch38
+ASM    = asm38
+LIBR   = optlnk
+DEPEND = depend
+LINT   = splint
+AWK    = gawk
+MKDIR  = mkdir
+RM     = rm
+
+
+# オプションフラグ
+AFLAGS    += -CP=2600A -DEBug
+CFLAGS    += -CP=2600A -DEBug -I=$(INC_KNL_DIR) -I=$(INC_PROC_DIR) -I=$(INC_IRC_DIR)
+LFLAGS    += -FOrm=Library
+LINTFLAGS += -weak -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR)
+
+
+
+# オブジェクトファイル
+OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(CSRCS)))))   \
+       $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(ASRCS)))))
+
+
+all: $(TARGET_LIB) mk_cfgrtr
+
+
+$(TARGET_LIB): mkdir_objs $(OBJS)
+       echo -Input=$(OBJS) | sed "s/ /,/g" > $(OBJ_DIR)/subcmd.txt
+       echo -OUtput=$(TARGET_LIB) >> $(OBJ_DIR)/subcmd.txt
+       echo -FOrm=Library >> $(OBJ_DIR)/subcmd.txt
+       $(RM) -f $(TARGET_LIB)
+       $(LIBR) -SU=$(OBJ_DIR)/subcmd.txt
+
+mkdir_objs:
+       $(MKDIR) -p $(OBJS_DIR)
+
+
+mk_cfgrtr:
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+clean:
+       $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) $(OBJS_DIR)/*.lst
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+
+#lint:
+#      $(LINT) $(LINTFLAGS) $(CSRCS)
+
+#depend:
+#      $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc
+
+
+-include $(OBJS_DIR)/depend.inc
+
+
+# 推論規則
+$(OBJS_DIR)/%.obj :: %.c
+       $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst)
+
+$(OBJS_DIR)/%.obj :: %.src
+       $(ASM) $(AFLAGS) $< -OB=$@
+
+
+# end of file
diff --git a/kernel/build/mn103/mn1030/gcc/gmake.mak b/kernel/build/mn103/mn1030/gcc/gmake.mak
new file mode 100755 (executable)
index 0000000..def8a39
--- /dev/null
@@ -0,0 +1,123 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for MN1030 Series
+#
+# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+#
+# Copyright (C) 1998-2006 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+# アーキテクチャパス
+ARCH_PROC ?= mn103/mn1030
+ARCH_IRC  ?= none
+ARCH_CC   ?= gcc
+
+
+# ディレクトリ定義
+TOP_DIR      = ../../../../..
+KNL_DIR      = $(TOP_DIR)/kernel
+OBJS_DIR     = objs_$(TARGET)
+
+# インクルードディレクトリ定義
+INC_KNL_DIR  = $(KNL_DIR)/include
+INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR  = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+
+# ソースディレクトリ定義
+SRC_KNL_DIR      = $(KNL_DIR)/source
+SRC_PROC_DIR     = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR      = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+SRC_IRC_ASM_DIR  = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# コンフィギュレータ定義
+CFGRTR_DIR   = $(TOP_DIR)/cfgrtr/build/gcc
+CFGRTR       = h4acfg-mn1030
+
+
+# 共通設定インクルード
+include $(TOP_DIR)/kernel/build/common/gmake.inc
+
+
+# ターゲットライブラリファイル名
+TARGET_LIB = $(TARGET).a
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.S          \
+         $(SRC_PROC_ASM_DIR)/intctl.S
+
+
+# C言語ファイルの追加
+# CSRCS += $(SRC_IRC_DIR)/intc.c
+
+
+# 検索パスの追加
+VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR)
+
+
+# Tools
+CC     = mn10300-elf-gcc
+ASM    = mn10300-elf-gcc
+LIBR   = mn10300-elf-ar
+DEPEND = mn10300-elf-gcc -M
+LINT   = splint
+AWK    = gawk
+LINT   = splint
+MKDIR  = mkdir
+RM     = rm
+
+
+# オプションフラグ
+AFLAGS    += -c -Wall
+CFLAGS    += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR)       \
+             -c -Wall
+LFLAGS    += 
+LINTFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) -weak 
+
+
+# オブジェクトファイル
+OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS)))))   \
+       $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS)))))
+
+
+all: $(ASRCS) $(CSRCS) $(TARGET_LIB) $(CFGRTR)
+
+
+$(TARGET_LIB): mkdir_objs $(OBJS)
+       $(LIBR) -r $(TARGET_LIB) $(OBJS)
+
+mkdir_objs:
+       $(MKDIR) -p $(OBJS_DIR)
+
+
+$(CFGRTR):
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+clean:
+       $(RM) -f $(TARGET) $(OBJS) $(CFGRTR)
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+
+lint:
+       $(LINT) $(LINTFLAGS) $(CSRCS)
+
+depend:
+       $(DEPEND) $(CFLAGS) $(CSRCS) | awk '/^[^ ]/{print "$(OBJS_DIR)/"$$0} /^ /{print $$0}' > $(OBJS_DIR)/depend.inc
+
+
+-include $(OBJS_DIR)/depend.inc
+
+
+# 推論規則
+$(OBJS_DIR)/%.o :: %.c
+       $(CC) $(CFLAGS) -c $< -o $@
+
+$(OBJS_DIR)/%.o :: %.S
+       $(ASM) $(AFLAGS) $< -o $@
+
+
+# end of file
diff --git a/kernel/build/sh/sh2/gcc/gmake.mak b/kernel/build/sh/sh2/gcc/gmake.mak
new file mode 100755 (executable)
index 0000000..93b76fd
--- /dev/null
@@ -0,0 +1,122 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for sh2
+#
+# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+#
+# Copyright (C) 1998-2006 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+# アーキテクチャパス
+ARCH_PROC ?= sh/sh2
+ARCH_IRC  ?= none
+ARCH_CC   ?= gcc
+
+# ディレクトリ定義
+TOP_DIR      = ../../../../..
+KNL_DIR      = $(TOP_DIR)/kernel
+OBJS_DIR     = objs_$(TARGET)
+
+# インクルードディレクトリ定義
+INC_KNL_DIR  = $(KNL_DIR)/include
+INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR  = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+
+# ソースディレクトリ定義
+SRC_KNL_DIR      = $(KNL_DIR)/source
+SRC_PROC_DIR     = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR      = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+SRC_IRC_ASM_DIR  = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# コンフィギュレータ定義
+CFGRTR_DIR   = $(TOP_DIR)/cfgrtr/build/gcc
+CFGRTR       = h4acfg-sh2
+
+
+# 共通設定インクルード
+include $(TOP_DIR)/kernel/build/common/gmake.inc
+
+
+# ターゲットライブラリファイル名
+TARGET_LIB = $(TARGET).a
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.S          \
+         $(SRC_PROC_ASM_DIR)/intctl.S
+
+
+# C言語ファイルの追加
+# CSRCS += $(SRC_IRC_DIR)/intc.c
+
+
+# 検索パスの追加
+VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR)
+
+
+# Tools
+CC     = sh-elf-gcc
+ASM    = sh-elf-gcc
+LIBR   = sh-elf-ar
+DEPEND = sh-elf-gcc -M
+LINT   = splint
+AWK    = gawk
+MKDIR  = mkdir
+RM     = rm
+
+
+# オプションフラグ
+AFLAGS    += -c -m2
+CFLAGS    += -c -m2 -Wall -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR)
+LFLAGS    += 
+LINTFLAGS += -weak -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR)
+
+
+
+# オブジェクトファイル
+OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS)))))   \
+       $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS)))))
+
+
+all: $(TARGET_LIB) mk_cfgrtr
+
+
+$(TARGET_LIB): mkdir_objs $(OBJS)
+       $(LIBR) -r $(TARGET_LIB) $(OBJS)
+
+mkdir_objs:
+       $(MKDIR) -p $(OBJS_DIR)
+
+
+mk_cfgrtr:
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+clean:
+       $(RM) -f $(TARGET) $(OBJS) $(CFGRTR)
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+
+lint:
+       $(LINT) $(LINTFLAGS) $(CSRCS)
+
+depend:
+       $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc
+
+
+-include $(OBJS_DIR)/depend.inc
+
+
+# 推論規則
+$(OBJS_DIR)/%.o :: %.c
+       $(CC) $(CFLAGS) $< -o $@
+
+$(OBJS_DIR)/%.o :: %.S
+       $(ASM) $(AFLAGS) $< -o $@
+
+
+# end of file
diff --git a/kernel/build/sh/sh2/hew/hosv4a.Hbp b/kernel/build/sh/sh2/hew/hosv4a.Hbp
new file mode 100755 (executable)
index 0000000..ff4ea30
--- /dev/null
@@ -0,0 +1,2 @@
+[Setting]
+ToolChain=0
diff --git a/kernel/build/sh/sh2/hew/hosv4a.hws b/kernel/build/sh/sh2/hew/hosv4a.hws
new file mode 100755 (executable)
index 0000000..3403035
--- /dev/null
@@ -0,0 +1,38 @@
+[HIMDBVersion]
+2.0
+[DATABASE_VERSION]
+"7.0" 
+[WORKSPACE_DETAILS]
+"hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a.hws" "SuperH RISC engine" "Renesas SuperH Standard" 
+[SHARED_WORKSPACE_CONTROL_STATUS]
+"" "" "" 
+"" "" "" 
+[PROJECTS]
+"hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\hosv4a.hwp" 0 
+[INFORMATION]
+"ワークスペース情報がありません" 
+[SCRAP]
+[PROJECT_DEPENDENCY]
+[WORKSPACE_PROPERTIES]
+[VCS]
+"" "" "" 0 
+[VCS_PROJECT]
+[HELP_FILES]
+"c:\program files\renesas\hew\tools\renesas\sh\9_0_2\hew\stdlib.hlp" "C/C++ Standard Library Help" 1 
+[GENERAL_DATA_PROJECT]
+[SYSMENUTOOLS]
+"Hitachi Mapview" "1.0" 
+"Hitachi Call Walker" "1.1" 
+"Hitachi H Series Librarian Interface" "1.1" 
+[USERMENUTOOLS]
+[CUSTOMPLACEHOLDERS]
+[MAKEFILE_BUILD_INFO]
+"$(WORKSPDIR)\make\$(WORKSPNAME).mak" "" 0 0 
+[VD_CONFIGURATION_OPTIONS]
+"ACTIVE_DESKTOP" "0" 
+[VD_CONFIGURATIONS]
+"3" "Default4" "1" 
+"2" "Default3" "1" 
+"1" "Default2" "1" 
+"0" "Default1" "1" 
+[END]
diff --git a/kernel/build/sh/sh2/hew/hosv4a.tws b/kernel/build/sh/sh2/hew/hosv4a.tws
new file mode 100755 (executable)
index 0000000..a5cb801
--- /dev/null
@@ -0,0 +1,11 @@
+[HIMDBVersion]
+2.0
+[DATABASE_VERSION]
+"1.0" 
+[CURRENT_PROJECT]
+"hosv4a" 
+[GENERAL_DATA]
+[BREAKPOINTS]
+[OPEN_WORKSPACE_FILES]
+[WORKSPACE_FILE_STATES]
+[END]
diff --git a/kernel/build/sh/sh2/hew/hosv4a/Readme.txt b/kernel/build/sh/sh2/hew/hosv4a/Readme.txt
new file mode 100755 (executable)
index 0000000..78311ea
--- /dev/null
@@ -0,0 +1,8 @@
+-------- PROJECT GENERATOR --------
+PROJECT NAME : hosv4a
+PROJECT DIRECTORY :    C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a
+CPU SERIES :   SH-2
+TOOLCHAIN NAME :       Renesas SuperH RISC engine Standard Toolchain
+TOOLCHAIN VERSION :    9.0.2.0
+
+DATE & TIME : 2006/06/11 16:45:34
diff --git a/kernel/build/sh/sh2/hew/hosv4a/hosv4a.hwp b/kernel/build/sh/sh2/hew/hosv4a/hosv4a.hwp
new file mode 100755 (executable)
index 0000000..c81c5e4
--- /dev/null
@@ -0,0 +1,298 @@
+[HIMDBVersion]
+2.0
+[DATABASE_VERSION]
+"2.7" 
+[PROJECT_DETAILS]
+"hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\hosv4a.hwp" "SuperH RISC engine" "Renesas SuperH Standard" "Library" "SH-2" "Other" 
+[INFORMATION]
+"プロジェクト情報がありません" 
+[TOOL_CHAIN]
+"Renesas SuperH RISC engine Standard Toolchain" "9.0.2.0" 
+[CONFIGURATIONS]
+"Release" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\Release" 
+"Debug" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\Debug" 
+[BUILD_PHASES]
+"Renesas SH C/C++ Library Generator" 1 
+"Renesas SH C/C++ Compiler" 1 
+"Renesas SH Assembler" 1 
+"Renesas OptLinker" 1 
+[DEFINITION_PARSERS]
+[TOOL_ENVIRONMENT]
+[EXTENSIONS]
+"CPU information file" "CPU" 
+"Absolute file" "ABS" 
+"Stack information file" "SNI" 
+"Profile file" "PRO" 
+"C++ list file" "LPP" 
+"Linkage map file" "MAP" 
+"C++ header file" "HPP" 
+"C++ source file" "CPP" 
+"C header file" "H" 
+"C source file" "C" 
+"Hex file" "HEX" 
+"S-Record file" "MOT" 
+"Object file" "OBJ" 
+"Optimize map file" "bls" 
+"Relocatable file" "REL" 
+"Assembly source file" "SRC" 
+"Assembly source file" "ASM" 
+"Expanded assembly source file" "EXP" 
+"Preprocessed C source file" "P" 
+"C list file" "LST" 
+"Linkage symbol file" "FSY" 
+"Binary file" "BIN" 
+"Library file" "LIB" 
+"Assembly include file" "INC" 
+"Library information file" "LBP" 
+"Assembly list file" "LIS" 
+"Preprocessed C++ source file" "PP" 
+[FILE_GROUPS]
+"CPU information file" "BIN" "NONE" "" 
+"Absolute file" "BIN" "NONE" "" 
+"Stack information file" "BIN" "NONE" "" 
+"Profile file" "BIN" "NONE" "" 
+"C++ list file" "TEXT" "EDITOR" "" 
+"Linkage map file" "TEXT" "EDITOR" "" 
+"C++ header file" "TEXT" "EDITOR" "" 
+"C++ source file" "TEXT" "EDITOR" "" 
+"C header file" "TEXT" "EDITOR" "" 
+"C source file" "TEXT" "EDITOR" "" 
+"Hex file" "TEXT" "EDITOR" "" 
+"S-Record file" "TEXT" "EDITOR" "" 
+"Object file" "BIN" "NONE" "" 
+"Optimize map file" "BIN" "NONE" "" 
+"Relocatable file" "BIN" "NONE" "" 
+"Assembly source file" "TEXT" "EDITOR" "" 
+"Expanded assembly source file" "TEXT" "EDITOR" "" 
+"Preprocessed C source file" "TEXT" "EDITOR" "" 
+"C list file" "TEXT" "EDITOR" "" 
+"Linkage symbol file" "TEXT" "EDITOR" "" 
+"Binary file" "BIN" "NONE" "" 
+"Library file" "BIN" "NONE" "" 
+"Assembly include file" "TEXT" "EDITOR" "" 
+"Library information file" "TEXT" "EDITOR" "" 
+"Assembly list file" "TEXT" "EDITOR" "" 
+"Preprocessed C++ source file" "TEXT" "EDITOR" "" 
+[ASSOCIATED_APPLICATIONS]
+[TOOLCHAIN_PHASE]
+"Renesas SH C/C++ Library Generator" 
+"Renesas SH C/C++ Compiler" 
+"Renesas SH Assembler" 
+"Renesas OptLinker" 
+[UTILITY_PHASE]
+[CUSTOM_PHASES]
+[CUSTOM_PHASE_INPUT_GROUP]
+[BUILD_ORDER]
+"Renesas SH C/C++ Library Generator" 1 
+"Renesas SH C/C++ Compiler" 1 
+"Renesas SH Assembler" 1 
+"Renesas OptLinker" 1 
+[BUILD_PHASE_DETAILS]
+"Renesas SH C/C++ Library Generator" "" 0 
+"Renesas SH C/C++ Compiler" "C source file|C++ source file" 1 
+"Renesas SH Assembler" "Assembly source file|Linkage symbol file" 1 
+"Renesas OptLinker" "Object file|Library file|Relocatable file" 0 
+[BUILD_FILE_ORDER_C++ source file]
+"Renesas SH C/C++ Compiler" 1 
+[BUILD_FILE_ORDER_C source file]
+"Renesas SH C/C++ Compiler" 1 
+[BUILD_FILE_ORDER_Assembly source file]
+"Renesas SH Assembler" 1 
+[BUILD_FILE_ORDER_Linkage symbol file]
+"Renesas SH Assembler" 1 
+[SCRAP]
+"Project Generator Setup File" "" 
+[MAPPINGS]
+"Library file" "Renesas OptLinker" "Renesas SH C/C++ Library Generator" 
+"Assembly source file" "Renesas SH Assembler" "Renesas SH C/C++ Compiler" 
+"Object file" "Renesas OptLinker" "Renesas SH C/C++ Compiler" 
+"Object file" "Renesas OptLinker" "Renesas SH Assembler" 
+[PROJECT_FILES]
+"C:\project\hos-v4a\kernel\include\core\toq.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\basetyp.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\cmpl.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\core.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\dsp.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\hep.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\inh.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\opttyp.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\que.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\rdq.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\include\core\sys.h" "User" "inc_core" 2 
+"C:\project\hos-v4a\kernel\source\core\dsp\dsp_tsk.c" "User" "dsp" 2 
+"C:\project\hos-v4a\kernel\source\core\dsp\ent_tsk.c" "User" "dsp" 2 
+"C:\project\hos-v4a\kernel\source\core\dsp\idl_lop.c" "User" "dsp" 2 
+"C:\project\hos-v4a\kernel\source\core\hep\alc_hep.c" "User" "hep" 2 
+"C:\project\hos-v4a\kernel\source\core\hep\cre_hep.c" "User" "hep" 2 
+"C:\project\hos-v4a\kernel\source\core\hep\fre_hep.c" "User" "hep" 2 
+"C:\project\hos-v4a\kernel\source\core\inh\end_inh.c" "User" "inh" 2 
+"C:\project\hos-v4a\kernel\source\core\inh\exe_inh.c" "User" "inh" 2 
+"C:\project\hos-v4a\kernel\source\core\inh\sta_inh.c" "User" "inh" 2 
+"C:\project\hos-v4a\kernel\source\core\que\add_que.c" "User" "que" 2 
+"C:\project\hos-v4a\kernel\source\core\que\adf_que.c" "User" "que" 2 
+"C:\project\hos-v4a\kernel\source\core\que\adp_que.c" "User" "que" 2 
+"C:\project\hos-v4a\kernel\source\core\que\rmv_que.c" "User" "que" 2 
+"C:\project\hos-v4a\kernel\source\core\que\rot_que.c" "User" "que" 2 
+"C:\project\hos-v4a\kernel\source\core\toq\add_toq.c" "User" "toq" 2 
+"C:\project\hos-v4a\kernel\source\core\toq\rmv_toq.c" "User" "toq" 2 
+"C:\project\hos-v4a\kernel\source\core\toq\tic_toq.c" "User" "toq" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\acre_tsk.c" "User" "tsk" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\act_tsk.c" "User" "tsk" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\cre_tsk.c" "User" "tsk" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\ext_tsk.c" "User" "tsk" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\kcre_tsk.c" "User" "tsk" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\slp_tsk.c" "User" "tsk" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\wup_tsk.c" "User" "tsk" 2 
+"C:\project\hos-v4a\kernel\source\object\isr\exe_isr.c" "User" "isr" 2 
+"C:\project\hos-v4a\kernel\source\object\sem\sig_sem.c" "User" "sem" 2 
+"C:\project\hos-v4a\kernel\source\object\sem\wai_sem.c" "User" "sem" 2 
+"C:\project\hos-v4a\kernel\source\object\sys\sta_knl.c" "User" "sys" 2 
+"C:\project\hos-v4a\kernel\include\itron.h" "User" "include" 2 
+"C:\project\hos-v4a\kernel\include\kernel.h" "User" "include" 2 
+"C:\project\hos-v4a\kernel\include\object\isrobj.h" "User" "inc_obj" 2 
+"C:\project\hos-v4a\kernel\include\object\semobj.h" "User" "inc_obj" 2 
+"C:\project\hos-v4a\kernel\include\object\tskobj.h" "User" "inc_obj" 2 
+"C:\project\hos-v4a\kernel\include\parser\parserr.h" "User" "inc_parser" 2 
+"C:\project\hos-v4a\kernel\include\parser\parshok.h" "User" "inc_parser" 2 
+"C:\project\hos-v4a\kernel\include\parser\parsknl.h" "User" "inc_parser" 2 
+"C:\project\hos-v4a\kernel\include\parser\parssys.h" "User" "inc_parser" 2 
+"C:\project\hos-v4a\kernel\include\config\cfgerr.h" "User" "inc_cfg" 2 
+"C:\project\hos-v4a\kernel\include\config\cfghok.h" "User" "inc_cfg" 2 
+"C:\project\hos-v4a\kernel\include\config\cfgknl.h" "User" "inc_cfg" 2 
+"C:\project\hos-v4a\kernel\include\config\cfgsys.h" "User" "inc_cfg" 2 
+"C:\project\hos-v4a\kernel\include\arch\proc\sh2\proc.h" "User" "inc_arch" 2 
+"C:\project\hos-v4a\kernel\include\arch\proc\sh2\procatr.h" "User" "inc_arch" 2 
+"C:\project\hos-v4a\kernel\source\arch\proc\sh2\shc\ctxctl.src" "User" "arch" 2 
+[FOLDER]
+"inc_obj" "inc_obj" 
+"inc_arch" "inc_arch" 
+"isr" "isr" 
+"sem" "sem" 
+"include" "include" 
+"arch" "arch" 
+"tsk" "tsk" 
+"sys" "sys" 
+"inc_parser" "inc_parser" 
+"que" "que" 
+"dsp" "dsp" 
+"hep" "hep" 
+"inc_core" "inc_core" 
+"inh" "inh" 
+"inc_cfg" "inc_cfg" 
+"toq" "toq" 
+[GENERAL_DATA_PROJECT]
+"USE_CUSTOM_LINKAGE_ORDER" "0" 
+[ON_DEMAND_COMPONENTS_LOADED]
+[SYNC_SESSION_NAMES]
+[SESSIONS]
+"DefaultSession" "C:\project\hos-v4a\kernel\build\sh\sh2\hew\hosv4a\DefaultSession.hsf" 0 
+[GENERAL_DATA_SESSION_DefaultSession]
+[OPTIONS_Release_Renesas SH C/C++ Library Generator]
+"Single Shot" "072a4c0767d86c10" 1 
+[OPTIONS_Release_Renesas SH C/C++ Compiler]
+"C:\project\hos-v4a\kernel\source\object\sem\wai_sem.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\cre_tsk.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\slp_tsk.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\hep\alc_hep.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\inh\exe_inh.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\dsp\idl_lop.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\que\add_que.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\hep\fre_hep.c" "0190b15af8d86c10" 2 
+"C++ source file" "0c1fa059f8d86c10" 3 
+"C:\project\hos-v4a\kernel\source\core\que\adf_que.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\ext_tsk.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\que\rot_que.c" "0190b15af8d86c10" 2 
+"C source file" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\wup_tsk.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\toq\rmv_toq.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\inh\end_inh.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\sem\sig_sem.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\isr\exe_isr.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\kcre_tsk.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\act_tsk.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\acre_tsk.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\inh\sta_inh.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\dsp\dsp_tsk.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\que\adp_que.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\toq\tic_toq.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\que\rmv_que.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\hep\cre_hep.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\dsp\ent_tsk.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\sys\sta_knl.c" "0190b15af8d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\toq\add_toq.c" "0190b15af8d86c10" 2 
+[OPTIONS_Release_Renesas SH Assembler]
+"C:\project\hos-v4a\kernel\source\arch\proc\sh2\shc\ctxctl.src" "0b0183abe7d86c10" 4 
+"Assembly source file" "072a4c0767d86c10" 4 
+"Linkage symbol file" "072a4c0767d86c10" 4 
+[OPTIONS_Release_Renesas OptLinker]
+"Single Shot" "026f96abe7d86c10" 5 
+[OPTIONS_Release]
+"" 0 
+"[S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [V|VERSION|7] [S|CPU|SH2] [S|ENDIAN|BIG] [S|ROUND|ZERO] [B|DENORMALIZE|0] [B|SPEED|0][B|RUNTIME|1] [B|NEW|1] [B|CTYPE|0] [B|MATH|0] [B|MATHF|0] [B|STDARG|0] [B|STDIO|0] [B|STDLIB|0] [B|STRING|0] [B|IOS|0] [B|COMPLEX|0] [B|CPPSTRING|0] [S|MODE|NOTADD]" 1 
+"[V|VERSION|7] [S|INCLUDE|^"$(PROJDIR)\..\..\..\..\..\include^"|^"$(PROJDIR)\..\..\..\..\..\include\arch\proc\sh2^"] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|TBR|0] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [B|LIST|0] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|MISRA_INSPECTION|ALL] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [S|CPU|SH2] [B|CHGINCPATH|1]
+" 2 
+"[V|VERSION|7] [S|INCLUDE|^"$(PROJDIR)\..\..\..\..\..\include^"] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|TBR|0] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [B|LIST|0] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|MISRA_INSPECTION|ALL] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [S|CPU|SH2] [B|CHGINCPATH|1]
+" 3 
+"[V|VERSION|6] [B|DEBUG|0] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|LIST|0] [B|CHGINCPATH|1] [B|ERRORPATH|1] [S|CPU|SH2] [S|ENDIAN|BIG] [S|ROUND|ZERO] [B|DENORMALIZE|0]" 4 
+"[V|VERSION|6] [B|OPTIMIZE|0] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).abs^"] [S|ROM|(D,R)] [B|LIST|1] [S|LIST|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|FORM|LIBRARY|U] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"]" 5 
+[OPTIONS_Debug_Renesas SH C/C++ Library Generator]
+"Single Shot" "072a4c0767d86c10" 1 
+[OPTIONS_Debug_Renesas SH C/C++ Compiler]
+"C:\project\hos-v4a\kernel\source\object\sem\wai_sem.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\cre_tsk.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\slp_tsk.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\hep\alc_hep.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\inh\exe_inh.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\dsp\idl_lop.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\que\add_que.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\hep\fre_hep.c" "019a671bd7d86c10" 2 
+"C++ source file" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\que\adf_que.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\ext_tsk.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\que\rot_que.c" "019a671bd7d86c10" 2 
+"C source file" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\wup_tsk.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\toq\rmv_toq.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\inh\end_inh.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\sem\sig_sem.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\isr\exe_isr.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\kcre_tsk.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\act_tsk.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\tsk\acre_tsk.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\inh\sta_inh.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\dsp\dsp_tsk.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\que\adp_que.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\toq\tic_toq.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\que\rmv_que.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\hep\cre_hep.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\dsp\ent_tsk.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\object\sys\sta_knl.c" "019a671bd7d86c10" 2 
+"C:\project\hos-v4a\kernel\source\core\toq\add_toq.c" "019a671bd7d86c10" 2 
+[OPTIONS_Debug_Renesas SH Assembler]
+"C:\project\hos-v4a\kernel\source\arch\proc\sh2\shc\ctxctl.src" "0b0183abe7d86c10" 3 
+"Assembly source file" "072a4c0767d86c10" 3 
+"Linkage symbol file" "072a4c0767d86c10" 3 
+[OPTIONS_Debug_Renesas OptLinker]
+"Single Shot" "026f96abe7d86c10" 4 
+[OPTIONS_Debug]
+"" 0 
+"[S|OUTPUTPATH|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"] [V|VERSION|7] [S|CPU|SH2] [S|ENDIAN|BIG] [S|ROUND|ZERO] [B|DENORMALIZE|0] [B|SPEED|0][B|RUNTIME|1] [B|NEW|1] [B|CTYPE|0] [B|MATH|0] [B|MATHF|0] [B|STDARG|0] [B|STDIO|0] [B|STDLIB|0] [B|STRING|0] [B|IOS|0] [B|COMPLEX|0] [B|CPPSTRING|0] [S|MODE|NOTADD]" 1 
+"[V|VERSION|7] [S|INCLUDE|^"$(PROJDIR)\..\..\..\..\..\include^"|^"$(PROJDIR)\..\..\..\..\..\include\arch\proc\sh2^"] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|DEBUG|1] [B|TBR|0] [B|STUFF|0] [S|BSS_ORDER|DECLARATION] [B|LIST|0] [S|GBR|AUTO] [S|INLINE|DEFAULT] [I|INLINE|20] [S|MISRA_INSPECTION|ALL] [S|OPT_RANGE|ALL] [I|MAX_UNROLL|1] [S|CPU|SH2] [B|CHGINCPATH|1]
+" 2 
+"[V|VERSION|6] [B|DEBUG|1] [S|OUTPUTPATH|^"$(CONFIGDIR)\$(FILELEAF).obj^"] [B|LIST|0] [B|CHGINCPATH|1] [B|ERRORPATH|1] [S|CPU|SH2] [S|ENDIAN|BIG] [S|ROUND|ZERO] [B|DENORMALIZE|0]" 3 
+"[V|VERSION|6] [B|OPTIMIZE|0] [B|DEBUG|1] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).abs^"] [S|ROM|(D,R)] [B|LIST|1] [S|LIST|^"$(CONFIGDIR)\$(PROJECTNAME).map^"] [S|FORM|LIBRARY|U] [S|OUTPUT|^"$(CONFIGDIR)\$(PROJECTNAME).lib^"]" 4 
+[SESSION_DATA_CONFIGURATION_SESSION_Release_DefaultSession]
+"MEMORY_MAPPING_OPTIONS" "" 
+[SESSION_DATA_CONFIGURATION_SESSION_Debug_DefaultSession]
+"MEMORY_MAPPING_OPTIONS" "" 
+[EXT_DEBUGGER_INFO]
+0 "" "" "" "" 
+[EXCLUDED_FILES_Debug]
+[LINKAGE_ORDER_Debug]
+[GENERAL_DATA_CONFIGURATION_Release]
+[GENERAL_DATA_CONFIGURATION_SESSION_Debug_DefaultSession]
+[GENERAL_DATA_CONFIGURATION_SESSION_Release_DefaultSession]
+[EXCLUDED_FILES_Release]
+[GENERAL_DATA_CONFIGURATION_Debug]
+[LINKAGE_ORDER_Release]
+[END]
diff --git a/kernel/build/sh/sh2/shc/gmake.mak b/kernel/build/sh/sh2/shc/gmake.mak
new file mode 100755 (executable)
index 0000000..4895a08
--- /dev/null
@@ -0,0 +1,392 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for H8/300H
+#
+# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+#
+# Copyright (C) 1998-2006 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+# アーキテクチャパス
+ARCH_PROC ?= sh/sh2
+ARCH_IRC  ?= none
+ARCH_CC   ?= shc
+
+# ディレクトリ定義
+TOP_DIR      = ../../../../..
+KNL_DIR      = $(TOP_DIR)/kernel
+OBJS_DIR     = objs_$(TARGET)
+
+# インクルードディレクトリ定義
+INC_KNL_DIR  = $(KNL_DIR)/include
+INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR  = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+
+# ソースディレクトリ定義
+SRC_KNL_DIR      = $(KNL_DIR)/source
+SRC_PROC_DIR     = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR      = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+SRC_IRC_ASM_DIR  = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# コンフィギュレータ定義
+CFGRTR_DIR   = $(TOP_DIR)/cfgrtr/build/gcc
+CFGRTR       = h4acfg-sh2
+
+
+# 共通設定インクルード
+include $(TOP_DIR)/kernel/build/common/gmake.inc
+
+
+# ターゲットライブラリファイル名
+TARGET_LIB = $(TARGET).lib
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_ASM_DIR)/ctxctl.src                \
+         $(SRC_PROC_ASM_DIR)/exchdr.src                \
+         $(SRC_PROC_ASM_DIR)/inthdr.src     \
+         $(SRC_PROC_ASM_DIR)/vect_dmy.src
+
+ifneq ($(FAST_VECTOR),Yes)
+ASRCS += $(SRC_PROC_ASM_DIR)/vect_004.src      \
+         $(SRC_PROC_ASM_DIR)/vect_005.src      \
+         $(SRC_PROC_ASM_DIR)/vect_006.src      \
+         $(SRC_PROC_ASM_DIR)/vect_007.src      \
+         $(SRC_PROC_ASM_DIR)/vect_008.src      \
+         $(SRC_PROC_ASM_DIR)/vect_009.src      \
+         $(SRC_PROC_ASM_DIR)/vect_010.src      \
+         $(SRC_PROC_ASM_DIR)/vect_011.src      \
+         $(SRC_PROC_ASM_DIR)/vect_012.src      \
+         $(SRC_PROC_ASM_DIR)/vect_013.src      \
+         $(SRC_PROC_ASM_DIR)/vect_014.src      \
+         $(SRC_PROC_ASM_DIR)/vect_015.src      \
+         $(SRC_PROC_ASM_DIR)/vect_016.src      \
+         $(SRC_PROC_ASM_DIR)/vect_017.src      \
+         $(SRC_PROC_ASM_DIR)/vect_018.src      \
+         $(SRC_PROC_ASM_DIR)/vect_019.src      \
+         $(SRC_PROC_ASM_DIR)/vect_020.src      \
+         $(SRC_PROC_ASM_DIR)/vect_021.src      \
+         $(SRC_PROC_ASM_DIR)/vect_022.src      \
+         $(SRC_PROC_ASM_DIR)/vect_023.src      \
+         $(SRC_PROC_ASM_DIR)/vect_024.src      \
+         $(SRC_PROC_ASM_DIR)/vect_025.src      \
+         $(SRC_PROC_ASM_DIR)/vect_026.src      \
+         $(SRC_PROC_ASM_DIR)/vect_027.src      \
+         $(SRC_PROC_ASM_DIR)/vect_028.src      \
+         $(SRC_PROC_ASM_DIR)/vect_029.src      \
+         $(SRC_PROC_ASM_DIR)/vect_030.src      \
+         $(SRC_PROC_ASM_DIR)/vect_031.src      \
+         $(SRC_PROC_ASM_DIR)/vect_032.src      \
+         $(SRC_PROC_ASM_DIR)/vect_033.src      \
+         $(SRC_PROC_ASM_DIR)/vect_034.src      \
+         $(SRC_PROC_ASM_DIR)/vect_035.src      \
+         $(SRC_PROC_ASM_DIR)/vect_036.src      \
+         $(SRC_PROC_ASM_DIR)/vect_037.src      \
+         $(SRC_PROC_ASM_DIR)/vect_038.src      \
+         $(SRC_PROC_ASM_DIR)/vect_039.src      \
+         $(SRC_PROC_ASM_DIR)/vect_040.src      \
+         $(SRC_PROC_ASM_DIR)/vect_041.src      \
+         $(SRC_PROC_ASM_DIR)/vect_042.src      \
+         $(SRC_PROC_ASM_DIR)/vect_043.src      \
+         $(SRC_PROC_ASM_DIR)/vect_044.src      \
+         $(SRC_PROC_ASM_DIR)/vect_045.src      \
+         $(SRC_PROC_ASM_DIR)/vect_046.src      \
+         $(SRC_PROC_ASM_DIR)/vect_047.src      \
+         $(SRC_PROC_ASM_DIR)/vect_048.src      \
+         $(SRC_PROC_ASM_DIR)/vect_049.src      \
+         $(SRC_PROC_ASM_DIR)/vect_050.src      \
+         $(SRC_PROC_ASM_DIR)/vect_051.src      \
+         $(SRC_PROC_ASM_DIR)/vect_052.src      \
+         $(SRC_PROC_ASM_DIR)/vect_053.src      \
+         $(SRC_PROC_ASM_DIR)/vect_054.src      \
+         $(SRC_PROC_ASM_DIR)/vect_055.src      \
+         $(SRC_PROC_ASM_DIR)/vect_056.src      \
+         $(SRC_PROC_ASM_DIR)/vect_057.src      \
+         $(SRC_PROC_ASM_DIR)/vect_058.src      \
+         $(SRC_PROC_ASM_DIR)/vect_059.src      \
+         $(SRC_PROC_ASM_DIR)/vect_060.src      \
+         $(SRC_PROC_ASM_DIR)/vect_061.src      \
+         $(SRC_PROC_ASM_DIR)/vect_062.src      \
+         $(SRC_PROC_ASM_DIR)/vect_063.src      \
+         $(SRC_PROC_ASM_DIR)/vect_064.src      \
+         $(SRC_PROC_ASM_DIR)/vect_065.src      \
+         $(SRC_PROC_ASM_DIR)/vect_066.src      \
+         $(SRC_PROC_ASM_DIR)/vect_067.src      \
+         $(SRC_PROC_ASM_DIR)/vect_068.src      \
+         $(SRC_PROC_ASM_DIR)/vect_069.src      \
+         $(SRC_PROC_ASM_DIR)/vect_070.src      \
+         $(SRC_PROC_ASM_DIR)/vect_071.src      \
+         $(SRC_PROC_ASM_DIR)/vect_072.src      \
+         $(SRC_PROC_ASM_DIR)/vect_073.src      \
+         $(SRC_PROC_ASM_DIR)/vect_074.src      \
+         $(SRC_PROC_ASM_DIR)/vect_075.src      \
+         $(SRC_PROC_ASM_DIR)/vect_076.src      \
+         $(SRC_PROC_ASM_DIR)/vect_077.src      \
+         $(SRC_PROC_ASM_DIR)/vect_078.src      \
+         $(SRC_PROC_ASM_DIR)/vect_079.src      \
+         $(SRC_PROC_ASM_DIR)/vect_080.src      \
+         $(SRC_PROC_ASM_DIR)/vect_081.src      \
+         $(SRC_PROC_ASM_DIR)/vect_082.src      \
+         $(SRC_PROC_ASM_DIR)/vect_083.src      \
+         $(SRC_PROC_ASM_DIR)/vect_084.src      \
+         $(SRC_PROC_ASM_DIR)/vect_085.src      \
+         $(SRC_PROC_ASM_DIR)/vect_086.src      \
+         $(SRC_PROC_ASM_DIR)/vect_087.src      \
+         $(SRC_PROC_ASM_DIR)/vect_088.src      \
+         $(SRC_PROC_ASM_DIR)/vect_089.src      \
+         $(SRC_PROC_ASM_DIR)/vect_090.src      \
+         $(SRC_PROC_ASM_DIR)/vect_091.src      \
+         $(SRC_PROC_ASM_DIR)/vect_092.src      \
+         $(SRC_PROC_ASM_DIR)/vect_093.src      \
+         $(SRC_PROC_ASM_DIR)/vect_094.src      \
+         $(SRC_PROC_ASM_DIR)/vect_095.src      \
+         $(SRC_PROC_ASM_DIR)/vect_096.src      \
+         $(SRC_PROC_ASM_DIR)/vect_097.src      \
+         $(SRC_PROC_ASM_DIR)/vect_098.src      \
+         $(SRC_PROC_ASM_DIR)/vect_099.src      \
+         $(SRC_PROC_ASM_DIR)/vect_100.src      \
+         $(SRC_PROC_ASM_DIR)/vect_101.src      \
+         $(SRC_PROC_ASM_DIR)/vect_102.src      \
+         $(SRC_PROC_ASM_DIR)/vect_103.src      \
+         $(SRC_PROC_ASM_DIR)/vect_104.src      \
+         $(SRC_PROC_ASM_DIR)/vect_105.src      \
+         $(SRC_PROC_ASM_DIR)/vect_106.src      \
+         $(SRC_PROC_ASM_DIR)/vect_107.src      \
+         $(SRC_PROC_ASM_DIR)/vect_108.src      \
+         $(SRC_PROC_ASM_DIR)/vect_109.src      \
+         $(SRC_PROC_ASM_DIR)/vect_110.src      \
+         $(SRC_PROC_ASM_DIR)/vect_111.src      \
+         $(SRC_PROC_ASM_DIR)/vect_112.src      \
+         $(SRC_PROC_ASM_DIR)/vect_113.src      \
+         $(SRC_PROC_ASM_DIR)/vect_114.src      \
+         $(SRC_PROC_ASM_DIR)/vect_115.src      \
+         $(SRC_PROC_ASM_DIR)/vect_116.src      \
+         $(SRC_PROC_ASM_DIR)/vect_117.src      \
+         $(SRC_PROC_ASM_DIR)/vect_118.src      \
+         $(SRC_PROC_ASM_DIR)/vect_119.src      \
+         $(SRC_PROC_ASM_DIR)/vect_120.src      \
+         $(SRC_PROC_ASM_DIR)/vect_121.src      \
+         $(SRC_PROC_ASM_DIR)/vect_122.src      \
+         $(SRC_PROC_ASM_DIR)/vect_123.src      \
+         $(SRC_PROC_ASM_DIR)/vect_124.src      \
+         $(SRC_PROC_ASM_DIR)/vect_125.src      \
+         $(SRC_PROC_ASM_DIR)/vect_126.src      \
+         $(SRC_PROC_ASM_DIR)/vect_127.src      \
+         $(SRC_PROC_ASM_DIR)/vect_128.src      \
+         $(SRC_PROC_ASM_DIR)/vect_129.src      \
+         $(SRC_PROC_ASM_DIR)/vect_130.src      \
+         $(SRC_PROC_ASM_DIR)/vect_131.src      \
+         $(SRC_PROC_ASM_DIR)/vect_132.src      \
+         $(SRC_PROC_ASM_DIR)/vect_133.src      \
+         $(SRC_PROC_ASM_DIR)/vect_134.src      \
+         $(SRC_PROC_ASM_DIR)/vect_135.src      \
+         $(SRC_PROC_ASM_DIR)/vect_136.src      \
+         $(SRC_PROC_ASM_DIR)/vect_137.src      \
+         $(SRC_PROC_ASM_DIR)/vect_138.src      \
+         $(SRC_PROC_ASM_DIR)/vect_139.src      \
+         $(SRC_PROC_ASM_DIR)/vect_140.src      \
+         $(SRC_PROC_ASM_DIR)/vect_141.src      \
+         $(SRC_PROC_ASM_DIR)/vect_142.src      \
+         $(SRC_PROC_ASM_DIR)/vect_143.src      \
+         $(SRC_PROC_ASM_DIR)/vect_144.src      \
+         $(SRC_PROC_ASM_DIR)/vect_145.src      \
+         $(SRC_PROC_ASM_DIR)/vect_146.src      \
+         $(SRC_PROC_ASM_DIR)/vect_147.src      \
+         $(SRC_PROC_ASM_DIR)/vect_148.src      \
+         $(SRC_PROC_ASM_DIR)/vect_149.src      \
+         $(SRC_PROC_ASM_DIR)/vect_150.src      \
+         $(SRC_PROC_ASM_DIR)/vect_151.src      \
+         $(SRC_PROC_ASM_DIR)/vect_152.src      \
+         $(SRC_PROC_ASM_DIR)/vect_153.src      \
+         $(SRC_PROC_ASM_DIR)/vect_154.src      \
+         $(SRC_PROC_ASM_DIR)/vect_155.src      \
+         $(SRC_PROC_ASM_DIR)/vect_156.src      \
+         $(SRC_PROC_ASM_DIR)/vect_157.src      \
+         $(SRC_PROC_ASM_DIR)/vect_158.src      \
+         $(SRC_PROC_ASM_DIR)/vect_159.src      \
+         $(SRC_PROC_ASM_DIR)/vect_160.src      \
+         $(SRC_PROC_ASM_DIR)/vect_161.src      \
+         $(SRC_PROC_ASM_DIR)/vect_162.src      \
+         $(SRC_PROC_ASM_DIR)/vect_163.src      \
+         $(SRC_PROC_ASM_DIR)/vect_164.src      \
+         $(SRC_PROC_ASM_DIR)/vect_165.src      \
+         $(SRC_PROC_ASM_DIR)/vect_166.src      \
+         $(SRC_PROC_ASM_DIR)/vect_167.src      \
+         $(SRC_PROC_ASM_DIR)/vect_168.src      \
+         $(SRC_PROC_ASM_DIR)/vect_169.src      \
+         $(SRC_PROC_ASM_DIR)/vect_170.src      \
+         $(SRC_PROC_ASM_DIR)/vect_171.src      \
+         $(SRC_PROC_ASM_DIR)/vect_172.src      \
+         $(SRC_PROC_ASM_DIR)/vect_173.src      \
+         $(SRC_PROC_ASM_DIR)/vect_174.src      \
+         $(SRC_PROC_ASM_DIR)/vect_175.src      \
+         $(SRC_PROC_ASM_DIR)/vect_176.src      \
+         $(SRC_PROC_ASM_DIR)/vect_177.src      \
+         $(SRC_PROC_ASM_DIR)/vect_178.src      \
+         $(SRC_PROC_ASM_DIR)/vect_179.src      \
+         $(SRC_PROC_ASM_DIR)/vect_180.src      \
+         $(SRC_PROC_ASM_DIR)/vect_181.src      \
+         $(SRC_PROC_ASM_DIR)/vect_182.src      \
+         $(SRC_PROC_ASM_DIR)/vect_183.src      \
+         $(SRC_PROC_ASM_DIR)/vect_184.src      \
+         $(SRC_PROC_ASM_DIR)/vect_185.src      \
+         $(SRC_PROC_ASM_DIR)/vect_186.src      \
+         $(SRC_PROC_ASM_DIR)/vect_187.src      \
+         $(SRC_PROC_ASM_DIR)/vect_188.src      \
+         $(SRC_PROC_ASM_DIR)/vect_189.src      \
+         $(SRC_PROC_ASM_DIR)/vect_190.src      \
+         $(SRC_PROC_ASM_DIR)/vect_191.src      \
+         $(SRC_PROC_ASM_DIR)/vect_192.src      \
+         $(SRC_PROC_ASM_DIR)/vect_193.src      \
+         $(SRC_PROC_ASM_DIR)/vect_194.src      \
+         $(SRC_PROC_ASM_DIR)/vect_195.src      \
+         $(SRC_PROC_ASM_DIR)/vect_196.src      \
+         $(SRC_PROC_ASM_DIR)/vect_197.src      \
+         $(SRC_PROC_ASM_DIR)/vect_198.src      \
+         $(SRC_PROC_ASM_DIR)/vect_199.src      \
+         $(SRC_PROC_ASM_DIR)/vect_200.src      \
+         $(SRC_PROC_ASM_DIR)/vect_201.src      \
+         $(SRC_PROC_ASM_DIR)/vect_202.src      \
+         $(SRC_PROC_ASM_DIR)/vect_203.src      \
+         $(SRC_PROC_ASM_DIR)/vect_204.src      \
+         $(SRC_PROC_ASM_DIR)/vect_205.src      \
+         $(SRC_PROC_ASM_DIR)/vect_206.src      \
+         $(SRC_PROC_ASM_DIR)/vect_207.src      \
+         $(SRC_PROC_ASM_DIR)/vect_208.src      \
+         $(SRC_PROC_ASM_DIR)/vect_209.src      \
+         $(SRC_PROC_ASM_DIR)/vect_210.src      \
+         $(SRC_PROC_ASM_DIR)/vect_211.src      \
+         $(SRC_PROC_ASM_DIR)/vect_212.src      \
+         $(SRC_PROC_ASM_DIR)/vect_213.src      \
+         $(SRC_PROC_ASM_DIR)/vect_214.src      \
+         $(SRC_PROC_ASM_DIR)/vect_215.src      \
+         $(SRC_PROC_ASM_DIR)/vect_216.src      \
+         $(SRC_PROC_ASM_DIR)/vect_217.src      \
+         $(SRC_PROC_ASM_DIR)/vect_218.src      \
+         $(SRC_PROC_ASM_DIR)/vect_219.src      \
+         $(SRC_PROC_ASM_DIR)/vect_220.src      \
+         $(SRC_PROC_ASM_DIR)/vect_221.src      \
+         $(SRC_PROC_ASM_DIR)/vect_222.src      \
+         $(SRC_PROC_ASM_DIR)/vect_223.src      \
+         $(SRC_PROC_ASM_DIR)/vect_224.src      \
+         $(SRC_PROC_ASM_DIR)/vect_225.src      \
+         $(SRC_PROC_ASM_DIR)/vect_226.src      \
+         $(SRC_PROC_ASM_DIR)/vect_227.src      \
+         $(SRC_PROC_ASM_DIR)/vect_228.src      \
+         $(SRC_PROC_ASM_DIR)/vect_229.src      \
+         $(SRC_PROC_ASM_DIR)/vect_230.src      \
+         $(SRC_PROC_ASM_DIR)/vect_231.src      \
+         $(SRC_PROC_ASM_DIR)/vect_232.src      \
+         $(SRC_PROC_ASM_DIR)/vect_233.src      \
+         $(SRC_PROC_ASM_DIR)/vect_234.src      \
+         $(SRC_PROC_ASM_DIR)/vect_235.src      \
+         $(SRC_PROC_ASM_DIR)/vect_236.src      \
+         $(SRC_PROC_ASM_DIR)/vect_237.src      \
+         $(SRC_PROC_ASM_DIR)/vect_238.src      \
+         $(SRC_PROC_ASM_DIR)/vect_239.src      \
+         $(SRC_PROC_ASM_DIR)/vect_240.src      \
+         $(SRC_PROC_ASM_DIR)/vect_241.src      \
+         $(SRC_PROC_ASM_DIR)/vect_242.src      \
+         $(SRC_PROC_ASM_DIR)/vect_243.src      \
+         $(SRC_PROC_ASM_DIR)/vect_244.src      \
+         $(SRC_PROC_ASM_DIR)/vect_245.src      \
+         $(SRC_PROC_ASM_DIR)/vect_246.src      \
+         $(SRC_PROC_ASM_DIR)/vect_247.src      \
+         $(SRC_PROC_ASM_DIR)/vect_248.src      \
+         $(SRC_PROC_ASM_DIR)/vect_249.src      \
+         $(SRC_PROC_ASM_DIR)/vect_250.src      \
+         $(SRC_PROC_ASM_DIR)/vect_251.src      \
+         $(SRC_PROC_ASM_DIR)/vect_252.src      \
+         $(SRC_PROC_ASM_DIR)/vect_253.src      \
+         $(SRC_PROC_ASM_DIR)/vect_254.src      \
+         $(SRC_PROC_ASM_DIR)/vect_255.src
+endif
+
+
+# C言語ファイルの追加
+# CSRCS += $(SRC_IRC_DIR)/intc.c
+
+
+# 検索パスの追加
+VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR)
+
+
+# Tools
+CC     = shc
+ASM    = asmsh
+LIBR   = optlnk
+DEPEND = depend
+LINT   = splint
+AWK    = gawk
+MKDIR  = mkdir
+ECHO   = echo
+RM     = rm
+
+
+# オプションフラグ
+AFLAGS    += -CPu=sh2
+CFLAGS    += -CPu=sh2 -I=$(INC_KNL_DIR),$(INC_PROC_DIR),$(INC_IRC_DIR)
+LFLAGS    += -FOrm=Library
+LINTFLAGS += -weak -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR)
+
+ifeq ($(DEBUG),Yes)
+TARGET    := $(TARGET)dbg
+AFLAGS    += -DEBug
+CFLAGS    += -OP=0
+else
+AFLAGS    += 
+CFLAGS    += -OP=1
+endif
+
+
+# オブジェクトファイル
+OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(CSRCS)))))   \
+       $(addprefix $(OBJS_DIR)/, $(addsuffix .obj, $(basename $(notdir $(ASRCS)))))
+
+
+all: mkdir_objs $(TARGET_LIB) mk_cfgrtr
+
+
+$(TARGET_LIB): $(OBJS)
+       $(ECHO) -Input=$(OBJS) | sed "s/ /,/g" > $(OBJ_DIR)/subcmd.txt
+       $(ECHO) -OUtput=$(TARGET_LIB) >> $(OBJ_DIR)/subcmd.txt
+       $(ECHO) -FOrm=Library >> $(OBJ_DIR)/subcmd.txt
+       $(RM) -f $(TARGET_LIB)
+       $(LIBR) -SU=$(OBJ_DIR)/subcmd.txt
+
+mkdir_objs:
+       $(MKDIR) -p $(OBJS_DIR)
+
+
+mk_cfgrtr:
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+clean:
+       $(RM) -f $(TARGET) $(OBJS) $(CFGRTR) $(OBJS_DIR)/*.lst
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+
+#lint:
+#      $(LINT) $(LINTFLAGS) $(CSRCS)
+
+#depend:
+#      $(DEPEND) $(CFLAGS) $(CSRCS) | sed 's?: ?:\t?' | sed 's?\\?\/?g' | sed 's?^?$(OBJS_DIR)\/?' | sed 's?:[\t ]+?\t?' | sed 's? ?\\ ?' > $(OBJS_DIR)/depend.inc
+
+
+-include $(OBJS_DIR)/depend.inc
+
+
+# 推論規則
+$(OBJS_DIR)/%.obj :: %.c
+       $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst)
+
+$(OBJS_DIR)/%.obj :: %.src
+       $(ASM) $(AFLAGS) $< -OB=$@
+
+
+# end of file
diff --git a/kernel/build/win/win32/gcc/gmake.mak b/kernel/build/win/win32/gcc/gmake.mak
new file mode 100755 (executable)
index 0000000..3588cd8
--- /dev/null
@@ -0,0 +1,121 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for Win32
+#
+# $Id: gmake.mak,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+#
+# Copyright (C) 1998-2006 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+# アーキテクチャパス
+ARCH_PROC ?= win/win32
+ARCH_IRC  ?= none
+ARCH_CC   ?= gcc
+
+
+# ディレクトリ定義
+TOP_DIR      = ../../../../..
+KNL_DIR      = $(TOP_DIR)/kernel
+OBJS_DIR     = objs_$(TARGET)
+
+# インクルードディレクトリ定義
+INC_KNL_DIR  = $(KNL_DIR)/include
+INC_PROC_DIR = $(INC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR  = $(INC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+
+# ソースディレクトリ定義
+SRC_KNL_DIR      = $(KNL_DIR)/source
+SRC_PROC_DIR     = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)
+SRC_PROC_ASM_DIR = $(SRC_KNL_DIR)/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR      = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)
+SRC_IRC_ASM_DIR  = $(SRC_KNL_DIR)/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# コンフィギュレータ定義
+CFGRTR_DIR   = $(TOP_DIR)/cfgrtr/build/gcc
+CFGRTR       = h4acfg-win32
+
+
+# 共通設定インクルード
+include $(TOP_DIR)/kernel/build/common/gmake.inc
+
+
+# ターゲットライブラリファイル名
+TARGET_LIB = $(TARGET).a
+
+# アセンブラファイルの追加
+ASRCS += 
+
+# C言語ファイルの追加
+CSRCS += $(SRC_PROC_DIR)/ctxctl.c
+
+
+# 検索パスの追加
+VPATH := $(VPATH):$(SRC_PROC_DIR):$(SRC_PROC_DIR):$(SRC_PROC_ASM_DIR):$(SRC_IRC_DIR):$(SRC_IRC_ASM_DIR)
+
+
+# Tools
+CC     = gcc
+ASM    = gcc
+LIBR   = ar
+DEPEND = gcc -M
+LINT   = splint
+AWK    = gawk
+LINT   = splint
+MKDIR  = mkdir
+RM     = rm
+
+
+# オプションフラグ
+AFLAGS    += -c -Wall
+CFLAGS    += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR)       \
+             -c -Wall
+LFLAGS    += 
+LINTFLAGS += -I$(INC_KNL_DIR) -I$(INC_PROC_DIR) -I$(INC_IRC_DIR) -weak 
+
+
+# オブジェクトファイル
+OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(CSRCS)))))   \
+       $(addprefix $(OBJS_DIR)/, $(addsuffix .o, $(basename $(notdir $(ASRCS)))))
+
+
+all: $(ASRCS) $(CSRCS) $(TARGET_LIB) $(CFGRTR)
+
+
+$(TARGET_LIB): mkdir_objs $(OBJS)
+       $(LIBR) -r $(TARGET_LIB) $(OBJS)
+
+mkdir_objs:
+       $(MKDIR) -p $(OBJS_DIR)
+
+
+$(CFGRTR):
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+clean:
+       $(RM) -f $(TARGET) $(OBJS) $(CFGRTR)
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+
+lint:
+       $(LINT) $(LINTFLAGS) $(CSRCS)
+
+depend:
+       $(DEPEND) $(CFLAGS) $(CSRCS) | awk '/^[^ ]/{print "$(OBJS_DIR)/"$$0} /^ /{print $$0}' > $(OBJS_DIR)/depend.inc
+
+
+-include $(OBJS_DIR)/depend.inc
+
+
+# 推論規則
+$(OBJS_DIR)/%.o :: %.c
+       $(CC) $(CFLAGS) -c $< -o $@
+
+$(OBJS_DIR)/%.o :: %.S
+       $(ASM) $(AFLAGS) $< -o $@
+
+
+# end of file
diff --git a/kernel/build/win/win32/vc60/hosv4a.dsp b/kernel/build/win/win32/vc60/hosv4a.dsp
new file mode 100755 (executable)
index 0000000..4684e0a
--- /dev/null
@@ -0,0 +1,648 @@
+# Microsoft Developer Studio Project File - Name="hosv4a" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** \95Ò\8fW\82µ\82È\82¢\82Å\82­\82¾\82³\82¢ **\r
+\r
+# TARGTYPE "Win32 (x86) Static Library" 0x0104\r
+\r
+CFG=hosv4a - Win32 Debug\r
+!MESSAGE \82±\82ê\82Í\97L\8cø\82ÈÒ²¸Ì§²Ù\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81\82±\82ÌÌßÛ¼Þª¸Ä\82ðËÞÙÄÞ\82·\82é\82½\82ß\82É\82Í NMAKE \82ð\8eg\97p\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+!MESSAGE [Ò²¸Ì§²Ù\82Ì´¸½Îß°Ä] ºÏÝÄÞ\82ð\8eg\97p\82µ\82Ä\8eÀ\8ds\82µ\82Ä\82­\82¾\82³\82¢\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "hosv4a.mak".\r
+!MESSAGE \r
+!MESSAGE NMAKE \82Ì\8eÀ\8ds\8e\9e\82É\8d\\90¬\82ð\8ew\92è\82Å\82«\82Ü\82·\r
+!MESSAGE ºÏÝÄޠײÝ\8fã\82ÅϸÛ\82Ì\90Ý\92è\82ð\92è\8b`\82µ\82Ü\82·\81B\97á:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "hosv4a.mak" CFG="hosv4a - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE \91I\91ð\89Â\94\\82ÈËÞÙÄÞ Ó°ÄÞ:\r
+!MESSAGE \r
+!MESSAGE "hosv4a - Win32 Release" ("Win32 (x86) Static Library" \97p)\r
+!MESSAGE "hosv4a - Win32 Debug" ("Win32 (x86) Static Library" \97p)\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "hosv4a - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c\r
+# ADD CPP /nologo /W3 /GX /O2 /I "..\..\..\..\include" /I "..\..\..\..\include\arch\proc\win32" /D "WIN32" /D "NDEBUG" /D "_MBCS" /D "_LIB" /YX /FD /c\r
+# ADD BASE RSC /l 0x411 /d "NDEBUG"\r
+# ADD RSC /l 0x411 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo\r
+\r
+!ELSEIF  "$(CFG)" == "hosv4a - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_MBCS" /D "_LIB" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /Ze /W3 /Gm /GX /ZI /Od /I "..\..\..\..\include" /I "..\..\..\..\include\arch\proc\win\win32" /I "..\..\..\..\include\arch\irc\none" /I "../../kernel/include" /D "_LIB" /D "WIN32" /D "_DEBUG" /D "_MBCS" /FD /D /GZ /c\r
+# ADD BASE RSC /l 0x411 /d "_DEBUG"\r
+# ADD RSC /l 0x411 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LIB32=link.exe -lib\r
+# ADD BASE LIB32 /nologo\r
+# ADD LIB32 /nologo\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "hosv4a - Win32 Release"\r
+# Name "hosv4a - Win32 Debug"\r
+# Begin Group "include"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Group "object_inc"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\object\flgobj.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\object\inhobj.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\object\isrobj.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\object\mbxobj.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\object\mpfobj.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\object\semobj.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\object\tskobj.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "core_inc"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\basetyp.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\cmpl.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\core.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\dsp.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\hep.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\objhdl.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\objid.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\opttyp.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\que.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\rdq.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\sys.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\tmq.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\core\toq.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "arch_inc"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Group "arch_inc_proc"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\arch\proc\win\win32\proc.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\arch\proc\win\win32\procatr.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "arch_inc_irc"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\arch\irc\none\irc.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\arch\irc\none\ircatr.h\r
+# End Source File\r
+# End Group\r
+# End Group\r
+# Begin Group "config"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\config\cfgerr.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\config\cfghok.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\config\cfgknl.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\config\cfgsys.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "parser"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\parser\parserr.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\parser\parshok.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\parser\parsknl.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\parser\parssys.h\r
+# End Source File\r
+# End Group\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\itron.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\include\kernel.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "source"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Group "core"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Group "dsp"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\dsp\dsp_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\dsp\ent_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\dsp\idl_lop.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "que"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\que\add_que.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\que\adf_que.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\que\adp_que.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\que\nxt_que.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\que\rmh_que.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\que\rmv_que.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\que\rot_que.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\que\trm_que.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "rdq"\r
+\r
+# PROP Default_Filter ""\r
+# End Group\r
+# Begin Group "hep"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\hep\alc_hep.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\hep\cre_hep.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\hep\fre_hep.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "toq"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\toq\add_toq.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\toq\rmv_toq.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\toq\sig_toq.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "tmq"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\tmq\add_tmq.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\tmq\rmv_tmq.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\core\tmq\sig_tmq.c\r
+# End Source File\r
+# End Group\r
+# End Group\r
+# Begin Group "object"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Group "tsk"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\acre_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\act_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\can_wup.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\cre_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\dly_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\ext_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\kcre_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\ref_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\rel_wai.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\slp_tsk.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tsk\wup_tsk.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "sys"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sys\dis_dsp.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sys\ena_dsp.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sys\get_tid.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sys\loc_cpu.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sys\sns_ctx.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sys\sns_dsp.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sys\sns_loc.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sys\sta_knl.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sys\unl_cpu.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "sem"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sem\acre_sem.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sem\cre_sem.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sem\del_sem.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sem\kcre_sem.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sem\pol_sem.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sem\ref_sem.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sem\sig_sem.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sem\twai_sem.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\sem\wai_sem.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "isr"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\isr\acre_isr.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\isr\exe_isr.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\isr\kcre_isr.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "flg"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\acre_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\clr_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\cre_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\del_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\kchk_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\kcre_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\pol_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\ref_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\set_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\twai_flg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\flg\wai_flg.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "inh"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\inh\def_inh.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\inh\end_inh.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\inh\exe_inh.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\inh\sta_inh.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "tim"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\tim\isig_tim.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "mbx"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mbx\acre_mbx.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mbx\kadd_msg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mbx\kcre_mbx.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mbx\krmv_msg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mbx\rcv_mbx.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mbx\snd_mbx.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "mpf"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mpf\acre_mpf.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mpf\get_mpf.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mpf\kcre_mpf.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mpf\pget_mpf.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\object\mpf\rel_mpf.c\r
+# End Source File\r
+# End Group\r
+# End Group\r
+# Begin Group "arch"\r
+\r
+# PROP Default_Filter ""\r
+# Begin Source File\r
+\r
+SOURCE=..\..\..\..\source\arch\proc\win\win32\ctxctl.c\r
+# End Source File\r
+# End Group\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/kernel/build/win/win32/vc60/hosv4a.dsw b/kernel/build/win/win32/vc60/hosv4a.dsw
new file mode 100755 (executable)
index 0000000..45b7d32
--- /dev/null
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# \8cx\8d\90\82±\82ÌÜ°¸½Íß°½ Ì§²Ù \82ð\95Ò\8fW\82Ü\82½\82Í\8dí\8f\9c\82µ\82È\82¢\82Å\82­\82¾\82³\82¢!\r
+\r
+###############################################################################\r
+\r
+Project: "hosv4a"=".\hosv4a.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
diff --git a/kernel/include/arch/irc/arm/ADuC7019/irc.h b/kernel/include/arch/irc/arm/ADuC7019/irc.h
new file mode 100755 (executable)
index 0000000..aa9ccfd
--- /dev/null
@@ -0,0 +1,40 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  irc.h
+ * @brief %jp{ADuC7019/20/21/22/24/25/26/27 用割り込みコントローラ操作}%en{uITRON4.0 kernel header file}
+ *
+ * @version $Id: irc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__irc__ADuC7019__irc_h__
+#define _KERNEL__arch__irc__ADuC7019__irc_h__
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void _kernel_ini_irc(void);            /**< %jp{割込みコントローラの初期化} */
+void _kernel_arm_irq(void);            /**< %jp{割り込み処理の実施} */
+void _kernel_arm_fiq(void);            /**< %jp{割り込み処理の実施} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_INI_IRC()              _kernel_ini_irc()               /**< %jp{割込みコントローラの初期化} */
+
+
+
+#endif /* _KERNEL__arch__irc__ADuC7019__irc_h__ */
+
+
+/* end of file */
+
diff --git a/kernel/include/arch/irc/arm/ADuC7019/ircatr.h b/kernel/include/arch/irc/arm/ADuC7019/ircatr.h
new file mode 100755 (executable)
index 0000000..8e131d8
--- /dev/null
@@ -0,0 +1,28 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  intc.h
+ * @brief %jp{ADuC7019/20/21/22/24/25/26/27用割り込みコントローラ操作}%en{ADuC7019/20/21/22/24/25/26/27}
+ *
+ * @version $Id: ircatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__irc__ADuC7019__ircatr_h__
+#define _KERNEL__arch__irc__ADuC7019__ircatr_h__
+
+#define _KERNEL_IRCATR_INC_PATH                                "arm/ADuC7019"
+
+
+#define _KERNEL_IRCATR_TMIN_INHNO                      1                       /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_IRCATR_TMAX_INHNO                      23                      /**< %jp{割込みハンドラ番号の最大値} */
+
+
+#endif /* _KERNEL__arch__irc__ADuC7019__ircatr_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/arch/irc/none/irc.h b/kernel/include/arch/irc/none/irc.h
new file mode 100755 (executable)
index 0000000..74191bb
--- /dev/null
@@ -0,0 +1,24 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  irc.h
+ * @brief %jp{割り込みコントローラ固有属性定義}%jp{Interrupt controler attribute}
+ *
+ * @version $Id: irc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__irc_none_h__
+#define _KERNEL__arch__irc_none_h__
+
+
+#define _KERNEL_INI_IRC()                      do {} while (0)         /**< %jp{IRCの初期化ハンドラ} */
+
+
+#endif /* _KERNEL__arch__irc_none_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/irc/none/ircatr.h b/kernel/include/arch/irc/none/ircatr.h
new file mode 100755 (executable)
index 0000000..b4425a2
--- /dev/null
@@ -0,0 +1,29 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ircatr.h
+ * @brief %jp{割り込みコントローラ固有属性定義}%jp{Interrupt controler attribute}
+ *
+ * @version $Id: ircatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__none__ircatr_h__
+#define _KERNEL__arch__none__ircatr_h__
+
+
+#define _KERNEL_IRCATR_INC_PATH                                "none"
+
+#define _KERNEL_IRCATR_IRC                                     FALSE                   /**< %jp{IRCの有無} */
+
+#define _KERNEL_IRCATR_TMIN_INHNO                      0                               /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_IRCATR_TMAX_INHNO                      0                               /**< %jp{割込みハンドラ番号の最大値} */
+
+
+#endif /* _KERNEL__arch__none__ircatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/arm/arm_v4t/proc.h b/kernel/include/arch/proc/arm/arm_v4t/proc.h
new file mode 100755 (executable)
index 0000000..b07fd31
--- /dev/null
@@ -0,0 +1,67 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ctxctl.h
+ * @brief %jp{コンテキスト制御}%en{context control}
+ *
+ * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__arm__arm_v4__proc_h__
+#define _KERNEL__arch__proc__arm__arm_v4__proc_h__
+
+
+
+/** %jp{コンテキスト情報保存ブロック} */
+typedef struct _kernel_t_ctxcb
+{
+       VP_INT  sp;
+} _KERNEL_T_CTXCB;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_ini_arc(void);                                                                                                                                         /**< %jp{アーキテクチャ固有の初期化} */
+
+void    _kernel_ena_int(void);                                                                                                                                         /**< %jp{割り込み許可} */
+void    _kernel_dis_int(void);                                                                                                                                         /**< %jp{割り込み禁止} */
+void    _kernel_wai_int(void);                                                                                                                                         /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+void    _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2);                /**< %jp{実行コンテキストの作成} */
+void    _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの削除} */
+void    _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp);                                                           /**< %jp{実行コンテキストのリスタート} */
+void    _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの開始} */
+void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now);                                /**< %jp{実行コンテキストの切替} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_INI_PRC()      do {} while (0)
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()                                                                                                               /**< %jp{割り込み許可} */
+#define _KERNEL_DIS_INT()      _kernel_dis_int()                                                                                                               /**< %jp{割り込み禁止} */
+#define _KERNEL_WAI_INT()      _kernel_wai_int()                                                                                                               /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2))
+#define _KERNEL_DEL_CTX(pk_ctxcb)      _kernel_del_ctx(pk_ctxcb)
+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp))
+#define _KERNEL_STA_CTX(pk_ctxcb)      _kernel_sta_ctx(pk_ctxcb)
+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt)                                                   \
+                                                                       _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now))
+
+
+#endif /* _KERNEL__arch__proc__arm__arm_v4__proc_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/arm/arm_v4t/procatr.h b/kernel/include/arch/proc/arm/arm_v4t/procatr.h
new file mode 100755 (executable)
index 0000000..15d765a
--- /dev/null
@@ -0,0 +1,67 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  procatr.h
+ * @brief %jp{プロセッサアーキテクチャ固有機能}
+ *
+ * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__arm__arm_v4t__procatr_h__
+#define _KERNEL__arch__proc__arm__arm_v4t__procatr_h__
+
+
+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
+#define _KERNEL_PROCATR_INC_PATH                       "arm/arm_v4t"
+
+
+/* %jp{プロセッサアーキテクチャに依存した属性} */
+#define _KERNEL_PROCATR_CTX_STK                                FALSE           /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_STKSZ                      FALSE           /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_ISP                                TRUE            /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
+#define _KERNEL_PROCATR_CTX_DEL                                FALSE           /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
+#define _KERNEL_PROCATR_CTX_RST                                TRUE            /**< %jp{自コンテキストのリスタートが可能か?} */
+
+#define _KERNEL_PROCATR_TMIN_STKSZ                     (4*16)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
+
+#define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割り込みに対応しているか?} */
+
+#define _KERNEL_PROCATR_TMIN_INHNO                     0                       /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     1                       /**< %jp{割込みハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_TMIN_EXCNO                     0                       /**< %jp{CPU例外ハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     4                       /**< %jp{CPU例外ハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_SYSSTK_NUM                     2                       /**< %jp{システムスタックは何本必要か?} */
+
+#define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
+#define _KERNEL_PROCATR_TBIT_INT                       32                      /**< %jp{プロセッサに最適な整数型のビット数} */
+#define _KERNEL_PROCATR_TBIT_PTR                       32                      /**< %jp{ポインタのビット数} */
+#define _KERNEL_PROCATR_MEM_ALIGN                      8                       /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
+
+
+/* %jp{ARM固有の定数} */
+#define _KERNEL_ARM_INHNO_IRQ                          0                       /**< %jp{IRQ割込みの割込みハンドラ番号} */
+#define _KERNEL_ARM_INHNO_FIQ                          1                       /**< %jp{FIQ割込みの割込みハンドラ番号} */
+
+#define _KERNEL_ARM_EXCNO_RST                          0                       /**< %jp{リセットのCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_UND                          1                       /**< %jp{無効命令例外のCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_SWI                          2                       /**< %jp{ソフトウェア割込みのCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_PRE                          3                       /**< %jp{プリフェッチアボートのCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_ABT                          4                       /**< %jp{データアボートのCPU例外ハンドラ番号} */
+
+
+
+
+
+#endif /* _KERNEL__arch__proc__arm__arm_v4t__procatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/arm/arm_v6/proc.h b/kernel/include/arch/proc/arm/arm_v6/proc.h
new file mode 100755 (executable)
index 0000000..0048c45
--- /dev/null
@@ -0,0 +1,68 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ctxctl.h
+ * @brief %jp{コンテキスト制御}%en{context control}
+ *
+ * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__sh__sh2__proc_h__
+#define _KERNEL__arch__proc__sh__sh2__proc_h__
+
+
+/** %jp{コンテキスト情報保存ブロック} */
+typedef struct _kernel_t_ctxcb
+{
+       VP_INT  sp;
+} _KERNEL_T_CTXCB;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_ini_arc(void);                                                                                                                                         /**< %jp{アーキテクチャ固有の初期化} */
+
+void    _kernel_ena_int(void);                                                                                                                                         /**< %jp{割り込み許可} */
+void    _kernel_dis_int(void);                                                                                                                                         /**< %jp{割り込み禁止} */
+void    _kernel_wai_int(void);                                                                                                                                         /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+void    _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2);                /**< %jp{実行コンテキストの作成} */
+void    _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの削除} */
+void    _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp);                                                           /**< %jp{実行コンテキストのリスタート} */
+void    _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの開始} */
+void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now);                                /**< %jp{実行コンテキストの切替} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_INI_PRC()      do {} while (0)
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()                                                                                                               /**< %jp{割り込み許可} */
+#define _KERNEL_DIS_INT()      _kernel_dis_int()                                                                                                               /**< %jp{割り込み禁止} */
+#define _KERNEL_WAI_INT()      _kernel_wai_int()                                                                                                               /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2))
+#define _KERNEL_DEL_CTX(pk_ctxcb)      _kernel_del_ctx(pk_ctxcb)
+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp))
+#define _KERNEL_STA_CTX(pk_ctxcb)      _kernel_sta_ctx(pk_ctxcb)
+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt)                                                   \
+                                                                       _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now))
+
+
+
+#endif /* _KERNEL__arch__proc__sh__sh2__proc_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/arm/arm_v6/procatr.h b/kernel/include/arch/proc/arm/arm_v6/procatr.h
new file mode 100755 (executable)
index 0000000..8a239cb
--- /dev/null
@@ -0,0 +1,66 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ctxctl.h
+ * @brief %jp{コンテキスト制御}%en{context control}
+ *
+ * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__arm__arm_v6__procatr_h__
+#define _KERNEL__arch__proc__arm__arm_v6__procatr_h__
+
+
+
+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
+#define _KERNEL_PROCATR_INC_PATH                       "arm/arm_v6"
+
+
+/* %jp{プロセッサアーキテクチャに依存した属性} */
+#define _KERNEL_PROCATR_CTX_STK                                FALSE           /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_STKSZ                      FALSE           /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_ISP                                TRUE            /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
+#define _KERNEL_PROCATR_CTX_DEL                                FALSE           /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
+#define _KERNEL_PROCATR_CTX_RST                                TRUE            /**< %jp{自コンテキストのリスタートが可能か?} */
+
+#define _KERNEL_PROCATR_TMIN_STKSZ                     (4*16)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
+
+#define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割り込みに対応しているか?} */
+
+#define _KERNEL_PROCATR_TMIN_INHNO                     0                       /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     1                       /**< %jp{割込みハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_TMIN_EXCNO                     0                       /**< %jp{CPU例外ハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     4                       /**< %jp{CPU例外ハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_SYSSTK_NUM                     2                       /**< %jp{システムスタックは何本必要か?} */
+
+#define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
+#define _KERNEL_PROCATR_TBIT_INT                       32                      /**< %jp{プロセッサに最適な整数型のビット数} */
+#define _KERNEL_PROCATR_TBIT_PTR                       32                      /**< %jp{ポインタのビット数} */
+#define _KERNEL_PROCATR_MEM_ALIGN                      32                      /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
+
+
+/* %jp{ARM固有の定数} */
+#define _KERNEL_ARM_INHNO_IRQ                          0                       /**< %jp{IRQ割込みの割込みハンドラ番号} */
+#define _KERNEL_ARM_INHNO_FIQ                          1                       /**< %jp{FIQ割込みの割込みハンドラ番号} */
+
+#define _KERNEL_ARM_EXCNO_RST                          0                       /**< %jp{リセットのCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_UND                          1                       /**< %jp{無効命令例外のCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_SWI                          2                       /**< %jp{ソフトウェア割込みのCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_PRE                          3                       /**< %jp{プリフェッチアボートのCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_ABT                          4                       /**< %jp{データアボートのCPU例外ハンドラ番号} */
+
+
+
+#endif /* _KERNEL__arch__proc__arm__arm_v6__procatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/h8/h8300h/proc.h b/kernel/include/arch/proc/h8/h8300h/proc.h
new file mode 100755 (executable)
index 0000000..c492c66
--- /dev/null
@@ -0,0 +1,67 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ctxctl.h
+ * @brief %jp{コンテキスト制御}%en{context control}
+ *
+ * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__h8__h8300h__proc_h__
+#define _KERNEL__arch__proc__h8__h8300h__proc_h__
+
+
+
+/** %jp{コンテキスト情報保存ブロック} */
+typedef struct _kernel_t_ctxcb
+{
+       VP_INT  sp;
+} _KERNEL_T_CTXCB;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_ini_arc(void);                                                                                                                                         /**< %jp{アーキテクチャ固有の初期化} */
+
+void    _kernel_ena_int(void);                                                                                                                                         /**< %jp{割り込み許可} */
+void    _kernel_dis_int(void);                                                                                                                                         /**< %jp{割り込み禁止} */
+void    _kernel_wai_int(void);                                                                                                                                         /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+void    _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2);                /**< %jp{実行コンテキストの作成} */
+void    _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの削除} */
+void    _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp);                                                           /**< %jp{実行コンテキストのリスタート} */
+void    _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの開始} */
+void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now);                                /**< %jp{実行コンテキストの切替} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_INI_PRC()      do {} while (0)
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()                                                                                                               /**< %jp{割り込み許可} */
+#define _KERNEL_DIS_INT()      _kernel_dis_int()                                                                                                               /**< %jp{割り込み禁止} */
+#define _KERNEL_WAI_INT()      _kernel_wai_int()                                                                                                               /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2))
+#define _KERNEL_DEL_CTX(pk_ctxcb)      _kernel_del_ctx(pk_ctxcb)
+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp))
+#define _KERNEL_STA_CTX(pk_ctxcb)      _kernel_sta_ctx(pk_ctxcb)
+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt)                                                   \
+                                                                       _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now))
+
+
+#endif /* _KERNEL__arch__proc__h8__h8300h__proc_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/h8/h8300h/procatr.h b/kernel/include/arch/proc/h8/h8300h/procatr.h
new file mode 100755 (executable)
index 0000000..04069fe
--- /dev/null
@@ -0,0 +1,61 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  procatr.h
+ * @brief %jp{プロセッサアーキテクチャ固有機能}
+ *
+ * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__h8__h8300h__procatr_h__
+#define _KERNEL__arch__proc__h8__h8300h__procatr_h__
+
+
+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
+#define _KERNEL_PROCATR_INC_PATH                       "arm/arm_v4t"
+
+
+/* %jp{プロセッサアーキテクチャに依存した属性} */
+#define _KERNEL_PROCATR_CTX_STK                                FALSE           /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_STKSZ                      FALSE           /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_ISP                                TRUE            /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
+#define _KERNEL_PROCATR_CTX_DEL                                FALSE           /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
+#define _KERNEL_PROCATR_CTX_RST                                TRUE            /**< %jp{自コンテキストのリスタートが可能か?} */
+
+#define _KERNEL_PROCATR_TMIN_STKSZ                     (4*16)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
+
+#define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割り込みに対応しているか?} */
+
+#define _KERNEL_PROCATR_TMIN_INHNO                     0                       /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     1                       /**< %jp{割込みハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_TMIN_EXCNO                     0                       /**< %jp{CPU例外ハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     4                       /**< %jp{CPU例外ハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_SYSSTK_NUM                     2                       /**< %jp{システムスタックは何本必要か?} */
+
+#define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
+#define _KERNEL_PROCATR_HAS_MUL                                TRUE            /**< %jp{乗算命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_MUL                     FALSE           /**< %jp{ハードウェア乗算器を有しているか?} */
+#define _KERNEL_PROCATR_HAS_DIV                                TRUE            /**< %jp{除算命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_DIV                     FALSE           /**< %jp{ハードウェア除算器を有しているか?} */
+#define _KERNEL_PROCATR_HAS_BSC                                FALSE           /**< %jp{ビットスキャン命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_SHIFT                      TRUE            /**< %jp{バレルシフタを有しているか?} */
+
+#define _KERNEL_PROCATR_TBIT_INT                       32                      /**< %jp{プロセッサに最適な整数型のビット数} */
+#define _KERNEL_PROCATR_TBIT_PTR                       32                      /**< %jp{ポインタのビット数} */
+#define _KERNEL_PROCATR_MEM_ALIGN                      8                       /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
+
+
+
+#endif /* _KERNEL__arch__proc__h8__h8300h__procatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/h8/h8300ha/proc.h b/kernel/include/arch/proc/h8/h8300ha/proc.h
new file mode 100755 (executable)
index 0000000..c492c66
--- /dev/null
@@ -0,0 +1,67 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ctxctl.h
+ * @brief %jp{コンテキスト制御}%en{context control}
+ *
+ * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__h8__h8300h__proc_h__
+#define _KERNEL__arch__proc__h8__h8300h__proc_h__
+
+
+
+/** %jp{コンテキスト情報保存ブロック} */
+typedef struct _kernel_t_ctxcb
+{
+       VP_INT  sp;
+} _KERNEL_T_CTXCB;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_ini_arc(void);                                                                                                                                         /**< %jp{アーキテクチャ固有の初期化} */
+
+void    _kernel_ena_int(void);                                                                                                                                         /**< %jp{割り込み許可} */
+void    _kernel_dis_int(void);                                                                                                                                         /**< %jp{割り込み禁止} */
+void    _kernel_wai_int(void);                                                                                                                                         /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+void    _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2);                /**< %jp{実行コンテキストの作成} */
+void    _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの削除} */
+void    _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp);                                                           /**< %jp{実行コンテキストのリスタート} */
+void    _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの開始} */
+void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now);                                /**< %jp{実行コンテキストの切替} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_INI_PRC()      do {} while (0)
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()                                                                                                               /**< %jp{割り込み許可} */
+#define _KERNEL_DIS_INT()      _kernel_dis_int()                                                                                                               /**< %jp{割り込み禁止} */
+#define _KERNEL_WAI_INT()      _kernel_wai_int()                                                                                                               /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2))
+#define _KERNEL_DEL_CTX(pk_ctxcb)      _kernel_del_ctx(pk_ctxcb)
+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp))
+#define _KERNEL_STA_CTX(pk_ctxcb)      _kernel_sta_ctx(pk_ctxcb)
+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt)                                                   \
+                                                                       _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now))
+
+
+#endif /* _KERNEL__arch__proc__h8__h8300h__proc_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/h8/h8300ha/procatr.h b/kernel/include/arch/proc/h8/h8300ha/procatr.h
new file mode 100755 (executable)
index 0000000..d4509f3
--- /dev/null
@@ -0,0 +1,65 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  procatr.h
+ * @brief %jp{プロセッサアーキテクチャ固有機能}
+ *
+ * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__h8__h8300ha__procatr_h__
+#define _KERNEL__arch__proc__h8__h8300ha__procatr_h__
+
+
+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
+#define _KERNEL_PROCATR_INC_PATH                       "h8/h8300ha"
+
+
+/* %jp{プロセッサアーキテクチャに依存した属性} */
+#define _KERNEL_PROCATR_CTX_STK                                FALSE           /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_STKSZ                      FALSE           /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_ISP                                TRUE            /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
+#define _KERNEL_PROCATR_CTX_DEL                                FALSE           /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
+#define _KERNEL_PROCATR_CTX_RST                                TRUE            /**< %jp{自コンテキストのリスタートが可能か?} */
+
+#define _KERNEL_PROCATR_TMIN_STKSZ                     (4*16)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
+
+#define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割り込みに対応しているか?} */
+
+#define _KERNEL_PROCATR_TMIN_INHNO                     0                       /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     1                       /**< %jp{割込みハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_TMIN_EXCNO                     0                       /**< %jp{CPU例外ハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     4                       /**< %jp{CPU例外ハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_SYSSTK_NUM                     1                       /**< %jp{システムスタックは何本必要か?} */
+
+#define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
+#define _KERNEL_PROCATR_HAS_MUL                                TRUE            /**< %jp{乗算命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_MUL                     FALSE           /**< %jp{ハードウェア乗算器を有しているか?} */
+#define _KERNEL_PROCATR_HAS_DIV                                TRUE            /**< %jp{除算命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_DIV                     FALSE           /**< %jp{ハードウェア除算器を有しているか?} */
+#define _KERNEL_PROCATR_HAS_BSC                                FALSE           /**< %jp{ビットスキャン命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_SHIFT                      FALSE           /**< %jp{任意bit数のシフト命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_SHIFTER         FALSE           /**< %jp{バレルシフタを有しているか?} */
+
+#define _KERNEL_PROCATR_TBIT_INT                       16                      /**< %jp{プロセッサに最適な整数型のビット数} */
+#define _KERNEL_PROCATR_TBIT_PTR                       32                      /**< %jp{ポインタ型のビット数} */
+#define _KERNEL_PROCATR_TBIT_DATAPTR           24                      /**< %jp{データ用アドレスに必要な有効ビット数} */
+#define _KERNEL_PROCATR_TBIT_FUNCPTR           24                      /**< %jp{関数用アドレスに必要な有効ビット数} */
+#define _KERNEL_PROCATR_MEM_ALIGN                      8                       /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_INST_ALIGN                     1                       /**< %jp{インストラクションのアライメント} */
+#define _KERNEL_PROCATR_ALLOW_UNALIGN          TRUE            /**< %jp{データのアンアラインアクセスは可能か?} */
+#define _KERNEL_PROCATR_ALLOW_INST_UNALIGN     TRUE            /**< %jp{命令のアンアライン配置は可能か?} */
+
+
+#endif /* _KERNEL__arch__proc__h8__h8300ha__procatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/h8/h8300hn/proc.h b/kernel/include/arch/proc/h8/h8300hn/proc.h
new file mode 100755 (executable)
index 0000000..c492c66
--- /dev/null
@@ -0,0 +1,67 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ctxctl.h
+ * @brief %jp{コンテキスト制御}%en{context control}
+ *
+ * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__h8__h8300h__proc_h__
+#define _KERNEL__arch__proc__h8__h8300h__proc_h__
+
+
+
+/** %jp{コンテキスト情報保存ブロック} */
+typedef struct _kernel_t_ctxcb
+{
+       VP_INT  sp;
+} _KERNEL_T_CTXCB;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_ini_arc(void);                                                                                                                                         /**< %jp{アーキテクチャ固有の初期化} */
+
+void    _kernel_ena_int(void);                                                                                                                                         /**< %jp{割り込み許可} */
+void    _kernel_dis_int(void);                                                                                                                                         /**< %jp{割り込み禁止} */
+void    _kernel_wai_int(void);                                                                                                                                         /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+void    _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2);                /**< %jp{実行コンテキストの作成} */
+void    _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの削除} */
+void    _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp);                                                           /**< %jp{実行コンテキストのリスタート} */
+void    _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの開始} */
+void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now);                                /**< %jp{実行コンテキストの切替} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_INI_PRC()      do {} while (0)
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()                                                                                                               /**< %jp{割り込み許可} */
+#define _KERNEL_DIS_INT()      _kernel_dis_int()                                                                                                               /**< %jp{割り込み禁止} */
+#define _KERNEL_WAI_INT()      _kernel_wai_int()                                                                                                               /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2))
+#define _KERNEL_DEL_CTX(pk_ctxcb)      _kernel_del_ctx(pk_ctxcb)
+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp))
+#define _KERNEL_STA_CTX(pk_ctxcb)      _kernel_sta_ctx(pk_ctxcb)
+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt)                                                   \
+                                                                       _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now))
+
+
+#endif /* _KERNEL__arch__proc__h8__h8300h__proc_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/h8/h8300hn/procatr.h b/kernel/include/arch/proc/h8/h8300hn/procatr.h
new file mode 100755 (executable)
index 0000000..d33d0ea
--- /dev/null
@@ -0,0 +1,61 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  procatr.h
+ * @brief %jp{プロセッサアーキテクチャ固有機能}
+ *
+ * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__h8__h8300h__procatr_h__
+#define _KERNEL__arch__proc__h8__h8300h__procatr_h__
+
+
+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
+#define _KERNEL_PROCATR_INC_PATH                       "arm/arm_v4t"
+
+
+/* %jp{プロセッサアーキテクチャに依存した属性} */
+#define _KERNEL_PROCATR_CTX_STK                                FALSE           /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_STKSZ                      FALSE           /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_ISP                                TRUE            /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
+#define _KERNEL_PROCATR_CTX_DEL                                FALSE           /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
+#define _KERNEL_PROCATR_CTX_RST                                TRUE            /**< %jp{自コンテキストのリスタートが可能か?} */
+
+#define _KERNEL_PROCATR_TMIN_STKSZ                     (4*16)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
+
+#define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割り込みに対応しているか?} */
+
+#define _KERNEL_PROCATR_TMIN_INHNO                     0                       /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     1                       /**< %jp{割込みハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_TMIN_EXCNO                     0                       /**< %jp{CPU例外ハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     4                       /**< %jp{CPU例外ハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_SYSSTK_NUM                     2                       /**< %jp{システムスタックは何本必要か?} */
+
+#define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
+#define _KERNEL_PROCATR_HAS_MUL                                TRUE            /**< %jp{乗算命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_MUL                     FALSE           /**< %jp{ハードウェア乗算器を有しているか?} */
+#define _KERNEL_PROCATR_HAS_DIV                                TRUE            /**< %jp{除算命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_DIV                     FALSE           /**< %jp{ハードウェア除算器を有しているか?} */
+#define _KERNEL_PROCATR_HAS_BSC                                FALSE           /**< %jp{ビットスキャン命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_SHIFT                      TRUE            /**< %jp{バレルシフタを有しているか?} */
+
+#define _KERNEL_PROCATR_TBIT_INT                       32                      /**< %jp{プロセッサに最適な整数型のビット数} */
+#define _KERNEL_PROCATR_TBIT_PTR                       16                      /**< %jp{ポインタのビット数} */
+#define _KERNEL_PROCATR_MEM_ALIGN                      8                       /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
+
+
+
+#endif /* _KERNEL__arch__proc__h8__h8300h__procatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/h8/h8s2600a/proc.h b/kernel/include/arch/proc/h8/h8s2600a/proc.h
new file mode 100755 (executable)
index 0000000..c492c66
--- /dev/null
@@ -0,0 +1,67 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ctxctl.h
+ * @brief %jp{コンテキスト制御}%en{context control}
+ *
+ * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__h8__h8300h__proc_h__
+#define _KERNEL__arch__proc__h8__h8300h__proc_h__
+
+
+
+/** %jp{コンテキスト情報保存ブロック} */
+typedef struct _kernel_t_ctxcb
+{
+       VP_INT  sp;
+} _KERNEL_T_CTXCB;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_ini_arc(void);                                                                                                                                         /**< %jp{アーキテクチャ固有の初期化} */
+
+void    _kernel_ena_int(void);                                                                                                                                         /**< %jp{割り込み許可} */
+void    _kernel_dis_int(void);                                                                                                                                         /**< %jp{割り込み禁止} */
+void    _kernel_wai_int(void);                                                                                                                                         /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+void    _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2);                /**< %jp{実行コンテキストの作成} */
+void    _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの削除} */
+void    _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp);                                                           /**< %jp{実行コンテキストのリスタート} */
+void    _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの開始} */
+void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now);                                /**< %jp{実行コンテキストの切替} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_INI_PRC()      do {} while (0)
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()                                                                                                               /**< %jp{割り込み許可} */
+#define _KERNEL_DIS_INT()      _kernel_dis_int()                                                                                                               /**< %jp{割り込み禁止} */
+#define _KERNEL_WAI_INT()      _kernel_wai_int()                                                                                                               /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2))
+#define _KERNEL_DEL_CTX(pk_ctxcb)      _kernel_del_ctx(pk_ctxcb)
+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp))
+#define _KERNEL_STA_CTX(pk_ctxcb)      _kernel_sta_ctx(pk_ctxcb)
+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt)                                                   \
+                                                                       _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now))
+
+
+#endif /* _KERNEL__arch__proc__h8__h8300h__proc_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/h8/h8s2600a/procatr.h b/kernel/include/arch/proc/h8/h8s2600a/procatr.h
new file mode 100755 (executable)
index 0000000..961afba
--- /dev/null
@@ -0,0 +1,65 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  procatr.h
+ * @brief %jp{プロセッサアーキテクチャ固有機能}
+ *
+ * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__h8__h8s2600a__procatr_h__
+#define _KERNEL__arch__proc__h8__h8s2600a__procatr_h__
+
+
+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
+#define _KERNEL_PROCATR_INC_PATH                       "h8/h8300ha24"
+
+
+/* %jp{プロセッサアーキテクチャに依存した属性} */
+#define _KERNEL_PROCATR_CTX_STK                                FALSE           /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_STKSZ                      FALSE           /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_ISP                                TRUE            /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
+#define _KERNEL_PROCATR_CTX_DEL                                FALSE           /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
+#define _KERNEL_PROCATR_CTX_RST                                TRUE            /**< %jp{自コンテキストのリスタートが可能か?} */
+
+#define _KERNEL_PROCATR_TMIN_STKSZ                     (4*16)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
+
+#define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割り込みに対応しているか?} */
+
+#define _KERNEL_PROCATR_TMIN_INHNO                     0                       /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     1                       /**< %jp{割込みハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_TMIN_EXCNO                     0                       /**< %jp{CPU例外ハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     4                       /**< %jp{CPU例外ハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_SYSSTK_NUM                     1                       /**< %jp{システムスタックは何本必要か?} */
+
+#define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
+#define _KERNEL_PROCATR_HAS_MUL                                TRUE            /**< %jp{乗算命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_MUL                     TRUE            /**< %jp{ハードウェア乗算器を有しているか?} */
+#define _KERNEL_PROCATR_HAS_DIV                                TRUE            /**< %jp{除算命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_DIV                     FALSE           /**< %jp{ハードウェア除算器を有しているか?} */
+#define _KERNEL_PROCATR_HAS_BSC                                FALSE           /**< %jp{ビットスキャン命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_SHIFT                      FALSE           /**< %jp{任意bit数のシフト命令を有しているか?} */
+#define _KERNEL_PROCATR_HAS_HW_SHIFTER         FALSE           /**< %jp{バレルシフタを有しているか?} */
+
+#define _KERNEL_PROCATR_TBIT_INT                       16                      /**< %jp{プロセッサに最適な整数型のビット数} */
+#define _KERNEL_PROCATR_TBIT_PTR                       32                      /**< %jp{ポインタ型のビット数} */
+#define _KERNEL_PROCATR_TBIT_DATAPTR           24                      /**< %jp{データ用アドレスに必要な有効ビット数} */
+#define _KERNEL_PROCATR_TBIT_FUNCPTR           24                      /**< %jp{関数用アドレスに必要な有効ビット数} */
+#define _KERNEL_PROCATR_MEM_ALIGN                      8                       /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_INST_ALIGN                     1                       /**< %jp{インストラクションのアライメント} */
+#define _KERNEL_PROCATR_ALLOW_UNALIGN          TRUE            /**< %jp{データのアンアラインアクセスは可能か?} */
+#define _KERNEL_PROCATR_ALLOW_INST_UNALIGN     TRUE            /**< %jp{命令のアンアライン配置は可能か?} */
+
+
+#endif /* _KERNEL__arch__proc__h8__h8s2600a__procatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/mn103/mn1030/proc.h b/kernel/include/arch/proc/mn103/mn1030/proc.h
new file mode 100755 (executable)
index 0000000..b07fd31
--- /dev/null
@@ -0,0 +1,67 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ctxctl.h
+ * @brief %jp{コンテキスト制御}%en{context control}
+ *
+ * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__arm__arm_v4__proc_h__
+#define _KERNEL__arch__proc__arm__arm_v4__proc_h__
+
+
+
+/** %jp{コンテキスト情報保存ブロック} */
+typedef struct _kernel_t_ctxcb
+{
+       VP_INT  sp;
+} _KERNEL_T_CTXCB;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_ini_arc(void);                                                                                                                                         /**< %jp{アーキテクチャ固有の初期化} */
+
+void    _kernel_ena_int(void);                                                                                                                                         /**< %jp{割り込み許可} */
+void    _kernel_dis_int(void);                                                                                                                                         /**< %jp{割り込み禁止} */
+void    _kernel_wai_int(void);                                                                                                                                         /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+void    _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2);                /**< %jp{実行コンテキストの作成} */
+void    _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの削除} */
+void    _kernel_rst_ctx(VP_INT par1, VP_INT par2, FP entry, VP isp);                                                           /**< %jp{実行コンテキストのリスタート} */
+void    _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの開始} */
+void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxinf_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now);                                /**< %jp{実行コンテキストの切替} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_INI_PRC()      do {} while (0)
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()                                                                                                               /**< %jp{割り込み許可} */
+#define _KERNEL_DIS_INT()      _kernel_dis_int()                                                                                                               /**< %jp{割り込み禁止} */
+#define _KERNEL_WAI_INT()      _kernel_wai_int()                                                                                                               /**< %jp{割り込み待ち(アイドル時の処理)} */
+
+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (exinf1), (exinf2))
+#define _KERNEL_DEL_CTX(pk_ctxcb)      _kernel_del_ctx(pk_ctxcb)
+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, exinf1, exinf2)              \
+                                                                       _kernel_rst_ctx((exinf1), (exinf2), (entry), (isp))
+#define _KERNEL_STA_CTX(pk_ctxcb)      _kernel_sta_ctx(pk_ctxcb)
+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt)                                                   \
+                                                                       _kernel_swi_ctx((pk_ctxinf_nxt), (pk_ctxcb_now))
+
+
+#endif /* _KERNEL__arch__proc__arm__arm_v4__proc_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/mn103/mn1030/procatr.h b/kernel/include/arch/proc/mn103/mn1030/procatr.h
new file mode 100755 (executable)
index 0000000..15d765a
--- /dev/null
@@ -0,0 +1,67 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  procatr.h
+ * @brief %jp{プロセッサアーキテクチャ固有機能}
+ *
+ * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__arm__arm_v4t__procatr_h__
+#define _KERNEL__arch__proc__arm__arm_v4t__procatr_h__
+
+
+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
+#define _KERNEL_PROCATR_INC_PATH                       "arm/arm_v4t"
+
+
+/* %jp{プロセッサアーキテクチャに依存した属性} */
+#define _KERNEL_PROCATR_CTX_STK                                FALSE           /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_STKSZ                      FALSE           /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_ISP                                TRUE            /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
+#define _KERNEL_PROCATR_CTX_DEL                                FALSE           /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
+#define _KERNEL_PROCATR_CTX_RST                                TRUE            /**< %jp{自コンテキストのリスタートが可能か?} */
+
+#define _KERNEL_PROCATR_TMIN_STKSZ                     (4*16)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
+
+#define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割り込みに対応しているか?} */
+
+#define _KERNEL_PROCATR_TMIN_INHNO                     0                       /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     1                       /**< %jp{割込みハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_TMIN_EXCNO                     0                       /**< %jp{CPU例外ハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     4                       /**< %jp{CPU例外ハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_SYSSTK_NUM                     2                       /**< %jp{システムスタックは何本必要か?} */
+
+#define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
+#define _KERNEL_PROCATR_TBIT_INT                       32                      /**< %jp{プロセッサに最適な整数型のビット数} */
+#define _KERNEL_PROCATR_TBIT_PTR                       32                      /**< %jp{ポインタのビット数} */
+#define _KERNEL_PROCATR_MEM_ALIGN                      8                       /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_STK_ALIGN                      8                       /**< %jp{適切なスタックのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
+
+
+/* %jp{ARM固有の定数} */
+#define _KERNEL_ARM_INHNO_IRQ                          0                       /**< %jp{IRQ割込みの割込みハンドラ番号} */
+#define _KERNEL_ARM_INHNO_FIQ                          1                       /**< %jp{FIQ割込みの割込みハンドラ番号} */
+
+#define _KERNEL_ARM_EXCNO_RST                          0                       /**< %jp{リセットのCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_UND                          1                       /**< %jp{無効命令例外のCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_SWI                          2                       /**< %jp{ソフトウェア割込みのCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_PRE                          3                       /**< %jp{プリフェッチアボートのCPU例外ハンドラ番号} */
+#define _KERNEL_ARM_EXCNO_ABT                          4                       /**< %jp{データアボートのCPU例外ハンドラ番号} */
+
+
+
+
+
+#endif /* _KERNEL__arch__proc__arm__arm_v4t__procatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/sh/sh2/proc.h b/kernel/include/arch/proc/sh/sh2/proc.h
new file mode 100755 (executable)
index 0000000..b2a60e4
--- /dev/null
@@ -0,0 +1,68 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  procatr.h
+ * @brief %jp{プロセッサアーキテクチャ固有機能(SH2 processor)}
+ *
+ * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef KERNEL__arch__sh2__proc_h__
+#define KERNEL__arch__sh2__proc_h__
+
+
+/** %jp{コンテキスト情報保存ブロック}%en{Execution context control block} */
+typedef struct _kernel_t_ctxcb
+{
+       VP_INT  sp;
+} _KERNEL_T_CTXCB;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_ena_int(void);                                                                                                                                         /**< %jp{割り込み許可}%en{Enable interrupt} */
+void    _kernel_dis_int(void);                                                                                                                                         /**< %jp{割り込み禁止}%en{Disable interrupt} */
+void    _kernel_wai_int(void);                                                                                                                                         /**< %jp{割り込み待ち(アイドル時の処理)}%en{Wait for interrupt(sleep)} */
+                                                                                                    
+void    _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, VP isp, FP entry, VP_INT par1, VP_INT par2);                /**< %jp{実行コンテキストの作成}%en{Create execution context)} */
+void    _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                                    /**< %jp{実行コンテキストの開始}%en{Stert context)} */
+void    _kernel_rst_ctx(VP_INT par1, VP_INT par2, VP isp, FP entry);                                                           /**< %jp{実行コンテキストのリスタート}%en{Restert context)} */
+void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxcb_nxt, _KERNEL_T_CTXCB *pk_ctxcb_now);                         /**< %jp{実行コンテキストの切替}%en{Switch context)} */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#define _KERNEL_INI_PRC()                                                                                                                                                      /**< %jp{プロセッサの初期化}%en{Initialize processor} */
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()                                                                                                               /**< %jp{割り込み許可}%en{Enable interrupt} */
+#define _KERNEL_DIS_INT()      _kernel_dis_int()                                                                                                               /**< %jp{割り込み禁止}%en{Disable interrupt} */
+#define _KERNEL_WAI_INT()      _kernel_wai_int()                                                                                                               /**< %jp{割り込み待ち(アイドル時の処理)}%en{Wait for interrupt(sleep)} */
+
+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, par1, par2)          \
+                                                                       _kernel_cre_ctx((pk_ctxcb), (isp), (entry), (par1), (par2))             /**< %jp{実行コンテキスト生成}%en{Create execution context)} */
+#define _KERNEL_DEL_CTX(pk_ctxcb)      _kernel_del_ctx(pk_ctxcb)
+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, par1, par2)          \
+                                                                       _kernel_rst_ctx((par1), (par2), (isp), (entry))                                 /**< %jp{実行コンテキストリスタート}%en{Restert context)} */
+#define _KERNEL_STA_CTX(pk_ctxcb)      _kernel_sta_ctx(pk_ctxcb)
+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxcb_nxt)                                                    \
+                                                                       _kernel_swi_ctx((pk_ctxcb_nxt), (pk_ctxcb_now))                                 /**< %jp{コンテキストのスイッチ}%en{Switch context)} */
+
+
+
+
+#endif /* KERNEL__HOS_V4a__sh2__sh2_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/sh/sh2/procatr.h b/kernel/include/arch/proc/sh/sh2/procatr.h
new file mode 100755 (executable)
index 0000000..4378c50
--- /dev/null
@@ -0,0 +1,54 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  procatr.h
+ * @brief %jp{プロセッサアーキテクチャ固有属性定義(SH2 processor)}
+ *
+ * @version $Id: procatr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__arch__proc__sh__sh2__procatr_h__
+#define _KERNEL__arch__proc__sh__sh2__procatr_h__
+
+
+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
+#define _KERNEL_PROCATR_INC_PATH                       "sh/sh2"
+
+
+/* %jp{プロセッサアーキテクチャに依存した属性} */
+#define _KERNEL_PROCATR_CTX_STK                                FALSE           /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_STKSZ                      FALSE           /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_ISP                                TRUE            /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
+#define _KERNEL_PROCATR_CTX_DEL                                FALSE           /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
+#define _KERNEL_PROCATR_CTX_RST                                TRUE            /**< %jp{自コンテキストのリスタートが可能か?} */
+
+#define _KERNEL_PROCATR_TMIN_STKSZ                     (4*16)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
+
+#define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    TRUE            /**< %jp{多重割り込みに対応しているか?} */
+
+#define _KERNEL_PROCATR_TMIN_INHNO                     64                      /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     255                     /**< %jp{割込みハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_TMIN_EXCNO                     0                       /**< %jp{CPU例外ハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     63                      /**< %jp{CPU例外ハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_EXCSTK_NUM                     0                       /**< %jp{CPU例外処理用スタックは何本必要か?} */
+#define _KERNEL_PROCATR_INTSTK_NUM                     1                       /**< %jp{割り込みスタックは何本必要か?} */
+
+#define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
+#define _KERNEL_PROCATR_TBIT_INT                       32                      /**< %jp{プロセッサに最適な整数型のビット数} */
+#define _KERNEL_PROCATR_TBIT_PTR                       32                      /**< %jp{ポインタのビット数} */
+#define _KERNEL_PROCATR_MEM_ALIGN                      8                       /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_STK_ALIGN                      4                       /**< %jp{適切なスタックのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_ALLOW_UNALIGN          FALSE           /**< %jp{アンアラインアクセスは可能か?} */
+
+
+#endif /* _KERNEL__arch__proc__sh__sh2__procatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/win/win32/proc.h b/kernel/include/arch/proc/win/win32/proc.h
new file mode 100755 (executable)
index 0000000..a2548a1
--- /dev/null
@@ -0,0 +1,112 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  proc.h
+ * @brief %jp{プロセッサアーキテクチャ固有機能}%en{Processor archtecture}
+ *
+ * @version $Id: proc.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__win32__proc_h__
+#define _KERNEL__win32__proc_h__
+
+
+/** %jp{Windows ヘッダファイルの読みこみ} */
+#define SIZE  WIN_SIZE
+#include <windows.h>
+#undef  SIZE
+#include <setjmp.h>
+
+
+/* %jp{
+   Windows 標準の SIZE 構造体が ITRON の標準型と重なるので
+   上記のように強制的に WIN_SIZE に名前を変えている
+   Windows APIで SIZE を利用するときは要注意}
+*/
+
+
+
+/** %jp{コンテキスト情報保存ブロック} */
+typedef struct _kernel_t_ctxcb
+{
+       HANDLE  hEvent;                         /**< %jp{スレッドハンドル} */
+       HANDLE  hThread;                        /**< %jp{スレッドハンドル} */
+       DWORD   dwThreadId;                     /**< %jp{スレッドID} */
+       BOOL    blIntSuspend;           /**< %jp{割り込みディスパッチされた} */
+       FP      entry;                          /**< %jp{エントリーアドレス} */
+       VP_INT  exinf1;                         /**< %jp{パラメータ1} */
+       VP_INT  exinf2;                         /**< %jp{パラメータ2} */
+       jmp_buf jmpenv;                         /**< %jp{コンテキストリセット用のlongjmpデータ} */
+} _KERNEL_T_CTXCB;
+
+
+
+extern HANDLE          _kernel_win32_hSemLock;                 /** %jp{システムの排他制御用セマフォ} */
+extern _KERNEL_T_CTXCB *_kernel_win32_ctxcb_run;               /** %jp{実行中のコンテキスト} */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_ini_prc(void);                                                                                                                         /**< アーキテクチャ固有の初期化 */
+
+void    _kernel_ena_int(void);                                                                                                                         /**< 割り込み許可 */
+void    _kernel_dis_int(void);                                                                                                                         /**< 割り込み禁止 */
+void    _kernel_wai_int(void);                                                                                                                         /**< 割り込み待ち(アイドル時の処理) */
+
+void    _kernel_cre_ctx(_KERNEL_T_CTXCB *pk_ctxcb, FP entry, VP_INT exinf1, VP_INT exinf2);    /**< 実行コンテキストの作成 */
+void    _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                    /**< 実行コンテキストの削除 */
+void    _kernel_rst_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                    /**< 実行コンテキストのリスタート */
+void    _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                                                                                    /**< 実行コンテキストの開始 */
+void    _kernel_swi_ctx(_KERNEL_T_CTXCB *pk_ctxcb_now, _KERNEL_T_CTXCB *pk_ctxinf_nxt);                /**< 実行コンテキストの切替 */
+
+void     vsig_int(int inhno);          /* %jp{割り込み} */
+
+
+#if KERNEL_SMP
+
+int     _kernel_get_prc(void);
+void    _kernel_ini_prc(int prcid);
+void    _kernel_loc_ctx(_KERNEL_T_LOC *loc);
+void    _kernel_unl_ctx(_KERNEL_T_LOC *loc);
+void    _kernel_loc_wri(_KERNEL_T_LOC *loc);
+void    _kernel_unl_wri(_KERNEL_T_LOC *loc);
+void    _kernel_loc_red(_KERNEL_T_LOC *loc);
+void    _kernel_unl_red(_KERNEL_T_LOC *loc);
+
+#endif
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_INI_PRC()      _kernel_ini_prc()
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()
+
+#define _KERNEL_ENA_INT()      _kernel_ena_int()                                                                                               /**< 割り込み許可 */
+#define _KERNEL_DIS_INT()      _kernel_dis_int()                                                                                               /**< 割り込み禁止 */
+#define _KERNEL_WAI_INT()      _kernel_wai_int()                                                                                               /**< 割り込み待ち(アイドル時の処理) */
+
+
+#define _KERNEL_CRE_CTX(pk_ctxcb, stksz, stk, isp, entry, par1, par2)          \
+                                                       _kernel_cre_ctx(pk_ctxcb, entry, par1, par2)
+#define _KERNEL_DEL_CTX(pk_ctxcb)      _kernel_del_ctx(pk_ctxcb)
+#define _KERNEL_RST_CTX(pk_ctxcb, stksz, stk, isp, entry, par1, par2)          \
+                                                       _kernel_rst_ctx(pk_ctxcb)
+#define _KERNEL_STA_CTX(pk_ctxcb)      _kernel_sta_ctx(pk_ctxcb)
+#define _KERNEL_SWI_CTX(pk_ctxcb_now, pk_ctxinf_nxt)                                           \
+                                                       _kernel_swi_ctx(pk_ctxcb_now, pk_ctxinf_nxt)
+
+
+
+#endif /* _KERNEL__win32__proc_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/arch/proc/win/win32/procatr.h b/kernel/include/arch/proc/win/win32/procatr.h
new file mode 100755 (executable)
index 0000000..494c025
--- /dev/null
@@ -0,0 +1,49 @@
+/* ------------------------------------------------------------------------ */
+/*  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                  */
+/*    プロセッサ抽象化コンポーネント (Windows用)                            */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2002 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+#ifndef _KERNEL__arch__proc__win__win32__procatr_h__
+#define _KERNEL__arch__proc__win__win32__procatr_h__
+
+
+/* %jp{プロセッサアーキテクチャ定義のあるインクルードパス} */
+#define _KERNEL_PROCATR_INC_PATH                       "win/win32"
+
+
+/* %jp{プロセッサアーキテクチャに依存した属性} */
+#define _KERNEL_PROCATR_CTX_STK                                FALSE           /**< %jp{コンテキスト生成にスタック領域の指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_STKSZ                      FALSE           /**< %jp{コンテキスト生成にスタックサイズの指定が必要か?} */
+#define _KERNEL_PROCATR_CTX_ISP                                TRUE            /**< %jp{コンテキスト生成に初期スタックポインタ値が必要か?} */
+#define _KERNEL_PROCATR_CTX_DEL                                TRUE            /**< %jp{別コンテキストからのコンテキスト削除が必要か?} */
+#define _KERNEL_PROCATR_CTX_RST                                FALSE           /**< %jp{自コンテキストのリスタートが可能か?} */
+
+#define _KERNEL_PROCATR_TMIN_STKSZ                     (4*32)          /**< %jp{最低限必要なスタックサイズ(byte単位)} */
+
+#define _KERNEL_PROCATR_SPT_SMP                                FALSE           /**< %jp{SMPに対応しているか?} */
+#define _KERNEL_PROCATR_SPT_MULTINT                    FALSE           /**< %jp{多重割り込みに対応しているか?} */
+
+#define _KERNEL_PROCATR_TMIN_INHNO                     1                       /**< %jp{割込みハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_INHNO                     256                     /**< %jp{割込みハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_TMIN_EXCNO                     1                       /**< %jp{CPU例外ハンドラ番号の最小値} */
+#define _KERNEL_PROCATR_TMAX_EXCNO                     1                       /**< %jp{CPU例外ハンドラ番号の最大値} */
+
+#define _KERNEL_PROCATR_SYSSTK_NUM                     1                       /**< %jp{システムスタックは何本必要か?} */
+
+#define _KERNEL_PROCATR_SIGNED_INT                     0                       /**< %jp{符号付整数と符号無し整数のどちらが得意か?(符号付き:1, 符号無し:-1, 同じ:0)} */
+#define _KERNEL_PROCATR_TBIT_INT                       32                      /**< %jp{プロセッサに最適な整数型のビット数} */
+#define _KERNEL_PROCATR_TBIT_PTR                       32                      /**< %jp{ポインタのビット数} */
+#define _KERNEL_PROCATR_MEM_ALIGN                      32                      /**< %jp{適切なメモリのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_STK_ALIGN                      1                       /**< %jp{適切なスタックのアライメント(byte単位)} */
+#define _KERNEL_PROCATR_ALLOW_UNALIGN          TRUE            /**< %jp{アンアラインアクセスは可能か?} */
+
+
+#endif /* _KERNEL__arch__proc__win__win32__procatr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/config/cfgerr.h b/kernel/include/config/cfgerr.h
new file mode 100755 (executable)
index 0000000..ccf3106
--- /dev/null
@@ -0,0 +1,393 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  cfgerr.h
+ * @brief %jp{エラー処理のコンフィギュレーション用ヘッダファイル}
+ *
+ * @version $Id: cfgerr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__config__cfgerr_h__
+#define _KERNEL__config__cfgerr_h__
+
+
+/*
+%jp{
+  本ファイルにて、カーネル内のエラーチェックサポートのコンフィギュ
+レーションを行う。
+  エラーチェックを取り外した場合、コードサイズなどの削減が可能となるが、
+そのエラーが発生する状況を発生させた場合は、動作未保証となるので注意して
+取り外すこと。
+  また、本ファイルはセンブリ言語の前処理にも使う事を想定しているので、
+C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ定義などの
+プリプロセッサディレクティブのみを記載する事とする。
+}
+*/
+
+
+/* cre_tsk */
+/* acre_tsk */
+/* del_tsk */
+
+/* act_tsk */
+#define _KERNEL_CFG_ACT_TSK_E_ID               TRUE
+
+/* iact_tsk */
+/* can_act */
+/* sta_tsk */
+/* ext_tsk */
+/* exd_tsk */
+/* ter_tsk */
+/* chg_pri */
+/* get_pri */
+/* ref_tsk */
+#define _KERNEL_CFG_REF_TSK_E_ID               TRUE
+/* ref_tst */
+
+/* slp_tsk */
+/* tslp_tsk */
+/* wup_tsk */
+#define _KERNEL_CFG_WUP_TSK_E_ID               TRUE
+#define _KERNEL_CFG_WUP_TSK_E_NOEXS            TRUE
+
+/* iwup_tsk */
+/* can_wup */
+#define _KERNEL_CFG_CAN_WUP_E_ID               TRUE
+#define _KERNEL_CFG_CAN_WUP_E_NOEXS            TRUE
+
+/* rel_wai */
+#define _KERNEL_CFG_REL_WAI_E_ID               TRUE
+#define _KERNEL_CFG_REL_WAI_E_NOEXS            TRUE
+/* irel_wai */
+/* sus_tsk */
+/* rsm_tsk */
+/* frsm_tsk */
+/* dly_tsk */
+
+
+
+/* def_tex */
+/* ras_tex */
+/* iras_tex */
+/* dis_tex */
+/* ena_tex */
+/* sns_tex */
+/* ref_tex */
+
+
+/* cre_sem */
+#define _KERNEL_CFG_CRE_SEM_E_ID               TRUE
+#define _KERNEL_CFG_CRE_SEM_E_RSATR    TRUE
+#define _KERNEL_CFG_CRE_SEM_E_OBJ              TRUE
+#define _KERNEL_CFG_CRE_SEM_E_NOMEM            TRUE
+#define _KERNEL_CFG_CRE_SEM_E_NOSPT            FALSE
+
+/* acre_sem */
+#define _KERNEL_CFG_ACRE_SEM_E_NOID            TRUE
+#define _KERNEL_CFG_ACRE_SEM_E_RSATR   TRUE
+#define _KERNEL_CFG_ACRE_SEM_E_NOMEM   TRUE    
+#define _KERNEL_CFG_ACRE_SEM_E_NOSPT   FALSE
+
+/* del_sem */
+#define _KERNEL_CFG_DEL_SEM_E_ID               TRUE
+#define _KERNEL_CFG_DEL_SEM_E_NOEXS            TRUE
+#define _KERNEL_CFG_DEL_SEM_E_NOSPT            FALSE
+
+/* sig_sem */
+#define _KERNEL_CFG_SIG_SEM_E_ID               TRUE
+#define _KERNEL_CFG_SIG_SEM_E_NOEXS            TRUE
+#define _KERNEL_CFG_SIG_SEM_E_QOVR             TRUE
+#define _KERNEL_CFG_SIG_SEM_E_NOSPT            FALSE
+
+/* isig_sem */
+
+/* wai_sem */
+#define _KERNEL_CFG_WAI_SEM_E_ID               TRUE
+#define _KERNEL_CFG_WAI_SEM_E_CTX              TRUE
+#define _KERNEL_CFG_WAI_SEM_E_NOEXS            TRUE
+#define _KERNEL_CFG_WAI_SEM_E_RLWAI    TRUE
+#define _KERNEL_CFG_WAI_SEM_E_DLT      TRUE
+#define _KERNEL_CFG_WAI_SEM_E_NOSPT            FALSE
+
+/* pol_sem */
+#define _KERNEL_CFG_POL_SEM_E_ID               TRUE
+#define _KERNEL_CFG_POL_SEM_E_NOEXS            TRUE
+#define _KERNEL_CFG_POL_SEM_E_TMOUT            TRUE
+#define _KERNEL_CFG_POL_SEM_E_NOSPT            FALSE
+
+/* twai_sem */
+#define _KERNEL_CFG_TWAI_SEM_E_ID              TRUE
+#define _KERNEL_CFG_TWAI_SEM_E_CTX             TRUE
+#define _KERNEL_CFG_TWAI_SEM_E_NOEXS   TRUE
+#define _KERNEL_CFG_TWAI_SEM_E_TMOUT   TRUE
+#define _KERNEL_CFG_TWAI_SEM_E_RLWAI   TRUE
+#define _KERNEL_CFG_TWAI_SEM_E_DLT     TRUE
+#define _KERNEL_CFG_TWAI_SEM_E_NOSPT   FALSE
+
+/* ref_sem */
+#define _KERNEL_CFG_REF_SEM_E_ID               TRUE
+#define _KERNEL_CFG_REF_SEM_E_NOEXS            TRUE
+#define _KERNEL_CFG_REF_SEM_E_PAR              TRUE
+#define _KERNEL_CFG_REF_SEM_E_NOSPT            FALSE
+
+
+/* cre_flg */
+#define _KERNEL_CFG_CRE_FLG_E_ID               TRUE
+#define _KERNEL_CFG_CRE_FLG_E_RSATR    TRUE
+#define _KERNEL_CFG_CRE_FLG_E_OBJ              TRUE
+#define _KERNEL_CFG_CRE_FLG_E_NOMEM            TRUE
+#define _KERNEL_CFG_CRE_FLG_E_NOSPT            TRUE
+
+/* acre_flg */
+#define _KERNEL_CFG_ACRE_FLG_E_NOID            TRUE
+#define _KERNEL_CFG_ACRE_FLG_E_RSATR   TRUE
+#define _KERNEL_CFG_ACRE_FLG_E_NOMEM   TRUE    
+#define _KERNEL_CFG_ACRE_FLG_E_NOSPT   FALSE
+
+/* del_flg */
+#define _KERNEL_CFG_DEL_FLG_E_ID               TRUE
+#define _KERNEL_CFG_DEL_FLG_E_NOEXS            TRUE
+#define _KERNEL_CFG_DEL_FLG_E_NOSPT            FALSE
+
+/* set_flg */
+#define _KERNEL_CFG_SET_FLG_E_ID               TRUE
+#define _KERNEL_CFG_SET_FLG_E_NOEXS            TRUE
+#define _KERNEL_CFG_SET_FLG_E_PAR              TRUE
+#define _KERNEL_CFG_SET_FLG_E_NOSPT            FALSE
+
+/* iset_flg */
+/* clr_flg */
+#define _KERNEL_CFG_SET_FLG_E_ID               TRUE
+#define _KERNEL_CFG_SET_FLG_E_NOEXS            TRUE
+#define _KERNEL_CFG_SET_FLG_E_PAR              TRUE
+#define _KERNEL_CFG_SET_FLG_E_NOSPT            FALSE
+
+/* wai_flg */
+#define _KERNEL_CFG_WAI_FLG_E_ID               TRUE    
+#define _KERNEL_CFG_WAI_FLG_E_CTX              TRUE
+#define _KERNEL_CFG_WAI_FLG_E_NOEXS    TRUE
+#define _KERNEL_CFG_WAI_FLG_E_PAR      TRUE
+#define _KERNEL_CFG_WAI_FLG_E_ILUSE    TRUE
+#define _KERNEL_CFG_WAI_FLG_E_RLWAI    TRUE
+#define _KERNEL_CFG_WAI_FLG_E_DLT      TRUE
+#define _KERNEL_CFG_WAI_FLG_E_NOSPT            FALSE
+
+/* pol_flg */
+#define _KERNEL_CFG_WAI_FLG_E_ID               TRUE    
+#define _KERNEL_CFG_WAI_FLG_E_NOEXS    TRUE
+#define _KERNEL_CFG_WAI_FLG_E_PAR      TRUE
+#define _KERNEL_CFG_WAI_FLG_E_TMOUT    TRUE
+#define _KERNEL_CFG_WAI_FLG_E_NOSPT            FALSE
+
+/* twai_flg */
+#define _KERNEL_CFG_TWAI_FLG_E_ID              TRUE    
+#define _KERNEL_CFG_TWAI_FLG_E_CTX             TRUE
+#define _KERNEL_CFG_TWAI_FLG_E_NOEXS   TRUE
+#define _KERNEL_CFG_TWAI_FLG_E_PAR     TRUE
+#define _KERNEL_CFG_TWAI_FLG_E_ILUSE   TRUE
+#define _KERNEL_CFG_TWAI_FLG_E_TMOUT           TRUE
+#define _KERNEL_CFG_TWAI_FLG_E_RLWAI   TRUE
+#define _KERNEL_CFG_TWAI_FLG_E_DLT     TRUE
+#define _KERNEL_CFG_TWAI_FLG_E_NOSPT   FALSE
+
+/* ref_flg */
+#define _KERNEL_CFG_REF_FLG_E_ID               TRUE    
+#define _KERNEL_CFG_REF_FLG_E_NOEXS    TRUE
+#define _KERNEL_CFG_REF_FLG_E_PAR      TRUE
+#define _KERNEL_CFG_REF_FLG_E_NOSPT            FALSE
+
+
+
+/* cre_dtq */
+/* acre_dtq */
+/* del_dtq */
+/* snd_dtq */
+/* ipsnd_dtq */
+/* tsnd_dtq */
+/* fsnd_dtq */
+/* ifsnd_dtq */
+/* rcv_dtq */
+/* prcv_dtq */
+/* trcv_dtq */
+/* ref_dtq */
+
+
+/* cre_mbx */
+#define _KERNEL_CFG_CRE_MBX_E_ID               TRUE    
+#define _KERNEL_CFG_CRE_MBX_E_RSATR    TRUE    
+#define _KERNEL_CFG_CRE_MBX_E_OBJ              TRUE    
+#define _KERNEL_CFG_CRE_MBX_E_NOMEM            TRUE    
+#define _KERNEL_CFG_CRE_MBX_E_NOSPT            FALSE
+       
+/* acre_mbx */
+#define _KERNEL_CFG_ACRE_MBX_E_NOID            TRUE
+#define _KERNEL_CFG_ACRE_MBX_E_RSATR   TRUE
+#define _KERNEL_CFG_ACRE_MBX_E_NOMEM   TRUE
+#define _KERNEL_CFG_ACRE_MBX_E_NOSPT   FALSE
+
+/* del_mbx */
+#define _KERNEL_CFG_DEL_MBX_E_ID               TRUE
+#define _KERNEL_CFG_DEL_MBX_E_NOEXS            TRUE
+#define _KERNEL_CFG_DEL_MBX_E_NOSPT            FALSE
+
+
+/* snd_mbx */
+/* rcv_mbx */
+/* prcv_mbx */
+/* trcv_mbx */
+/* ref_mbx */
+
+
+/* cre_mtx */
+/* acre_mtx */
+/* del_mtx */
+/* loc_mtx */
+/* ploc_mtx */
+/* tloc_mtx */
+/* unl_mtx */
+/* ref_mtx */
+
+
+/* cre_mbf */
+/* acre_mbf */
+/* del_mbf */
+/* snd_mbf */
+/* psnd_mbf */
+/* tsnd_mbf */
+/* rcv_mbf */
+/* prcv_mbf */
+/* trcv_mbf */
+/* ref_mbf */
+
+
+/* cre_por */
+/* acre_por */
+/* del_por */
+/* cal_por */
+/* tcal_por */
+/* acp_por */
+/* pacp_por */
+/* tacp_por */
+/* fwd_por */
+/* rpl_rdv */
+/* ref_por */
+/* ref_rdv */
+
+
+/* cre_mpf */
+#define _KERNEL_CFG_CRE_MPF_E_ID               TRUE
+#define _KERNEL_CFG_CRE_MPF_E_RSATR    TRUE
+#define _KERNEL_CFG_CRE_MPF_E_OBJ              TRUE
+#define _KERNEL_CFG_CRE_MPF_E_NOMEM            TRUE
+#define _KERNEL_CFG_CRE_MPF_E_NOCFG            FALSE
+
+/* acre_mpf */
+#define _KERNEL_CFG_ACRE_MPF_E_NOID            TRUE
+#define _KERNEL_CFG_ACRE_MPF_E_RSATR   TRUE
+#define _KERNEL_CFG_ACRE_MPF_E_NOMEM   TRUE
+#define _KERNEL_CFG_ACRE_MPF_E_NOCFG   FALSE
+
+/* del_mpf */
+#define _KERNEL_CFG_DEL_MPF_E_ID               TRUE
+#define _KERNEL_CFG_DEL_MPF_E_NOEXS            TRUE
+#define _KERNEL_CFG_DEL_MPF_E_NOCFG            FALSE
+
+/* get_mpf */
+#define _KERNEL_CFG_GET_MPF_E_ID               TRUE    
+#define _KERNEL_CFG_GET_MPF_E_CTX              TRUE
+#define _KERNEL_CFG_GET_MPF_E_NOEXS    TRUE
+#define _KERNEL_CFG_GET_MPF_E_PAR      TRUE
+#define _KERNEL_CFG_GET_MPF_E_ILUSE    TRUE
+#define _KERNEL_CFG_GET_MPF_E_RLWAI    TRUE
+#define _KERNEL_CFG_GET_MPF_E_DLT      TRUE
+#define _KERNEL_CFG_GET_MPF_E_NOSPT            FALSE
+
+/* pget_mpf */
+/* tget_mpf */
+/* rel_mpf */
+/* ref_mpf */
+
+
+/* cre_mpl */
+/* acre_mpl */
+/* del_mpl */
+/* get_mpl */
+/* pget_mpl */
+/* tget_mpl */
+/* rel_mpl */
+/* ref_mpl */
+
+
+/* set_tim */
+/* get_tim */
+/* isig_tim */
+
+
+/* cre_cyc */
+/* acre_cyc */
+/* del_cyc */
+/* sta_cyc */
+/* stp_cyc */
+/* ref_cyc */
+
+
+/* cre_alm */
+/* acre_alm */
+/* del_alm */
+/* sta_alm */
+/* stp_alm */
+/* ref_alm */
+
+
+/* def_ovr */
+/* sta_ovr */
+/* stp_ovr */
+/* ref_ovr */
+
+
+/* rot_rdq */
+/* irot_rdq */
+/* get_tid */
+/* iget_tid */
+/* loc_cpu */
+/* iloc_cpu */
+/* unl_cpu */
+/* ilnl_cpu */
+/* dis_dsp */
+/* ena_dsp */
+/* sns_ctx */
+/* sns_loc */
+/* sns_dsp */
+/* sns_dpn */
+/* ref_sys */
+
+
+/* def_inh */
+/* cre_isr */
+/* acre_isr */
+/* del_isr */
+/* ref_isr */
+/* dis_int */
+/* ena_int */
+/* chg_ilv */
+/* get_ilv */
+
+
+/* def_svc */
+/* cal_svc */
+
+
+/* def_exc */
+/* ref_cfg */
+/* ref_ver */
+
+
+
+#endif /* _KERNEL__config__cfgerr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/config/cfghok.h b/kernel/include/config/cfghok.h
new file mode 100755 (executable)
index 0000000..609b33f
--- /dev/null
@@ -0,0 +1,41 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  cfghok.h
+ * @brief %jp{カーネルフックのコンフィギュレーション用ヘッダファイル}
+ *
+ * @version $Id: cfghok.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+/*
+%jp{
+  本ファイルにて、カーネルフック機構のコンフィギュレーションを行う。
+  
+  また、本ファイルはセンブリ言語の前処理にも使う事を想定しているので、
+C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ定義などの
+プリプロセッサディレクティブのみを記載する事とする。
+}
+*/
+
+
+
+#ifndef _KERNEL__config__cfghok_h__
+#define _KERNEL__config__cfghok_h__
+
+
+/* 以下予定 */
+#define _KERNEL_CFG_HOK_SVCCAL         FALSE           /**< サービスコールの呼び出し */
+#define _KERNEL_CFG_HOK_SVCRET         FALSE           /**< サービスコールのリターン */
+#define _KERNEL_CFG_HOK_TSKSWI         FALSE           /**< タスクスイッチのフック */
+#define _KERNEL_CFG_HOK_CTXSWI         FALSE           /**< コンテキストスイッチのフック */
+#define _KERNEL_CFG_HOK_MTXPRI         FALSE           /**< ミューテックスの優先度変化のフック */
+
+
+#endif /* _KERNEL__config__cfghok_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/config/cfgknl.h b/kernel/include/config/cfgknl.h
new file mode 100755 (executable)
index 0000000..125daa7
--- /dev/null
@@ -0,0 +1,486 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  config.h
+ * @brief %jp{カーネル仕様のコンフィギュレーション用ヘッダファイル}%en{kernel configuration heder file}
+ *
+ * @version $Id: cfgknl.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+/*
+%jp{
+  本ファイルにて、カーネル内部のコンフィギュレーションを行う。
+  本ファイルの変更後はカーネルのリビルドが必要である。
+  また、本ファイルはセンブリ言語の前処理にも使う事を想定しているので、
+C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ定義などの
+プリプロセッサディレクティブのみを記載する事とする。
+}
+*/
+
+
+
+#ifndef _KERNEL__config__cfgknl_h__
+#define _KERNEL__config__cfgknl_h__
+
+
+
+/* ---------------------------------------------- */
+/*  Optimize                                      */
+/* ---------------------------------------------- */
+
+/* %jp{数値の小さいものを優先して最適化する} */
+#define _KERNEL_CFG_OPT_RW_SIZE                        1                                       /**< %jp{リードライトデータサイズ(通常はRAM配置)の優先度} */
+#define _KERNEL_CFG_OPT_RO_SIZE                        2                                       /**< %jp{リードオンリーデータ(通常はROM配置)のサイズの優先度} */
+#define _KERNEL_CFG_OPT_CODE_SIZE              2                                       /**< %jp{コードサイズ(通常はROM配置)の優先度} */
+#define _KERNEL_CFG_OPT_SPEED                  3                                       /**< %jp{実行速度の優先度} */
+
+
+
+/* ---------------------------------------------- */
+/*  ID number                                     */
+/* ---------------------------------------------- */
+
+/* %jp{オブジェクト数} */
+#define _KERNEL_CFG_TMAX_TSKID                 127                                     /**< %jp{タスクIDの最大値} */
+#define _KERNEL_CFG_TMAX_SEMID                 127                                     /**< %jp{セマフォIDの最大値} */
+#define _KERNEL_CFG_TMAX_FLGID                 127                                     /**< %jp{イベントフラグIDの最大値} */
+#define _KERNEL_CFG_TMAX_DTQID                 127                                     /**< %jp{データキューIDの最大値} */
+#define _KERNEL_CFG_TMAX_MBXID                 127                                     /**< %jp{メールボックスIDの最大値} */
+#define _KERNEL_CFG_TMAX_MTXID                 127                                     /**< %jp{ミューテックスIDの最大値} */
+#define _KERNEL_CFG_TMAX_MBFID                 127                                     /**< %jp{メッセージバッファIDの最大値} */
+#define _KERNEL_CFG_TMAX_PORID                 127                                     /**< %jp{ランデブーIDの最大値} */
+#define _KERNEL_CFG_TMAX_MPFID                 127                                     /**< %jp{固定長メモリプールIDの最大値} */
+#define _KERNEL_CFG_TMAX_MPLID                 127                                     /**< %jp{可変長メモリプールIDの最大値} */
+#define _KERNEL_CFG_TMAX_CYCID                 127                                     /**< %jp{周期ハンドラIDの最大値} */
+#define _KERNEL_CFG_TMAX_ALMID                 127                                     /**< %jp{アラームハンドラIDの最大値} */
+#define _KERNEL_CFG_TMAX_OVRID                 127                                     /**< %jp{オーバーランハンドラIDの最大値} */
+#define _KERNEL_CFG_TMAX_ISRID                 127                                     /**< %jp{割り込みサービスルーチンIDの最大値} */
+
+
+
+/* ---------------------------------------------- */
+/*  Kernel-internal                               */
+/* ---------------------------------------------- */
+
+/* %jp{遅延プロシージャーコール(きっと当分未実装)  [未実装]} */
+#define _KERNEL_CFG_DPC                                        FALSE                           /**< Deferred Procedure Call */
+
+/* %jp{対称型マルチプロセッサ対応(きっと永遠に未実装) [未実装]} */
+#define _KERNEL_CFG_SMP                                        FALSE                           /**< Symmetric Multiple Processor */
+
+/* %jp{多重割り込み対応} */
+#define _KERNEL_CFG_MULTIPLE_INT               TRUE
+
+/* %jp{システムタスクにTCBを割り当てる(高速化するがメモリがやや増える?) [未実装]} */
+#define _KERNEL_CFG_SYSTSK_TCB                 FALSE
+
+/* %jp{実行時にタスクをレディーキューに繋げたままとする [未実装]} */
+#define _KERNEL_CFG_RUNTSK_ON_RDQ              TRUE
+
+/* %jp{サスペンド時にタスクをレディーキューに繋げたままとする [未実装]} */
+#define _KERNEL_CFG_SUSTSK_ON_RDQ              FALSE
+
+
+/* %jp{タスクハンドルをIDで管理(省メモリだが低速)にするかどうか} */
+#define _KERNEL_CFG_TSKHDL_ID                  TRUE
+
+/* %jp{ミューテックスハンドルをIDで管理(省メモリだが低速)にするかどうか [未実装]} */
+#define _KERNEL_CFG_MTXHDL_ID                  TRUE
+
+
+
+/* ---------------------------------------------- */
+/*  General task-queue                            */
+/* ---------------------------------------------- */
+
+/** %jp{キューのアルゴリズム} */
+#define _KERNEL_CFG_QUE_ALGORITHM              _KERNEL_QUE_ALG_ONEWAYLIST
+
+/* %jp{
+   _KERNEL_QUE_ALG_ONEWAYLIST : 単方向キュー(省メモリだが取り外しが遅い)
+   _KERNEL_QUE_ALG_TWOWAYLIST : 双方向キュー(取り外しが高速)
+   _KERNEL_QUE_ALG_AUTO       : 自動選択(最適化指定から自動で選択する)
+}%en{
+   _KERNEL_QUE_ALG_ONEWAYLIST : small-memory
+   _KERNEL_QUE_ALG_TWOWAYLIST : high-speed
+   _KERNEL_QUE_ALG_AUTO       : auto select
+}*/
+
+
+
+/* ---------------------------------------------- */
+/*  Ready-queue                                   */
+/* ---------------------------------------------- */
+
+/** %jp{レディーキューのアルゴリズム} */
+#define _KERNEL_CFG_RDQ_ALGORITHM              _KERNEL_RDQ_ALG_SINGLE_QUE
+
+/* %jp{
+   _KERNEL_RDQ_ALG_SINGLE_QUE         : シングルキュー(省メモリだが、タスク数が増えると遅い)
+   _KERNEL_RDQ_ALG_ARRAYED_QUE        : 優先度数だけキューを配列化(ある程度高速だが、優先度数でメモリ消費) [未実装]
+   _KERNEL_RDQ_ALG_BITMAP_ARRAYED_QUE : 配列化キューに探索ビットマップを備える(優先度数が少なければ高速)   [未実装]
+   _KERNEL_RDQ_ALG_HEAP_QUE           : ヒープ木(優先度数が多くてもそこそこ裁ける)                         [未実装]
+}%en{
+   _KERNEL_RDQ_ALG_SINGLE_QUE         : 
+   _KERNEL_RDQ_ALG_ARRAYED_QUE        : 
+   _KERNEL_RDQ_ALG_BITMAP_ARRAYED_QUE : 
+   _KERNEL_RDQ_ALG_HEAP_QUE           : 
+}*/
+
+
+
+/* ---------------------------------------------- */
+/*  Tasks                                         */
+/* ---------------------------------------------- */
+
+/* Attribute */
+#define _KERNEL_CFG_TSK_TA_ACT                 TRUE                            /**< %jp{TA_TACTに対応する} */
+
+
+/** %jp{タスクコントロールブロックの管理アルゴリズム} */
+#define _KERNEL_CFG_TCB_ALGORITHM              _KERNEL_TCB_ALG_PTRARRAY
+
+/* %jp{
+   _KERNEL_TCB_ALG_BLKARRAY    : TCBブロック自体を配列化して管理(予めブロックを確保)
+   _KERNEL_TCB_ALG_PTRARRAY    : TCBを指すポインタを配列化して管理(ブロック本体は動的にメモリ確保)
+}*/
+
+
+#define _KERNEL_CFG_TCB_SPLIT_RO               FALSE                           /**< %jp{TCBの不変部を分割してROM部配置とするか} */
+#define _KERNEL_CFG_TCB_BITFIELD               FALSE                           /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */
+#define _KERNEL_CFG_TCB_TTW_PACK               TRUE                            /**< %jp{待ち要因を圧縮して保持するか} */
+
+
+
+/* ---------------------------------------------- */
+/*  Smaphores                                     */
+/* ---------------------------------------------- */
+
+/* Attribute */
+#define _KERNEL_CFG_SEM_TA_TFIFO               TRUE                            /**< %jp{TA_TFIFO属性に対応する} */
+#define _KERNEL_CFG_SEM_TA_TPRI                        TRUE                            /**< %jp{TA_TPRI属性に対応する} */
+
+
+/* Control block */
+#define _KERNEL_CFG_SEMCB_ALGORITHM            _KERNEL_SEMCB_ALG_PTRARRAY
+#define _KERNEL_CFG_SEMCB_SPLIT_RO             TRUE                            /**< %jp{TCBの不変部を分割してROM部配置とするか} */
+#define _KERNEL_CFG_SEMCB_BITFIELD             FALSE                           /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */
+
+
+
+/* ---------------------------------------------- */
+/*  Eventflags                                    */
+/* ---------------------------------------------- */
+
+/* Attribute */
+#define _KERNEL_CFG_FLG_TA_TFIFO               TRUE                            /**< %jp{TA_TFIFO属性に対応する} */
+#define _KERNEL_CFG_FLG_TA_TPRI                        TRUE                            /**< %jp{TA_TPRI属性に対応する} */
+#define _KERNEL_CFG_FLG_TA_WSGL                        TRUE                            /**< %jp{TA_WSGL属性に対応する} */
+#define _KERNEL_CFG_FLG_TA_WMUL                        TRUE                            /**< %jp{TA_WMUL属性に対応する} */
+#define _KERNEL_CFG_FLG_TA_CLR                 TRUE                            /**< %jp{TA_CLR属性に対応する} */
+
+
+/* Control block */
+#define _KERNEL_CFG_FLGCB_ALGORITHM            _KERNEL_FLGCB_ALG_BLKARRAY
+#define _KERNEL_CFG_FLGCB_ROM                  FALSE                           /**< %jp{TCBの不変部を分割してROM部配置とするか} */
+#define _KERNEL_CFG_FLGCB_BITFIELD             FALSE                           /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */
+
+
+
+/* ---------------------------------------------- */
+/*  Mailboxes                                     */
+/* ---------------------------------------------- */
+
+/* Attribute */
+#define _KERNEL_CFG_MBX_TA_TFIFO               TRUE                            /**< %jp{TA_TFIFO属性に対応する} */
+#define _KERNEL_CFG_MBX_TA_TPRI                        TRUE                            /**< %jp{TA_TPRI属性に対応する} */
+#define _KERNEL_CFG_MBX_TA_MFIFO               TRUE                            /**< %jp{TA_MFIFO属性に対応する} */
+#define _KERNEL_CFG_MBX_TA_MPRI                        TRUE                            /**< %jp{TA_MPRI属性に対応する} */
+
+
+/* Algorithm */
+#define _KERNEL_CFG_MBX_ALGORITHM              _KERNEL_MBX_ALG_ARRAYED_MQUE
+/* %jp{
+   _KERNEL_MBX_ALG_SINGLE_MQUE  : 一本のメッセージキューで構成する(優先度探索するので低速)          [未実装]
+   _KERNEL_MBX_ALG_ARRAYED_MQUE : 優先度の数だけ配列状にキューを持つ(優先度数によってメモリを消費)
+}*/
+
+
+/* Control block */
+#define _KERNEL_CFG_MBXCB_ALGORITHM            _KERNEL_MBXCB_ALG_BLKARRAY
+#define _KERNEL_CFG_MBXCB_ROM                  FALSE                           /**< %jp{TCBの不変部を分割してROM部配置とするか} */
+#define _KERNEL_CFG_MBXCB_BITFIELD             FALSE                           /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */
+
+
+
+/* ---------------------------------------------- */
+/* Fixed-sized Memory Pools                       */
+/* ---------------------------------------------- */
+
+/* Attribute */
+#define _KERNEL_CFG_MPF_TA_TFIFO               TRUE                            /**< %jp{TA_TFIFO属性に対応する} */
+#define _KERNEL_CFG_MPF_TA_TPRI                        TRUE                            /**< %jp{TA_TPRI属性に対応する} */
+
+/* Value range */
+#define _KERNEL_CFG_MPF_TMAX_BLKCNT            (-1)                            /**< %jp{ブロック数の最大値} */
+#define _KERNEL_CFG_MPF_TMAX_BLKSZ             (-1)                            /**< %jp{ブロックサイズの最大値} */
+
+/* Algorithm */
+#define _KERNEL_CFG_MPF_ALGORITHM              _KERNEL_MPF_ALG_CHAIN_PTR
+/* %jp{
+   _KERNEL_MPF_ALG_CHAIN_PTR : 空きブロックをポインタでチェイン(乗算器の無いCPUでも高速)
+   _KERNEL_MPF_ALG_CHAIN_NUM : 空きブロックをブロック番号でチェイン(メモリが削減できる場合あり)
+}*/
+
+/* Control block */
+#define _KERNEL_CFG_MPFCB_ALGORITHM            _KERNEL_MPFCB_ALG_BLKARRAY
+#define _KERNEL_CFG_MPFCB_ROM                  FALSE                           /**< %jp{TCBの不変部を分割してROM部配置とするか} */
+#define _KERNEL_CFG_MPFCB_BITFIELD             FALSE                           /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */
+
+
+
+
+/* ---------------------------------------------- */
+/*  Service call support                          */
+/* ---------------------------------------------- */
+
+/* Task management functions */
+#define _KERNEL_CFG_CRE_TSK                            TRUE                            /* cre_tsk */
+#define _KERNEL_CFG_ACRE_TSK                   TRUE                            /* acre_tsk */
+#define _KERNEL_CFG_DEL_TSK                            FALSE                           /* del_tsk */
+#define _KERNEL_CFG_ACT_TSK                            TRUE                            /* act_tsk */
+#define _KERNEL_CFG_IACT_TSK                   FALSE                           /* iact_tsk */
+#define _KERNEL_CFG_CAN_ACT                    FALSE                           /* can_act */
+#define _KERNEL_CFG_STA_TSK                    FALSE                           /* sta_tsk */
+#define _KERNEL_CFG_EXT_TSK                    FALSE                           /* ext_tsk */
+#define _KERNEL_CFG_EXD_TSK                    FALSE                           /* exd_tsk */
+#define _KERNEL_CFG_TER_TSK                    FALSE                           /* ter_tsk */
+#define _KERNEL_CFG_CHG_PRI                    TRUE                            /* chg_pri */
+#define _KERNEL_CFG_GET_PRI                    FALSE                           /* get_pri */
+#define _KERNEL_CFG_REF_TSK                    TRUE                            /* ref_tsk */
+#define _KERNEL_CFG_REF_TST                    FALSE                           /* ref_tst */
+
+/* Task dependent synchronization functions */
+#define _KERNEL_CFG_SLP_TSK                    TRUE                            /* slp_tsk */
+#define _KERNEL_CFG_TSLP_TSK                   FALSE                           /* tslp_tsk */
+#define _KERNEL_CFG_WUP_TSK                    TRUE                            /* wup_tsk */
+#define _KERNEL_CFG_IWUP_TSK                   FALSE                           /* iwup_tsk */
+#define _KERNEL_CFG_CAN_WUP                    FALSE                           /* can_wup */
+#define _KERNEL_CFG_REL_WAI                    TRUE                            /* rel_wai */
+#define _KERNEL_CFG_IREL_WAI                   FALSE                           /* irel_wai */
+#define _KERNEL_CFG_SUS_TSK                    FALSE                           /* sus_tsk */
+#define _KERNEL_CFG_RSM_TSK                    FALSE                           /* rsm_tsk */
+#define _KERNEL_CFG_FRSM_TSK                   FALSE                           /* frsm_tsk */
+#define _KERNEL_CFG_DLY_TSK                    TRUE                            /* dly_tsk */
+
+/* Task exception handling functions */
+#define _KERNEL_CFG_DEF_TEX                    FALSE                           /* def_tex */
+#define _KERNEL_CFG_RAS_TEX                    FALSE                           /* ras_tex */
+#define _KERNEL_CFG_IRAS_TEX                   FALSE                           /* iras_tex */
+#define _KERNEL_CFG_DIS_TEX                    FALSE                           /* dis_tex */
+#define _KERNEL_CFG_ENA_TEX                    FALSE                           /* ena_tex */
+#define _KERNEL_CFG_SNS_TEX                    FALSE                           /* sns_tex */
+#define _KERNEL_CFG_REF_TEX                    FALSE                           /* ref_tex */
+
+/* Semaphores */
+#define _KERNEL_CFG_CRE_SEM                    TRUE                            /* cre_sem */
+#define _KERNEL_CFG_ACRE_SEM                   TRUE                            /* acre_sem */
+#define _KERNEL_CFG_DEL_SEM                    TRUE                            /* del_sem */
+#define _KERNEL_CFG_SIG_SEM                    TRUE                            /* sig_sem */
+#define _KERNEL_CFG_ISIG_SEM                   FALSE                           /* isig_sem */
+#define _KERNEL_CFG_WAI_SEM                    TRUE                            /* wai_sem */
+#define _KERNEL_CFG_POL_SEM                    TRUE                            /* pol_sem */
+#define _KERNEL_CFG_TWAI_SEM                   FALSE                           /* twai_sem */
+#define _KERNEL_CFG_REF_SEM                    TRUE                            /* ref_sem */
+
+/* Eventflags */
+#define _KERNEL_CFG_CRE_FLG                    TRUE                            /* cre_flg */
+#define _KERNEL_CFG_ACRE_FLG                   TRUE                            /* acre_flg */
+#define _KERNEL_CFG_DEL_FLG                    TRUE                            /* del_flg */
+#define _KERNEL_CFG_SET_FLG                    TRUE                            /* set_flg */
+#define _KERNEL_CFG_ISET_FLG                   FALSE                           /* iset_flg */
+#define _KERNEL_CFG_CLR_FLG                    TRUE                            /* clr_flg */
+#define _KERNEL_CFG_WAI_FLG                    TRUE                            /* wai_flg */
+#define _KERNEL_CFG_POL_FLG                    TRUE                            /* pol_flg */
+#define _KERNEL_CFG_TWAI_FLG                   FALSE                           /* twai_flg */
+#define _KERNEL_CFG_REF_FLG                    TRUE                            /* ref_flg */
+
+/* Data queues */
+#define _KERNEL_CFG_CRE_DTQ                    FALSE                           /* cre_dtq */
+#define _KERNEL_CFG_ACRE_DTQ                   FALSE                           /* acre_dtq */
+#define _KERNEL_CFG_DEL_DTQ                    FALSE                           /* del_dtq */
+#define _KERNEL_CFG_SND_DTQ                    FALSE                           /* snd_dtq */
+#define _KERNEL_CFG_IPSND_DT                   FALSE                           /* ipsnd_dtq */
+#define _KERNEL_CFG_TSND_DTQ                   FALSE                           /* tsnd_dtq */
+#define _KERNEL_CFG_FSND_DTQ                   FALSE                           /* fsnd_dtq */
+#define _KERNEL_CFG_IFSND_DT                   FALSE                           /* ifsnd_dtq */
+#define _KERNEL_CFG_RCV_DTQ                    FALSE                           /* rcv_dtq */
+#define _KERNEL_CFG_PRCV_DTQ                   FALSE                           /* prcv_dtq */
+#define _KERNEL_CFG_TRCV_DTQ                   FALSE                           /* trcv_dtq */
+#define _KERNEL_CFG_REF_DTQ                    FALSE                           /* ref_dtq */
+
+/* Mailboxes */
+#define _KERNEL_CFG_CRE_MBX                    TRUE                            /* cre_mbx */
+#define _KERNEL_CFG_ACRE_MBX                   TRUE                            /* acre_mbx */
+#define _KERNEL_CFG_DEL_MBX                    TRUE                            /* del_mbx */
+#define _KERNEL_CFG_SND_MBX                    TRUE                            /* snd_mbx */
+#define _KERNEL_CFG_RCV_MBX                    TRUE                            /* rcv_mbx */
+#define _KERNEL_CFG_PRCV_MBX                   TRUE                            /* prcv_mbx */
+#define _KERNEL_CFG_TRCV_MBX                   FALSE                           /* trcv_mbx */
+#define _KERNEL_CFG_REF_MBX                    TRUE                            /* ref_mbx */
+
+/* Mutexes */
+#define _KERNEL_CFG_CRE_MTX                    FALSE                           /* cre_mtx */
+#define _KERNEL_CFG_ACRE_MTX                   FALSE                           /* acre_mtx */
+#define _KERNEL_CFG_DEL_MTX                    FALSE                           /* del_mtx */
+#define _KERNEL_CFG_LOC_MTX                    FALSE                           /* loc_mtx */
+#define _KERNEL_CFG_PLOC_MTX                   FALSE                           /* ploc_mtx */
+#define _KERNEL_CFG_TLOC_MTX                   FALSE                           /* tloc_mtx */
+#define _KERNEL_CFG_UNL_MTX                    FALSE                           /* unl_mtx */
+#define _KERNEL_CFG_REF_MTX                    FALSE                           /* ref_mtx */
+
+/* Message buffers */
+#define _KERNEL_CFG_CRE_MBF                    FALSE                           /* cre_mbf */
+#define _KERNEL_CFG_ACRE_MBF                   FALSE                           /* acre_mbf */
+#define _KERNEL_CFG_DEL_MBF                    FALSE                           /* del_mbf */
+#define _KERNEL_CFG_SND_MBF                    FALSE                           /* snd_mbf */
+#define _KERNEL_CFG_PSND_MBF                   FALSE                           /* psnd_mbf */
+#define _KERNEL_CFG_TSND_MBF                   FALSE                           /* tsnd_mbf */
+#define _KERNEL_CFG_RCV_MBF                    FALSE                           /* rcv_mbf */
+#define _KERNEL_CFG_PRCV_MBF                   FALSE                           /* prcv_mbf */
+#define _KERNEL_CFG_TRCV_MBF                   FALSE                           /* trcv_mbf */
+#define _KERNEL_CFG_REF_MBF                    FALSE                           /* ref_mbf */
+
+/* Rendezvous */
+#define _KERNEL_CFG_CRE_POR                    FALSE                           /* cre_por */
+#define _KERNEL_CFG_ACRE_POR                   FALSE                           /* acre_por */
+#define _KERNEL_CFG_DEL_POR                    FALSE                           /* del_por */
+#define _KERNEL_CFG_CAL_POR                    FALSE                           /* cal_por */
+#define _KERNEL_CFG_TCAL_POR                   FALSE                           /* tcal_por */
+#define _KERNEL_CFG_ACP_POR                    FALSE                           /* acp_por */
+#define _KERNEL_CFG_PACP_POR                   FALSE                           /* pacp_por */
+#define _KERNEL_CFG_TACP_POR                   FALSE                           /* tacp_por */
+#define _KERNEL_CFG_FWD_POR                    FALSE                           /* fwd_por */
+#define _KERNEL_CFG_RPL_RDV                    FALSE                           /* rpl_rdv */
+#define _KERNEL_CFG_REF_POR                    FALSE                           /* ref_por */
+#define _KERNEL_CFG_REF_RDV                    FALSE                           /* ref_rdv */
+
+/* Fixed-sized memory pools */
+#define _KERNEL_CFG_CRE_MPF                    TRUE                            /* cre_mpf */
+#define _KERNEL_CFG_ACRE_MPF                   TRUE                            /* acre_mpf */
+#define _KERNEL_CFG_DEL_MPF                    TRUE                            /* del_mpf */
+#define _KERNEL_CFG_GET_MPF                    TRUE                            /* get_mpf */
+#define _KERNEL_CFG_PGET_MPF                   TRUE                            /* pget_mpf */
+#define _KERNEL_CFG_TGET_MPF                   FALSE                           /* tget_mpf */
+#define _KERNEL_CFG_REL_MPF                    TRUE                            /* rel_mpf */
+#define _KERNEL_CFG_REF_MPF                    FALSE                           /* ref_mpf */
+
+/* Variable-sized memory pools */
+#define _KERNEL_CFG_CRE_MPL                    FALSE                           /* cre_mpl */
+#define _KERNEL_CFG_ACRE_MPL                   FALSE                           /* acre_mpl */
+#define _KERNEL_CFG_DEL_MPL                    FALSE                           /* del_mpl */
+#define _KERNEL_CFG_GET_MPL                    FALSE                           /* get_mpl */
+#define _KERNEL_CFG_PGET_MPL                   FALSE                           /* pget_mpl */
+#define _KERNEL_CFG_TGET_MPL                   FALSE                           /* tget_mpl */
+#define _KERNEL_CFG_REL_MPL                    FALSE                           /* rel_mpl */
+#define _KERNEL_CFG_REF_MPL                    FALSE                           /* ref_mpl */
+
+/* System time management */
+#define _KERNEL_CFG_SET_TIM                    FALSE                           /* set_tim */
+#define _KERNEL_CFG_GET_TIM                    FALSE                           /* get_tim */
+#define _KERNEL_CFG_ISIG_TIM                   TRUE                            /* isig_tim */
+
+/* Cyclic handlers */
+#define _KERNEL_CFG_CRE_CYC                    FALSE                           /* cre_cyc */
+#define _KERNEL_CFG_ACRE_CYC                   FALSE                           /* acre_cyc */
+#define _KERNEL_CFG_DEL_CYC                    FALSE                           /* del_cyc */
+#define _KERNEL_CFG_STA_CYC                    FALSE                           /* sta_cyc */
+#define _KERNEL_CFG_STP_CYC                    FALSE                           /* stp_cyc */
+#define _KERNEL_CFG_REF_CYC                    FALSE                           /* ref_cyc */
+
+/* Alarm handlers */
+#define _KERNEL_CFG_CRE_ALM                    FALSE                           /* cre_alm */
+#define _KERNEL_CFG_ACRE_ALM                   FALSE                           /* acre_alm */
+#define _KERNEL_CFG_DEL_ALM                    FALSE                           /* del_alm */
+#define _KERNEL_CFG_STA_ALM                    FALSE                           /* sta_alm */
+#define _KERNEL_CFG_STP_ALM                    FALSE                           /* stp_alm */
+#define _KERNEL_CFG_REF_ALM                    FALSE                           /* ref_alm */
+
+/* Overrun handlers */                         
+#define _KERNEL_CFG_DEF_OVR                    FALSE                           /* def_ovr */
+#define _KERNEL_CFG_STA_OVR                    FALSE                           /* sta_ovr */
+#define _KERNEL_CFG_STP_OVR                    FALSE                           /* stp_ovr */
+#define _KERNEL_CFG_REF_OVR                    FALSE                           /* ref_ovr */
+
+/* System management functions */
+#define _KERNEL_CFG_ROT_RDQ                    FALSE                           /* rot_rdq */
+#define _KERNEL_CFG_IROT_RDQ                   FALSE                           /* irot_rdq */
+#define _KERNEL_CFG_GET_TID                    FALSE                           /* get_tid */
+#define _KERNEL_CFG_IGET_TID                   FALSE                           /* iget_tid */
+#define _KERNEL_CFG_LOC_CPU                    FALSE                           /* loc_cpu */
+#define _KERNEL_CFG_ILOC_CPU                   FALSE                           /* iloc_cpu */
+#define _KERNEL_CFG_UNL_CPU                    FALSE                           /* unl_cpu */
+#define _KERNEL_CFG_ILNL_CPU                   FALSE                           /* ilnl_cpu */
+#define _KERNEL_CFG_DIS_DSP                    FALSE                           /* dis_dsp */
+#define _KERNEL_CFG_ENA_DSP                    FALSE                           /* ena_dsp */
+#define _KERNEL_CFG_SNS_CTX                    FALSE                           /* sns_ctx */
+#define _KERNEL_CFG_SNS_LOC                    FALSE                           /* sns_loc */
+#define _KERNEL_CFG_SNS_DSP                    FALSE                           /* sns_dsp */
+#define _KERNEL_CFG_SNS_DPN                    FALSE                           /* sns_dpn */
+#define _KERNEL_CFG_REF_SYS                    FALSE                           /* ref_sys */
+
+/* Interrupt management functions */
+#define _KERNEL_CFG_DEF_INH                    TRUE                            /* def_inh */
+#define _KERNEL_CFG_CRE_ISR                    TRUE                            /* cre_isr */
+#define _KERNEL_CFG_ACRE_ISR                   TRUE                            /* acre_isr */
+#define _KERNEL_CFG_DEL_ISR                    FALSE                           /* del_isr */
+#define _KERNEL_CFG_REF_ISR                    FALSE                           /* ref_isr */
+#define _KERNEL_CFG_DIS_INT                    FALSE                           /* dis_int */
+#define _KERNEL_CFG_ENA_INT                    FALSE                           /* ena_int */
+#define _KERNEL_CFG_CHG_ILV                    FALSE                           /* chg_ilv */
+#define _KERNEL_CFG_GET_ILV                    FALSE                           /* get_ilv */
+
+/* Service call management functions */                                
+#define _KERNEL_CFG_DEF_SVC                    FALSE                           /* def_svc */
+#define _KERNEL_CFG_CAL_SVC                    FALSE                           /* cal_svc */
+
+/* System configulation management functions */
+#define _KERNEL_CFG_DEF_EXC                            FALSE                           /* def_exc */
+#define _KERNEL_CFG_REF_CFG                            FALSE                           /* ref_cfg */
+#define _KERNEL_CFG_REF_VER                            FALSE                           /* ref_ver */
+
+/* Static API */
+#define _KERNEL_CFG_SCRE_TSK                   TRUE                            /* CRE_TSK */
+#define _KERNEL_CFG_SDEF_TEX                   FALSE                           /* DEF_TEX */
+#define _KERNEL_CFG_SCRE_SEM                   TRUE                            /* CRE_SEM */
+#define _KERNEL_CFG_SCRE_FLG                   TRUE                            /* CRE_FLG */
+#define _KERNEL_CFG_SCRE_DTQ                   FALSE                           /* CRE_DTQ */
+#define _KERNEL_CFG_SCRE_MBX                   FALSE                           /* CRE_MBX */
+#define _KERNEL_CFG_SCRE_MTX                   FALSE                           /* CRE_MTX */
+#define _KERNEL_CFG_SCRE_MBX                   FALSE                           /* CRE_MBX */
+#define _KERNEL_CFG_SCRE_MTX                   FALSE                           /* CRE_MTX */
+#define _KERNEL_CFG_SCRE_MBF                   FALSE                           /* CRE_MBF */
+#define _KERNEL_CFG_SCRE_POR                   FALSE                           /* CRE_POR */
+#define _KERNEL_CFG_SCRE_MPF                   FALSE                           /* CRE_MPF */
+#define _KERNEL_CFG_SCRE_MPL                   FALSE                           /* CRE_MPL */
+#define _KERNEL_CFG_SCRE_CYC                   FALSE                           /* CRE_CYC */
+#define _KERNEL_CFG_SCRE_ALM                   FALSE                           /* CRE_ALM */
+#define _KERNEL_CFG_SDEF_OVR                   FALSE                           /* DEF_OVR */
+#define _KERNEL_CFG_SDEF_INH                   FALSE                           /* DEF_INH */
+#define _KERNEL_CFG_SCRE_ISR                   FALSE                           /* CRE_ISR */
+#define _KERNEL_CFG_SDEF_SVC                   FALSE                           /* DEF_SVC */
+#define _KERNEL_CFG_SDEF_EXC                   FALSE                           /* DEF_EXC */
+#define _KERNEL_CFG_SATT_INI                   TRUE                            /* ATT_INI */
+#define _KERNEL_CFG_SINCLUDE                   TRUE                            /* INCLUDE */
+
+
+
+#endif /* _KERNEL__config__cfgknl_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/config/cfgsys.h b/kernel/include/config/cfgsys.h
new file mode 100755 (executable)
index 0000000..3a02cb6
--- /dev/null
@@ -0,0 +1,103 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  cfgsys.h
+ * @brief %jp{ITRONシステムのコンフィギュレーション用ヘッダファイル}%en{ITRON system configuration heder file}
+ *
+ * @version $Id: cfgsys.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+/*
+%jp{
+  本ファイルにて、ITRONシステムのコンフィギュレーションを行う。
+  コンフィギュレーションの結果により、基本型などアプリケーションで
+利用する定義も変化する為、本ファイルの変更後はカーネルのみならず、
+itron.h や kernel.h を利用している、アプリケーション側も含めて
+システム全体をリビルドする必要がある。
+  また、本ファイルはセンブリ言語の前処理にも使う事を想定しているので、
+C言語構文(例えばtypedefなど)はこの中には記載せず、マクロ定義などの
+プリプロセッサディレクティブのみを記載する事とする。
+}
+*/
+
+
+
+#ifndef _KERNEL__config__cfgsys_h__
+#define _KERNEL__config__cfgsys_h__
+
+
+/* %jp{メモリのアラインサイズ}%jp{Memory alignment size} */
+#define _KERNEL_CFG_MEM_ALIGN                  (-1)                            /**< メモリのアラインサイズ(-1の時デフォルト値)}%en{Memory alignment size (-1:default)} */
+
+
+/* %jp{ITRON仕様共通データ型}%en{ITRON General Data Type} */
+#define _KERNEL_CFG_TBIT_INT                   (-1)                            /**< %jp{INT     のビット数 (-1の時デフォルト値)}%en{Number of bits in INT     (-1:default)} */
+#define _KERNEL_CFG_TBIT_UINT                  (-1)                            /**< %jp{UINT    のビット数 (-1の時デフォルト値)}%en{Number of bits in UINT    (-1:default)} */
+#define _KERNEL_CFG_TBIT_BOOL                  (-1)                            /**< %jp{BOOL    のビット数 (-1の時デフォルト値)}%en{Number of bits in BOOL    (-1:default)} */
+#define _KERNEL_CFG_TBIT_FN                            (-1)                            /**< %jp{FN      のビット数 (-1の時デフォルト値)}%en{Number of bits in FN      (-1:default)} */
+#define _KERNEL_CFG_TBIT_ER                            (-1)                            /**< %jp{ER      のビット数 (-1の時デフォルト値)}%en{Number of bits in ER      (-1:default)} */
+#define _KERNEL_CFG_TBIT_ID                            (-1)                            /**< %jp{ID      のビット数 (-1の時デフォルト値)}%en{Number of bits in ID      (-1:default)} */
+#define _KERNEL_CFG_TBIT_ATR                   (-1)                            /**< %jp{ATR     のビット数 (-1の時デフォルト値)}%en{Number of bits in ATR     (-1:default)} */
+#define _KERNEL_CFG_TBIT_STAT                  (-1)                            /**< %jp{STAT    のビット数 (-1の時デフォルト値)}%en{Number of bits in STAT    (-1:default)} */
+#define _KERNEL_CFG_TBIT_MODE                  (-1)                            /**< %jp{MODE    のビット数 (-1の時デフォルト値)}%en{Number of bits in MODE    (-1:default)} */
+#define _KERNEL_CFG_TBIT_PRI                   (-1)                            /**< %jp{PRI     のビット数 (-1の時デフォルト値)}%en{Number of bits in PRI     (-1:default)} */
+#define _KERNEL_CFG_TBIT_SIZE                  (-1)                            /**< %jp{SIZE    のビット数 (-1の時デフォルト値)}%en{Number of bits in SIZE    (-1:default)} */
+#define _KERNEL_CFG_TBIT_TMO                   (-1)                            /**< %jp{TMO     のビット数 (-1の時デフォルト値)}%en{Number of bits in TMO     (-1:default)} */
+#define _KERNEL_CFG_TBIT_RELTIM                        (-1)                            /**< %jp{RELTIM  のビット数 (-1の時デフォルト値)}%en{Number of bits in RELTIM  (-1:default)} */
+#define _KERNEL_CFG_SYSTIM_STRUCT              FALSE                           /**< %jp{SYSTIM型を構造体にするかどうか} */
+#define _KERNEL_CFG_TBIT_SYSTIM                        32                                      /**< %jp{SYSTIM型のビット数} */
+#define _KERNEL_CFG_VP_INT_PTR                 FALSE                           /**< %jp{VP_INT型をポインタ型にするかどうか} */
+#define _KERNEL_CFG_TBIT_VP_INT                        (-1)                            /**< %jp{VP_INT  のビット数 (-1の時デフォルト値)}%en{Number of bits in VP_INT  (-1:default)} */
+#define _KERNEL_CFG_TBIT_ER_BOOL               (-1)                            /**< %jp{ER_BOOL のビット数 (-1の時デフォルト値)}%en{Number of bits in ER_BOOL (-1:default)} */
+#define _KERNEL_CFG_TBIT_ER_ID                 (-1)                            /**< %jp{ER_ID   のビット数 (-1の時デフォルト値)}%en{Number of bits in ER_ID   (-1:default)} */
+#define _KERNEL_CFG_TBIT_ER_UINT               (-1)                            /**< %jp{ER_UINT のビット数 (-1の時デフォルト値)}%en{Number of bits in ER_UINT (-1:default)} */
+
+/* %jp{カーネルのデータ型}%en{Kernel Data Type} */
+#define _KERNEL_CFG_TBIT_TEXPTN                        (-1)                            /**< %jp{タスク例外要因のビット数(-1の時デフォルト値)} */
+#define _KERNEL_CFG_TBIT_FLGPTN                        (-1)                            /**< %jp{イベントフラグのビット数(-1の時デフォルト値)} */
+#define _KERNEL_CFG_TBIT_RDVPTN                        (-1)                            /**< %jp{ランデブ条件のビット数(-1の時デフォルト値)} */
+#define _KERNEL_CFG_TBIT_RDVNO                 (-1)
+#define _KERNEL_CFG_TBIT_OVRTIM                        (-1)
+#define _KERNEL_CFG_TBIT_INHNO                 (-1)
+#define _KERNEL_CFG_TBIT_INTNO                 (-1)
+#define _KERNEL_CFG_TBIT_EXCNO                 (-1)
+
+
+/* %jp{優先度の範囲}%en{Priority Range} */
+#define _KERNEL_CFG_TMAX_TPRI                  255                                     /**< %jp{タスク優先度の最大値(-1の時デフォルト値)}%en{Maximum task priority} */
+#define _KERNEL_CFG_TMAX_MPRI                  255                                     /**< %jp{メッセージ優先度の最大値(-1の時デフォルト値)}%en{Maximum message priority} */
+
+/* %jp{キューイング/ネスト回数の最大値}%en{Maximum Nesting/Queueing Count} */
+#define _KERNEL_CFG_TMAX_ACTCNT                        255                                     /**< %jp{タスク起動要求キューイング数の最大値(-1の時デフォルト値)} */
+#define _KERNEL_CFG_TMAX_WUPCNT                        255                                     /**< %jp{タスク起床要求キューイング数の最大値(-1の時デフォルト値)} */
+#define _KERNEL_CFG_TMAX_SUSCNT                        255                                     /**< %jp{タスク強制待ち要求ネスト数の最大値(-1の時デフォルト値)} */
+
+/* %jp{ビットパターンのビット数} %en{Number of Bits in Bitpatterns}*/
+#define _KERNEL_CFG_TEX_TBIT_TEXPTN            (-1)                            /**< %jp{タスク例外要因のビット数(-1の時デフォルト値)} */
+#define _KERNEL_CFG_FLG_TBIT_FLGPTN            (-1)                            /**< %jp{イベントフラグのビット数(-1の時デフォルト値)} */
+#define _KERNEL_CFG_RDV_TBIT_RDVPTN            (-1)                            /**< %jp{ランデブ条件のビット数(-1の時デフォルト値)} */
+
+/* %jp{セマフォの最大値}%en{Maximum value of the maximum definable semaphore resource count} */
+#define _KERNEL_CFG_TMAX_MAXSEM                        (-1)
+
+
+/* %jp{タイムティックの周期}%en{Time Tick Period} */
+#define _KERNEL_CFG_TIC_NUME                   1                                       /**< %jp{タイムティック周期の分子} */
+#define _KERNEL_CFG_TIC_DENO                   1                                       /**< %jp{タイムティック周期の分母} */
+
+
+/* %jp{T_RTSKに exinf を含めるか} */
+#define _KERNEL_CFG_RTSK_EXINF                 TRUE
+#define _KERNEL_CFG_RTST_EXINF                 TRUE
+
+
+
+#endif /* _KERNEL__config__cfgsys_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/core/basetyp.h b/kernel/include/core/basetyp.h
new file mode 100755 (executable)
index 0000000..c60207b
--- /dev/null
@@ -0,0 +1,760 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  basetyp.h
+ * @brief %jp{カーネル型定義ヘッダファイル}%en{basic type header file}
+ *
+ * @version $Id: basetyp.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__core__basetyp_h__
+#define _KERNEL__core__basetyp_h__
+
+
+/* %jp{コンパイラ判別} */
+#include "core/cmpl.h"
+
+
+
+#include <limits.h>
+
+#if _KERNEL_CMPL_STDINT_H
+#include <stdint.h>
+#endif
+
+
+/* %jp{厳密な幅の型定義} */
+
+#if _KERNEL_CMPL_STDINT_H              /* %jp{stdint.h が使える場合} */
+
+/* %jp{8bit幅の符号付き整数型} */
+typedef int8_t                                         _KERNEL_T_B;
+#define _KERNEL_TMIN_B                         INT8_MIN
+#define _KERNEL_TMAX_B                         INT8_MAX
+#define _KERNEL_TBIT_B                         8
+
+/* %jp{8bit幅の符号無し整数型} */
+typedef uint8_t                                                _KERNEL_T_UB;
+#define _KERNEL_TMIN_UB                                0
+#define _KERNEL_TMAX_UB                                UINT8_MAX
+#define _KERNEL_TBIT_UB                                8
+
+/* %jp{16bit幅の符号付き整数型} */
+typedef int16_t                                                _KERNEL_T_H;
+#define _KERNEL_TMIN_H                         INT16_MIN
+#define _KERNEL_TMAX_H                         INT16_MAX
+#define _KERNEL_TBIT_H                         16
+
+/* %jp{16bit幅の符号無し整数型} */
+typedef uint16_t                                       _KERNEL_T_UH;
+#define _KERNEL_TMIN_UH                                0
+#define _KERNEL_TMAX_UH                                UINT16_MAX
+#define _KERNEL_TBIT_UH                                16
+
+/* %jp{32bit幅の符号付き整数型} */
+typedef int32_t                                                _KERNEL_T_W;
+#define _KERNEL_TMIN_W                         INT32_MIN
+#define _KERNEL_TMAX_W                         INT32_MAX
+#define _KERNEL_TBIT_W                         32
+
+/* %jp{32bit幅の符号無し整数型} */
+typedef uint32_t                                       _KERNEL_T_UW;
+#define _KERNEL_TMIN_UW                                0
+#define _KERNEL_TMAX_UW                                UINT32_MAX
+#define _KERNEL_TBIT_UW                                32
+
+/* %jp{64bit幅の符号付き整数型} */
+typedef int64_t                                                _KERNEL_T_D;
+#define _KERNEL_TMIN_D                         INT64_MIN
+#define _KERNEL_TMAX_D                         INT64_MAX
+#define _KERNEL_TBIT_D                         64
+
+/* %jp{64bit幅の符号無し整数型} */
+typedef uint64_t                                       _KERNEL_T_UD;
+#define _KERNEL_TMIN_UD                                0
+#define _KERNEL_TMAX_UD                                UINT64_MAX
+#define _KERNEL_TBIT_UD                                64
+
+/* %jp{64bit型の有効化} */
+#define _KERNEL_ENABLE64                       TRUE
+
+/* %jp{64bit定数の定義} */
+#define _KERNEL_CONSTNAT_INT64(x)      (x ## LL)
+#define _KERNEL_CONSTNAT_UINT64(x)     (x ## ULL)
+
+#else  /* %jp{stdint.h が使えない場合} */
+
+/* %jp{8bit幅の符号付き整数型} */
+typedef signed char                                    _KERNEL_T_B;
+#define _KERNEL_TMIN_B                         SCHAR_MIN
+#define _KERNEL_TMAX_B                         SCHAR_MAX
+#define _KERNEL_TBIT_B                         8
+
+/* %jp{8bit幅の符号無し整数型} */
+typedef unsigned char                          _KERNEL_T_UB;
+#define _KERNEL_TMIN_UB                                0
+#define _KERNEL_TMAX_UB                                UCHAR_MAX
+#define _KERNEL_TBIT_UB                                8
+
+/* %jp{16bit幅の符号付き整数型} */
+typedef signed short                           _KERNEL_T_H;
+#define _KERNEL_TMIN_H                         SHRT_MIN
+#define _KERNEL_TMAX_H                         SHRT_MAX
+#define _KERNEL_TBIT_H                         16
+
+/* %jp{16bit幅の符号無し整数型} */
+typedef unsigned short                         _KERNEL_T_UH;
+#define _KERNEL_TMIN_UH                                0
+#define _KERNEL_TMAX_UH                                USHRT_MAX
+#define _KERNEL_TBIT_UH                                16
+
+/* %jp{32bit幅の符号付き整数型} */
+typedef signed long                                    _KERNEL_T_W;
+#define _KERNEL_TMIN_W                         LONG_MIN
+#define _KERNEL_TMAX_W                         LONG_MAX
+#define _KERNEL_TBIT_W                         32
+
+/* %jp{32bit幅の符号無し整数型} */
+typedef unsigned long                          _KERNEL_T_UW;
+#define _KERNEL_TMIN_UW                                0
+#define _KERNEL_TMAX_UW                                ULONG_MAX
+#define _KERNEL_TBIT_UW                                32
+
+
+#if _KERNEL_CMPL_64BIT /* %jp{コンパイラが64bitをサポートしているなら} */
+
+/* %jp{64bit幅の符号付き整数型} */
+typedef _KERNEL_CMPL_INT64                     _KERNEL_T_D;    
+#define _KERNEL_TMIN_D                         _KERNEL_CMPL_TMIN_INT64
+#define _KERNEL_TMAX_D                         _KERNEL_CMPL_TMAX_INT64
+#define _KERNEL_TBIT_D                         64
+
+/* %jp{64bit幅の符号無し整数型} */
+typedef _KERNEL_CMPL_UINT64                    _KERNEL_T_UD;   
+#define _KERNEL_TMIN_UD                                _KERNEL_CMPL_TMIN_UINT64
+#define _KERNEL_TMAX_UD                                _KERNEL_CMPL_TMAX_UINT64
+#define _KERNEL_TBIT_UD                                64
+
+/* %jp{64bit型の有効化} */
+#define _KERNEL_ENABLE64                       TRUE
+
+/* %jp{64bit定数の定義} */
+#define _KERNEL_CONSTNAT_INT64(x)      _KERNEL_CMPL_CONSTNAT_INT64(x)
+#define _KERNEL_CONSTNAT_UINT64(x)     _KERNEL_CMPL_CONSTNAT_UINT64(x)
+
+#else  /* %jp{コンパイラが64bitを未サポートなら */
+
+/* %jp{64bit型は無効} */
+#define _KERNEL_ENABLE64                       FALSE
+
+#endif
+
+#endif /* _KERNEL_CMPL_STDINT_H */
+
+
+
+/* %jp{プロセッサに適した符号付き整数型} */
+typedef int                                                    _KERNEL_T_PROC_INT;
+#define _KERNEL_TMIN_PROC_INT          INT_MIN
+#define _KERNEL_TMAX_PROC_INT          INT_MAX
+#if (_KERNEL_TMIN_PROC_INT >= _KERNEL_TMIN_B) && (_KERNEL_TMAX_PROC_INT <= _KERNEL_TMAX_B)
+#define _KERNEL_TBIT_PROC_INT          _KERNEL_TBIT_B
+#elif (_KERNEL_TMIN_PROC_INT >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_PROC_INT <= _KERNEL_TMAX_H)
+#define _KERNEL_TBIT_PROC_INT          _KERNEL_TBIT_H
+#elif (_KERNEL_TMIN_PROC_INT >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_PROC_INT <= _KERNEL_TMAX_W)
+#define _KERNEL_TBIT_PROC_INT          _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_PROC_INT          _KERNEL_TBIT_UD
+#endif
+
+/* %jp{プロセッサに適した符号無し整数型} */
+typedef unsigned  int                          _KERNEL_T_PROC_UINT;
+#define _KERNEL_TMIN_PROC_UINT         0
+#define _KERNEL_TMAX_PROC_UINT         UINT_MAX
+#if (_KERNEL_TMIN_PROC_UINT >= _KERNEL_TMIN_UB) && (_KERNEL_TMAX_PROC_UINT <= _KERNEL_TMAX_UB)
+#define _KERNEL_TBIT_PROC_UINT         _KERNEL_TBIT_UB
+#elif (_KERNEL_TMIN_PROC_UINT >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_PROC_UINT <= _KERNEL_TMAX_UH)
+#define _KERNEL_TBIT_PROC_UINT         _KERNEL_TBIT_UH
+#elif (_KERNEL_TMIN_PROC_UINT >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_PROC_UINT <= _KERNEL_TMAX_UW)
+#define _KERNEL_TBIT_PROC_UINT         _KERNEL_TBIT_UW
+#else
+#define _KERNEL_TBIT_PROC_UINT         _KERNEL_TBIT_UD
+#endif
+
+
+
+#if _KERNEL_CMPL_STDINT_H              /* %jp{stdint.h が使える場合} */
+
+/* %jp{メモリサイズ重視の型定義} */
+
+/* %jp{少なくとも8bitを表せる最小の符号付き整数型} */
+typedef int_least8_t                           _KERNEL_T_LEAST_B;
+#define _KERNEL_TMIN_LEAST_B           INT_LEAST8_MIN
+#define _KERNEL_TMAX_LEAST_B           INT_LEAST8_MAX
+#if (_KERNEL_TMIN_LEAST_B >= _KERNEL_TMIN_B) && (_KERNEL_TMAX_LEAST_B <= _KERNEL_TMAX_B)
+#define _KERNEL_TBIT_LEAST_B           _KERNEL_TBIT_B
+#elif (_KERNEL_TMIN_LEAST_B >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_LEAST_B <= _KERNEL_TMAX_H)
+#define _KERNEL_TBIT_LEAST_B           _KERNEL_TBIT_H
+#elif (_KERNEL_TMIN_LEAST_B >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_LEAST_B <= _KERNEL_TMAX_W)
+#define _KERNEL_TBIT_LEAST_B           _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_LEAST_B           _KERNEL_TBIT_D
+#endif
+
+/* %jp{少なくとも8bitを表せる最小の符号無し整数型} */
+typedef uint_least8_t                          _KERNEL_T_LEAST_UB;     
+#define _KERNEL_TMIN_LEAST_UB          0
+#define _KERNEL_TMAX_LEAST_UB          UINT_LEAST8_MAX
+#if (_KERNEL_TMIN_LEAST_UB >= _KERNEL_TMIN_UB) && (_KERNEL_TMAX_LEAST_UB <= _KERNEL_TMAX_UB)
+#define _KERNEL_TBIT_LEAST_UB          _KERNEL_TBIT_B
+#elif (_KERNEL_TMIN_LEAST_UB >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_LEAST_UB <= _KERNEL_TMAX_UH)
+#define _KERNEL_TBIT_LEAST_UB          _KERNEL_TBIT_H
+#elif (_KERNEL_TMIN_LEAST_UB >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_LEAST_UB <= _KERNEL_TMAX_UW)
+#define _KERNEL_TBIT_LEAST_UB          _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_LEAST_UB          _KERNEL_TBIT_D
+#endif
+
+/* %jp{少なくとも16bitを表せる最小の符号付き整数型} */
+typedef int_least16_t                          _KERNEL_T_LEAST_H;
+#define _KERNEL_TMIN_LEAST_H           INT_LEAST16_MIN
+#define _KERNEL_TMAX_LEAST_H           INT_LEAST16_MAX
+#if (_KERNEL_TMIN_LEAST_H >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_LEAST_H <= _KERNEL_TMAX_H)
+#define _KERNEL_TBIT_LEAST_H           _KERNEL_TBIT_H
+#elif (_KERNEL_TMIN_LEAST_H >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_LEAST_H <= _KERNEL_TMAX_W)
+#define _KERNEL_TBIT_LEAST_H           _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_LEAST_H           _KERNEL_TBIT_D
+#endif
+
+/* %jp{少なくとも16bitを表せる最小の符号無し整数型} */
+typedef uint_least16_t                         _KERNEL_T_LEAST_UH;     
+#define _KERNEL_TMIN_LEAST_UH          0
+#define _KERNEL_TMAX_LEAST_UH          UINT_LEAST16_MAX
+#if (_KERNEL_TMIN_LEAST_UH >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_LEAST_UH <= _KERNEL_TMAX_UH)
+#define _KERNEL_TBIT_LEAST_UH          _KERNEL_TBIT_UH
+#elif (_KERNEL_TMIN_LEAST_UH >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_LEAST_UH <= _KERNEL_TMAX_UW)
+#define _KERNEL_TBIT_LEAST_UH          _KERNEL_TBIT_UW
+#else
+#define _KERNEL_TBIT_LEAST_UH          _KERNEL_TBIT_UD
+#endif
+
+/* %jp{少なくとも32bitを表せる最小の符号付き整数型} */
+typedef int_least32_t                          _KERNEL_T_LEAST_W;
+#define _KERNEL_TMIN_LEAST_W           INT_LEAST32_MIN
+#define _KERNEL_TMAX_LEAST_W           INT_LEAST32_MAX
+#if (_KERNEL_TMIN_LEAST_W >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_LEAST_W <= _KERNEL_TMAX_W)
+#define _KERNEL_TBIT_LEAST_W           _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_LEAST_W           _KERNEL_TBIT_D
+#endif
+
+/* %jp{少なくとも32bitを表せる最小の符号無し整数型} */
+typedef uint_least32_t                         _KERNEL_T_LEAST_UW;
+#define _KERNEL_TMIN_LEAST_UW          0
+#define _KERNEL_TMAX_LEAST_UW          UINT_LEAST32_MAX
+#if (_KERNEL_TMIN_LEAST_UW >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_LEAST_UW <= _KERNEL_TMAX_UW)
+#define _KERNEL_TBIT_LEAST_UW          _KERNEL_TBIT_UW
+#else
+#define _KERNEL_TBIT_LEAST_UW          _KERNEL_TBIT_UD
+#endif
+
+/* %jp{少なくとも64bitを表せる最小の符号付き整数型} */
+typedef int_least64_t                          _KERNEL_T_LEAST_D;
+#define _KERNEL_TMIN_LEAST_D           INT_LEAST64_MIN
+#define _KERNEL_TMAX_LEAST_D           INT_LEAST64_MAX
+#define _KERNEL_TBIT_LEAST_D           _KERNEL_TBIT_D
+
+/* %jp{少なくとも64bitを表せる最小の符号無し整数型} */
+typedef uint_least64_t                         _KERNEL_T_LEAST_UD;
+#define _KERNEL_TMIN_LEAST_UD          0
+#define _KERNEL_TMAX_LEAST_UD          UINT_LEAST64_MAX
+#define _KERNEL_TBIT_LEAST_UD          _KERNEL_TBIT_UD
+
+
+/* %jp{速度重視の型定義} */
+
+/* %jp{少なくとも8bitを表せる最速の符号付き整数型} */
+typedef int_fast8_t                                    _KERNEL_T_FAST_B;
+#define _KERNEL_TMIN_FAST_B                    INT_FAST8_MIN
+#define _KERNEL_TMAX_FAST_B                    INT_FAST8_MAX
+#if (_KERNEL_TMIN_FAST_B >= _KERNEL_TMIN_B) && (_KERNEL_TMAX_FAST_B <= _KERNEL_TMAX_B)
+#define _KERNEL_TBIT_FAST_B                    _KERNEL_TBIT_B
+#elif (_KERNEL_TMIN_FAST_B >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_FAST_B <= _KERNEL_TMAX_H)
+#define _KERNEL_TBIT_FAST_B                    _KERNEL_TBIT_H
+#elif (_KERNEL_TMIN_FAST_B >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_FAST_B <= _KERNEL_TMAX_W)
+#define _KERNEL_TBIT_FAST_B                    _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_FAST_B                    _KERNEL_TBIT_D
+#endif
+
+/* %jp{少なくとも8bitを表せる最速の符号無し整数型} */
+typedef uint_fast8_t                           _KERNEL_T_FAST_UB;      
+#define _KERNEL_TMIN_FAST_UB           0
+#define _KERNEL_TMAX_FAST_UB           UINT_FAST8_MAX
+#if (_KERNEL_TMIN_FAST_UB >= _KERNEL_TMIN_UB) && (_KERNEL_TMAX_FAST_UB <= _KERNEL_TMAX_UB)
+#define _KERNEL_TBIT_FAST_UB           _KERNEL_TBIT_B
+#elif (_KERNEL_TMIN_FAST_UB >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_FAST_UB <= _KERNEL_TMAX_UH)
+#define _KERNEL_TBIT_FAST_UB           _KERNEL_TBIT_H
+#elif (_KERNEL_TMIN_FAST_UB >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_FAST_UB <= _KERNEL_TMAX_UW)
+#define _KERNEL_TBIT_FAST_UB           _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_FAST_UB           _KERNEL_TBIT_D
+#endif
+
+/* %jp{少なくとも16bitを表せる最速の符号付き整数型} */
+typedef int_fast16_t                           _KERNEL_T_FAST_H;
+#define _KERNEL_TMIN_FAST_H                    INT_FAST16_MIN
+#define _KERNEL_TMAX_FAST_H                    INT_FAST16_MAX
+#if (_KERNEL_TMIN_FAST_H >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_FAST_H <= _KERNEL_TMAX_H)
+#define _KERNEL_TBIT_FAST_H                    _KERNEL_TBIT_H
+#elif (_KERNEL_TMIN_FAST_H >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_FAST_H <= _KERNEL_TMAX_W)
+#define _KERNEL_TBIT_FAST_H                    _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_FAST_H                    _KERNEL_TBIT_D
+#endif
+
+/* %jp{少なくとも16bitを表せる最速の符号無し整数型} */
+typedef uint_fast16_t                          _KERNEL_T_FAST_UH;      
+#define _KERNEL_TMIN_FAST_UH           0
+#define _KERNEL_TMAX_FAST_UH           UINT_FAST16_MAX
+#if (_KERNEL_TMIN_FAST_UH >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_FAST_UH <= _KERNEL_TMAX_UH)
+#define _KERNEL_TBIT_FAST_UH           _KERNEL_TBIT_UH
+#elif (_KERNEL_TMIN_FAST_UH >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_FAST_UH <= _KERNEL_TMAX_UW)
+#define _KERNEL_TBIT_FAST_UH           _KERNEL_TBIT_UW
+#else
+#define _KERNEL_TBIT_FAST_UH           _KERNEL_TBIT_UD
+#endif
+
+/* %jp{少なくとも32bitを表せる最速の符号付き整数型} */
+typedef int_fast32_t                           _KERNEL_T_FAST_W;
+#define _KERNEL_TMIN_FAST_W                    INT_FAST32_MIN
+#define _KERNEL_TMAX_FAST_W                    INT_FAST32_MAX
+#if (_KERNEL_TMIN_FAST_W >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_FAST_W <= _KERNEL_TMAX_W)
+#define _KERNEL_TBIT_FAST_W                    _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_FAST_W                    _KERNEL_TBIT_D
+#endif
+
+/* %jp{少なくとも32bitを表せる最速の符号無し整数型} */
+typedef uint_fast32_t                          _KERNEL_T_FAST_UW;
+#define _KERNEL_TMIN_FAST_UW           0
+#define _KERNEL_TMAX_FAST_UW           UINT_FAST32_MAX
+#if (_KERNEL_TMIN_FAST_UW >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_FAST_UW <= _KERNEL_TMAX_UW)
+#define _KERNEL_TBIT_FAST_UW           _KERNEL_TBIT_UW
+#else
+#define _KERNEL_TBIT_FAST_UW           _KERNEL_TBIT_UD
+#endif
+
+/* %jp{少なくとも64bitを表せる最速の符号付き整数型} */
+typedef int_fast64_t                           _KERNEL_T_FAST_D;
+#define _KERNEL_TMIN_FAST_D                    INT_FAST64_MIN
+#define _KERNEL_TMAX_FAST_D                    INT_FAST64_MAX
+#define _KERNEL_TBIT_FAST_D                    _KERNEL_TBIT_D
+
+/* %jp{少なくとも64bitを表せる最速の符号無し整数型} */
+typedef uint_fast64_t                          _KERNEL_T_FAST_UD;
+#define _KERNEL_TMIN_FAST_UD           0
+#define _KERNEL_TMAX_FAST_UD           UINT_FAST64_MAX
+#define _KERNEL_TBIT_FAST_UD           _KERNEL_TBIT_UD
+
+
+/* %jp{ポインタが格納可能な整数型定義} */
+
+/* %jp{ポインタが格納可能な符号付き整数型} */
+typedef intptr_t                                       _KERNEL_T_INTPTR;
+#define _KERNEL_TMIN_INTPTR                    INTPTR_MIN
+#define _KERNEL_TMAX_INTPTR                    INTPTR_MAX
+#if (_KERNEL_TMIN_INTPTR >= _KERNEL_TMIN_B) && (_KERNEL_TMAX_INTPTR <= _KERNEL_TMAX_B)
+#define _KERNEL_TBIT_INTPTR                    _KERNEL_TBIT_B
+#elif (_KERNEL_TMIN_INTPTR >= _KERNEL_TMIN_H) && (_KERNEL_TMAX_INTPTR <= _KERNEL_TMAX_H)
+#define _KERNEL_TBIT_INTPTR                    _KERNEL_TBIT_H
+#elif (_KERNEL_TMIN_INTPTR >= _KERNEL_TMIN_W) && (_KERNEL_TMAX_INTPTR <= _KERNEL_TMAX_W)
+#define _KERNEL_TBIT_INTPTR                    _KERNEL_TBIT_W
+#else
+#define _KERNEL_TBIT_INTPTR                    _KERNEL_TBIT_D
+#endif
+
+/* %jp{ポインタが格納可能な符号無し整数型} */
+typedef uintptr_t                                      _KERNEL_T_UINTPTR;
+#define _KERNEL_TMIN_UINTPTR           0
+#define _KERNEL_TMAX_UINTPTR           UINTPTR_MAX
+#if (_KERNEL_TMIN_UINTPTR >= _KERNEL_TMIN_UB) && (_KERNEL_TMAX_UINTPTR <= _KERNEL_TMAX_UB)
+#define _KERNEL_TBIT_UINTPTR           _KERNEL_TBIT_UB
+#elif (_KERNEL_TMIN_UINTPTR >= _KERNEL_TMIN_UH) && (_KERNEL_TMAX_UINTPTR <= _KERNEL_TMAX_UH)
+#define _KERNEL_TBIT_UINTPTR           _KERNEL_TBIT_UH
+#elif (_KERNEL_TMIN_UINTPTR >= _KERNEL_TMIN_UW) && (_KERNEL_TMAX_UINTPTR <= _KERNEL_TMAX_UW)
+#define _KERNEL_TBIT_UINTPTR           _KERNEL_TBIT_UW
+#else
+#define _KERNEL_TBIT_UINTPTR           _KERNEL_TBIT_UD
+#endif
+
+
+#else  /* %jp{stdint.h が使えない場合} */
+
+/* %jp{メモリサイズ重視の型定義} */
+
+/* %jp{少なくとも8bitを表せる最小の符号付き整数型} */
+typedef _KERNEL_T_B                                    _KERNEL_T_LEAST_B;
+#define _KERNEL_TMIN_LEAST_B           _KERNEL_TMIN_B
+#define _KERNEL_TMAX_LEAST_B           _KERNEL_TMAX_B
+#define _KERNEL_TBIT_LEAST_B           _KERNEL_TBIT_B
+
+/* %jp{少なくとも8bitを表せる最小の符号無し整数型} */
+typedef _KERNEL_T_UB                           _KERNEL_T_LEAST_UB;
+#define _KERNEL_TMIN_LEAST_UB          _KERNEL_TMIN_UB
+#define _KERNEL_TMAX_LEAST_UB          _KERNEL_TMAX_UB
+#define _KERNEL_TBIT_LEAST_UB          _KERNEL_TBIT_UB
+
+/* %jp{少なくとも16bitを表せる最小の符号付き整数型} */
+typedef _KERNEL_T_H                                    _KERNEL_T_LEAST_H;
+#define _KERNEL_TMIN_LEAST_H           _KERNEL_TMIN_H
+#define _KERNEL_TMAX_LEAST_H           _KERNEL_TMAX_H
+#define _KERNEL_TBIT_LEAST_H           _KERNEL_TBIT_H
+
+/* %jp{少なくとも16bitを表せる最小の符号無し整数型} */
+typedef _KERNEL_T_UH                           _KERNEL_T_LEAST_UH;
+#define _KERNEL_TMIN_LEAST_UH          _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_LEAST_UH          _KERNEL_TMAX_UH
+#define _KERNEL_TBIT_LEAST_UH          _KERNEL_TBIT_UH
+
+/* %jp{少なくとも32bitを表せる最小の符号付き整数型} */
+typedef _KERNEL_T_W                                    _KERNEL_T_LEAST_W;
+#define _KERNEL_TMIN_LEAST_W           _KERNEL_TMIN_W
+#define _KERNEL_TMAX_LEAST_W           _KERNEL_TMAX_W
+#define _KERNEL_TBIT_LEAST_W           _KERNEL_TBIT_W
+
+/* %jp{少なくとも32bitを表せる最小の符号無し整数型} */
+typedef _KERNEL_T_UW                           _KERNEL_T_LEAST_UW;
+#define _KERNEL_TMIN_LEAST_UW          _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_LEAST_UW          _KERNEL_TMAX_UW
+#define _KERNEL_TBIT_LEAST_UW          _KERNEL_TBIT_UW
+
+
+#if _KERNEL_ENABLE64
+
+/* %jp{少なくとも64bitを表せる最小の符号付き整数型} */
+typedef _KERNEL_T_D                                    _KERNEL_T_LEAST_D;
+#define _KERNEL_TMIN_LEAST_D           _KERNEL_TMIN_D
+#define _KERNEL_TMAX_LEAST_D           _KERNEL_TMAX_D
+#define _KERNEL_TBIT_LEAST_D           _KERNEL_TBIT_D
+
+/* %jp{少なくとも64bitを表せる最小の符号無し整数型} */
+typedef _KERNEL_T_UD                           _KERNEL_T_LEAST_UD;
+#define _KERNEL_TMIN_LEAST_UD          _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_LEAST_UD          _KERNEL_TMAX_UD
+#define _KERNEL_TBIT_LEAST_UD          _KERNEL_TBIT_UD
+
+#endif
+
+
+/* %jp{速度重視の型定義} */
+
+/* %jp{少なくとも8bitを表せる最速の符号付き整数型} */
+#if (_KERNEL_TMIN_B >= _KERNEL_TMIN_PROC_INT) && (_KERNEL_TMAX_B <= _KERNEL_TMAX_PROC_INT)
+typedef _KERNEL_T_PROC_INT                     _KERNEL_T_FAST_B;
+#define _KERNEL_TMIN_FAST_B                    _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_FAST_B                    _KERNEL_TMAX_PROC_INT
+#define _KERNEL_TBIT_FAST_B                    _KERNEL_TBIT_PROC_INT
+#else
+typedef _KERNEL_T_B                                    _KERNEL_T_FAST_B;
+#define _KERNEL_TMIN_FAST_B                    _KERNEL_TMIN_B
+#define _KERNEL_TMAX_FAST_B                    _KERNEL_TMAX_B
+#define _KERNEL_TBIT_FAST_B                    _KERNEL_TBIT_B
+#endif
+
+/* %jp{少なくとも8bitを表せる最速の符号無し整数型} */
+#if (_KERNEL_TMIN_UB >= _KERNEL_TMIN_PROC_UINT) && (_KERNEL_TMAX_UB <= _KERNEL_TMAX_PROC_UINT)
+typedef _KERNEL_T_PROC_UINT                    _KERNEL_T_FAST_UB;
+#define _KERNEL_TMIN_FAST_UB           _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_FAST_UB           _KERNEL_TMAX_PROC_UINT
+#define _KERNEL_TBIT_FAST_UB           _KERNEL_TBIT_PROC_UINT
+#else
+typedef _KERNEL_T_UB                           _KERNEL_T_FAST_UB;
+#define _KERNEL_TMIN_FAST_UB           _KERNEL_TMIN_UB
+#define _KERNEL_TMAX_FAST_UB           _KERNEL_TMAX_UB
+#define _KERNEL_TBIT_FAST_UB           _KERNEL_TBIT_UB
+#endif
+
+/* %jp{少なくとも16bitを表せる最速の符号付き整数型} */
+#if (_KERNEL_TMIN_H >= _KERNEL_TMIN_PROC_INT) && (_KERNEL_TMAX_H <= _KERNEL_TMAX_PROC_INT)
+typedef _KERNEL_T_PROC_INT                     _KERNEL_T_FAST_H;
+#define _KERNEL_TMIN_FAST_H                    _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_FAST_H                    _KERNEL_TMAX_PROC_INT
+#define _KERNEL_TBIT_FAST_H                    _KERNEL_TBIT_PROC_INT
+#else
+typedef _KERNEL_T_H                                    _KERNEL_T_FAST_H;
+#define _KERNEL_TMIN_FAST_H                    _KERNEL_TMIN_H
+#define _KERNEL_TMAX_FAST_H                    _KERNEL_TMAX_H
+#define _KERNEL_TBIT_FAST_H                    _KERNEL_TBIT_H
+#endif
+
+/* %jp{少なくとも16bitを表せる最速の符号無し整数型} */
+#if (_KERNEL_TMIN_UH >= _KERNEL_TMIN_PROC_UINT) && (_KERNEL_TMAX_UH <= _KERNEL_TMAX_PROC_UINT)
+typedef _KERNEL_T_PROC_UINT                    _KERNEL_T_FAST_UH;
+#define _KERNEL_TMIN_FAST_UH           _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_FAST_UH           _KERNEL_TMAX_PROC_UINT
+#define _KERNEL_TBIT_FAST_UH           _KERNEL_TBIT_PROC_UINT
+#else
+typedef _KERNEL_T_UH                           _KERNEL_T_FAST_UH;
+#define _KERNEL_TMIN_FAST_UH           _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_FAST_UH           _KERNEL_TMAX_UH
+#define _KERNEL_TBIT_FAST_UH           _KERNEL_TBIT_UH
+#endif
+
+/* %jp{少なくとも32bitを表せる最速の符号付き整数型} */
+#if (_KERNEL_TMIN_W >= _KERNEL_TMIN_PROC_INT) && (_KERNEL_TMAX_W <= _KERNEL_TMAX_PROC_INT)
+typedef _KERNEL_T_PROC_INT                     _KERNEL_T_FAST_W;
+#define _KERNEL_TMIN_FAST_W                    _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_FAST_W                    _KERNEL_TMAX_PROC_INT
+#define _KERNEL_TBIT_FAST_W                    _KERNEL_TBIT_PROC_INT
+#else
+typedef _KERNEL_T_W                                    _KERNEL_T_FAST_W;
+#define _KERNEL_TMIN_FAST_W                    _KERNEL_TMIN_W
+#define _KERNEL_TMAX_FAST_W                    _KERNEL_TMAX_W
+#define _KERNEL_TBIT_FAST_W                    _KERNEL_TBIT_W
+#endif
+
+/* %jp{少なくとも32bitを表せる最速の符号無し整数型} */
+#if (_KERNEL_TMIN_UW >= _KERNEL_TMIN_PROC_UINT) && (_KERNEL_TMAX_UW <= _KERNEL_TMAX_PROC_UINT)
+typedef _KERNEL_T_PROC_UINT                    _KERNEL_T_FAST_UW;
+#define _KERNEL_TMIN_FAST_UW           _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_FAST_UW           _KERNEL_TMAX_PROC_UINT
+#define _KERNEL_TBIT_FAST_UW           _KERNEL_TBIT_PROC_UINT
+#else
+typedef _KERNEL_T_UW                           _KERNEL_T_FAST_UW;
+#define _KERNEL_TMIN_FAST_UW           _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_FAST_UW           _KERNEL_TMAX_UW
+#define _KERNEL_TBIT_FAST_UW           _KERNEL_TBIT_UW
+#endif
+
+
+#if _KERNEL_ENABLE64
+
+/* %jp{少なくとも64bitを表せる最速の符号付き整数型} */
+#if (_KERNEL_TMIN_D >= _KERNEL_TMIN_PROC_INT) && (_KERNEL_TMAX_D <= _KERNEL_TMAX_PROC_INT)
+typedef _KERNEL_T_PROC_INT                     _KERNEL_T_FAST_D;
+#define _KERNEL_TMIN_FAST_D                    _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_FAST_D                    _KERNEL_TMAX_PROC_INT
+#define _KERNEL_TBIT_FAST_D                    _KERNEL_TBIT_PROC_INT
+#else
+typedef _KERNEL_T_D                                    _KERNEL_T_FAST_D;
+#define _KERNEL_TMIN_FAST_D                    _KERNEL_TMIN_D
+#define _KERNEL_TMAX_FAST_D                    _KERNEL_TMAX_D
+#define _KERNEL_TBIT_FAST_D                    _KERNEL_TBIT_D
+#endif
+
+/* %jp{少なくとも64bitを表せる最速の符号無し整数型} */
+#if (_KERNEL_TMIN_UD >= _KERNEL_TBIT_PROC_UINT) && (_KERNEL_TMAX_UD <= _KERNEL_TMAX_PROC_UINT)
+typedef _KERNEL_T_PROC_UINT                    _KERNEL_T_FAST_UD;
+#define _KERNEL_TMIN_FAST_UD           _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_FAST_UD           _KERNEL_TMAX_PROC_UINT
+#define _KERNEL_TBIT_FAST_UD           _KERNEL_TBIT_PROC_UINT
+#else
+typedef _KERNEL_T_UD                           _KERNEL_T_FAST_UD;
+#define _KERNEL_TMIN_FAST_UD           _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_FAST_UD           _KERNEL_TMAX_UD
+#define _KERNEL_TBIT_FAST_UD           _KERNEL_TBIT_UD
+#endif
+
+#endif
+
+
+#if defined(_KERNEL_CMPL_PTR_SIZE)     /* %jp{ポインタサイズが定義されていたら} */
+#if _KERNEL_CMPL_PTR_SIZE <= 16                /* %jp{ポインタサイズが16bit以下} */
+
+/* %jp{ポインタが格納可能な整数型定義} */
+typedef _KERNEL_T_H                                    _KERNEL_T_INTPTR;
+#define _KERNEL_TMIN_INTPTR                    _KERNEL_TMIN_H
+#define _KERNEL_TMAX_INTPTR                    _KERNEL_TMAX_H
+#define _KERNEL_TBIT_INTPTR                    _KERNEL_TBIT_H
+
+/* %jp{ポインタが格納可能な符号無し整数型} */
+typedef _KERNEL_T_UH                           _KERNEL_T_UINTPTR;
+#define _KERNEL_TMIN_UINTPTR           _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_UINTPTR           _KERNEL_TMAX_UH
+#define _KERNEL_TBIT_UINTPTR           _KERNEL_TBIT_UH
+
+#elif _KERNEL_CMPL_PTR_SIZE <= 32      /* %jp{ポインタサイズが32bit以下} */
+
+/* %jp{ポインタが格納可能な整数型定義} */
+typedef _KERNEL_T_W                                    _KERNEL_T_INTPTR;
+#define _KERNEL_TMIN_INTPTR                    _KERNEL_TMIN_W
+#define _KERNEL_TMAX_INTPTR                    _KERNEL_TMAX_W
+#define _KERNEL_TBIT_INTPTR                    _KERNEL_TBIT_W
+
+/* %jp{ポインタが格納可能な符号無し整数型} */
+typedef _KERNEL_T_UW                           _KERNEL_T_UINTPTR;
+#define _KERNEL_TMIN_UINTPTR           _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_UINTPTR           _KERNEL_TMAX_UW
+#define _KERNEL_TBIT_UINTPTR           _KERNEL_TBIT_UW
+
+#else  /* %jp{ポインタサイズが32bitを超える} */
+
+/* %jp{ポインタが格納可能な整数型定義} */
+typedef _KERNEL_T_D                                    _KERNEL_T_INTPTR;
+#define _KERNEL_TMIN_INTPTR                    _KERNEL_TMIN_D
+#define _KERNEL_TMAX_INTPTR                    _KERNEL_TMAX_D
+#define _KERNEL_TBIT_INTPTR                    _KERNEL_TBIT_D
+
+/* %jp{ポインタが格納可能な符号無し整数型} */
+typedef _KERNEL_T_UD                           _KERNEL_T_UINTPTR;
+#define _KERNEL_TMIN_UINTPTR           _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_UINTPTR           _KERNEL_TMAX_UD
+#define _KERNEL_TBIT_UINTPTR           _KERNEL_TBIT_UD
+
+#endif
+
+#else  /* %jp{ポインタサイズが未定義なら} */
+
+/* %jp{ポインタが格納可能な整数型定義} */
+typedef _KERNEL_T_W                                    _KERNEL_T_INTPTR;
+#define _KERNEL_TMIN_INTPTR                    _KERNEL_TMIN_W
+#define _KERNEL_TMAX_INTPTR                    _KERNEL_TMAX_W
+#define _KERNEL_TBIT_INTPTR                    _KERNEL_TBIT_W
+
+/* %jp{ポインタが格納可能な符号無し整数型} */
+typedef _KERNEL_T_UW                           _KERNEL_T_UINTPTR;
+#define _KERNEL_TMIN_UINTPTR           _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_UINTPTR           _KERNEL_TMAX_UW
+#define _KERNEL_TBIT_UINTPTR           _KERNEL_TBIT_UW
+
+#endif
+
+#endif
+
+
+/* %jp{ポインタ型} */
+typedef void*                                          _KERNEL_T_VP;
+#if defined(_KERNEL_CMPL_PTR_SIZE)
+#define _KERNEL_TBIT_VP                                _KERNEL_CMPL_PTR_SIZE
+#else
+#define _KERNEL_TBIT_VP                                _KERNEL_TBIT_INTPTR
+#endif
+
+
+
+
+#if _KERNEL_ENABLE64
+
+/** %jp{ビット幅算出マクロ} */
+#define _KERNEL_MAXNUM2BIT(x)                                                                                  \
+       (                                                                                                                                       \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000000) ?  0 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000001) ?  1 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000003) ?  2 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000007) ?  3 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000000f) ?  4 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000001f) ?  5 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000003f) ?  6 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000007f) ?  7 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000000ff) ?  8 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000001ff) ?  9 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000003ff) ? 10 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000007ff) ? 11 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000000fff) ? 12 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000001fff) ? 13 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000003fff) ? 14 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000007fff) ? 15 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000000000ffff) ? 16 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000000001ffff) ? 17 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000000003ffff) ? 18 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000000007ffff) ? 19 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000000000fffff) ? 20 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000000001fffff) ? 21 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000000003fffff) ? 22 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000000007fffff) ? 23 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000000ffffff) ? 24 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000001ffffff) ? 25 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000003ffffff) ? 26 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000007ffffff) ? 27 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000000fffffff) ? 28 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000001fffffff) ? 29 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000003fffffff) ? 30 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000007fffffff) ? 31 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000000ffffffff) ? 32 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000001ffffffff) ? 33 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000003ffffffff) ? 34 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000007ffffffff) ? 35 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000000fffffffff) ? 36 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000001fffffffff) ? 37 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000003fffffffff) ? 38 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000007fffffffff) ? 39 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000000ffffffffff) ? 40 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000001ffffffffff) ? 41 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000003ffffffffff) ? 42 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000007ffffffffff) ? 43 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00000fffffffffff) ? 44 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00001fffffffffff) ? 45 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00003fffffffffff) ? 46 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00007fffffffffff) ? 47 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0000ffffffffffff) ? 48 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0001ffffffffffff) ? 49 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0003ffffffffffff) ? 50 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0007ffffffffffff) ? 51 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x000fffffffffffff) ? 52 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x001fffffffffffff) ? 53 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x003fffffffffffff) ? 54 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x007fffffffffffff) ? 55 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x00ffffffffffffff) ? 56 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x01ffffffffffffff) ? 57 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x03ffffffffffffff) ? 58 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x07ffffffffffffff) ? 59 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x0fffffffffffffff) ? 60 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x1fffffffffffffff) ? 61 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x3fffffffffffffff) ? 62 :                \
+               (x) <= _KERNEL_CONSTNAT_INT64(0x7fffffffffffffff) ? 63 : 64             \
+       )
+
+#else
+
+
+/** %jp{ビット幅算出マクロ} */
+#define _KERNEL_MAXNUM2BIT(x)                  \
+       (                                                                       \
+               (x) <= 0x00000000 ?  0 :                \
+               (x) <= 0x00000001 ?  1 :                \
+               (x) <= 0x00000003 ?  2 :                \
+               (x) <= 0x00000007 ?  3 :                \
+               (x) <= 0x0000000f ?  4 :                \
+               (x) <= 0x0000001f ?  5 :                \
+               (x) <= 0x0000003f ?  6 :                \
+               (x) <= 0x0000007f ?  7 :                \
+               (x) <= 0x000000ff ?  8 :                \
+               (x) <= 0x000001ff ?  9 :                \
+               (x) <= 0x000003ff ? 10 :                \
+               (x) <= 0x000007ff ? 11 :                \
+               (x) <= 0x00000fff ? 12 :                \
+               (x) <= 0x00001fff ? 13 :                \
+               (x) <= 0x00003fff ? 14 :                \
+               (x) <= 0x00007fff ? 15 :                \
+               (x) <= 0x0000ffff ? 16 :                \
+               (x) <= 0x0001ffff ? 17 :                \
+               (x) <= 0x0003ffff ? 18 :                \
+               (x) <= 0x0007ffff ? 19 :                \
+               (x) <= 0x000fffff ? 20 :                \
+               (x) <= 0x001fffff ? 21 :                \
+               (x) <= 0x003fffff ? 22 :                \
+               (x) <= 0x007fffff ? 23 :                \
+               (x) <= 0x00ffffff ? 24 :                \
+               (x) <= 0x01ffffff ? 25 :                \
+               (x) <= 0x03ffffff ? 26 :                \
+               (x) <= 0x07ffffff ? 27 :                \
+               (x) <= 0x0fffffff ? 28 :                \
+               (x) <= 0x1fffffff ? 29 :                \
+               (x) <= 0x3fffffff ? 30 :                \
+               (x) <= 0x7fffffff ? 31 : 32             \
+       )
+
+#endif
+
+
+#endif /* _KERNEL__core__basetyp_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/core/cmpl.h b/kernel/include/core/cmpl.h
new file mode 100755 (executable)
index 0000000..5e292cc
--- /dev/null
@@ -0,0 +1,80 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  cmpl.h
+ * @brief %jp{コンパイラ判定ヘッダファイル}%en{uITRON4.0 kernel type header file}
+ *
+ * @version $Id: cmpl.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__core__cmpl_h__
+#define _KERNEL__core__cmpl_h__
+
+
+#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99(ISO/IEC 9899:1999) */
+#define _KERNEL_CMPL_STDINT_H                  TRUE                                            /**< %jp{stdint.hは利用可能か?} */
+
+#elif defined(__GNUC__) && !defined(__STRICT_ANSI__)
+
+/* gcc */
+#if 0
+
+#define _KERNEL_CMPL_STDINT_H                  TRUE                                            /**< %jp{stdint.hは利用可能か?} */
+
+#else
+
+#define _KERNEL_CMPL_STDINT_H                  FALSE                                           /**< %jp{stdint.hは利用可能か?} */
+#define _KERNEL_CMPL_64BIT                             TRUE                                            /**< %jp{64ビット整数は利用可能か?} */
+#define _KERNEL_CMPL_INT64                             long long                                       /**< %jp{符号付き64ビット整数の宣言名} */
+#define _KERNEL_CMPL_UINT64                            unsigned long long                      /**< %jp{符号無し64ビット整数の宣言名} */
+#define _KERNEL_CMPL_CONSTNAT_INT64(x) (x ## LL)                                       /**< %jp{符号付き64ビット整数の定数生成} */
+#define _KERNEL_CMPL_CONSTNAT_UINT64(x)        (x ## ULL)                                      /**< %jp{符号無し64ビット整数の定数生成} */
+#define _KERNEL_CMPL_TMIN_INT64                        (-9223372036854775807LL)        /**< %jp{符号付き64ビット整数の最小値} */
+#define _KERNEL_CMPL_TMAX_INT64                        (9223372036854775807LL)         /**< %jp{符号付き64ビット整数の最大値} */
+#define _KERNEL_CMPL_TMIN_UINT64               (0ULL)                                          /**< %jp{符号無し64ビット整数の最小値} */
+#define _KERNEL_CMPL_TMAX_UINT64               (18446744073709551615ULL)       /**< %jp{符号無し64ビット整数の最大値} */
+#define _KERNEL_CMPL_PTR_SIZE                  32                                                      /**< %jp{ポインタサイズを定義するか?} */
+
+#endif
+
+#elif defined(_MSC_VER)
+
+/* Visual-C++ */
+#define _KERNEL_CMPL_STDINT_H                  FALSE                                           /**< %jp{stdint.hは利用可能か?} */
+
+#define _KERNEL_CMPL_64BIT                             TRUE                                            /**< %jp{64ビット整数は利用可能か?} */
+#define _KERNEL_CMPL_INT64                             signed __int64                          /**< %jp{符号付き64ビット整数の宣言名} */
+#define _KERNEL_CMPL_UINT64                            unsigned __int64                        /**< %jp{符号無し64ビット整数の宣言名} */
+#define _KERNEL_CMPL_CONSTNAT_INT64(x) (x)                                                     /**< %jp{符号付き64ビット整数の定数生成} */
+#define _KERNEL_CMPL_CONSTNAT_UINT64(x)        (x)                                                     /**< %jp{符号無し64ビット整数の定数生成} */
+#define _KERNEL_CMPL_TMIN_INT64                        (-9223372036854775808)          /**< %jp{符号付き64ビット整数の最小値} */
+#define _KERNEL_CMPL_TMAX_INT64                        9223372036854775807                     /**< %jp{符号付き64ビット整数の最大値} */
+#define _KERNEL_CMPL_TMIN_UINT64               0                                                       /**< %jp{符号無し64ビット整数の最小値} */
+#define _KERNEL_CMPL_TMAX_UINT64               18446744073709551615            /**< %jp{符号無し64ビット整数の最大値} */
+#define _KERNEL_CMPL_PTR_SIZE                  32                                                      /**< %jp{ポインタサイズを定義するか?} */
+
+
+#elif defined(__ARMCC_VERSION) && !defined(__STRICT_ANSI__)
+
+/* armcc */
+#define _KERNEL_CMPL_STDINT_H                  TRUE                                            /**< %jp{stdint.hは利用可能か?} */
+
+#else
+
+/* ANSI-C (ISO/IEC 9899:1990) standard compiler */
+#define _KERNEL_CMPL_STDINT_H                  FALSE                                           /**< %jp{stdint.hは利用可能か?} */
+#define _KERNEL_CMPL_64BIT                             FALSE                                           /**< %jp{64ビット整数は利用可能か?} */
+
+#endif
+
+
+#endif /* _KERNEL__core__cmpl_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/core/core.h b/kernel/include/core/core.h
new file mode 100755 (executable)
index 0000000..3a0300d
--- /dev/null
@@ -0,0 +1,36 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  core.h
+ * @brief %jp{カーネル内部用コアヘッダファイル}%en{kernel core header file}
+ *
+ * @version $Id: core.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__core__core_h__
+#define _KERNEL__core__core_h__
+
+
+#include "kernel.h"
+#include "procatr.h"
+#include "proc.h"
+#include "ircatr.h"
+#include "irc.h"
+#include "config/cfgknl.h"
+#include "parser/parsknl.h"
+#include "core/opttyp.h"
+#include "core/objid.h"
+#include "core/objhdl.h"
+#include "object/tskobj.h"
+#include "config/cfgerr.h"
+#include "parser/parserr.h"
+
+
+#endif /* _KERNEL__core__core_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/core/dsp.h b/kernel/include/core/dsp.h
new file mode 100755 (executable)
index 0000000..57f14b6
--- /dev/null
@@ -0,0 +1,82 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  dsp.h
+ * @brief %jp{タスクディスパッチャのヘッダファイル}%en{task dispatcher heder file}
+ *
+ * @version $Id: dsp.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL_core__dsp_h__
+#define _KERNEL_core__dsp_h__
+
+
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void _kernel_dsp_tsk(void);                                                            /**< %jp{タスクディスパッチ} */
+void _kernel_ent_tsk(VP_INT exinf1, VP_INT exinf2);            /**< %jp{タスクエントリーポイント} */
+
+void _kernel_dsp_sta_tsk(_KERNEL_T_TSKHDL tskhdl);             /**< %jp{他タスクを開始する} */
+void _kernel_dsp_ext_tsk(_KERNEL_T_TSKHDL tskhdl);             /**< %jp{自タスクを終了する} */
+void _kernel_dsp_ter_tsk(_KERNEL_T_TSKHDL tskhdl);             /**< %jp{他タスクを終了する} */
+void _kernel_dsp_wai_tsk(_KERNEL_T_TSKHDL tskhdl);             /**< %jp{自タスクを待ち状態にする} */
+void _kernel_dsp_wup_tsk(_KERNEL_T_TSKHDL tskhdl);             /**< %jp{他タスクを待ち解除する} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_DSP_TSK()                      _kernel_dsp_tsk()                       /**< タスクディスパッチ実施 */
+
+
+/* %jp{実行中もレディーキューに繋ぐモデルの場合} */
+
+
+#if _KERNEL_SPT_SUS_TSK        /*  %jp{サスペンドありのモデルの場合} */
+
+#define _KERNEL_DSP_STA_TSK(tskhdl)            _kernel_dsp_sta_tsk(tskhdl)             /**< %jp{他タスクを開始する} */
+#define _KERNEL_DSP_EXT_TSK(tskhdl)            _kernel_dsp_ext_tsk(tskhdl)             /**< %jp{自タスクを終了する} */
+#define _KERNEL_DSP_TER_TSK(tskhdl)            _kernel_dsp_ter_tsk(tskhdl)             /**< %jp{他タスクを終了する} */
+#define _KERNEL_DSP_WAI_TSK(tskhdl)            _kernel_dsp_wai_tsk(tskhdl)             /**< %jp{自タスクを待ち状態にする} */
+#define _KERNEL_DSP_WUP_TSK(tskhdl)            _kernel_dsp_wup_tsk(tskhdl)             /**< %jp{他タスクを待ち解除する} */
+
+#else /* %jp{サスペンド無しのモデルの場合} */
+
+#if _KERNEL_RUNTSK_ON_RDQ      /* %jp{実行中もレディーキューに繋ぐ場合} */
+
+#define _KERNEL_DSP_STA_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_RDY); _KERNEL_ADD_RDQ(tskhdl); } while (0)             /**< %jp{他タスクを開始する} */
+#define _KERNEL_DSP_EXT_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_DMT); _KERNEL_RMV_RDQ(tskhdl); } while (0)             /**< %jp{自タスクを終了する} */
+#define _KERNEL_DSP_TER_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_DMT); _KERNEL_RMV_RDQ(tskhdl); } while (0)             /**< %jp{他タスクを終了する} */
+#define _KERNEL_DSP_WAI_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_WAI); _KERNEL_RMV_RDQ(tskhdl); } while (0)             /**< %jp{自タスクを待ち状態にする} */
+#define _KERNEL_DSP_WUP_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_RDY); _KERNEL_ADD_RDQ(tskhdl); } while (0)             /**< %jp{他タスクを待ち解除する} */
+
+#else /* %jp{実行中はレディーキューから外す場合} */
+
+#define _KERNEL_DSP_STA_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_RDY); _KERNEL_ADD_RDQ(tskhdl); } while (0)             /**< 他タスクを開始する */
+#define _KERNEL_DSP_EXT_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_DMT);                          } while (0)             /**< 自タスクを終了する */
+#define _KERNEL_DSP_TER_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_DMT); _KERNEL_RMV_RDQ(tskhdl); } while (0)             /**< 他タスクを終了する */
+#define _KERNEL_DSP_WAI_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_WAI);                          } while (0)             /**< 自タスクを待ち状態にする */
+#define _KERNEL_DSP_WUP_TSK(tskhdl)            do { _KERNEL_TSK_SET_TSKSTAT(_KERNEL_TSK_TSKHDL2TCB(tskhdl), _KERNEL_TTS_RDY); _KERNEL_ADD_RDQ(tskhdl); } while (0)             /**< 他タスクを待ち解除する */
+
+#endif
+
+#endif
+
+
+
+#endif /* _KERNEL_core__dsp_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/core/hep.h b/kernel/include/core/hep.h
new file mode 100755 (executable)
index 0000000..8ab7115
--- /dev/null
@@ -0,0 +1,70 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  hep.h
+ * @brief %jp{メモリヒープのヘッダファイル}%en{memory heap heder file}
+ *
+ * @version $Id: hep.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__core__hep_h_
+#define _KERNEL__core__hep_h_
+
+
+#include "itron.h"
+
+
+#define _KERNEL_HEP_MEMALIGN           32                      /**< %jp{メモリアライメント} */
+#define _KERNEL_HEP_USING                      0x1234          /**< %jp{使用中} */
+#define _KERNEL_HEP_FREE                       0xabcd          /**< %jp{未使用} */
+
+
+
+/** %jp{サイズアライメント} */
+#define _KERNEL_HEP_ALIGNED(size)      (((size) + _KERNEL_HEP_MEMALIGN - 1) & ~(_KERNEL_HEP_MEMALIGN - 1))
+
+
+/** %jp{ヒープメモリブロック} */
+typedef struct _kernel_t_hepblk
+{
+       struct _kernel_t_hepblk* prev;  /**< %jp{前のブロック} */
+       SIZE   size;                                    /**< %jp{ブロックのサイズ} */
+       INT    flag;                                    /**< %jp{使用中フラグ} */
+} _KERNEL_T_HEPBLK;
+
+
+/** %jp{ヒープ制御ブロック} */
+typedef struct _kernel_t_hepcb
+{
+       _KERNEL_T_HEPBLK *base;                 /**< %jp{カーネル用メモリ先頭ブロックのアドレス} */
+       SIZE            heapsz;                 /**< %jp{カーネル用メモリサイズ} */
+} _KERNEL_T_HEPCB;
+
+
+/** %jp{カーネルメモリ管理ブロックサイズ} */
+#define _KERNEL_HEP_BLKSIZE                    _KERNEL_HEP_ALIGNED(sizeof(_KERNEL_T_HEPBLK))
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void    _kernel_cre_hep(_KERNEL_T_HEPCB *pk_hepcb, void *p_base, SIZE size);   /**< %jp{メモリヒープを生成} */
+#define _kernel_del_hep(pk_hepcb)      do {} while(0)                                                          /**< %jp{メモリヒープを削除} */
+VP      _kernel_alc_hep(_KERNEL_T_HEPCB *pk_hepcb, SIZE size);                                 /**< %jp{メモリの割り当て} */
+void    _kernel_fre_hep(_KERNEL_T_HEPCB *pk_hepcb, VP ptr);                                            /**< %jp{メモリの解放} */
+#define _kernel_alg_hep(size)          _KERNEL_HEP_ALIGNED(size)                                       /**< %jp{メモリサイズのアライメントを合わせる} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _KERNEL__core__hep_h_ */
+
+
+/* end of file */
diff --git a/kernel/include/core/objhdl.h b/kernel/include/core/objhdl.h
new file mode 100755 (executable)
index 0000000..071fee1
--- /dev/null
@@ -0,0 +1,39 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  objid.h
+ * @brief %jp{タスクブジェクトのID用の型定義}%en{define object ID type}
+ *
+ * @version $Id: objhdl.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__core__objhdl_h__
+#define _KERNEL__core__objhdl_h__
+
+
+/* ---------------------------------- */
+/*          Task-Handle               */
+/* ---------------------------------- */
+
+#if _KERNEL_TSKHDL_ID          /* %jp{タスクハンドルにIDを使う}%en{_KERNEL_T_TSKHDL is ID} */
+
+typedef _KERNEL_T_TSKID                        _KERNEL_T_TSKHDL;
+#define _KERNEL_TSKHDL_NULL            0
+#define _KERNEL_TBIT_TSKHDL            _KERNEL_TBIT_TSKID
+
+#else                                          /* %jp{タスクハンドルにTCBのアドレスを使う}%en{_KERNEL_T_TSKHDL is Pointer} */
+
+struct _kernel_t_tcb;
+typedef struct _kernel_t_tcb   *_KERNEL_T_TSKHDL;
+#define _KERNEL_TSKHDL_NULL            NULL
+#define _KERNEL_TBIT_TSKHDL            _KERNEL_TBIT_VP_INT
+
+#endif
+
+
+#endif /* _KERNEL__core__objhdl_h__ */
diff --git a/kernel/include/core/objid.h b/kernel/include/core/objid.h
new file mode 100755 (executable)
index 0000000..46599bc
--- /dev/null
@@ -0,0 +1,149 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  objid.h
+ * @brief %jp{タスクブジェクトのID用の型定義}%en{define object ID type}
+ *
+ * @version $Id: objid.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__core_objid_h__
+#define _KERNEL__core_objid_h__
+
+
+
+/* ---------------------------------- */
+/*            Task-ID                 */
+/* ---------------------------------- */
+
+/* %jp{サイズに適した型とする} */
+#if (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B               _KERNEL_T_TSKID;                                                        /**< %jp{タスクIDの型}%en{type of Task-ID} */
+#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UB              _KERNEL_T_TSKID;                                                        /**< %jp{タスクIDの型}%en{type of Task-ID} */
+#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H               _KERNEL_T_TSKID;                                                        /**< %jp{タスクIDの型}%en{type of Task-ID} */
+#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UH              _KERNEL_T_TSKID;                                                        /**< %jp{タスクIDの型}%en{type of Task-ID} */
+#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W               _KERNEL_T_TSKID;                                                        /**< %jp{タスクIDの型}%en{type of Task-ID} */
+#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UW              _KERNEL_T_TSKID;                                                        /**< %jp{タスクIDの型}%en{type of Task-ID} */
+#elif (_KERNEL_TMAX_TSKID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D               _KERNEL_T_TSKID;                                                        /**< %jp{タスクIDの型}%en{type of Task-ID} */
+#else
+typedef _KERNEL_T_FAST_UD              _KERNEL_T_TSKID;                                                        /**< %jp{タスクIDの型}%en{type of Task-ID} */
+#endif
+
+
+
+/* ---------------------------------- */
+/*            Semaphore-ID            */
+/* ---------------------------------- */
+
+/* %jp{サイズに適した型とする} */
+#if (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B               _KERNEL_T_SEMID;                                                        /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */
+#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UB              _KERNEL_T_SEMID;                                                        /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */
+#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H               _KERNEL_T_SEMID;                                                        /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */
+#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UH              _KERNEL_T_SEMID;                                                        /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */
+#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W               _KERNEL_T_SEMID;                                                        /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */
+#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UW              _KERNEL_T_SEMID;                                                        /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */
+#elif (_KERNEL_TMAX_SEMID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D               _KERNEL_T_SEMID;                                                        /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */
+#else
+typedef _KERNEL_T_FAST_UD              _KERNEL_T_SEMID;                                                        /**< %jp{セマフォIDの型}%en{type of Semaphore-ID} */
+#endif
+
+
+
+/* ---------------------------------- */
+/*            Eventflag-ID            */
+/* ---------------------------------- */
+
+/* %jp{サイズに適した型とする} */
+#if (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B               _KERNEL_T_FLGID;                                                        /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */
+#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UB              _KERNEL_T_FLGID;                                                        /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */
+#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H               _KERNEL_T_FLGID;                                                        /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */
+#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UH              _KERNEL_T_FLGID;                                                        /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */
+#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W               _KERNEL_T_FLGID;                                                        /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */
+#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UW              _KERNEL_T_FLGID;                                                        /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */
+#elif (_KERNEL_TMAX_FLGID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D               _KERNEL_T_FLGID;                                                        /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */
+#else
+typedef _KERNEL_T_FAST_UD              _KERNEL_T_FLGID;                                                        /**< %jp{イベントフラグIDの型}%en{type of Eventflag-ID} */
+#endif
+
+
+
+/* ---------------------------------- */
+/*            Mailbox-ID              */
+/* ---------------------------------- */
+
+/* %jp{サイズに適した型とする} */
+#if (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B               _KERNEL_T_MBXID;                                                        /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */
+#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UB              _KERNEL_T_MBXID;                                                        /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */
+#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H               _KERNEL_T_MBXID;                                                        /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */
+#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UH              _KERNEL_T_MBXID;                                                        /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */
+#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W               _KERNEL_T_MBXID;                                                        /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */
+#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UW              _KERNEL_T_MBXID;                                                        /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */
+#elif (_KERNEL_TMAX_MBXID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D               _KERNEL_T_MBXID;                                                        /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */
+#else
+typedef _KERNEL_T_FAST_UD              _KERNEL_T_MBXID;                                                        /**< %jp{メールボックスIDの型}%en{type of Mailbox-ID} */
+#endif
+
+
+
+/* ---------------------------------- */
+/*     Fixed-Size Memory Pool-ID      */
+/* ---------------------------------- */
+
+/* %jp{サイズに適した型とする} */
+#if (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B               _KERNEL_T_MPFID;                                                        /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */
+#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_UB) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UB              _KERNEL_T_MPFID;                                                        /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */
+#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H               _KERNEL_T_MPFID;                                                        /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */
+#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_UH) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UH              _KERNEL_T_MPFID;                                                        /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */
+#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W               _KERNEL_T_MPFID;                                                        /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */
+#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_UW) && !_KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_UW              _KERNEL_T_MPFID;                                                        /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */
+#elif (_KERNEL_TMAX_MPFID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D               _KERNEL_T_MPFID;                                                        /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */
+#else
+typedef _KERNEL_T_FAST_UD              _KERNEL_T_MPFID;                                                        /**< %jp{固定長メモリプールIDの型}%en{type of Fixed-Size Memory Pool-ID} */
+#endif
+
+
+
+#endif /* _KERNEL__core_objid_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/core/opttyp.h b/kernel/include/core/opttyp.h
new file mode 100755 (executable)
index 0000000..763b2ca
--- /dev/null
@@ -0,0 +1,250 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  opttyp.h
+ * @brief %jp{カーネル内部用最適化型定義ヘッダファイル}%en{optimized type for kernel internal}
+ *
+ * @version $Id: opttyp.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__core__opttyp_h__
+#define _KERNEL__core__opttyp_h__
+
+
+
+/* %jp{カーネルで標準に使う型選択} */
+#if (_KERNEL_OPT_RW_SIZE <= _KERNEL_OPT_SPEED)
+
+/* %jp{サイズ重視最適化の場合} */
+
+/* %jp{最適化オプションに適した少なくとも8bitを表せる最速の符号付き整数型} */
+typedef _KERNEL_T_LEAST_B              _KERNEL_T_OPT_B;
+#define _KERNEL_TMIN_OPT_B             _KERNEL_TMIN_LEAST_B
+#define _KERNEL_TMAX_OPT_B             _KERNEL_TMAX_LEAST_B
+#define _KERNEL_TBIT_OPT_B             _KERNEL_TBIT_LEAST_B
+
+/* %jp{最適化オプションに適した少なくとも8bitを表せる最速の符号無し整数型} */
+typedef _KERNEL_T_LEAST_UB             _KERNEL_T_OPT_UB;
+#define _KERNEL_TMIN_OPT_UB            _KERNEL_TMIN_LEAST_UB
+#define _KERNEL_TMAX_OPT_UB            _KERNEL_TMAX_LEAST_UB
+#define _KERNEL_TBIT_OPT_UB            _KERNEL_TBIT_LEAST_UB
+
+/* %jp{最適化オプションに適した少なくとも16bitを表せる最速の符号付き整数型} */
+typedef _KERNEL_T_LEAST_H              _KERNEL_T_OPT_H;
+#define _KERNEL_TMIN_OPT_H             _KERNEL_TMIN_LEAST_H
+#define _KERNEL_TMAX_OPT_H             _KERNEL_TMAX_LEAST_H
+#define _KERNEL_TBIT_OPT_H             _KERNEL_TBIT_LEAST_H
+
+/* %jp{最適化オプションに適した少なくとも16bitを表せる最速の符号無し整数型} */
+typedef _KERNEL_T_LEAST_UH             _KERNEL_T_OPT_UH;
+#define _KERNEL_TMIN_OPT_UH            _KERNEL_TMIN_LEAST_UH
+#define _KERNEL_TMAX_OPT_UH            _KERNEL_TMAX_LEAST_UH
+#define _KERNEL_TBIT_OPT_UH            _KERNEL_TBIT_LEAST_UH
+
+/* %jp{最適化オプションに適した少なくとも32bitを表せる最速の符号付き整数型} */
+typedef _KERNEL_T_LEAST_W              _KERNEL_T_OPT_W;
+#define _KERNEL_TMIN_OPT_W             _KERNEL_TMIN_LEAST_W
+#define _KERNEL_TMAX_OPT_W             _KERNEL_TMAX_LEAST_W
+#define _KERNEL_TBIT_OPT_W             _KERNEL_TBIT_LEAST_W
+
+/* %jp{最適化オプションに適した少なくとも32bitを表せる最速の符号無し整数型} */
+typedef _KERNEL_T_LEAST_UW             _KERNEL_T_OPT_UW;
+#define _KERNEL_TMIN_OPT_UW            _KERNEL_TMIN_LEAST_UW
+#define _KERNEL_TMAX_OPT_UW            _KERNEL_TMAX_LEAST_UW
+#define _KERNEL_TBIT_OPT_UW            _KERNEL_TBIT_LEAST_UW
+
+
+#if _KERNEL_ENABLE64
+
+/* %jp{最適化オプションに適した少なくとも64bitを表せる最速の符号付き整数型} */
+typedef _KERNEL_T_LEAST_D              _KERNEL_T_OPT_D;
+#define _KERNEL_TMIN_OPT_D             _KERNEL_TMIN_LEAST_D
+#define _KERNEL_TMAX_OPT_D             _KERNEL_TMAX_LEAST_D
+#define _KERNEL_TBIT_OPT_D             _KERNEL_TBIT_LEAST_D
+
+/* %jp{最適化オプションに適した少なくとも64bitを表せる最速の符号無し整数型} */
+typedef _KERNEL_T_LEAST_UD             _KERNEL_T_OPT_UD;
+#define _KERNEL_TMIN_OPT_UD            _KERNEL_TMIN_LEAST_UD
+#define _KERNEL_TMAX_OPT_UD            _KERNEL_TMAX_LEAST_UD
+#define _KERNEL_TBIT_OPT_UD            _KERNEL_TBIT_LEAST_UD
+
+#endif
+
+#else
+
+/* %jp{速度重視最適化の場合} */
+
+/* %jp{最適化オプションに適した少なくとも8bitを表せる最速の符号付き整数型} */
+typedef _KERNEL_T_FAST_B               _KERNEL_T_OPT_B;
+#define _KERNEL_TMIN_OPT_B             _KERNEL_TMIN_FAST_B
+#define _KERNEL_TMAX_OPT_B             _KERNEL_TMAX_FAST_B
+#define _KERNEL_TBIT_OPT_B             _KERNEL_TBIT_FAST_B
+
+/* %jp{最適化オプションに適した少なくとも8bitを表せる最速の符号無し整数型} */
+typedef _KERNEL_T_FAST_UB              _KERNEL_T_OPT_UB;
+#define _KERNEL_TMIN_OPT_UB            _KERNEL_TMIN_FAST_UB
+#define _KERNEL_TMAX_OPT_UB            _KERNEL_TMAX_FAST_UB
+#define _KERNEL_TBIT_OPT_UB            _KERNEL_TBIT_FAST_UB
+
+/* %jp{最適化オプションに適した少なくとも16bitを表せる最速の符号付き整数型} */
+typedef _KERNEL_T_FAST_H               _KERNEL_T_OPT_H;
+#define _KERNEL_TMIN_OPT_H             _KERNEL_TMIN_FAST_H
+#define _KERNEL_TMAX_OPT_H             _KERNEL_TMAX_FAST_H
+#define _KERNEL_TBIT_OPT_H             _KERNEL_TBIT_FAST_H
+
+/* %jp{最適化オプションに適した少なくとも16bitを表せる最速の符号無し整数型} */
+typedef _KERNEL_T_FAST_UH              _KERNEL_T_OPT_UH;
+#define _KERNEL_TMIN_OPT_UH            _KERNEL_TMIN_FAST_UH
+#define _KERNEL_TMAX_OPT_UH            _KERNEL_TMAX_FAST_UH
+#define _KERNEL_TBIT_OPT_UH            _KERNEL_TBIT_FAST_UH
+
+/* %jp{最適化オプションに適した少なくとも32bitを表せる最速の符号付き整数型} */
+typedef _KERNEL_T_FAST_W               _KERNEL_T_OPT_W;
+#define _KERNEL_TMIN_OPT_W             _KERNEL_TMIN_FAST_W
+#define _KERNEL_TMAX_OPT_W             _KERNEL_TMAX_FAST_W
+#define _KERNEL_TBIT_OPT_W             _KERNEL_TBIT_FAST_W
+
+/* %jp{最適化オプションに適した少なくとも32bitを表せる最速の符号無し整数型} */
+typedef _KERNEL_T_FAST_UW              _KERNEL_T_OPT_UW;
+#define _KERNEL_TMIN_OPT_UW            _KERNEL_TMIN_FAST_UW
+#define _KERNEL_TMAX_OPT_UW            _KERNEL_TMAX_FAST_UW
+#define _KERNEL_TBIT_OPT_UW            _KERNEL_TBIT_FAST_UW
+
+
+#if _KERNEL_ENABLE64
+
+/* %jp{最適化オプションに適した少なくとも64bitを表せる最速の符号付き整数型} */
+typedef _KERNEL_T_FAST_D               _KERNEL_T_OPT_D;
+#define _KERNEL_TMIN_OPT_D             _KERNEL_TMIN_FAST_D
+#define _KERNEL_TMAX_OPT_D             _KERNEL_TMAX_FAST_D
+#define _KERNEL_TBIT_OPT_D             _KERNEL_TBIT_FAST_D
+
+/* %jp{最適化オプションに適した少なくとも64bitを表せる最速の符号無し整数型} */
+typedef _KERNEL_T_FAST_UD              _KERNEL_T_OPT_UD;
+#define _KERNEL_TMIN_OPT_UD            _KERNEL_TMIN_FAST_UD
+#define _KERNEL_TMAX_OPT_UD            _KERNEL_TMAX_FAST_UD
+#define _KERNEL_TBIT_OPT_UD            _KERNEL_TBIT_FAST_UD
+
+#endif
+
+#endif
+
+
+
+#if defined(_KERNEL_PROCATR_SIGNED_INT) && _KERNEL_PROCATR_SIGNED_INT > 0
+/* %jp{符号付きが得意なプロセッサの場合} */
+
+typedef        _KERNEL_T_PROC_INT              _KERNEL_T_VINT;
+#define _KERNEL_TMIN_VINT              _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_VINT              _KERNEL_TMAX_PROC_INT
+#define _KERNEL_TBIT_VINT              _KERNEL_TBIT_PROC_INT
+
+typedef        _KERNEL_T_B                             _KERNEL_T_VB;
+#define _KERNEL_TMIN_VB                        _KERNEL_TMIN_B
+#define _KERNEL_TMAX_VB                        _KERNEL_TMAX_B
+#define _KERNEL_TBIT_VB                        _KERNEL_TBIT_B
+
+typedef        _KERNEL_T_OPT_B                 _KERNEL_T_OPT_VB;
+#define _KERNEL_TMIN_OPT_VB            _KERNEL_TMIN_OPT_B
+#define _KERNEL_TMAX_OPT_VB            _KERNEL_TMAX_OPT_B
+#define _KERNEL_TBIT_OPT_VB            _KERNEL_TBIT_OPT_B
+
+typedef        _KERNEL_T_H                             _KERNEL_T_VH;
+#define _KERNEL_TMIN_VH                        _KERNEL_TMIN_H
+#define _KERNEL_TMAX_VH                        _KERNEL_TMAX_H
+#define _KERNEL_TBIT_VH                        _KERNEL_TBIT_H
+
+typedef        _KERNEL_T_OPT_H                 _KERNEL_T_OPT_VH;
+#define _KERNEL_TMIN_OPT_VH            _KERNEL_TMIN_OPT_H
+#define _KERNEL_TMAX_OPT_VH            _KERNEL_TMAX_OPT_H
+#define _KERNEL_TBIT_OPT_VH            _KERNEL_TBIT_OPT_H
+
+typedef        _KERNEL_T_W                             _KERNEL_T_VW;
+#define _KERNEL_TMIN_VW                        _KERNEL_TMIN_W
+#define _KERNEL_TMAX_VW                        _KERNEL_TMAX_W
+#define _KERNEL_TBIT_VW                        _KERNEL_TBIT_W
+
+typedef        _KERNEL_T_OPT_W                 _KERNEL_T_OPT_VW;
+#define _KERNEL_TMIN_OPT_VW            _KERNEL_TMIN_OPT_W
+#define _KERNEL_TMAX_OPT_VW            _KERNEL_TMAX_OPT_W
+#define _KERNEL_TBIT_OPT_VW            _KERNEL_TBIT_OPT_W
+
+#if _KERNEL_ENABLE64
+
+typedef        _KERNEL_T_D                             _KERNEL_T_VD;
+#define _KERNEL_TMIN_VD                        _KERNEL_TMIN_D
+#define _KERNEL_TMAX_VD                        _KERNEL_TMAX_D
+#define _KERNEL_TBIT_VD                        _KERNEL_TBIT_D
+
+typedef        _KERNEL_T_OPT_D                 _KERNEL_T_OPT_VD;
+#define _KERNEL_TMIN_OPT_VD            _KERNEL_TMIN_OPT_D
+#define _KERNEL_TMAX_OPT_VD            _KERNEL_TMAX_OPT_D
+#define _KERNEL_TBIT_OPT_VD            _KERNEL_TBIT_OPT_D
+
+#endif
+
+#else
+/* %jp{符号無しが得意なプロセッサの場合} */
+
+typedef        _KERNEL_T_PROC_UINT             _KERNEL_T_VINT;
+#define _KERNEL_TMIN_VINT              _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_VINT              _KERNEL_TMAX_PROC_UINT
+#define _KERNEL_TBIT_VINT              _KERNEL_TBIT_PROC_UINT
+
+typedef        _KERNEL_T_UB                    _KERNEL_T_VB;
+#define _KERNEL_TMIN_VB                        _KERNEL_TMIN_UB
+#define _KERNEL_TMAX_VB                        _KERNEL_TMAX_UB
+#define _KERNEL_TBIT_VB                        _KERNEL_TBIT_UB
+
+typedef        _KERNEL_T_OPT_UB                _KERNEL_T_OPT_VB;
+#define _KERNEL_TMIN_OPT_VB            _KERNEL_TMIN_OPT_UB
+#define _KERNEL_TMAX_OPT_VB            _KERNEL_TMAX_OPT_UB
+#define _KERNEL_TBIT_OPT_VB            _KERNEL_TBIT_OPT_UB
+
+typedef        _KERNEL_T_UH                    _KERNEL_T_VH;
+#define _KERNEL_TMIN_VH                        _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_VH                        _KERNEL_TMAX_UH
+#define _KERNEL_TBIT_VH                        _KERNEL_TBIT_UH
+
+typedef        _KERNEL_T_OPT_UH                _KERNEL_T_OPT_VH;
+#define _KERNEL_TMIN_OPT_VH            _KERNEL_TMIN_OPT_UH
+#define _KERNEL_TMAX_OPT_VH            _KERNEL_TMAX_OPT_UH
+#define _KERNEL_TBIT_OPT_VH            _KERNEL_TBIT_OPT_UH
+
+typedef        _KERNEL_T_UW                    _KERNEL_T_VW;
+#define _KERNEL_TMIN_VW                        _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_VW                        _KERNEL_TMAX_UW
+#define _KERNEL_TBIT_VW                        _KERNEL_TBIT_UW
+
+typedef        _KERNEL_T_OPT_UW                _KERNEL_T_OPT_VW;
+#define _KERNEL_TMIN_OPT_VW            _KERNEL_TMIN_OPT_UW
+#define _KERNEL_TMAX_OPT_VW            _KERNEL_TMAX_OPT_UW
+#define _KERNEL_TBIT_OPT_VW            _KERNEL_TBIT_OPT_UW
+
+#if _KERNEL_ENABLE64
+
+typedef        _KERNEL_T_UD                    _KERNEL_T_VD;
+#define _KERNEL_TMIN_VD                        _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_VD                        _KERNEL_TMAX_UD
+#define _KERNEL_TBIT_VD                        _KERNEL_TBIT_UD
+
+typedef        _KERNEL_T_OPT_UD                _KERNEL_T_OPT_VD;
+#define _KERNEL_TMIN_OPT_VD            _KERNEL_TMIN_OPT_UD
+#define _KERNEL_TMAX_OPT_VD            _KERNEL_TMAX_OPT_UD
+#define _KERNEL_TBIT_OPT_VD            _KERNEL_TBIT_OPT_UD
+
+#endif
+
+
+#endif
+
+
+#endif /* _KERNEL__core__opttyp_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/core/que.h b/kernel/include/core/que.h
new file mode 100755 (executable)
index 0000000..da01a81
--- /dev/null
@@ -0,0 +1,169 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  knl_que.h
+ * @brief %en{queue object heder file}%jp{キューオブジェクトのヘッダファイル}
+ *
+ * @version $Id: que.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__core__knl_que_h__
+#define _KERNEL__core__knl_que_h__
+
+
+
+
+#if _KERNEL_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST
+
+/* ------------------------------------------ */
+/*              one-way list                  */
+/* ------------------------------------------ */
+
+
+/** %en{queue control block}%jp{キュー管理ブロック} */
+typedef struct _kernel_t_que
+{
+       _KERNEL_TCB_T_TSKHDL tail                       _KERNEL_TCB_TBITDEF_TSKHDL;             /**< %en{task of queue-tail} %jp{キュー末尾のタスク} */
+} _KERNEL_T_QUE;
+
+
+/** %en{object for queue connection} %jp{キュー接続用オブジェクト} */
+#define _KERNEL_QUEOBJ \
+       _KERNEL_TCB_T_TSKHDL queobj_next        _KERNEL_TCB_TBITDEF_TSKHDL;
+
+
+/* accessor */
+#define _KERNEL_QUE_SET_TAIL(pk_que, x)                do { (pk_que)->tail = x; } while (0)
+#define _KERNEL_QUE_GET_TAIL(pk_que)           ((pk_que)->tail)
+
+#define _KERNEL_TSK_SET_QUENEXT(tcb, x)                do { (tcb)->queobj_next = (x); } while (0)
+#define _KERNEL_TSK_GET_QUENEXT(tcb)           ((tcb)->queobj_next)
+
+
+/* function  declaration */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define          _kernel_cre_que(pk_que)       do { (pk_que)->tail = _KERNEL_TSKHDL_NULL; } while (0)          /**< %jp{キューの生成}%en{create queue} */
+#define          _kernel_del_que(pk_que)       do {} while (0)                                                                                         /**< %jp{キューの削除}%en{delete queue} */
+
+void             _kernel_add_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl, ATR atr);                             /**< %jp{タスクをキューに追加} */
+void             _kernel_adf_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl);                                              /**< %jp{タスクをFIFO順でキューに追加} */
+void             _kernel_adp_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl);                                              /**< %jp{タスクを優先度順でキューに追加}%en{in the order of the task's priority} */
+
+void             _kernel_rmv_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl);                                              /**< %jp{タスクをキューから取り除く} */
+_KERNEL_T_TSKHDL _kernel_rmh_que(_KERNEL_T_QUE *pk_que);
+void             _kernel_trm_que(_KERNEL_T_TSKHDL tskhdl);                                                                                             /**< %jp{タスクをキューから取り除く} */
+
+_KERNEL_T_TSKHDL _kernel_nxt_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl);                                              /**< %jp{キューの次のタスクの取り出し} */
+
+void             _kernel_rot_que(_KERNEL_T_QUE *pk_que);                                                                                               /**< %jp{レディーキューの回転} */
+#define          _kernel_ref_que(pk_que)               \
+                                       ((pk_que)->tail != _KERNEL_TSKHDL_NULL ? (_KERNEL_TSK_GET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB((pk_que)->tail))) : _KERNEL_TSKHDL_NULL)
+                                                                                                                                                                                                               /**< %jp{キューの先頭タスクの参照(マクロ関数)} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_CRE_QUE(pk_que)                                        _kernel_cre_que(pk_que)
+#define _KERNEL_DEL_QUE(pk_que)                                        _kernel_del_que(pk_que)
+#define _KERNEL_ADD_QUE(pk_que, tskhdl, atr)   _kernel_add_que(pk_que, tskhdl, atr)
+#define _KERNEL_ADF_QUE(pk_que, tskhdl)                        _kernel_adf_que(pk_que, tskhdl)
+#define _KERNEL_ADP_QUE(pk_que, tskhdl)                        _kernel_adp_que(pk_que, tskhdl)
+#define _KERNEL_RMV_QUE(pk_que, tskhdl)                        _kernel_rmv_que(pk_que, tskhdl)
+#define _KERNEL_RMH_QUE(pk_que)                                        _kernel_rmh_que(pk_que)
+#define _KERNEL_TRM_QUE(tskhdl)                                        _kernel_trm_que(tskhdl)
+#define _KERNEL_NXT_QUE(pk_que, tskhdl)                        _kernel_nxt_que(pk_que, tskhdl)
+#define _KERNEL_ROT_QUE(pk_que)                                        _kernel_rot_que(pk_que)
+#define _KERNEL_REF_QUE(pk_que)                                        _kernel_ref_que(pk_que)
+
+
+
+#elif _KERNEL_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST
+
+/* ------------------------------------------ */
+/*              two-way list                  */
+/* ------------------------------------------ */
+
+
+/** %en{queue control block} %jp{キュー管理ブロック} */
+typedef struct _kernel_t_que
+{
+       _KERNEL_TCB_T_TSKHDL head                               _KERNEL_TCB_TBITDEF_TSKHDL;                     /**< %en{task of queue-head} %jp{キュー先頭のタスク} */
+} _KERNEL_T_QUE;
+
+/** %en{object for queue connection(Two-way list)} %jp{キュー接続用オブジェクト(双方向リスト)} */
+#define _KERNEL_QUEOBJ                                                                 \
+       _KERNEL_TCB_T_TSKHDL queobj_next                _KERNEL_TCB_TBITDEF_TSKHDL;     \
+       _KERNEL_TCB_T_TSKHDL queobj_prev                _KERNEL_TCB_TBITDEF_TSKHDL;
+
+
+#define _KERNEL_QUE_SET_HEAD(pk_que, x)                do { (pk_que)->head = x; } while (0)
+#define _KERNEL_QUE_GET_HEAD(pk_que)           ((pk_que)->head)
+
+#define _KERNEL_TSK_SET_QUENEXT(tcb, x)                do { (tcb)->queobj_next = (x); } while (0)
+#define _KERNEL_TSK_GET_QUENEXT(tcb)           ((tcb)->queobj_next)
+#define _KERNEL_TSK_SET_QUEPREV(tcb, x)                do { (tcb)->queobj_prev = (x); } while (0)
+#define _KERNEL_TSK_GET_QUEPREV(tcb)           ((tcb)->queobj_prev)
+
+
+/* function  declaration */
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define          _kernel_cre_que(pk_que)               do { (pk_que)->head = _KERNEL_TSKHDL_NULL; } while (0)  /**< %en{create queue}%jp{キューの生成} */
+#define          _kernel_del_que(pk_que)               do {} while (0)                                                                                 /**< %en{delete queue}%jp{キューの削除} */
+
+void             _kernel_add_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl, ATR atr);                             /**< %jp{タスクをキューに追加} */
+void             _kernel_adf_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl);                                              /**< %jp{タスクをFIFO順でキューに追加} */
+void             _kernel_adp_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl);                                              /**< %jp{タスクを優先度順でキューに追加} (in the order of the task's priority) */
+
+void             _kernel_trm_que(_KERNEL_T_TSKHDL tskhdl);                                                                                             /**< %jp{タスクをキューから取り除く} */
+void             _kernel_rmv_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl);                                              /**< %jp{タスクをキューから取り除く} */
+_KERNEL_T_TSKHDL _kernel_rmh_que(_KERNEL_T_QUE *pk_que);                                                                                               /**< %jp{キュー先頭タスクの取り出し} */
+
+_KERNEL_T_TSKHDL _kernel_nxt_que(_KERNEL_T_QUE *pk_que, _KERNEL_T_TSKHDL tskhdl);                                              /**< %jp{キューの次のタスクの取り出し} */
+
+void             _kernel_rot_que(_KERNEL_T_QUE *pk_que);                                                                                               /**< %jp{レディーキューの回転} */
+#define          _kernel_ref_que(pk_que)       ((pk_que)->head)                                                                                        /**< %jp{キューの先頭タスクの参照(マクロ関数)} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#define _KERNEL_CRE_QUE(pk_que)                                        _kernel_cre_que(pk_que)
+#define _KERNEL_DEL_QUE(pk_que)                                        _kernel_del_que(pk_que)
+#define _KERNEL_ADD_QUE(pk_que, tskhdl, atr)   _kernel_add_que(pk_que, tskhdl, atr)
+#define _KERNEL_ADF_QUE(pk_que, tskhdl)                        _kernel_adf_que(pk_que, tskhdl)
+#define _KERNEL_ADP_QUE(pk_que, tskhdl)                        _kernel_adp_que(pk_que, tskhdl)
+#define _KERNEL_RMV_QUE(pk_que, tskhdl)                        _kernel_rmv_que(pk_que, tskhdl)
+#define _KERNEL_RMH_QUE(pk_que)                                        _kernel_rmh_que(pk_que)
+#define _KERNEL_TRM_QUE(tskhdl)                                        _kernel_trm_que(tskhdl)
+#define _KERNEL_NXT_QUE(pk_que, tskhdl)                        _kernel_nxt_que(pk_que, tskhdl)
+#define _KERNEL_ROT_QUE(pk_que)                                        _kernel_rot_que(pk_que)
+#define _KERNEL_REF_QUE(pk_que)                                        _kernel_ref_que(pk_que)
+
+
+#else  /* error */
+
+#error Illegal value : _KERNEL_QUE_ALGORITHM
+
+#endif
+
+
+
+#endif /* _KERNEL__core__knl_que_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/core/rdq.h b/kernel/include/core/rdq.h
new file mode 100755 (executable)
index 0000000..6cf5f12
--- /dev/null
@@ -0,0 +1,100 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  knl_que.h
+ * @brief %en{queue object heder file}%jp{キューオブジェクトのヘッダファイル}
+ *
+ * @version $Id: rdq.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef __HOS_V4a__knl_rdq_h__
+#define __HOS_V4a__knl_rdq_h__
+
+
+/* ------------------------------------------ */
+/*         constant value definition          */
+/* ------------------------------------------ */
+
+#define _KERNEL_RDQ_ALG_SINGLE_QUE                             1
+#define _KERNEL_RDQ_ALG_ARRAYED_QUE                            2
+#define _KERNEL_RDQ_ALG_BITMAP_ARRAYED_QUE             3
+
+
+
+#if _KERNEL_CFG_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_SINGLE_QUE
+
+/* ------------------------------------------ */
+/*             single queue                   */
+/* ------------------------------------------ */
+
+
+/** %en{ready-queue control block}%jp{レディーキュー管理ブロック} */
+typedef struct _kernel_t_rdq
+{
+       _KERNEL_T_QUE que;
+} _KERNEL_T_RDQ;
+
+
+
+#define _KERNEL_CRE_RDQ()                      _KERNEL_CRE_QUE(&_KERNEL_SYS_GET_RDQ()->que)                                    /**< %en{create ready-queue}%jp{レディーキューの生成} */
+#define _KERNEL_DEL_RDQ()                      _KERNEL_DEL_QUE(&_KERNEL_SYS_GET_RDQ()->que)                                    /**< %en{delete ready-queue}%jp{レディーキューの削除} */
+
+#define _KERNEL_ADD_RDQ(tskhdl)                _KERNEL_ADP_QUE(&_KERNEL_SYS_GET_RDQ()->que, (tskhdl))                  /**< %jp{タスクをレディーキューに追加} */
+#define _KERNEL_RMV_RDQ(tskhdl)                _KERNEL_RMV_QUE(&_KERNEL_SYS_GET_RDQ()->que, (tskhdl))                  /**< %jp{タスクをレディーから取り外し} */
+
+#define _KERNEL_RMH_RDQ()                      _KERNEL_RMH_QUE(&_KERNEL_SYS_GET_RDQ()->que)                                    /**< %jp{キューの先頭タスクの取り外し} */
+#define _KERNEL_REF_RDQ()                      _KERNEL_REF_QUE(&_KERNEL_SYS_GET_RDQ()->que)                                    /**< %jp{キューの先頭タスクの参照} */
+
+#define _KERNEL_ROT_RDQ(tskpri)                _KERNEL_RTP_QUE(&_KERNEL_SYS_GET_RDQ()->que, (tskpri))                  /**< %jp{レディーキューの回転} */
+
+
+
+#elif _KERNEL_CFG_RDQ_ALGORITHM == _KERNEL_RDQ_ALG_ARRAYED_QUE
+
+/* ------------------------------------------ */
+/*               arrayed que                  */
+/* ------------------------------------------ */
+
+/** %en{ready-queue control block}%jp{レディーキュー管理ブロック} */
+typedef struct _kernel_t_rdq
+{
+       T__KERNEL_QUE que[_KERNEL_TMAX_TSKPRI];
+} _KERNEL_T_RDQ;
+
+
+#define _kernel_cre_rdq()              _kernel_cre_que(&_KERNEL_SYS_GET_RDQ()->que)                                            /**< %en{create ready-queue}%jp{レディーキューの生成} */
+#define _kernel_del_rdq()              _kernel_del_que(&_KERNEL_SYS_GET_RDQ()->que)                                            /**< %en{delete ready-queue}%jp{レディーキューの削除} */
+
+#define _kernel_add_rdq(tskhdl)        _kernel_adp_que(&_KERNEL_SYS_GET_RDQ()->que[_KERNEL_TSK_GET_TSKPRI(tskhdl) - 1], tskhdl)                                /**< %jp{タスクをキューに追加} */
+#define _kernel_rmv_rdq(tskhdl)        _kernel_rmv_que(&_KERNEL_SYS_GET_RDQ()->que[_KERNEL_TSK_GET_TSKPRI(tskhdl) - 1], tskhdl)                                /**< */
+
+#define _kernel_rmh_rdq()              _kernel_rmh_que(&_KERNEL_SYS_GET_RDQ()->que)
+#define _kernel_ref_rdq()              _kernel_ref_que(&_KERNEL_SYS_GET_RDQ()->que)                                            /**< %jp{キューの先頭タスクの参照(マクロ関数)} */
+
+void    _kernel_rot_rdq(PRI tskpri);                                                                                                                           /**< %jp{レディーキューの回転} */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#else  /* error */
+
+#error Illegal value : _KERNEL_CFG_QUE_ALGORITHM
+
+#endif
+
+
+
+#endif /* __HOS_V4a__knl_que_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/core/sys.h b/kernel/include/core/sys.h
new file mode 100755 (executable)
index 0000000..4863469
--- /dev/null
@@ -0,0 +1,119 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  knl_sys.h
+ * @brief %en{system heder file}%jp{システム制御のヘッダファイル}
+ *
+ * @version $Id: sys.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef __HOS_V4a__knl_sys_h__
+#define __HOS_V4a__knl_sys_h__
+
+
+#include "core/hep.h"
+
+
+/* %jp{システムの状態} */
+#define _KERNEL_TSS_TSK                        0x00            /**< %jp{タスク部実行中} */
+#define _KERNEL_TSS_DINT               0x01            /**< %jp{割り込み禁止(loc_cpu 有効)} */
+#define _KERNEL_TSS_DDSP               0x02            /**< %jp{ディスパッチ禁止 (dis_dsp 有効)} */
+#define _KERNEL_TSS_INDP               0x04            /**< %jp{タスク独立部実行中} */
+#define _KERNEL_TSS_DDLY               0x08            /**< %jp{ディスパッチ遅延中} */
+
+
+/** %jp{プロセッサ制御情報}%en{Processor control block} */
+typedef struct _kernel_t_proccb
+{
+       STAT                            stat;                           /**< %jp{システムのコンテキスト状態}%en{system state} */
+       _KERNEL_T_TSKHDL        tskhdl_run;                     /**< %jp{実行中タスク} */
+       _KERNEL_T_CTXCB         sysctxcb;                       /**< %jp{システムコンテキスト(アイドル実行等)のコンテキスト} */
+       SIZE                            sysstksz;                       /**< %jp{システムコンテキストのスタックサイズ} */
+       VP                                      sysstk;                         /**< %jp{システムコンテキストのスタック} */
+       SIZE                            intstksz;                       /**< %jp{割り込みコンテキストのスタックサイズ} */
+       VP                                      intstk;                         /**< %jp{割り込みコンテキストのスタック} */
+} _KERNEL_T_PROCCB;
+
+
+/** %jp{システム制御情報}%en{system control block} */
+typedef struct _kernel_t_syscb
+{
+       _KERNEL_T_RDQ           rdq;                            /**< %jp{レディーキュー}%en{ready-queue} */
+       _KERNEL_T_TOQ           toq;                            /**< %jp{タイムアウトキュー}%en{timeout-queue} */
+       _KERNEL_T_HEPCB         memhep;                         /**< %jp{カーネルメモリヒープ}%en{kernel heap-memory control block} */
+       _KERNEL_T_PROCCB        proccb[1];                      /**< %jp{プロセッサ制御情報}%en{processor control block} */
+} _KERNEL_T_SYSCB;
+
+
+/** %jp{システム制御情報}%en{system control block} */
+extern _KERNEL_T_SYSCB _kernel_syscb;
+
+
+
+#define _KERNEL_SYS_INI_SYS()                          do {} while (0)
+
+#define _KERNEL_SYS_GET_RDQ()                          (&_kernel_syscb.rdq)
+#define _KERNEL_SYS_GET_TOQ()                          (&_kernel_syscb.toq)
+
+#define _KERNEL_SYS_INI_MEM(p_base, size)      _kernel_cre_hep(&_kernel_syscb.memhep, (p_base), (size))
+#define _KERNEL_SYS_ALC_MEM(size)                      _kernel_alc_hep(&_kernel_syscb.memhep, (size))
+#define _KERNEL_SYS_FRE_MEM(ptr)                       _kernel_fre_hep(&_kernel_syscb.memhep, (ptr))
+#define _KERNEL_SYS_ALG_MEM(size)                      _kernel_alg_hep(size)
+
+#define _KERNEL_SYS_GET_STST()                         (_kernel_syscb.proccb[0].stat)
+#define _KERNEL_SYS_SET_STST(x)                                do { _kernel_syscb.proccb[0].stat = (x); } while (0)
+#define _KERNEL_SYS_GET_RUNTSK()                       (_kernel_syscb.proccb[0].tskhdl_run)
+#define _KERNEL_SYS_SET_RUNTSK(x)                      do { _kernel_syscb.proccb[0].tskhdl_run = (x); } while (0)
+#define _KERNEL_SYS_GET_SYSCTXCB()                     (&_kernel_syscb.proccb[0].sysctxcb)
+#define _KERNEL_SYS_GET_SYSSTKSZ()                     (_kernel_syscb.proccb[0].sysstksz)
+#define _KERNEL_SYS_GET_SYSSTK()                       (_kernel_syscb.proccb[0].sysstk)
+#define _KERNEL_SYS_GET_SYSISP()                       ((VP)((UB *)_KERNEL_SYS_GET_SYSSTK() + _KERNEL_SYS_GET_SYSSTKSZ()))
+
+
+#define _KERNEL_SYS_SET_CTX()                          do { _kernel_syscb.proccb[0].stat |= _KERNEL_TSS_INDP; } while (0)
+#define _KERNEL_SYS_CLR_CTX()                          do { _kernel_syscb.proccb[0].stat &= ~_KERNEL_TSS_INDP; } while (0)
+#define _KERNEL_SYS_SNS_CTX()                          ((_kernel_syscb.proccb[0].stat & _KERNEL_TSS_INDP) ? TRUE : FALSE)
+
+#define _KERNEL_SYS_SET_LOC()                          do { _kernel_syscb.proccb[0].stat |= _KERNEL_TSS_DINT; } while (0)
+#define _KERNEL_SYS_CLR_LOC()                          do { _kernel_syscb.proccb[0].stat &= ~_KERNEL_TSS_DINT; } while (0)
+#define _KERNEL_SYS_SNS_LOC()                          ((_KERNEL_SYS_GET_STST() & _KERNEL_TSS_DINT) ? TRUE : FALSE)
+
+#define _KERNEL_SYS_SET_DSP()                          do { _kernel_syscb.proccb[0].stat |= _KERNEL_TSS_DDSP; } while (0)
+#define _KERNEL_SYS_CLR_DSP()                          do { _kernel_syscb.proccb[0].stat &= ~_KERNEL_TSS_DDSP; } while (0)
+#define _KERNEL_SYS_SNS_DSP()                          ((_kernel_syscb.proccb[0].stat & _KERNEL_TSS_DDSP) ? TRUE : FALSE)
+
+#define _KERNEL_SYS_SET_DLY()                          do { _kernel_syscb.proccb[0].stat |= _KERNEL_TSS_DDLY; } while (0)
+#define _KERNEL_SYS_CLR_DLY()                          do { _kernel_syscb.proccb[0].stat &= ~_KERNEL_TSS_DDLY; } while (0)
+#define _KERNEL_SYS_SNS_DLY()                          ((_kernel_syscb.proccb[0].stat & _KERNEL_TSS_DDLY) ? TRUE : FALSE)
+
+#define _KERNEL_SYS_SNS_DPN()                          ((_kernel_syscb.proccb[0].stat != _KERNEL_TSS_TSK) ? TRUE : FALSE)
+
+
+#define _KERNEL_ENTER_SVC()                                    do { _kernel_dis_int(); } while (0)
+#define _KERNEL_LEAVE_SVC()                                    do { if (!(_KERNEL_SYS_GET_STST() & _KERNEL_TSS_DINT)){ _kernel_ena_int(); } } while (0)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void _kernel_cfg_ini(void);
+void _kernel_cfg_sta(void);
+void _kernel_idl_lop(void);                            /**< %jp{アイドルループ}%en{idle loop} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __HOS_V4__knl_sys_h__ */
+
+
+
+
+/* end of file */
diff --git a/kernel/include/core/tmq.h b/kernel/include/core/tmq.h
new file mode 100755 (executable)
index 0000000..5b96705
--- /dev/null
@@ -0,0 +1,63 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  toq.h
+ * @brief %jp{タイムアウトキューのヘッダファイル}%en{time-out queue heder file}
+ *
+ * @version $Id: tmq.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__core__tmq_h__
+#define _KERNEL__core__tmq_h__
+
+
+/** %jp{タイムアウトキューオブジェクト} */
+typedef _KERNEL_T_TSKHDL                               _KERNEL_T_TOQ;
+
+
+#define _KERNEL_TOQ_GET_HED_TSK()              (*_KERNEL_SYS_GET_TOQ())
+#define _KERNEL_TOQ_SET_HED_TSK(x)             do { (*_KERNEL_SYS_GET_TOQ()) = x; } while (0) 
+
+
+/** %jp{タイマオブジェクト構造体} */
+typedef struct _kernel_t_timobj
+{
+       struct _kernel_t_timobj *next;          /**< %jp{次のオブジェクト} */
+       struct _kernel_t_timobj *prev;          /**< %jp{前のオブジェクト} */
+       RELTIM                  lefttim;        /**< %jp{残時間} */
+       FP                                              timhdr;         /**< %jp{タイマハンドラ} */
+} _KERNEL_T_TIMOBJ;
+
+
+/** %jp{タイマキュー} */
+typedef struct _kernel_t_tmq
+{
+       _KERNEL_T_TIMOBJ                *head;
+       _KERNEL_T_TIMOBJ                *next;
+} _KERNEL_T_TMQ;
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void _kernel_add_tmq(_KERNEL_T_TMQ *pk_tmq, _KERNEL_T_TIMOBJ *pk_timobj);
+void _kernel_rmv_tmq(_KERNEL_T_TMQ *pk_tmq, _KERNEL_T_TIMOBJ *pk_timobj);
+void _kernel_tic_tmq(_KERNEL_T_TMQ *pk_tmq, RELTIM tictim);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* _KERNEL__core__tmq_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/core/toq.h b/kernel/include/core/toq.h
new file mode 100755 (executable)
index 0000000..dea3cd4
--- /dev/null
@@ -0,0 +1,65 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  toq.h
+ * @brief %jp{タイムアウトキューのヘッダファイル}%en{time-out queue heder file}
+ *
+ * @version $Id: toq.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef __HOS_V4a__core__toq_h__
+#define __HOS_V4a__core__toq_h__
+
+
+/** %jp{タイムアウトキューオブジェクト} */
+typedef _KERNEL_T_TSKHDL                                               _KERNEL_T_TOQ;
+
+
+#define _KERNEL_TOQ_GET_HED_TSK()                              (*_KERNEL_SYS_GET_TOQ())
+#define _KERNEL_TOQ_SET_HED_TSK(x)                             do { (*_KERNEL_SYS_GET_TOQ()) = x; } while (0) 
+
+
+/** %jp{タイムアウトキュー接続用オブジェクト} */
+#define _KERNEL_TOQOBJ                                                                                                                 \
+       _KERNEL_TCB_T_TSKHDL     toqobj_next            _KERNEL_TCB_TBITDEF_TSKHDL;             \
+       _KERNEL_TCB_T_TSKHDL     toqobj_prev            _KERNEL_TCB_TBITDEF_TSKHDL;             \
+       _KERNEL_TCB_T_RELTIM     toqobj_diftim          _KERNEL_TCB_TBITDEF_RELTIM;
+
+
+#define _KERNEL_TSK_SET_TOQNEXT(tcb, x)                        do { (tcb)->toqobj_next = (x); } while (0)
+#define _KERNEL_TSK_GET_TOQNEXT(tcb)                   ((tcb)->toqobj_next)
+#define _KERNEL_TSK_SET_TOQPREV(tcb, x)                        do { (tcb)->toqobj_prev = (x); } while (0)
+#define _KERNEL_TSK_GET_TOQPREV(tcb)                   ((tcb)->toqobj_prev)
+#define _KERNEL_TSK_SET_TOQDIFTIM(tcb, x)              do { (tcb)->toqobj_diftim = (x); } while (0)
+#define _KERNEL_TSK_GET_TOQDIFTIM(tcbl)                        ((tcb)->toqobj_diftim)
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void _kernel_add_toq(_KERNEL_T_TSKHDL tskhdl, RELTIM tmout);
+void _kernel_rmv_toq(_KERNEL_T_TSKHDL tskhdl);
+void _kernel_sig_toq(RELTIM tictim);
+
+#ifdef __cplusplus
+}
+#endif
+
+#define _KERNEL_ADD_TOQ                _kernel_add_toq                                 
+#define _KERNEL_RMV_TOQ                _kernel_rmv_toq                                 
+#define _KERNEL_SIG_TOQ                _kernel_sig_toq                                 
+
+
+
+#endif /* __HOS_V4a__core__toq_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/itron.h b/kernel/include/itron.h
new file mode 100755 (executable)
index 0000000..18425c0
--- /dev/null
@@ -0,0 +1,996 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  itron.h
+ * @brief %en{uITRON4.0 standard header file}%jp{μITRON4.0用の標準ヘッダファイル}
+ *
+ * @version $Id: itron.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__itron_h__
+#define _KERNEL__itron_h__
+
+
+
+/* ------------------------------------ */
+/*             Constants                */
+/* ------------------------------------ */
+
+/* %jp{一般}%en{General Constants} */
+#ifndef NULL
+#ifdef __cplusplus
+#define NULL                                   0                                               /**< %jp{無効ポインタ}%en{Invalid pointer} */
+#else
+#define NULL                                   ((void *)0)                             /**< %jp{無効ポインタ}%en{Invalid pointer} */
+#endif
+#endif
+
+
+#define TRUE                                   1                                               /**< %jp{真}%en{True} */
+#define FALSE                                  0                                               /**< %jp{偽}%en{Flase} */
+#define E_OK                                   0                                               /**< %jp{正常終了}%en{Normal completion} */
+
+
+/* %jp{オブジェクト属性}%en{Object Attributes} */
+#define TA_NULL                                        0                                               /**< %jp{オブジェクト属性を指定しない}%en{Object attribute unspecified} */
+#define TA_HLNG                                        0x00                                    /**< %jp{高級言語用のインターフェースで処理単位を起動}%en{Start a processing unit through a high-level language interface} */
+#define TA_ASM                                 0x01                                    /**< %jp{アセンブリ言語用のインターフェースで処理単位を起動}%en{Start a processing unit through an assembly language interface} */
+
+#define TA_TFIFO                               0x00                                    /**< %jp{タスクの待ち行列をFIFO順に}%en{Task wait queue is in FIFO order} */
+#define TA_TPRI                                        0x01                                    /**< %jp{タスクの待ち行列をタスクの優先度順に}%en{Task wait queue is in task priority order} */
+
+#define TA_MFIFO                               0x00                                    /**< %jp{メッセージの待ち行列をFIFO順に%en{Message queue is in FIFO order} */
+#define TA_MPRI                                        0x02                                    /**< %jp{メッセージの待ち行列をメッセージの優先度順に%en{Message queue is in message priority order} */
+
+#define TA_ACT                                 0x02                                    /**< %jp{タスクを起動された状態で生成}%en{Task is activated after the creation} */
+#define TA_RSTR                                        0x04                                    /**< %jp{制約タスク}%en{Restricted task} */
+
+#define TA_WSGL                                        0x00                                    /**< %jp{イベントフラグを複数のタスクが待つことを許さない}%en{Only one task is allowed to be in the waiting state for the eventflag} */
+#define TA_WMUL                                        0x02                                    /**< %jp{イベントフラグを複数のタスクが待つことを許す}%en{Multiple tasks are allowed to be in the waiting state for the eventflag} */
+#define TA_CLR                                 0x04                                    /* 待ち解除時にイベントフラグをクリア}%en{Eventflag's bit pattern is cleared when a task is released from the waiting state for that eventflag} */
+
+#define TA_INHERIT                             0x02                                    /**< %jp{ミューテックスが優先度継承プロトコルをサポート}%en{Mutex uses the priority inheritance protocol} */
+#define TA_CEILING                             0x03                                    /**< %jp{ミューテックスが優先度上限プロトコルをサポート}%en{Mutex uses the priority ceiling protocol} */
+
+#define TA_STA                                 0x02                                    /**< %jp{周期ハンドラを動作している状態で生成}%en{Cyclic handler is in an operational state after the creation} */
+#define TA_PHS                                 0x04                                    /**< %jp{周期ハンドラの位相を保存}%en{Cyclic handler is activated preserving the activation phase} */
+
+
+/* %jp{タイムアウト指定} */
+#define TMO_POL                                        0                                               /**< %jp{ポーリング}%en{Polling} */
+#define TMO_FEVR                               (-1)                                    /**< %jp{永久待ち}%en{Waiting forever} */
+#define TMO_NBLK                               (-2)                                    /**< %jp{ノンブロッキング}%en{Non-blocking} */
+
+
+/* %jp{サービスコールの動作モード}%en{Service Call Operational Mode} */
+#define TWF_ANDW                               0x00                                    /**< %jp{イベントフラグのAND待ち}%en{AND waiting condition for eventflag} */
+#define TWF_ORW                                        0x01                                    /**< %jp{イベントフラグのOR待ち}%en{OR waiting condition for eventflag} */
+
+
+/* %jp{オブジェクトの状態}%en{Object State} */
+#define TTS_RUN                                        0x01                                    /**< %jp{実行状態}%en{RUNNING state} */
+#define TTS_RDY                                        0x02                                    /**< %jp{実行可能状態}%en{READY state} */
+#define TTS_WAI                                        0x04                                    /**< %jp{待ち状態}%en{WAITING state} */
+#define TTS_SUS                                        0x08                                    /**< %jp{強制待ち状態}%en{SUSPENDED state} */
+#define TTS_WAS                                        0x0c                                    /**< %jp{二重待ち状態}%en{WAITING-SUSPENDED state} */
+#define TTS_DMT                                        0x10                                    /**< %jp{休止状態}%en{DORMANT state} */
+
+#define TTW_SLP                                        0x0001                                  /**< %jp{起床待ち状態}%en{} */
+#define TTW_DLY                                        0x0002                                  /**< %jp{時間経過待ち状態}%en{} */
+#define TTW_SEM                                        0x0004                                  /**< %jp{セマフォ資源の獲得待ち状態}%en{} */
+#define TTW_FLG                                        0x0008                                  /**< %jp{イベントフラグ待ち状態}%en{} */
+#define TTW_SDTQ                               0x0010                                  /**< %jp{データキューへの送信待ち状態}%en{} */
+#define TTW_RDTQ                               0x0020                                  /**< %jp{データキューからの受信待ち状態}%en{} */
+#define TTW_MBX                                        0x0040                                  /**< %jp{メールボックスからの受信待ち状態}%en{} */
+#define TTW_MTX                                        0x0080                                  /**< %jp{ミューテックスのロック待ち状態}%en{} */
+#define TTW_SMBF                               0x0100                                  /**< %jp{メッセージバッファへの送信待ち状態}%en{} */
+#define TTW_RMBF                               0x0200                                  /**< %jp{メッセージバッファからの受信待ち状態}%en{} */
+#define TTW_CAL                                        0x0400                                  /**< %jp{ランデブの呼び出し待ち状態}%en{} */
+#define TTW_ACP                                        0x0800                                  /**< %jp{ランデブの受付待ち状態}%en{} */
+#define TTW_RDV                                        0x1000                                  /**< %jp{ランデブの終了待ち状態}%en{} */
+#define TTW_MPF                                        0x2000                                  /**< %jp{固定長メモリブロックの獲得待ち状態}%en{} */
+#define TTW_MPL                                        0x4000                                  /**< %jp{可変長メモリブロックの獲得待ち状態}%en{} */
+
+#define TTEX_ENA                               0x00                                    /**< %jp{タスクの例外処理許可状態}%en{} */
+#define TTEX_DIS                               0x01                                    /**< %jp{タスク例外処理禁止状態}%en{} */
+
+#define TCYC_STP                               0x00                                    /**< %jp{周期ハンドラが動作していない}%en{} */
+#define TCYC_STA                               0x01                                    /**< %jp{周期ハンドラが動作している}%en{} */
+
+#define TALM_STP                               0x00                                    /**< %jp{アラームハンドラが動作していない}%en{} */
+#define TALM_STA                               0x00                                    /**< %jp{アラームハンドラが動作している */
+
+#define TOVR_STP                               0x00                                    /**< %jp{上限プロセッサ時間が設定されていない}%en{} */
+#define TOVR_STA                               0x01                                    /**< %jp{上限プロセッサ時間が設定されている}%en{} */
+
+/* %jp{その他の定数}%en{Other constants} */
+#define TSK_SELF                               0                                               /**< %jp{自タスク指定}%en{} */
+#define TSK_NONE                               0                                               /**< %jp{該当するタスクが無い}%en{} */
+
+#define TPRI_SELF                              0                                               /**< %jp{自タスクのベース優先度の指定}%en{} */
+#define TPRI_INI                               0                                               /**< %jp{タスクの起動時優先度の指定}%en{} */
+
+
+/* %jp{エラーコード}%en{Error code} */
+#define E_SYS                                  (-5)                                    /**< %jp{システムエラー}%en{System error} */
+#define E_NOSPT                                        (-9)                                    /**< %jp{未サポート機能}%en{Unsupported function} */
+#define E_RSFN                                 (-10)                                   /**< %jp{予約機能コード}%en{Reserved function code} */
+#define E_RSATR                                        (-11)                                   /**< %jp{予約属性}%en{Reserved attribute} */
+#define E_PAR                                  (-17)                                   /**< %jp{パラメータエラー}%en{Parameter error} */
+#define E_ID                                   (-18)                                   /**< %jp{不正ID番号}%en{Invalid ID number} */
+#define E_CTX                                  (-25)                                   /**< %jp{コンテキストエラー}%en{Context error} */
+#define E_MACV                                 (-26)                                   /**< %jp{メモリアクセス違反}%en{} */
+#define E_OACV                                 (-27)                                   /**< %jp{オブジェクトアクセス違反}%en{} */
+#define E_ILUSE                                        (-28)                                   /**< %jp{サービスコール不正使用}%en{} */
+#define E_NOMEM                                        (-33)                                   /**< %jp{メモリ不足}%en{} */
+#define E_NOID                                 (-34)                                   /**< %jp{ID番号不足}%en{} */
+#define E_OBJ                                  (-41)                                   /**< %jp{オブジェクト状態エラー}%en{} */
+#define E_NOEXS                                        (-42)                                   /**< %jp{オブジェクト未生成}%en{} */
+#define E_QOVR                                 (-43)                                   /**< %jp{キューイングオーバーフロー}%en{} */
+#define E_RLWAI                                        (-49)                                   /**< %jp{待ち状態の強制解除}%en{} */
+#define E_TMOUT                                        (-50)                                   /**< %jp{ポーリング失敗またはタイムアウト}%en{} */
+#define E_DLT                                  (-51)                                   /**< %jp{待ちオブジェクトの削除}%en{} */
+#define E_CLS                                  (-52)                                   /**< %jp{待ちオブジェクトの状態変化}%en{} */
+#define E_WBLK                                 (-57)                                   /**< %jp{ノンブロッキング受付け}%en{} */
+#define E_BOVR                                 (-58)                                   /**< %jp{バッファオーバーフロー}%en{} */
+
+
+
+#define TMIN_TPRI                              1
+#define TMIN_MPRI                              1
+
+
+
+
+/* ------------------------------------ */
+/*     Include configulation file       */
+/* ------------------------------------ */
+
+#include "core/basetyp.h"
+#include "config/cfgsys.h"
+#include "parser/parssys.h"
+
+
+
+
+/* ------------------------------------ */
+/*             Data type                */
+/* ------------------------------------ */
+
+/* %jp{プリミティブ型を定義する} */
+typedef _KERNEL_T_B                            B;                                              /**< %jp{符号付き 8ビット整数}%en{Signed  8-bit integer} */
+typedef _KERNEL_T_H                            H;                                              /**< %jp{符号付き16ビット整数}%en{Signed 16-bit integer} */
+typedef _KERNEL_T_W                            W;                                              /**< %jp{符号付き32ビット整数}%en{Signed 32-bit integer} */
+#if _KERNEL_ENABLE64
+typedef _KERNEL_T_D                            D;                                              /**< %jp{符号付き64ビット整数}%en{Signed 64-bit integer} */
+#endif
+
+typedef _KERNEL_T_UB                   UB;                                             /**< %jp{符号無し 8ビット整数}%en{Unsigned  8-bit integer} */
+typedef _KERNEL_T_UH                   UH;                                             /**< %jp{符号無し16ビット整数}%en{Unsigned 16-bit integer} */
+typedef _KERNEL_T_UW                   UW;                                             /**< %jp{符号無し32ビット整数}%en{Unsigned 32-bit integer} */
+#if _KERNEL_ENABLE64
+typedef _KERNEL_T_UD                   UD;                                             /**< %jp{符号付き64ビット整数}%en{Signed 64-bit integer} */
+#endif
+
+typedef B                                              VB;                                             /**< %jp{データタイプが定まらない 8ビットの値}%en{ 8-bit value with unknown data type} */
+typedef H                                              VH;                                             /**< %jp{データタイプが定まらない16ビットの値}%en{16-bit value with unknown data type} */
+typedef W                                              VW;                                             /**< %jp{データタイプが定まらない32ビットの値}%en{32-bit value with unknown data type} */
+#if _KERNEL_ENABLE64
+typedef D                                              VD;                                             /**< %jp{データタイプが定まらない64ビットの値}%en{64-bit value with unknown data type} */
+#endif
+
+
+
+/* %jp{INT型を定義する} */
+#if _KERNEL_TBIT_INT == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             INT;                                    /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */
+#define _KERNEL_TMIN_INT               _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_INT               _KERNEL_TMAX_PROC_INT
+
+#elif _KERNEL_TBIT_INT == 8                    /* 8-bit */
+
+typedef _KERNEL_T_B                            INT;                                    /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */
+#define _KERNEL_TMIN_INT               _KERNEL_TMIN_B
+#define _KERNEL_TMAX_INT               _KERNEL_TMAX_B
+
+#elif _KERNEL_TBIT_INT == 16                   /* 16-bit */
+
+typedef _KERNEL_T_H                            INT;                                    /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */
+#define _KERNEL_TMIN_INT               _KERNEL_TMIN_H
+#define _KERNEL_TMAX_INT               _KERNEL_TMAX_H
+
+#elif _KERNEL_TBIT_INT == 32                   /* 32-bit */
+
+typedef _KERNEL_T_W                            INT;                                    /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */
+#define _KERNEL_TMIN_INT               _KERNEL_TMIN_W
+#define _KERNEL_TMAX_INT               _KERNEL_TMAX_W
+
+#elif _KERNEL_TBIT_INT == 64                   /* 64-bit */
+
+typedef _KERNEL_T_D                            INT;                                    /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Signed integer for the processor} */
+#define _KERNEL_TMIN_INT               _KERNEL_TMIN_D
+#define _KERNEL_TMAX_INT               _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_INT
+
+#endif
+
+
+
+/* %jp{UINT型を定義する} */
+#if _KERNEL_TBIT_UINT == _KERNEL_TBIT_PROC_UINT
+
+typedef _KERNEL_T_PROC_UINT            UINT;                                   /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor}  */
+#define _KERNEL_TMAX_UINT              _KERNEL_TMAX_PROC_UINT
+#define _KERNEL_TMAX_UINT              _KERNEL_TMAX_PROC_UINT
+
+#elif _KERNEL_TBIT_UINT == 8                   /* 8-bit */
+
+typedef _KERNEL_T_UB                   UINT;                                   /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor}  */
+#define _KERNEL_TMAX_UINT              _KERNEL_TMAX_UB
+#define _KERNEL_TMAX_UINT              _KERNEL_TMAX_UB
+
+#elif _KERNEL_TBIT_UINT == 16          /* 16-bit */
+
+typedef _KERNEL_T_UH                   UINT;                                   /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor} */
+#define _KERNEL_TMIN_UINT              _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_UINT              _KERNEL_TMAX_UH
+
+#elif _KERNEL_TBIT_UINT == 32          /* 32-bit */
+
+typedef _KERNEL_T_UW                   UINT;                                   /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor} */
+#define _KERNEL_TMIN_UINT              _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_UINT              _KERNEL_TMAX_UW
+
+#elif _KERNEL_TBIT_UINT == 64          /* 64-bit */
+
+typedef _KERNEL_T_UD                   UINT;                                   /**< %jp{プロセッサに自然なサイズの符号付き整数}%en{Unsigned integer for the processor} */
+#define _KERNEL_TMIN_UINT              _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_UINT              _KERNEL_TMAX_UD
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_UINT
+
+#endif
+
+
+
+/* %jp{ポインタ型} */
+typedef _KERNEL_T_VP                   VP;                                             /**< %jp{データタイプが定まらないものへのポインタ}%en{Pointer to an unknown data type} */
+
+
+
+/* %jp{関数ポインタ型} */
+typedef void                                   (*FP)();                                /**< %jp{プログラムの起動番地(ポインタ)}%en{Processing unit start address(pointer to a function)} */
+#define _KERNEL_TBIT_FP                        _KERNEL_TBIT_VP
+
+
+
+/* %jp{ポインタを格納できる整数型} */
+#if _KERNEL_VP_INT_PTR         /* %jp{VP_INTをポインタ型にするなら} */
+
+typedef _KERNEL_T_VP                   VP_INT;                                 /**< %jp{データタイプが定まらないものへのポインタまたはプロセッサに自然なサイズの符号付き整数}%en{Pointer to an unknown data type, or a signed integer for the processor} */
+#define _KERNEL_TBIT_VP_INT            _KERNEL_TBIT_VP
+
+#else                                          /* %jp{VP_INTを整数型にするなら} */
+
+#if (_KERNEL_TMIN_INTPTR >= _KERNEL_TMIN_INT) && (_KERNEL_TMAX_INTPTR <= _KERNEL_TMAX_INT)
+typedef INT                                            VP_INT;                                 /**< %jp{データタイプが定まらないものへのポインタまたはプロセッサに自然なサイズの符号付き整数}%en{Pointer to an unknown data type, or a signed integer for the processor} */
+#define _KERNEL_TMIN_VP_INT            _KERNEL_TMIN_INT
+#define _KERNEL_TMAX_VP_INT            _KERNEL_TMAX_INT
+#define _KERNEL_TBIT_VP_INT            _KERNEL_TBIT_INT
+#else
+typedef _KERNEL_T_INTPTR               VP_INT;                                 /**< %jp{データタイプが定まらないものへのポインタまたはプロセッサに自然なサイズの符号付き整数}%en{Pointer to an unknown data type, or a signed integer for the processor} */
+#define _KERNEL_TMIN_VP_INT            _KERNEL_TMIN_INTPTR
+#define _KERNEL_TMAX_VP_INT            _KERNEL_TMAX_INTPTR
+#define _KERNEL_TBIT_VP_INT            _KERNEL_TBIT_INTPTR
+#endif
+
+#endif
+
+
+
+/* %jp{BOOL型を定義する} */
+#if _KERNEL_TBIT_BOOL == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             BOOL;                                   /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */
+#define _KERNEL_TMIN_BOOL              _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_BOOL              _KERNEL_TMAX_PROC_INT
+
+#elif _KERNEL_TBIT_BOOL == 8                   /* 8-bit */
+
+typedef _KERNEL_T_B                            BOOL;                                   /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */
+#define _KERNEL_TMIN_BOOL              _KERNEL_TMIN_B
+#define _KERNEL_TMAX_BOOL              _KERNEL_TMAX_B
+
+#elif _KERNEL_TBIT_BOOL == 16          /* 16-bit */
+
+typedef _KERNEL_T_H                            BOOL;                                   /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */
+#define _KERNEL_TMIN_BOOL              _KERNEL_TMIN_H
+#define _KERNEL_TMAX_BOOL              _KERNEL_TMAX_H
+
+#elif _KERNEL_TBIT_BOOL == 32          /* 32-bit */
+
+typedef _KERNEL_T_W                            BOOL;                                   /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */
+#define _KERNEL_TMIN_BOOL              _KERNEL_TMIN_W
+#define _KERNEL_TMAX_BOOL              _KERNEL_TMAX_W
+
+#elif _KERNEL_TBIT_BOOL == 64          /* 64-bit */
+
+typedef _KERNEL_T_D                            BOOL;                                   /**< %jp{真偽値}%en{Boolean value(TRUE or FALSE)} */
+#define _KERNEL_TMIN_BOOL              _KERNEL_TMIN_D
+#define _KERNEL_TMAX_BOOL              _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_BOOL
+
+#endif
+
+
+
+/* %jp{機能コードを定義する}%en{Function code} */
+#if _KERNEL_TBIT_FN == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             FN;                                             /**< %jp{機能コード}%en{Function code(signed integer)} */
+#define _KERNEL_TMIN_FN                        _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_FN                        _KERNEL_TMAX_PROC_INT
+
+#elif _KERNEL_TBIT_FN == 8                             /* 8-bit */
+
+typedef _KERNEL_T_B                            FN;                                             /**< %jp{機能コード}%en{Function code(signed integer)} */
+#define _KERNEL_TMIN_FN                        _KERNEL_TMIN_B
+#define _KERNEL_TMAX_FN                        _KERNEL_TMAX_B
+
+#elif _KERNEL_TBIT_FN == 16                    /* 16-bit */
+
+typedef _KERNEL_T_H                            FN;                                             /**< %jp{機能コード}%en{Function code(signed integer)} */
+#define _KERNEL_TMIN_FN                        _KERNEL_TMIN_H
+#define _KERNEL_TMAX_FN                        _KERNEL_TMAX_H
+
+#elif _KERNEL_TBIT_FN == 32                    /* 32-bit */
+
+typedef _KERNEL_T_W                            FN;                                             /**< %jp{機能コード}%en{Function code(signed integer)} */
+#define _KERNEL_TMIN_FN                        _KERNEL_TMIN_W
+#define _KERNEL_TMAX_FN                        _KERNEL_TMAX_W
+
+#elif _KERNEL_TBIT_FN == 64                    /* 64-bit */
+
+typedef _KERNEL_T_D                            FN;                                             /**< %jp{機能コード}%en{Function code(signed integer)} */
+#define _KERNEL_TMIN_FN                        _KERNEL_TMIN_D
+#define _KERNEL_TMAX_FN                        _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_CFG_TBIT_FN
+
+#endif
+
+
+
+/* %jp{エラーコード}%en{Error code(signed integer)} */
+#if _KERNEL_TBIT_ER == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             ER;                                             /**< %jp{エラーコード}%en{Error code(signed integer)} */
+#define _KERNEL_TMIN_ER                        _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_ER                        _KERNEL_TMAX_PROC_INT
+
+
+#elif _KERNEL_TBIT_ER == 8                     /* 8-bit */
+
+typedef _KERNEL_T_B                            ER;                                             /**< %jp{エラーコード}%en{Error code(signed integer)} */
+#define _KERNEL_TMIN_ER                        _KERNEL_TMIN_B
+#define _KERNEL_TMAX_ER                        _KERNEL_TMAX_B
+
+#elif _KERNEL_TBIT_ER == 16                    /* 16-bit */
+
+typedef _KERNEL_T_H                            ER;                                             /**< %jp{エラーコード}%en{Error code(signed integer)} */
+#define _KERNEL_TMIN_ER                        _KERNEL_TMIN_H
+#define _KERNEL_TMAX_ER                        _KERNEL_TMAX_H
+
+#elif _KERNEL_TBIT_ER == 32                    /* 32-bit */
+
+typedef _KERNEL_T_W                            ER;                                             /**< %jp{エラーコード}%en{Error code(signed integer)} */
+#define _KERNEL_TMIN_ER                        _KERNEL_TMIN_W
+#define _KERNEL_TMAX_ER                        _KERNEL_TMAX_W
+
+#elif _KERNEL_TBIT_ER == 64                    /* 64-bit */
+
+typedef _KERNEL_T_D                            ER;                                             /**< %jp{エラーコード}%en{Error code(signed integer)} */
+#define _KERNEL_TMIN_ER                        _KERNEL_TMIN_D
+#define _KERNEL_TMAX_ER                        _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_ER
+
+#endif
+
+
+
+/* %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */
+#if _KERNEL_TBIT_ID == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             ID;                                             /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */
+#define _KERNEL_TMIN_ID                        _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_ID                        _KERNEL_TMAX_PROC_INT
+
+#elif _KERNEL_TBIT_ID == 8                     /* 8-bit */
+
+typedef _KERNEL_T_B                            ID;                                             /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */
+#define _KERNEL_TMIN_ID                        _KERNEL_TMIN_B
+#define _KERNEL_TMAX_ID                        _KERNEL_TMAX_B
+
+#elif _KERNEL_TBIT_ID == 16                    /* 16-bit */
+
+typedef _KERNEL_T_H                            ID;                                             /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */
+#define _KERNEL_TMIN_ID                        _KERNEL_TMIN_H
+#define _KERNEL_TMAX_ID                        _KERNEL_TMAX_H
+
+#elif _KERNEL_TBIT_ID == 32                    /* 32-bit */
+
+typedef _KERNEL_T_W                            ID;                                             /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */
+#define _KERNEL_TMIN_ID                        _KERNEL_TMIN_W
+#define _KERNEL_TMAX_ID                        _KERNEL_TMAX_W
+
+#elif _KERNEL_TBIT_ID == 64                    /* 8-bit */
+
+typedef _KERNEL_T_D                            ID;                                             /**< %jp{オブジェクトID番号}%en{Object ID number(signed integer)} */
+#define _KERNEL_TMIN_ID                        _KERNEL_TMIN_D
+#define _KERNEL_TMAX_ID                        _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_ID
+
+#endif
+
+
+
+/* %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */
+#if _KERNEL_TBIT_ATR == _KERNEL_TBIT_PROC_UINT
+
+typedef _KERNEL_T_PROC_UINT            ATR;                                    /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */                        
+#define _KERNEL_TMIN_ATR               _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_ATR               _KERNEL_TMAX_PROC_UINT
+
+#elif _KERNEL_TBIT_ATR == 8                    /* 8-bit */
+
+typedef _KERNEL_T_UB                   ATR;                                    /**< %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */
+#define _KERNEL_TMIN_ATR               _KERNEL_TMIN_UB
+#define _KERNEL_TMAX_ATR               _KERNEL_TMAX_UB
+
+#elif _KERNEL_TBIT_ATR == 16           /* 16-bit */
+
+typedef _KERNEL_T_UH                   ATR;                                    /**< %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */
+#define _KERNEL_TMIN_ATR               _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_ATR               _KERNEL_TMAX_UH
+
+#elif _KERNEL_TBIT_ATR == 32           /* 32-bit */
+
+typedef _KERNEL_T_UW                   ATR;                                    /**< %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */
+#define _KERNEL_TMIN_ATR               _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_ATR               _KERNEL_TMAX_UW
+
+#elif _KERNEL_TBIT_ATR == 64           /* 64-bit */
+
+typedef _KERNEL_T_UD                   ATR;                                    /**< %jp{オブジェクト属性}%en{Object attribute(unsigned integer)} */
+#define _KERNEL_TMIN_ATR               _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_ATR               _KERNEL_TMAX_UD
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_ATR
+
+#endif
+
+
+
+/* %jp{オブジェクト状態}%en{Object state(unsigned integer)} */
+#if _KERNEL_TBIT_STAT == _KERNEL_TBIT_PROC_UINT
+
+typedef _KERNEL_T_PROC_UINT            STAT;                                   /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */                        
+#define _KERNEL_TMIN_STAT              _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_STAT              _KERNEL_TMAX_PROC_UINT
+
+#elif _KERNEL_TBIT_STAT == 8           /* 8-bit */
+
+typedef _KERNEL_T_UB                   STAT;                                   /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */                        
+#define _KERNEL_TMIN_STAT              _KERNEL_TMIN_UB
+#define _KERNEL_TMAX_STAT              _KERNEL_TMAX_UB
+
+#elif _KERNEL_TBIT_STAT == 16          /* 16-bit */
+
+typedef _KERNEL_T_UH                   STAT;                                   /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */
+#define _KERNEL_TMIN_STAT              _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_STAT              _KERNEL_TMAX_UH
+
+#elif _KERNEL_TBIT_STAT == 32          /* 32-bit */
+
+typedef _KERNEL_T_UW                   STAT;                                   /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */
+#define _KERNEL_TMIN_STAT              _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_STAT              _KERNEL_TMAX_UW
+
+#elif _KERNEL_TBIT_STAT == 64          /* 8-bit */
+
+typedef _KERNEL_T_UD                   STAT;                                   /**< %jp{オブジェクト状態}%en{Object state(unsigned integer)} */
+#define _KERNEL_TMIN_STAT              _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_STAT              _KERNEL_TMAX_UD
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_CFG_TBIT_STAT
+
+#endif
+
+
+
+/* %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */
+#if _KERNEL_TBIT_MODE == _KERNEL_TBIT_PROC_UINT
+
+typedef _KERNEL_T_PROC_UINT            MODE;                                   /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */
+#define _KERNEL_TMIN_MODE              _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_MODE              _KERNEL_TMAX_PROC_UINT
+
+#elif _KERNEL_TBIT_MODE == 8           /* 8-bit */
+
+typedef _KERNEL_T_UB                   MODE;                                   /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */
+#define _KERNEL_TMIN_MODE              _KERNEL_TMIN_UB
+#define _KERNEL_TMAX_MODE              _KERNEL_TMAX_UB
+
+#elif _KERNEL_TBIT_MODE == 16          /* 16-bit */
+
+typedef _KERNEL_T_UH                   MODE;                                   /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */
+#define _KERNEL_TMIN_MODE              _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_MODE              _KERNEL_TMAX_UH
+
+#elif _KERNEL_TBIT_MODE == 32          /* 32-bit */
+
+typedef _KERNEL_T_UW                   MODE;                                   /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */
+#define _KERNEL_TMIN_MODE              _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_MODE              _KERNEL_TMAX_UW
+
+#elif _KERNEL_TBIT_MODE == 64          /* 8-bit */
+
+typedef _KERNEL_T_UD                   MODE;                                   /**< %jp{サービスコールの動作モード}%en{Service call operational mode(unsigned integer)} */
+#define _KERNEL_TMIN_MODE              _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_MODE              _KERNEL_TMAX_UD
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_MODE
+
+#endif
+
+
+
+/* %jp{優先度}%en{Priority(signed integer)} */
+#if _KERNEL_TBIT_PRI == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             PRI;                                    /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */
+#define _KERNEL_TMIN_PRI               _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_PRI               _KERNEL_TMAX_PROC_INT
+
+#elif _KERNEL_CFG_TBIT_PRI == 8                /* 8-bit */
+
+typedef _KERNEL_T_B                            PRI;                                    /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */
+#define _KERNEL_TMIN_PRI               _KERNEL_TMIN_B
+#define _KERNEL_TMAX_PRI               _KERNEL_TMAX_B
+
+#elif _KERNEL_CFG_TBIT_PRI == 16       /* 16-bit */
+
+typedef _KERNEL_T_H                            PRI;                                    /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */
+#define _KERNEL_TMIN_PRI               _KERNEL_TMIN_H
+#define _KERNEL_TMAX_PRI               _KERNEL_TMAX_H
+
+#elif _KERNEL_CFG_TBIT_PRI == 32       /* 32-bit */
+
+typedef _KERNEL_T_W                            PRI;                                    /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */
+#define _KERNEL_TMIN_PRI               _KERNEL_TMIN_W
+#define _KERNEL_TMAX_PRI               _KERNEL_TMAX_W
+
+#elif _KERNEL_CFG_TBIT_PRI == 64       /* 8-bit */
+
+typedef _KERNEL_T_D                            PRI;                                    /**< %jp{優先度(符号付き整数)}%en{Priority(signed integer)} */
+#define _KERNEL_TMIN_PRI               _KERNEL_TMIN_D
+#define _KERNEL_TMAX_PRI               _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_PRI
+
+#endif
+
+
+
+/* %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */
+#if _KERNEL_TBIT_SIZE == _KERNEL_TBIT_PROC_UINT
+
+typedef _KERNEL_T_PROC_UINT            SIZE;                                   /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */
+#define _KERNEL_TMIN_SIZE              _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_SIZE              _KERNEL_TMAX_PROC_UINT
+
+#elif _KERNEL_TBIT_SIZE == 8           /* 8-bit */
+
+typedef _KERNEL_T_UB                   SIZE;                                   /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */             
+#define _KERNEL_TMIN_SIZE              _KERNEL_TMIN_UB
+#define _KERNEL_TMAX_SIZE              _KERNEL_TMAX_UB
+
+#elif _KERNEL_TBIT_SIZE == 16          /* 16-bit */
+
+typedef _KERNEL_T_UH                   SIZE;                                   /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */
+#define _KERNEL_TMIN_SIZE              _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_SIZE              _KERNEL_TMAX_UH
+
+#elif _KERNEL_TBIT_SIZE == 32          /* 32-bit */
+
+typedef _KERNEL_T_UW                   SIZE;                                   /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */
+#define _KERNEL_TMIN_SIZE              _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_SIZE              _KERNEL_TMAX_UW
+
+#elif _KERNEL_TBIT_SIZE == 64          /* 8-bit */
+
+typedef _KERNEL_T_UD                   SIZE;                                   /**< %jp{メモリ領域のサイズ(符号無し整数)}%en{Memory area size(unsigned integer)} */
+#define _KERNEL_TMIN_SIZE              _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_SIZE              _KERNEL_TMAX_UD
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_SIZE
+
+#endif
+
+
+
+/* %jp{タイムアウト}%en{Timeout} */
+#if _KERNEL_TBIT_TMO == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             TMO;                                    /**< %jp{タイムアウト}%en{Timeout} */
+#define _KERNEL_TMIN_TMO               _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_TMO               _KERNEL_TMAX_PROC_INT
+
+#elif _KERNEL_TBIT_TMO == 8                    /* 8-bit */
+
+typedef _KERNEL_T_B                            TMO;                                    /**< %jp{タイムアウト}%en{Timeout} */
+#define _KERNEL_TMIN_TMO               _KERNEL_TMIN_B
+#define _KERNEL_TMAX_TMO               _KERNEL_TMAX_B
+
+#elif _KERNEL_TBIT_TMO == 16           /* 16-bit */
+
+typedef _KERNEL_T_H                            TMO;                                    /**< %jp{タイムアウト}%en{Timeout} */
+#define _KERNEL_TMIN_TMO               _KERNEL_TMIN_H
+#define _KERNEL_TMAX_TMO               _KERNEL_TMAX_H
+
+#elif _KERNEL_TBIT_TMO == 32                   /* 32-bit */
+
+typedef _KERNEL_T_W                            TMO;                                    /**< %jp{タイムアウト}%en{Timeout} */
+#define _KERNEL_TMIN_TMO               _KERNEL_TMIN_W
+#define _KERNEL_TMAX_TMO               _KERNEL_TMAX_W
+
+#elif _KERNEL_TBIT_TMO == 64                   /* 8-bit */
+
+typedef _KERNEL_T_D                            TMO;                                    /**< %jp{タイムアウト}%en{Timeout} */
+#define _KERNEL_TMIN_TMO               _KERNEL_TMIN_D
+#define _KERNEL_TMAX_TMO               _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_TMO
+
+#endif
+
+
+
+/* %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */
+#if _KERNEL_TBIT_RELTIM == _KERNEL_TBIT_PROC_UINT
+
+typedef _KERNEL_T_PROC_UINT            RELTIM;                                 /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */
+#define _KERNEL_TMIN_RELTIM            _KERNEL_TMIN_PROC_UINT
+#define _KERNEL_TMAX_RELTIM            _KERNEL_TMAX_PROC_UINT
+
+#elif _KERNEL_TBIT_RELTIM == 8         /* 8-bit */
+
+typedef _KERNEL_T_UB                   RELTIM;                                 /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */          
+#define _KERNEL_TMIN_RELTIM            _KERNEL_TMIN_UB
+#define _KERNEL_TMAX_RELTIM            _KERNEL_TMAX_UB
+
+#elif _KERNEL_TBIT_RELTIM == 16                /* 16-bit */
+
+typedef _KERNEL_T_UH                   RELTIM;                                 /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */
+#define _KERNEL_TMIN_RELTIM            _KERNEL_TMIN_UH
+#define _KERNEL_TMAX_RELTIM            _KERNEL_TMAX_UH
+
+#elif _KERNEL_TBIT_RELTIM == 32                /* 32-bit */
+
+typedef _KERNEL_T_UW                   RELTIM;                                 /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */
+#define _KERNEL_TMIN_RELTIM            _KERNEL_TMIN_UW
+#define _KERNEL_TMAX_RELTIM            _KERNEL_TMAX_UW
+
+#elif _KERNEL_TBIT_RELTIM == 64                /* 8-bit */
+
+typedef _KERNEL_T_UD                   RELTIM;                                 /**< %jp{相対時間(符号無し整数, 時間単位は実装定義)}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */
+#define _KERNEL_TMIN_RELTIM            _KERNEL_TMIN_UD
+#define _KERNEL_TMAX_RELTIM            _KERNEL_TMAX_UD
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_RELTIM
+
+#endif
+
+
+
+/* %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+#if _KERNEL_SYSTIM_STRUCT
+
+#if _KERNEL_TBIT_SYSTIM == 16          /* 16-bit */
+
+/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+typedef struct t_systim
+{
+       UH ltime;                               /**< %jp{下位 16bit}%en{lower 16bit} */
+} SYSTIM;
+
+#define _KERNEL_SYSTIM_ADD(t, n)       do { (t)->ltime += n; } while(0)
+
+#elif _KERNEL_TBIT_SYSTIM == 32                /* 32-bit */
+
+/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+typedef struct t_systim
+{
+       UW ltime;                               /**< %jp{下位 32bit}%en{lower 32bit} */
+} SYSTIM;
+
+#define _KERNEL_SYSTIM_ADD(t, n)       do { (t)->ltime += n; } while(0)
+
+#elif _KERNEL_CFG_TBIT_SYSTIM == 48    /* 48-bit */
+
+/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+typedef struct t_systim                
+{
+       UW ltime;                               /**< %jp{下位 32bit}%en{lower 32bit} */
+       UH utime;                               /**< %jp{上位 16bit}%en{upper 16bit} */
+} SYSTIM;
+
+
+#define _KERNEL_SYSTIM_ADD(t, n)       do { if ( (t)->ltime + (n) < (t)->ltime ) { (t)->utime++; } (t)->ltime += (n); } while(0)
+
+#elif _KERNEL_TBIT_SYSTIM == 64                /* 64-bit */
+
+/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+typedef struct t_systim
+{
+       UW ltime;                               /**< %en{lower}%jp{下位 32bit} */
+       UW utime;                               /**< %en{upper}%jp{上位 32bit} */
+} SYSTIM;
+
+#define _KERNEL_SYSTIM_ADD(t, n)       do { if ( (t)->ltime + (n) < (t)->ltime ) { (t)->utime++; } (t)->ltime += (n); } while(0)
+
+#elif _KERNEL_TBIT_SYSTIM == 96                /* 96-bit */
+
+/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+typedef struct t_systim
+{
+       UD ltime;                               /**< %en{lower}%jp{下位 64bit} */
+       UW utime;                               /**< %en{upper}%jp{上位 32bit} */
+} SYSTIM;
+
+#define _KERNEL_SYSTIM_ADD(t, n)       do { if ( (t)->ltime + (n) < (t)->ltime ) { (t)->utime++; } (t)->ltime += (n); } while(0)
+
+#elif _KERNEL_TBIT_SYSTIM == 128       /* 128-bit */
+
+/** %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+typedef struct t_systim
+{
+       UD ltime;                               /**< %en{lower}%jp{下位 64bit} */
+       UD utime;                               /**< %en{upper}%jp{上位 32bit} */
+} SYSTIM;
+
+#define _KERNEL_SYSTIM_ADD(t, n)       do { if ( (t)->ltime + (n) < (t)->ltime ) { (t)->utime++; } (t)->ltime += (n); } while(0)
+
+#else
+
+#error Illegal value : _KERNEL_TBIT_SYSTIM
+
+#endif
+
+#else
+
+#if _KERNEL_CFG_TBIT_SYSTIM == _KERNEL_TBIT_PROC_UINT          /* default */
+
+typedef _KERNEL_T_PROC_UINT            SYSTIM;                                 /**< %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+
+#elif _KERNEL_TBIT_SYSTIM == 16        /* 16-bit */
+
+typedef _KERNEL_T_UH                   SYSTIM;                                 /**< %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+
+#elif _KERNEL_TBIT_SYSTIM == 32        /* 32-bit */
+
+typedef _KERNEL_T_UW                   SYSTIM;                                 /**< %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+
+#elif _KERNEL_TBIT_SYSTIM == 64        /* 64-bit */
+
+typedef _KERNEL_T_UD                   SYSTIM;                                 /**< %jp{システム時刻(符号無し整数, 時間単位は実装定義)}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+
+#else                                                  /* error */
+
+#error Illegal value : _KERNEL_TBIT_SYSTIM
+
+#endif
+
+#define _KERNEL_SYSTIM_ADD(t, n)       do { *(t) += n; } while(0)
+
+#endif
+
+
+
+/* %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */
+#if _KERNEL_TBIT_ER_BOOL == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             ER_BOOL;                                /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */
+#define _KERNEL_TMIN_ER_BOOL   _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_ER_BOOL   _KERNEL_TMAX_PROC_INT
+
+#elif _KERNEL_TBIT_ER_BOOL == 8                /* 8-bit */
+
+typedef _KERNEL_T_B                            ER_BOOL;                                /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */
+#define _KERNEL_TMIN_ER_BOOL   _KERNEL_TMIN_B
+#define _KERNEL_TMAX_ER_BOOL   _KERNEL_TMAX_B
+
+#elif _KERNEL_TBIT_ER_BOOL == 16       /* 16-bit */
+
+typedef _KERNEL_T_H                            ER_BOOL;                                /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */
+#define _KERNEL_TMIN_ER_BOOL   _KERNEL_TMIN_H
+#define _KERNEL_TMAX_ER_BOOL   _KERNEL_TMAX_H
+
+#elif _KERNEL_TBIT_ER_BOOL == 32       /* 32-bit */
+
+typedef _KERNEL_T_W                            ER_BOOL;                                /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */
+#define _KERNEL_TMIN_ER_BOOL   _KERNEL_TMIN_W
+#define _KERNEL_TMAX_ER_BOOL   _KERNEL_TMAX_W
+
+#elif _KERNEL_TBIT_ER_BOOL == 64       /* 8-bit */
+
+typedef _KERNEL_T_D                            ER_BOOL;                                /**< %jp{エラーコードまたは真偽値}%en{Error code or a boolean value} */
+#define _KERNEL_TMIN_ER_BOOL   _KERNEL_TMIN_D
+#define _KERNEL_TMAX_ER_BOOL   _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_ER_BOOL
+
+#endif
+
+
+
+/* %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */
+#if _KERNEL_TBIT_ER_ID == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             ER_ID;                                  /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */
+#define _KERNEL_TMIN_ER_ID             _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_ER_ID             _KERNEL_TMAX_PROC_INT
+
+#elif _KERNEL_TBIT_ER_ID == 8          /* 8-bit */
+
+typedef _KERNEL_T_B                            ER_ID;                                  /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */
+#define _KERNEL_TMIN_ER_ID             _KERNEL_TMIN_B
+#define _KERNEL_TMAX_ER_ID             _KERNEL_TMAX_B
+
+#elif _KERNEL_TBIT_ER_ID == 16         /* 16-bit */
+
+typedef _KERNEL_T_H                            ER_ID;                                  /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */
+#define _KERNEL_TMIN_ER_ID             _KERNEL_TMIN_H
+#define _KERNEL_TMAX_ER_ID             _KERNEL_TMAX_H
+
+#elif _KERNEL_TBIT_ER_ID == 32         /* 32-bit */
+
+typedef _KERNEL_T_W                            ER_ID;                                  /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */
+#define _KERNEL_TMIN_ER_ID             _KERNEL_TMIN_W
+#define _KERNEL_TMAX_ER_ID             _KERNEL_TMAX_W
+
+#elif _KERNEL_TBIT_ER_ID == 64         /* 8-bit */
+
+typedef _KERNEL_T_D                            ER_ID;                                  /**< %jp{エラーコードまたはID番号}%en{Error code or an object ID number} */
+#define _KERNEL_TMIN_ER_ID             _KERNEL_TMIN_D
+#define _KERNEL_TMAX_ER_ID             _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_ER_ID
+
+#endif
+
+
+
+/* %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */
+#if _KERNEL_TBIT_ER_UINT == _KERNEL_TBIT_PROC_INT
+
+typedef _KERNEL_T_PROC_INT             ER_UINT;                                /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */
+#define _KERNEL_TMIN_ER_UINT   _KERNEL_TMIN_PROC_INT
+#define _KERNEL_TMAX_ER_UINT   _KERNEL_TMAX_PROC_INT
+
+#elif _KERNEL_TBIT_ER_UINT == 8                /* 8-bit */
+
+typedef _KERNEL_T_B                            ER_UINT;                                /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */
+#define _KERNEL_TMIN_ER_UINT   _KERNEL_TMIN_B
+#define _KERNEL_TMAX_ER_UINT   _KERNEL_TMAX_B
+
+#elif _KERNEL_TBIT_ER_UINT == 16       /* 16-bit */
+
+typedef _KERNEL_T_H                            ER_UINT;                                /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */
+#define _KERNEL_TMIN_ER_UINT   _KERNEL_TMIN_H
+#define _KERNEL_TMAX_ER_UINT   _KERNEL_TMAX_H
+
+#elif _KERNEL_TBIT_ER_UINT == 32       /* 32-bit */
+
+typedef _KERNEL_T_W                            ER_UINT;                                /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */
+#define _KERNEL_TMIN_ER_UINT   _KERNEL_TMIN_W
+#define _KERNEL_TMAX_ER_UINT   _KERNEL_TMAX_W
+
+#elif _KERNEL_TBIT_ER_UINT == 64       /* 8-bit */
+
+typedef _KERNEL_T_D                            ER_UINT;                                /**< %jp{エラーコードまたは符号無し整数(符号無し整数の有効ビット数はUINTより1ビット短い)}%en{Error code or an unsigned integer} */
+#define _KERNEL_TMIN_ER_UINT   _KERNEL_TMIN_D
+#define _KERNEL_TMAX_ER_UINT   _KERNEL_TMAX_D
+
+#else                                                          /* error */
+
+#error Illegal value : _KERNEL_TBIT_ER_UINT
+
+#endif
+
+
+
+/* 以下まだ力尽きて未対応 */
+
+typedef UH                                             TEXPTN;         /**< %jp{タスク例外要因のパターン(符号無し整数)}%en{Bit pattern for the task exception code(unsigned integer)} */
+typedef UH                                             FLGPTN;         /**< %jp{フラグパターン(符号無し整数)}%en{Bit pattern of eventflag(unsigned integer)} */
+
+/** %jp{フラグパターン(符号無し整数)}%en{Message header for a mailbox} */
+typedef struct t_msg
+{
+       struct t_msg    *pk_next;
+} T_MSG;
+
+typedef struct t_msg_pri
+{
+       T_MSG                   msgque;
+       PRI                     msgpri;
+} T_MSG_PRI;
+
+
+typedef UINT                                   RDVPTN;
+typedef INT                                            RDVNO;
+typedef INT                                            OVRTIM;
+
+typedef INT                                            INHNO;          /**< %jp{割り込みハンドラ番号}%en{} */
+typedef INT                                            INTNO;          /**< %jp{割り込み番号}%en{} */
+
+typedef INT                                            EXCNO;          /**< %jp{CPU例外ハンドラ番号}%en{} */
+
+
+
+/* ------------------------------------ */
+/*         macro definition             */
+/* ------------------------------------ */
+
+/* %jp{エラーコード取り出し} */
+#define        MERCD(ercd)                     ((ER)((B)(ercd)))               /**< %jp{エラーコードからメインエラーコードを取り出す} */
+#define        SERCD(ercd)                     ((ercd) >> 8)                   /**< %jp{エラーコードからサブエラーコードを取り出す} */
+
+
+
+#endif /* _KERNEL__itron_h__ */
+
+
+/* end of file */
+
diff --git a/kernel/include/kernel.h b/kernel/include/kernel.h
new file mode 100755 (executable)
index 0000000..cd7803f
--- /dev/null
@@ -0,0 +1,349 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  kernel.h
+ * @brief %jp{カーネルヘッダファイル}%en{uITRON4.0 kernel header file}
+ *
+ * @version $Id: kernel.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__kernel_h__
+#define _KERNEL__kernel_h__
+
+
+#include "itron.h"
+
+
+/** %jp{バージョン情報} */
+#define TKERNEL_MAKER                          0x0008                                  /**< %jp{メーカーコード(個人)} */
+#define TKERNEL_PRID                           0x0000                                  /**< %jp{カーネルの識別番号(未定)} */
+#define TKERNEL_SPVER                          0x5402                                  /**< %jp{ITRON仕様のバージョン(μITRON Ver 4.02)} */
+#define TKERNEL_PRVER                          0x0000                                  /**< %jp{カーネルのバージョン番号(HOS-V4a Ver 0.00)} */
+
+
+#define TMAX_ACTCNT                                    _KERNEL_TMAX_ACTCNT             /**< %jp{タスクの起動要求キューイング数の最大値} */
+#define TMAX_WUPCNT                                    _KERNEL_TMAX_WUPCNT             /**< %jp{タスクの起床要求キューイング数の最大値} */
+#define TMAX_SUSCNT                                    _KERNEL_TMAX_SUSCNT             /**< %jp{タスクの強制待ちネスト数の最大値} */
+
+#define TMAX_MAXSEM                                    _KERNEL_TMAX_MAXSEM             /**< %jp{セマフォ資源数の最大値} */
+
+
+#define _KERNEL_TSZ_ALIGNED(size)      (((size) + _KERNEL_MEM_ALIGN - 1) & ~(_KERNEL_MEM_ALIGN - 1))
+
+/** %jp{データキューの領域のサイズ} */
+#define TSZ_DTQ(dtqcnt)                                ((SIZE)(dtqcnt) * (SIZE)sizeof(VP_INT))
+
+/** %jp{メッセージキューヘッダ領域のサイズ} */
+#define TSZ_MPRIHD(maxmpri)                    ((SIZE)(maxmpri) * (SIZE)sizeof(T_MSG_PRI *))
+
+/** %jp{メモリプール領域のサイズ} */
+#define TSZ_MPF(blkcnt, blksz)         ((SIZE)(blkcnt) * (SIZE)_KERNEL_TSZ_ALIGNED(blksz))
+
+#define TSZ_MBF(msgcnt, msgsz)         ((SIZE)(msgcnt) * (SIZE)((msgsz) + sizeof(UINT)))
+
+#define TSZ_MPL(blkcnt, blksz)         ((SIZE)(blkcnt) * ((SIZE)_KERNEL_TSZ_ALIGNED(blksz) + (SZIE)))
+
+
+
+/** %jp{バージョン情報} */
+typedef struct t_rver
+{
+       UH      maker;                  /**< %jp{カーネルのメーカーコード} */
+       UH      prid;                   /**< %jp{カーネルの識別番号} */
+       UH      spver;                  /**< %jp{ITRON仕様のバージョン情報} */
+       UH      prver;                  /**< %jp{カーネルのバージョン番号} */
+       UH      prno[4];                /**< %jp{カーネル製品の管理情報} */
+} T_RVER;
+
+
+/** %jp{タスク生成情報} */
+typedef struct t_ctsk
+{
+       ATR     tskatr;                 /**< %jp{タスク属性} */
+       VP_INT  exinf;                  /**< %jp{タスクの拡張情報} */
+       FP      task;                   /**< %jp{タスクの起動番地} */
+       PRI     itskpri;                /**< %jp{タスクの起動時優先度} */
+       SIZE    stksz;                  /**< %jp{スタック領域のサイズ(バイト数)} */
+       VP      stk;                    /**< %jp{スタック領域の先頭番地} */
+} T_CTSK;
+
+/** %jp{タスク状態} */
+typedef struct t_rtsk
+{
+       STAT    tskstat;                /**< %jp{タスク状態} */
+       PRI     tskpri;                 /**< %jp{タスクの現在優先度} */
+       PRI         tskbpri;            /**< %jp{タスクのベース優先度} */
+       STAT    tskwait;                /**< %jp{待ち要因} */
+       ID      wobjid;                 /**< %jp{待ち対象のオブジェクトのID番号} */
+       TMO     lefttmo;                /**< %jp{タイムアウトするまでの時間} */
+       UINT    actcnt;                 /**< %jp{起動要求キューイング回数} */
+       UINT    wupcnt;                 /**< %jp{起床要求キューイング回数} */
+       UINT    suscnt;                 /**< %jp{強制待ち要求ネスト回数} */
+
+       /* %jp{以下、独自実装} */
+#if _KERNEL_CFG_RTSK_EXINF
+       VP_INT  exinf;                  /* タスクの拡張情報 */
+#endif
+} T_RTSK;
+
+/* タスク状態(簡易版) */
+typedef struct t_rtst
+{
+       STAT    tskstat;                /* タスク状態 */
+       STAT    tskwait;                /* 待ち要因 */
+
+       /* %jp{以下、独自実装} */
+#if _KERNEL_CFG_RTST_EXINF
+       VP_INT  exinf;                  /* タスクの拡張情報 */
+#endif
+} T_RTST;
+
+
+/** %jp{セマフォ生成情報}%en{Semaphore creation information packet} */
+typedef struct t_csem
+{
+       ATR             sematr;                 /**< %jp{セマフォ属性}%en{Semaphoer attribute} */
+       UINT    isemcnt;                /**< %jp{セマフォ資源数の初期値}%en{Initial semaphoer resource count} */
+       UINT    maxsem;                 /**< %jp{セマフォの最大資源数}%en{Maximum semaphoer resource count} */
+} T_CSEM;
+
+/** %jp{セマフォ状態情報}%en{Semaphore state packet} */
+typedef struct t_rsem
+{
+       ID              wtskid;                 /**< %jp{セマフォの待ち行列の先頭のタスクのID番号}%en{ID number of the task at the head of the semaphore's wait queue} */
+       UINT    semcnt;                 /**< %jp{セマフォの現在の資源数}%en{Current semaphore resource count} */
+} T_RSEM;
+
+
+/** %jp{イベントフラグ生成情報}%en{Eventflag creation information packet} */
+typedef struct t_cflg
+{
+       ATR             flgatr;                 /**< %jp{イベントフラグ属性}%en{Eventflag attribute} */
+       FLGPTN  iflgptn;                /**< %jp{イベントフラグのビットパターンの初期値}%en{Initial value of eventflag bit pattern} */
+} T_CFLG;
+
+/** %jp{イベントフラグ状態}%en{Eventflag state packet} */
+typedef struct t_rflg
+{
+       ID              wtskid;                 /**< %jp{イベントフラグの待ち行列の先頭のタスクのID番号}%en{ID number of the task at the head of the eventflag's wait queue} */
+       FLGPTN  flgptn;                 /**< %jp{イベントフラグの現在のビットパターン}%en{Eventflag's vurrent bit pattern} */
+} T_RFLG;
+
+
+/* データキュー生成情報 */
+typedef struct t_cdtq
+{
+       ATR  dtqatr;                    /* データキュー属性 */
+       UINT dtqcnt;                    /* データキュー領域の容量(データの個数) */
+       VP   dtq;                               /* データキュー領域の先頭番地 */
+} T_CDTQ;
+
+/* データキュー状態 */
+typedef struct t_rdtq
+{
+       ID   stskid;                    /* データキューの送信待ち行列の先頭のタスクのID番号 */
+       ID   rtskid;                    /* データキューの受信待ち行列の先頭のタスクのID番号 */
+       UINT sdtqcnt;                   /* データキューに入っているデータの数 */
+} T_RDTQ;
+
+
+/** %jp{メールボックス生成情報} */
+typedef struct t_cmbx
+{
+       ATR             mbxatr;                 /**< %jp{メールボックス属性} */
+       PRI             maxmpri;                /**< %jp{送信されるメッセージの優先度の最大値} */
+       VP              mprihd;                 /**< %jp{優先度別のメッセージキューヘッダ領域の先頭番地} */
+} T_CMBX;
+
+/** %jp{メールボックス状態} */
+typedef struct t_rmbx
+{
+       ID              wtskid;                 /**< %jp{メールボックスの待ち行列の先頭のタスクのID番号} */
+       T_MSG   *pk_msg;                /**< %jp{メッセージキューの先頭のメッセージパケットの先頭番地} */
+} T_RMBX;
+
+
+
+/* ミューテックス生成情報 */
+typedef struct t_cmtx
+{
+       ATR   mtxatr;                   /* ミューテックス属性 */
+       PRI   ceilpri;                  /* ミューテックスの上限優先度 */
+} T_CMTX;
+
+
+/* メッセージバッファ状態情報 */
+typedef struct t_rmbf
+{
+       ID   stskid;                    /* メッセージバッファの送信待ち行列の先頭のタスクのID番号 */
+       ID   rtskid;                    /* メッセージバッファの受信待ち行列の先頭のタスクのID番号 */
+       UINT smsgcnt;                   /* メッセージバッファに入っているメッセージの数 */
+       SIZE fmbfsz;                    /* メッセージバッファ領域の空き領域のサイズ(バイト数、最低限の管理領域を除く) */
+} T_RMBF;
+
+
+/** %jp{固定長メモリプール生成情報} */
+typedef struct t_cmpf
+{
+       ATR             mpfatr;                 /**< %jp{固定長メモリプール属性} */
+       UINT    blkcnt;                 /**< %jp{獲得できるメモリブロック数(個数)} */
+       UINT    blksz;                  /**< %jp{メモリブロックのサイズ(バイト数)} */
+       VP              mpf;                    /**< %jp{固定長メモリプール領域の先頭番地} */
+} T_CMPF;
+
+
+/** %jp{固定長メモリプール状態} */
+typedef struct t_rmpf
+{
+       ID              wtskid;                 /**< %jp{固定長メモリプールの待ち行列の先頭のタスクのID番号} */
+       UINT    fblkcnt;                /**< %jp{固定長メモリプールの空きメモリブロック数(個数)} */
+} T_RMPF;
+
+
+
+/* 割り込みハンドラの定義用 */
+typedef struct t_dinh
+{
+       ATR inhatr;                             /* 割り込みハンドラ属性 */
+       FP  inthdr;                             /* 割り込みハンドラの起動番地 */
+} T_DINH;
+
+
+/* 割込みサービスルーチン生成情報 */
+typedef struct t_cisr
+{
+       ATR    isratr;                  /* 割込みサービスルーチン属性 */
+       VP_INT exinf;                   /* 割込みサービスルーチンの拡張情報 */
+       INTNO  intno;                   /* 割込みサービスルーチンを付加する割り込み番号 */
+       FP     isr;                             /* 割込みサービスルーチンの起動番地 */
+} T_CISR;
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* OSの起動 */
+ER      vsta_knl(void);                                                                                /* カーネルの開始(独自サービスコール) */
+
+/* タスク管理機能 */
+ER      cre_tsk(ID tskid, const T_CTSK *pk_ctsk);                      /* タスクの生成 */
+ER_ID   acre_tsk(const T_CTSK *pk_ctsk);                                       /* タスクの生成(ID番号自動割付け) */
+ER      del_tsk(ID tskid);                                                                     /* タスクの削除 */
+ER      act_tsk(ID tskid);                                                                     /* タスクの起動 */
+ER_UINT can_act(ID tskid);                                                                     /* タスク起動要求のキャンセル */
+ER      sta_tsk(ID tskid, VP_INT stacd);                                       /* タスクの起動(起動コード指定) */
+void    ext_tsk(void);                                                                         /* 自タスクの終了 */
+void    exd_tsk(void);                                                                         /* 自タスクの終了と削除 */
+ER      ter_tsk(ID tskid);                                                                     /* タスクの強制終了 */
+ER      chg_pri(ID tskid, PRI tskpri);                                         /* タスク優先度の変更 */
+ER      get_pri(ID tskid, PRI *p_tskpri);                                      /* タスク優先度の参照 */
+ER      ref_tsk(ID tskid, T_RTSK *p_rtsk);                                     /* タスクの状態参照 */
+ER      ref_tst(ID tskid, T_RTST *p_rtst);                                     /* タスクの状態参照(簡易版) */
+
+/* タスク付属同期機能 */
+ER      slp_tsk(void);                                                                         /* タスクの起床待ち */
+ER      tslp_tsk(TMO tmout);                                                           /* タスクの起床待ち(タイムアウトあり) */
+ER      wup_tsk(ID tskid);                                                                     /* タスクの起床 */
+#define iwup_tsk               wup_tsk
+ER_UINT can_wup(ID tskid);                                                                     /* タスク起床要求のキャンセル */
+ER      rel_wai(ID tskid);                                                                     /* 待ち状態の強制解除 */
+#define irel_wai               rel_wai
+ER      sus_tsk(ID tskid);                                                                     /* 強制待ち状態への移行 */
+ER      rsm_tsk(ID tskid);                                                                     /* 強制待ち状態からの再開 */
+ER      frsm_tsk(ID tskid);                                                                    /* 強制待ち状態からの強制再開 */
+ER      dly_tsk(RELTIM dlytim);                                                                /* 自タスクの遅延 */
+
+/* タスク例外処理機能 */
+ER      ras_tex(ID tskid, TEXPTN rasptn);                                      /* タスク例外処理の要求 */
+ER      dis_tex(void);                                                                         /* タスク例外処理の禁止 */
+ER      ena_tex(void);                                                                         /* タスク例外処理の禁止 */
+BOOL    sns_tex(void);                                                                         /* タスク例外処理禁止状態の参照 */
+
+/* %jp{セマフォ}%en{Semphores} */
+ER      cre_sem(ID semid, const T_CSEM *pk_csem);                      /**< %jp{セマフォの生成}%en{Create Semaphore} */
+ER_ID   acre_sem(const T_CSEM *pk_csem);                                       /**< %jp{セマフォの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)} */
+ER      del_sem(ID semid);                                                                     /**< %jp{セマフォの削除}%en{Delete Semaphore} */
+ER      sig_sem(ID semid);                                                                     /**< %jp{セマフォ資源の返却}%en{Release Semaphore Resource} */
+#define isig_sem sig_sem                                                                       /**< %jp{セマフォ資源の返却(非タスクコンテキスト用)}%en{Release Semaphore Resource} */
+ER      wai_sem(ID semid);                                                                     /**< %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource} */
+ER      pol_sem(ID semid);                                                                     /**< %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)} */
+ER      twai_sem(ID semid, TMO tmout);                                         /**< %jp{セマフォ資源の獲得(タイムアウトあり)}%en{Acquire Semaphore Resource(with Timeout)} */
+ER      ref_sem(ID semid, T_RSEM *pk_rsem);                                    /**< %jp{セマフォの状態参照}%en{Reference Semaphore State} */
+
+/* %jp{イベントフラグ}%en{Eventflags} */
+ER      cre_flg(ID flgid, const T_CFLG *pk_cflg);                      /**< %jp{イベントフラグの生成}%en{Create Eventflag} */
+ER_ID   acre_flg(const T_CFLG *pk_cflg);                                       /**< %jp{イベントフラグの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)} */
+ER      del_flg(ID flgid);                                                                     /**< %jp{イベントフラグの削除}%en{Delete Eventflag} */
+ER      set_flg(ID flgid, FLGPTN setptn);                                      /**< %jp{イベントフラグのセット}%en{Set Eventflag} */
+#define iset_flg       set_flg                                                                 /**< %jp{イベントフラグのセット(非タスクコンテキスト用)}%en{Set Eventflag} */
+ER      clr_flg(ID flgid, FLGPTN clrptn);                                      /**< %jp{イベントフラグのクリア}%en{Clear Eventflag} */
+ER      wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn);
+                                                                                                                       /**< %jp{イベントフラグ待ち}%en{Wait for Eventflag} */
+ER      pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn);
+                                                                                                                       /**< %jp{イベントフラグ待ち(ポーリング)}%en{Wait for Eventflag(Polling)} */
+ER      twai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn, TMO tmout);
+                                                                                                                       /**< %jp{イベントフラグ待ち(タイムアウトあり)}%en{Wait for Eventflag(with Timeout)} */
+ER      ref_flg(ID flgid, T_RFLG *pk_rflg);                                    /**< %jp{イベントフラグの状態参照}%en{Reference Eventflag State} */
+
+/* %jp{メールボックス}%en{Mailboxes} */
+ER      cre_mbx(ID semid, const T_CMBX *pk_cmbx);                      /**< %jp{メールボックスの生成} */
+ER_ID   acre_mbx(const T_CMBX *pk_cmbx);                                       /**< %jp{メールボックスの生成(ID番号自動割付け)} */
+ER      del_mbx(ID semid);                                                                     /**< %jp{メールボックスの削除} */
+ER      snd_mbx(ID mbxid, T_MSG *pk_msg);                                      /**< %jp{メールボックスへの送信} */
+ER      rcv_mbx(ID mbxid, T_MSG **ppk_msg);                                    /**< %jp{メールボックスからの受信} */
+ER      prcv_mbx(ID mbxid, T_MSG **ppk_msg);                           /**< %jp{メールボックスからの受信(ポーリング)} */
+ER      trcv_mbx(ID mbxid, T_MSG **ppk_msg, TMO tmout);                /**< %jp{メールボックスからの受信(タイムアウトあり)} */
+ER      ref_mbx(ID mbxid, T_RMBX *pk_rmbx);                                    /**< %jp{メールボックスの状態参照} */
+
+/* %jp{固定長メモリプール} */
+ER      cre_mpf(ID mpfid, const T_CMPF *pk_cmpf);                      /**< %jp{固定長メモリプールの生成} */
+ER_ID   acre_mpf(const T_CMPF *pk_cmpf);                                       /**< %jp{固定長メモリプールの生成(ID番号自動割付け)} */
+ER      del_mpf(ID mpfid);                                                                     /**< %jp{固定長メモリプールの削除} */
+ER      get_mpf(ID mpfid, VP *p_blk);                                          /**< %jp{固定長メモリブロックの獲得} */
+ER      pget_mpf(ID mpfid, VP *p_blk);                                         /**< %jp{固定長メモリブロックの獲得(ポーリング)} */
+ER      tget_mpf(ID mpfid, VP *p_blk, TMO tmout);                      /**< %jp{固定長メモリブロックの獲得(タイムアウトあり)} */
+ER      rel_mpf(ID mpfid, VP blk);                                                     /**< %jp{固定長メモリブロックの返却} */
+ER      ref_mpf(ID mpfid, T_RMPF *pk_rmpf);                                    /**< %jp{固定長メモリブロックの状態参照} */
+
+
+/* システム時間管理機能 */
+ER      isig_tim(void);                                                                                /**< %jp{タイムティックの供給}%en{Supply Time Tick} */
+
+/* システム状態管理機能 */
+ER      rot_rdq(PRI tskpri);                                                           /* タスク優先順位の回転 */
+ER      get_tid(ID *p_tskid);                                                          /* 実行状態タスクIDの参照 */
+ER      loc_cpu(void);                                                                         /* CPUロック状態への移行 */
+ER      unl_cpu(void);                                                                         /* CPUロック状態の解除 */
+ER      dis_dsp(void);                                                                         /* ディスパッチの禁止 */
+ER      ena_dsp(void);                                                                         /* ディスパッチの許可 */
+BOOL    sns_ctx(void);                                                                         /* コンテキストの参照 */
+BOOL    sns_loc(void);                                                                         /* CPUロック状態の参照 */
+BOOL    sns_dsp(void);                                                                         /* ディスパッチ禁止状態の参照 */
+BOOL    sns_dpn(void);                                                                         /* ディスパッチ保留状態の参照 */
+
+
+ER      def_inh(INHNO inhno, const T_DINH *pk_dinh);
+
+ER      dis_int(INTNO intno);                                                          /* 割り込みの禁止 */
+ER      ena_int(INTNO intno);                                                          /* 割り込みの許可 */
+
+/* システム構成管理機能 */
+ER      ref_ver(T_RVER *pk_rver);                                                      /* バージョン番号の参照 */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _KERNEL__kernel_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/object/flgobj.h b/kernel/include/object/flgobj.h
new file mode 100755 (executable)
index 0000000..f17b162
--- /dev/null
@@ -0,0 +1,269 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  flgobj.h
+ * @brief %jp{イベントフラグオジェクトのヘッダファイル}%en{Eventflag object heder file}
+ *
+ * @version $Id: flgobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__object__flgobj_h__
+#define _KERNEL__object__flgobj_h__
+
+
+
+/* ------------------------------------------ */
+/*  type definition                           */
+/* ------------------------------------------ */
+
+/* %jp{フラグパターン用の型} */
+#if _KERNEL_FLGCB_BITFIELD             /* %jp{FLGCBにビットフィールドを利用する場合 */
+
+#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef signed int                                             _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#define _KERNEL_FLGCB_TBITDEF_FLGPTN   : _KERNEL_FLGCB_TBIT_FLGPTN + 1 /**< %jp{フラグパターンのビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#define _KERNEL_FLGCB_TBITDEF_FLGPTN   : _KERNEL_FLGCB_TBIT_FLGPTN             /**< %jp{フラグパターンのビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{FLGCBにビットフィールドを利用しない場合 */
+
+#if _KERNEL_FLG_TBIT_FLGPTN <= 7 && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef _KERNEL_T_OPT_B                                        _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#elif _KERNEL_FLG_TBIT_FLGPTN <= 8 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef _KERNEL_T_OPT_UB                               _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#elif _KERNEL_FLG_TBIT_FLGPTN <= 15 && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef _KERNEL_T_OPT_H                                        _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#elif _KERNEL_FLG_TBIT_FLGPTN <= 16 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef _KERNEL_T_OPT_UH                               _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#elif _KERNEL_FLG_TBIT_FLGPTN <= 31 && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef _KERNEL_T_OPT_W                                        _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#elif _KERNEL_FLG_TBIT_FLGPTN <= 32 && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef _KERNEL_T_OPT_UW                               _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#elif _KERNEL_FLG_TBIT_FLGPTN <= 63 && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef _KERNEL_T_OPT_D                                        _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_FLG_T_FLGPTN;                   /**< %jp{フラグパターンを演算操作するときの型} */
+typedef _KERNEL_T_OPT_UD                               _KERNEL_FLGCB_T_FLGPTN;                 /**< %jp{フラグパターンをFLGCBに格納するときの型} */
+#endif
+
+#define _KERNEL_FLGCB_TBITDEF_FLGPTN                                                                   /**< %jp{フラグパターンのビットフィールド宣言時の幅} */
+
+#endif
+
+
+/* %jp{イベントフラグ属性用の型(4bit必要)} */
+#if _KERNEL_FLGCB_BITFIELD             /* %jp{FLGCBにビットフィールドを利用する場合 */
+
+#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_FLG_T_FLGATR;                   /**< %jp{イベントフラグ属性を演算操作するときの型} */
+typedef signed int                                             _KERNEL_FLGCB_T_FLGATR;                 /**< %jp{イベントフラグ属性をFLGCBに格納するときの型} */
+#define _KERNEL_FLGCB_TBITDEF_FLGATR   : 4 + 1                                                 /**< %jp{イベントフラグ属性のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_FLG_T_FLGATR;                   /**< %jp{イベントフラグ属性を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_FLGCB_T_FLGATR;                 /**< %jp{イベントフラグ属性をFLGCBに格納するときの型} */
+#define _KERNEL_FLGCB_TBITDEF_FLGATR   : 4                                                             /**< %jp{イベントフラグ属性のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{FLGCBにビットフィールドを利用しない場合 */
+
+#if _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_FLG_T_FLGATR;                   /**< %jp{イベントフラグ属性を演算操作するときの型} */
+typedef _KERNEL_T_OPT_B                                        _KERNEL_FLGCB_T_FLGATR;                 /**< %jp{イベントフラグ属性をFLGCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UB                              _KERNEL_FLG_T_FLGATR;                   /**< %jp{イベントフラグ属性を演算操作するときの型} */
+typedef _KERNEL_T_OPT_UB                               _KERNEL_FLGCB_T_FLGATR;                 /**< %jp{イベントフラグ属性をFLGCBに格納するときの型} */
+#endif
+
+#define _KERNEL_FLGCB_TBITDEF_FLGATR                                                                   /**< %jp{イベントフラグ属性のビットフィールド宣言時の幅} */
+
+#endif
+
+
+
+/* ------------------------------------------ */
+/*  Eventflag control block                   */
+/* ------------------------------------------ */
+
+#if _KERNEL_FLGCB_ROM
+
+/** %jp{イベントフラグコントロールブロック(ROM部)} */
+typedef struct _kernel_t_flgcb_rom
+{
+#if _KERNEL_FLGCB_FLGATR
+       _KERNEL_FLGCB_T_FLGATR  flgatr          _KERNEL_FLGCB_TBITDEF_FLGPTN;           /**< %jp{イベントフラグ属性} */
+#endif
+} _KERNEL_FLGCB_T_ROM;
+
+
+/** %jp{イベントフラグコントロールブロック(RAM部)} */
+typedef struct _kernel_t_flgcb
+{
+#if _KERNEL_FLGCB_QUE
+       _KERNEL_T_QUE                   que;                                                                                    /**< %jp{タスクの待ち行列} */
+#endif
+
+#if _KERNEL_FLGCB_FLGPTN
+       _KERNEL_FLGCB_T_FLGPTN  flgptn          _KERNEL_FLGCB_TBITDEF_FLGPTN;           /**< %jp{イベントフラグのビットパターン} */
+#endif
+} _KERNEL_T_FLGCB;
+
+
+#else
+
+
+/** %jp{イベントフラグコントロールブロック} */
+typedef struct _kernel_t_flgcb
+{
+#if _KERNEL_FLGCB_QUE
+       _KERNEL_T_QUE                   que;                                                                                    /**< %jp{タスクの待ち行列} */
+#endif
+
+#if _KERNEL_FLGCB_FLGPTN
+       _KERNEL_FLGCB_T_FLGPTN  flgptn          _KERNEL_FLGCB_TBITDEF_FLGPTN;           /**< %jp{イベントフラグのビットパターン} */
+#endif
+
+#if _KERNEL_FLGCB_FLGATR
+       _KERNEL_FLGCB_T_FLGATR  flgatr          _KERNEL_FLGCB_TBITDEF_FLGPTN;           /**< %jp{イベントフラグ属性} */
+#endif
+} _KERNEL_T_FLGCB;
+
+#endif
+
+
+/** %jp{待ちフラグ情報構造体} */
+typedef struct _kernel_t_flginf
+{
+       MODE   wfmode;          /**< %jp{待ちモード} */
+       FLGPTN waiptn;          /**< %jp{待ちビットパターン(解除時パターンと兼用)} */
+} _KERNEL_T_FLGINF;
+
+
+/* Eventflag handle */
+typedef _KERNEL_T_FLGCB*                               _KERNEL_T_FLGHDL;
+
+
+
+#if _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_BLKARRAY                      /* block array */
+
+extern const ID                                                        _kernel_max_flgid;                                      /** %jp{イベントフラグコントロールブロック個数} */
+extern       _KERNEL_T_FLGCB                   _kernel_flgcb_tbl[];                            /** %jp{イベントフラグコントロールブロックテーブル} */
+
+#define _KERNEL_FLG_ID2FLGCB(flgid)            (&_kernel_flgcb_tbl[(flgid) - _KERNEL_TMIN_FLG_ID])
+#define _KERNEL_FLG_ID2FLGHDL(flgid)   _KERNEL_FLG_ID2FLGCB(flgid)
+
+
+/* %jp{オブジェクトの存在チェック} */
+#define _KERNEL_FLG_CHECK_EXS(flgid)   (_KERNEL_FLG_ID2FLGCB(flgid)->flgatr & _KERNEL_FLG_TA_CRE)
+#define _KERNEL_FLG_TA_CRE                             0x08
+
+
+#elif _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_PTRARRAY            /* pointer array */
+
+extern const ID                                        _kernel_max_flgid;                                      /** %jp{イベントフラグコントロールブロック個数} */
+extern       _KERNEL_T_FLGCB   *_kernel_flgcb_tbl[];                           /** %jp{イベントフラグコントロールブロックテーブル} */
+
+#define _KERNEL_FLG_ID2FLGCB(flgid)            (_kernel_flgcb_tbl[(flgid) - _KERNEL_TMIN_FLG_ID])
+#define _KERNEL_FLG_ID2FLGHDL(flgid)   _KERNEL_FLG_ID2FLGCB(flgid)
+                                                                                                                                       /** %jp{イベントフラグIDからFLGCB アドレスを取得} */
+
+/* %jp{オブジェクトの存在チェック} */
+#define _KERNEL_FLG_CHECK_EXS(flgid)   (_KERNEL_FLG_ID2FLGCB(flgid) != NULL)
+#define _KERNEL_FLG_TA_CRE                             0
+
+#endif
+
+
+/* %jp{ID範囲定義} */
+#define _KERNEL_TMIN_FLG_ID                            1
+#define _KERNEL_TMAX_FLG_ID                            (_kernel_max_flgid)
+
+
+/* %jp{ID範囲チェック} */
+#define _KERNEL_FLG_CHECK_FLGID(flgid) ((flgid) >= _KERNEL_TMIN_FLG_ID && (flgid) <= _KERNEL_TMAX_FLG_ID)
+
+
+
+
+/* ------------------------------------------ */
+/*   Accessor for FLGCB                       */
+/* ------------------------------------------ */
+
+/* que */
+#define _KERNEL_FLG_GET_QUE(flghdl)                    (&(flghdl)->que)
+
+/* flgptn */
+#if _KERNEL_FLGCB_FLGPTN
+#define _KERNEL_FLG_SET_FLGPTN(flghdl, x)      do { (flghdl)->flgptn = (_KERNEL_FLGCB_T_FLGPTN)(x); } while (0)
+#define _KERNEL_FLG_GET_FLGPTN(flghdl)         ((_KERNEL_FLG_T_FLGPTN)(flghdl)->flgptn)
+#else
+#define _KERNEL_FLG_SET_FLGPTN(flghdl, x)      do { } while (0)
+#define _KERNEL_FLG_GET_FLGPTN(flghdl)         (0)
+#endif
+
+/* flgatr */
+#if _KERNEL_FLGCB_FLGATR
+#define _KERNEL_FLG_SET_FLGATR(flghdl, x)      do { (flghdl)->flgatr = (_KERNEL_FLGCB_T_FLGATR)(x); } while (0)
+#define _KERNEL_FLG_GET_FLGATR(flghdl)         ((_KERNEL_FLG_T_FLGATR)(flghdl)->flgatr)
+#else
+#define _KERNEL_FLG_SET_FLGATR(flghdl, x)      do { } while (0)
+#if _KERNEL_SPT_FLG_TA_TFIFO
+#define _KERNEL_FLG_GET_FLGATR(flghdl)         (TA_TFIFO)
+#else
+#define _KERNEL_FLG_GET_FLGATR(flghdl)         (TA_TPRI)
+#endif
+#endif
+
+
+/* %jp{キュー接続} */
+#if _KERNEL_SPT_FLG_TA_TFIFO && _KERNEL_SPT_FLG_TA_TPRI                /* %jp{TA_TFIFO と TA_TPRI の混在 } */
+#define _KERNEL_FLG_ADD_QUE(flghdl, tskhdl)            _kernel_add_que(_KERNEL_FLG_GET_QUE(flghdl), tskhdl, _KERNEL_FLG_GET_FLGATR(flghdl))
+#elif _KERNEL_SPT_FLG_TA_TFIFO && !_KERNEL_SPT_FLG_TA_TPRI     /* %jp{TA_TFIFO のみ利用 } */
+#define _KERNEL_FLG_ADD_QUE(flghdl, tskhdl)            _kernel_adf_que(_KERNEL_FLG_GET_QUE(flghdl), tskhdl)
+#elif !_KERNEL_SPT_FLG_TA_TFIFO && _KERNEL_SPT_FLG_TA_TPRI     /* %jp{TA_TPRI のみ利用 } */
+#define _KERNEL_FLG_ADD_QUE(flghdl, tskhdl)            _kernel_adp_que(_KERNEL_FLG_GET_QUE(flghdl), tskhdl)
+#else
+#error error:_KERNEL_SPT_FLG_TA_TPRI and _KERNEL_SPT_FLG_TA_TFIFO
+#endif
+
+/* %jp{タイムアウトキュー解除} */
+#if _KERNEL_SPT_TWAI_FLG       /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */
+#define _KERNEL_FLG_RMV_TOQ(tskhdl)                    _KERNEL_RMV_TOQ(tskhdl)
+#else
+#define _KERNEL_FLG_RMV_TOQ(tskhdl)                    do { } while (0)
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ER   _kernel_cre_flg(ID flgid, const T_CFLG *pk_cflg);
+BOOL _kernel_chk_flg(_KERNEL_T_FLGHDL flghdl, _KERNEL_T_FLGINF *pk_flginf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* _KERNEL__object__flgobj_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/object/inhobj.h b/kernel/include/object/inhobj.h
new file mode 100755 (executable)
index 0000000..8ba7a12
--- /dev/null
@@ -0,0 +1,58 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  inh.h
+ * @brief %jp{割り込み制御のヘッダファイル}%en{interrupt control heder file}
+ *
+ * @version $Id: inhobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__object__inhobj_h__
+#define _KERNEL__object__inhobj_h__
+
+
+
+/* %jp{割込みハンドラ情報} */
+typedef struct _kernel_t_inhinf
+{
+       FP inthdr;
+} _KERNEL_T_INHINF;
+
+
+/** %jp{割込みハンドラ情報テーブル} */
+#if _KERNEL_SPT_DEF_INH
+extern       _KERNEL_T_INHINF  _kernel_inh_tbl[KERNEL_TMAX_INH_INHNO - KERNEL_TMIN_INH_INHNO + 1];
+#else
+extern const _KERNEL_T_INHINF  _kernel_inh_tbl[KERNEL_TMAX_INH_INHNO - KERNEL_TMIN_INH_INHNO + 1];
+#endif
+
+#define _KERNEL_INT_GET_INHINF(inhno)          (&_kernel_inh_tbl[inhno - KERNEL_TMIN_INH_INHNO])
+
+#define _KERNEL_INH_GET_INTHDR(inhno)          (_KERNEL_INT_GET_INHINF(inhno)->inthdr);
+#define _KERNEL_INH_SET_INTHDR(inhno, x)       do { _KERNEL_INT_GET_INHINF(inhno)->inthdr = (x); } while(0)
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void _kernel_sta_inh(void);
+void _kernel_exe_inh(INHNO inhno);
+void _kernel_end_inh(void);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* _KERNEL__core__inh_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/object/isrobj.h b/kernel/include/object/isrobj.h
new file mode 100755 (executable)
index 0000000..0355042
--- /dev/null
@@ -0,0 +1,102 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  int.h
+ * @brief %jp{割り込み制御のヘッダファイル}%en{interrupt control heder file}
+ *
+ * @version $Id: isrobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__object__isrobj_h__
+#define _KERNEL__object__isrobj_h__
+
+
+typedef struct _kernel_t_isrcb*        _KERNEL_T_ISRHDL;
+
+
+/* %jp{割込み情報} */
+typedef struct _kernel_t_intinf
+{
+       _KERNEL_T_ISRHDL head;
+} _KERNEL_T_INTINF;
+
+
+/** %jp{割込み情報テーブル} */
+#if _KERNEL_SPT_CRE_ISR || _KERNEL_SPT_ACRE_ISR
+extern       _KERNEL_T_INTINF  _kernel_int_tbl[_KERNEL_IRCATR_TMAX_INHNO - _KERNEL_IRCATR_TMIN_INHNO + 1];
+#else
+extern const _KERNEL_T_INTINF  _kernel_int_tbl[_KERNEL_IRCATR_TMAX_INHNO - _KERNEL_IRCATR_TMIN_INHNO + 1];
+#endif
+
+#define _KERNEL_INT_GET_INTINF(intno)          (&_kernel_int_tbl[intno - _KERNEL_IRCATR_TMIN_INHNO])
+
+#define _KERNEL_INT_GET_HEAD(intno)                    (_KERNEL_INT_GET_INTINF(intno)->head)
+#define _KERNEL_INT_SET_HEAD(intno, x)         do { _KERNEL_INT_GET_INTINF(intno)->head = (x); } while (0)
+
+
+
+/* %jp{割込みサービスルーチン制御ブロック} */
+typedef struct _kernel_t_isrcb
+{
+       VP_INT           exinf;                                         /**< %jp{割込みサービスルーチンの拡張情報} */
+       FP               isr;                                           /**< %jp{割込みサービスルーチンの起動番地} */
+       _KERNEL_T_ISRHDL next;
+} _KERNEL_T_ISRCB;
+
+
+/* 割り込みサービスルーチン */
+extern _KERNEL_T_ISRCB  *_kernel_isrcb_tbl[];  /* 割込みサービスルーチンコントロールブロックテーブル */
+extern const ID                        _kernel_max_isrid;              /* 割込みサービスルーチンコントロールブロックの個数 */
+
+
+#define _KERNEL_TMIN_ISR_ISRID                                 1
+#define _KERNEL_TMAX_ISR_ISRID                                 (_kernel_max_isrid)
+
+
+#define _KERNEL_ISR_ID2ISRCB(isrid)                            (_kernel_isrcb_tbl[(isrid) - _KERNEL_TMIN_ISR_ISRID])
+#define _KERNEL_ISR_ID2ISRHDL(isrid)                   (_kernel_isrcb_tbl[(isrid) - _KERNEL_TMIN_ISR_ISRID])
+
+#define _KERNEL_ISR_ISRPTR2ISRCB(isrhdl)               (isrhdl)
+#define _KERNEL_ISR_CHECK_EXS(isrid)                   (_kernel_isrcb_tbl[(isrid) - _KERNEL_TMIN_ISR_ISRID] != NULL)
+
+
+#define _KERNEL_ISR_GET_EXINF(isrhdl)                  (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->exinf)
+#define _KERNEL_ISR_SET_EXINF(isrhdl, x)               do { (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->exinf) = (x); } while (0)
+
+#define _KERNEL_ISR_GET_ISR(isrhdl)                            (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->isr)
+#define _KERNEL_ISR_SET_ISR(isrhdl, x)                 do { (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->isr) = (x); } while (0)
+
+#define _KERNEL_ISR_GET_NEXT(isrhdl)                   (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->next)
+#define _KERNEL_ISR_SET_NEXT(isrhdl, x)                        do { (_KERNEL_ISR_ISRPTR2ISRCB(isrhdl)->next) = (x); } while (0)
+
+
+
+
+/* ------------------------------------------ */
+/*                関数宣言                    */
+/* ------------------------------------------ */
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ER   _kernel_cre_isr(ID isrid, const T_CISR *pk_cisr);
+void _kernel_exe_isr(INTNO intno);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* _KERNEL__object__isrobj_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/object/mbxobj.h b/kernel/include/object/mbxobj.h
new file mode 100755 (executable)
index 0000000..1715465
--- /dev/null
@@ -0,0 +1,240 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  mbxobj.h
+ * @brief %jp{メールボックスオジェクトのヘッダファイル}%en{Mailbox object heder file}
+ *
+ * @version $Id: mbxobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__object__mbxobj_h__
+#define _KERNEL__object__mbxobj_h__
+
+
+
+/* ------------------------------------------ */
+/*  type definition                           */
+/* ------------------------------------------ */
+
+/* %jp{メールボックス属性用の型(4bit必要)} */
+#if _KERNEL_MBXCB_BITFIELD             /* %jp{MBXCBにビットフィールドを利用する場合 */
+
+#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_MBX_T_MBXATR;                   /**< %jp{メールボックス属性を演算操作するときの型} */
+typedef signed int                                             _KERNEL_MBXCB_T_MBXATR;                 /**< %jp{メールボックス属性をMBXCBに格納するときの型} */
+#define _KERNEL_TBITDEF_MBXCB_MBXATR   : 3 + 1                                                 /**< %jp{メールボックス属性のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_MBX_T_MBXATR;                   /**< %jp{メールボックス属性を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_MBXCB_T_MBXATR;                 /**< %jp{メールボックス属性をMBXCBに格納するときの型} */
+#define _KERNEL_TBITDEF_MBXCB_MBXATR   : 3                                                             /**< %jp{メールボックス属性のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{MBXCBにビットフィールドを利用しない場合 */
+
+#if _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_MBX_T_MBXATR;                   /**< %jp{メールボックス属性を演算操作するときの型} */
+typedef _KERNEL_T_OPT_B                                        _KERNEL_MBXCB_T_MBXATR;                 /**< %jp{メールボックス属性をMBXCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UB                              _KERNEL_MBX_T_MBXATR;                   /**< %jp{メールボックス属性を演算操作するときの型} */
+typedef _KERNEL_T_OPT_UB                               _KERNEL_MBXCB_T_MBXATR;                 /**< %jp{メールボックス属性をMBXCBに格納するときの型} */
+#endif
+
+#define _KERNEL_MBXCB_TBITDEF_MBXATR                                                                   /**< %jp{メールボックス属性のビットフィールド宣言時の幅} */
+
+#endif
+
+
+typedef        PRI             _KERNEL_MBX_T_MPRI;
+typedef        PRI             _KERNEL_MBXCB_T_MPRI;
+#define _KERNEL_MBXCB_TBITDEF_MPRI
+
+
+
+/* ------------------------------------------ */
+/*  Eventflag control block                   */
+/* ------------------------------------------ */
+
+#if _KERNEL_MBXCB_ROM
+
+/** %jp{メールボックスコントロールブロック(ROM部)} */
+typedef struct _kernel_t_mbxcb_rom
+{
+#if _KERNEL_MBXCB_MBXATR
+       _KERNEL_MBXCB_T_MBXATR  mbxatr          _KERNEL_TBITDEF_MBXCB_MBXPTN;           /**< %jp{メールボックス属性} */
+#endif
+
+#if _KERNEL_MBXCB_MAXMPRI
+       _KERNEL_MBXCB_T_MAXMPRI maxmpri         _KERNEL_TBITDEF_MBXCB_MAXMPRI;          /**< %jp{送信されるメッセージの優先度の最大値} */
+#endif
+
+} _KERNEL_MBXCB_T_ROM;
+
+
+/** %jp{メールボックスコントロールブロック(RAM部)} */
+typedef struct _kernel_t_mbxcb
+{
+#if _KERNEL_MBXCB_MSGQUE
+       VP                                              msgque;                                                                                 /**< %jp{メッセージキュー} */
+#endif
+
+#if _KERNEL_MBXCB_QUE
+       _KERNEL_T_QUE                   que;                                                                                    /**< %jp{タスクの待ち行列} */
+#endif
+} _KERNEL_T_MBXCB;
+
+
+#else
+
+
+/** %jp{メールボックスコントロールブロック} */
+typedef struct _kernel_t_mbxcb
+{
+#if _KERNEL_MBXCB_MSGQUE
+       VP                                              msgque;                                                                                 /**< %jp{メッセージキュー} */
+#endif
+
+#if _KERNEL_MBXCB_QUE
+       _KERNEL_T_QUE                   que;                                                                                    /**< %jp{タスクの待ち行列} */
+#endif
+
+#if _KERNEL_MBXCB_MBXATR
+       _KERNEL_MBXCB_T_MBXATR  mbxatr          _KERNEL_MBXCB_TBITDEF_MBXATR;           /**< %jp{メールボックス属性} */
+#endif
+
+#if _KERNEL_MBXCB_MAXMPRI
+       _KERNEL_MBXCB_T_MPRI    maxmpri         _KERNEL_MBXCB_TBITDEF_MPRI;                     /**< %jp{送信されるメッセージの優先度の最大値} */
+#endif
+} _KERNEL_T_MBXCB;
+
+#endif
+
+
+
+/* Eventflag handle */
+typedef _KERNEL_T_MBXCB*                               _KERNEL_T_MBXHDL;
+
+
+
+#if _KERNEL_MBXCB_ALGORITHM == _KERNEL_MBXCB_ALG_BLKARRAY                      /* block array */
+
+extern const ID                                                        _kernel_max_mbxid;                                      /** %jp{メールボックスコントロールブロック個数} */
+extern       _KERNEL_T_MBXCB                   _kernel_mbxcb_tbl[];                            /** %jp{メールボックスコントロールブロックテーブル} */
+
+#define _KERNEL_MBX_ID2MBXCB(mbxid)            (&_kernel_mbxcb_tbl[(mbxid) - _KERNEL_TMIN_MBX_ID])
+#define _KERNEL_MBX_ID2MBXHDL(mbxid)   _KERNEL_MBX_ID2MBXCB(mbxid)
+
+
+/* %jp{オブジェクトの存在チェック} */
+#define _KERNEL_MBX_CHECK_EXS(mbxid)   (_KERNEL_MBX_ID2MBXCB(mbxid)->mbxatr & _KERNEL_MBX_TA_CRE)
+#define _KERNEL_MBX_TA_CRE                             0x08
+
+
+#elif _KERNEL_MBXCB_ALGORITHM == _KERNEL_MBXCB_ALG_PTRARRAY            /* pointer array */
+
+extern const ID                                                        _kernel_max_mbxid;                                      /** %jp{メールボックスコントロールブロック個数} */
+extern       _KERNEL_T_MBXCB                   *_kernel_mbxcb_tbl[];                           /** %jp{メールボックスコントロールブロックテーブル} */
+
+#define _KERNEL_MBX_ID2MBXCB(mbxid)            (_kernel_mbxcb_tbl[(mbxid) - _KERNEL_TMIN_MBX_ID])
+#define _KERNEL_MBX_ID2MBXHDL(mbxid)   _KERNEL_MBX_ID2MBXCB(mbxid)
+                                                                                                                                       /** %jp{セマフォIDからMBXCB アドレスを取得} */
+
+/* %jp{オブジェクトの存在チェック} */
+#define _KERNEL_MBX_CHECK_EXS(mbxid)   (_KERNEL_MBX_ID2MBXCB(mbxid) != NULL)
+#define _KERNEL_MBX_TA_CRE                             0
+
+#endif
+
+
+/* %jp{ID範囲定義} */
+#define _KERNEL_TMIN_MBX_ID                            1
+#define _KERNEL_TMAX_MBX_ID                            (_kernel_max_mbxid)
+
+
+/* %jp{ID範囲チェック} */
+#define _KERNEL_MBX_CHECK_MBXID(mbxid) ((mbxid) >= _KERNEL_TMIN_MBX_ID && (mbxid) <= _KERNEL_TMAX_MBX_ID)
+
+
+
+
+/* ------------------------------------------ */
+/*   Accessor for MBXCB                       */
+/* ------------------------------------------ */
+
+/* que */
+#define _KERNEL_MBX_GET_QUE(mbxhdl)                    (&(mbxhdl)->que)
+
+/* mbxptn */
+#if _KERNEL_MBXCB_MSGQUE
+#define _KERNEL_MBX_SET_MSGQUE(mbxhdl, x)      do { (mbxhdl)->msgque = (VP)(x); } while (0)
+#define _KERNEL_MBX_GET_MSGQUE(mbxhdl)         ((VP)&(mbxhdl)->msgque)
+#else
+#define _KERNEL_MBX_SET_MSGQUE(mbxhdl, x)      do { } while (0)
+#define _KERNEL_MBX_GET_MSGQUE(mbxhdl)         (0)
+#endif
+
+/* mbxatr */
+#if _KERNEL_MBXCB_MBXATR
+#define _KERNEL_MBX_SET_MBXATR(mbxhdl, x)      do { (mbxhdl)->mbxatr = (_KERNEL_MBXCB_T_MBXATR)(x); } while (0)
+#define _KERNEL_MBX_GET_MBXATR(mbxhdl)         ((_KERNEL_MBX_T_MBXATR)(mbxhdl)->mbxatr)
+#else
+#define _KERNEL_MBX_SET_MBXATR(mbxhdl, x)      do { } while (0)
+#if _KERNEL_SPT_MBX_TA_TFIFO
+#define _KERNEL_MBX_GET_MBXATR(mbxhdl)         (TA_TFIFO)
+#else
+#define _KERNEL_MBX_GET_MBXATR(mbxhdl)         (TA_TPRI)
+#endif
+#endif
+
+#if _KERNEL_MBXCB_MAXMPRI
+#define _KERNEL_MBX_SET_MAXMPRI(mbxhdl, x)     do { (mbxhdl)->maxmpri = (_KERNEL_MBXCB_T_MPRI)(x); } while (0)
+#define _KERNEL_MBX_GET_MAXMPRI(mbxhdl)                ((_KERNEL_MBX_T_MPRI)(mbxhdl)->maxmpri)
+#else
+#define _KERNEL_MBX_SET_MAXMPRI(mbxhdl, x)     do { } while (0)
+#define _KERNEL_MBX_GET_MAXMPRI(mbxhdl)                (1)
+#endif
+
+
+
+/* %jp{キュー接続} */
+#if _KERNEL_SPT_MBX_TA_TFIFO && _KERNEL_SPT_MBX_TA_TPRI                /* %jp{TA_TFIFO と TA_TPRI の混在 } */
+#define _KERNEL_MBX_ADD_QUE(mbxhdl, tskhdl)            _kernel_add_que(_KERNEL_MBX_GET_QUE(mbxhdl), tskhdl, _KERNEL_MBX_GET_MBXATR(mbxhdl))
+#elif _KERNEL_SPT_MBX_TA_TFIFO && !_KERNEL_SPT_MBX_TA_TPRI     /* %jp{TA_TFIFO のみ利用 } */
+#define _KERNEL_MBX_ADD_QUE(mbxhdl, tskhdl)            _kernel_adf_que(_KERNEL_MBX_GET_QUE(mbxhdl), tskhdl)
+#elif !_KERNEL_SPT_MBX_TA_TFIFO && _KERNEL_SPT_MBX_TA_TPRI     /* %jp{TA_TPRI のみ利用 } */
+#define _KERNEL_MBX_ADD_QUE(mbxhdl, tskhdl)            _kernel_adp_que(_KERNEL_MBX_GET_QUE(mbxhdl), tskhdl)
+#else
+#error error:_KERNEL_SPT_MBX_TA_TPRI and _KERNEL_SPT_MBX_TA_TFIFO
+#endif
+
+/* %jp{タイムアウトキュー解除} */
+#if _KERNEL_SPT_TRCV_MBX       /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */
+#define _KERNEL_MBX_RMV_TOQ(tskhdl)                    _KERNEL_RMV_TOQ(tskhdl)
+#else
+#define _KERNEL_MBX_RMV_TOQ(tskhdl)                    do { } while (0)
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ER     _kernel_cre_mbx(ID mbxid, const T_CMBX *pk_cmbx);
+void   _kernel_add_msg(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg);
+T_MSG *_kernel_rmv_msg(_KERNEL_T_MBXHDL mbxhdl);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* _KERNEL__object__mbxobj_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/object/mpfobj.h b/kernel/include/object/mpfobj.h
new file mode 100755 (executable)
index 0000000..d7337e3
--- /dev/null
@@ -0,0 +1,415 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  mpfobj.h
+ * @brief %en{Semaphore object heder file}%jp{固定長メモリプールオジェクトのヘッダファイル}
+ *
+ * @version $Id: mpfobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__object__mpfobj_h__
+#define _KERNEL__object__mpfobj_h__
+
+
+
+/* ------------------------------------------ */
+/*  type definition                           */
+/* ------------------------------------------ */
+
+/* %jp{固定長メモリプールブロック数の型} */
+#if _KERNEL_MPFCB_BITFIELD             /* %jp{MPFCBにビットフィールドを利用する場合 */
+
+#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef signed int                                             _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#define _KERNEL_MPFCB_TBITDEF_BLKCNT   : _KERNEL_MPF_TBIT_BLKCNT + 1   /**< %jp{固定長メモリプールブロック数のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#define _KERNEL_MPFCB_TBITDEF_BLKCNT   : _KERNEL_MPF_TBIT_BLKCNT               /**< %jp{固定長メモリプールブロック数のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{MPFCBにビットフィールドを利用しない場合 */
+
+#if (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_B) && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef _KERNEL_T_OPT_B                                        _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef _KERNEL_T_OPT_UB                               _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_H) && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef _KERNEL_T_OPT_H                                        _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef _KERNEL_T_OPT_UH                               _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_W) && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef _KERNEL_T_OPT_W                                        _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef _KERNEL_T_OPT_UW                               _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKCNT <= _KERNEL_TMAX_D) && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef _KERNEL_T_OPT_D                                        _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_MPF_T_BLKCNT;                   /**< %jp{固定長メモリプールブロック数を演算操作するときの型} */
+typedef _KERNEL_T_OPT_UD                               _KERNEL_MPFCB_T_BLKCNT;                 /**< %jp{固定長メモリプールブロック数をMPFCBに格納するときの型} */
+#endif
+
+#define _KERNEL_MPFCB_TBITDEF_BLKCNT                                                                   /**< %jp{固定長メモリプールブロック数のビットフィールド宣言時の幅} */
+
+#endif
+
+
+/* %jp{固定長メモリプールブロックサイズの型} */
+#if _KERNEL_MPFCB_BITFIELD             /* %jp{MPFCBにビットフィールドを利用する場合 */
+
+#if _KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef signed int                                             _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#define _KERNEL_MPFCB_TBITDEF_BLKSZ    : _KERNEL_MPF_TBIT_BLKSZ + 1            /**< %jp{固定長メモリプールブロックサイズのビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#define _KERNEL_MPFCB_TBITDEF_BLKSZ    : _KERNEL_MPF_TBIT_BLKSZ                        /**< %jp{固定長メモリプールブロックサイズのビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{MPFCBにビットフィールドを利用しない場合 */
+
+#if (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_B) && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef _KERNEL_T_OPT_B                                        _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_UB) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef _KERNEL_T_OPT_UB                               _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_H) && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef _KERNEL_T_OPT_H                                        _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_UH) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef _KERNEL_T_OPT_UH                               _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_W) && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef _KERNEL_T_OPT_W                                        _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_UW) && !(_KERNEL_PROCATR_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef _KERNEL_T_OPT_UW                               _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#elif (_KERNEL_MPF_TMAX_BLKSZ <= _KERNEL_TMAX_D) && _KERNEL_PROCATR_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef _KERNEL_T_OPT_D                                        _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_MPF_T_BLKSZ;                    /**< %jp{固定長メモリプールブロックサイズを演算操作するときの型} */
+typedef _KERNEL_T_OPT_UD                               _KERNEL_MPFCB_T_BLKSZ;                  /**< %jp{固定長メモリプールブロックサイズをMPFCBに格納するときの型} */
+#endif
+
+#define _KERNEL_MPFCB_TBITDEF_BLKSZ                                                                            /**< %jp{固定長メモリプールブロックサイズのビットフィールド宣言時の幅} */
+
+#endif
+
+
+/* %jp{固定長メモリプール属性用の型} */
+#if _KERNEL_MPFCB_BITFIELD             /* %jp{MPFCBにビットフィールドを利用する場合 */
+
+/* %jp{TA_TFIFO と TA_TPRI の判定に 1bit 必要} */
+typedef unsigned int                                   _KERNEL_MPF_T_MPFATR;
+typedef unsigned int                                   _KERNEL_MPFCB_T_MPFATR;
+#define _KERNEL_MPFCB_TBITDEF_MPFATR   : 1
+
+#else                                                  /* %jp{MPFCBにビットフィールドを利用しない場合 */
+
+typedef _KERNEL_T_FAST_UB                              _KERNEL_MPF_T_MPFATR;
+typedef _KERNEL_T_OPT_UB                               _KERNEL_MPFCB_T_MPFATR;
+#define _KERNEL_MPFCB_TBITDEF_MPFATR
+
+#endif
+
+typedef VP                                                             _KERNEL_MPF_T_MPF;
+typedef VP                                                             _KERNEL_MPFCB_T_MPF;
+#define _KERNEL_MPFCB_TBITDEF_MPF              
+
+
+/* %jp{メモリブロックのハンドル} */
+#if _KERNEL_MPF_ALGORITHM == _KERNEL_MPF_ALG_CHAIN_PTR         /* %jp{ポインタ管理} */
+
+typedef VP                                                             _KERNEL_MPF_T_BLKHDL;
+typedef VP                                                             _KERNEL_MPFCB_T_BLKHDL;
+#define _KERNEL_MPFCB_TBITDEF_BLKHDL
+#define _KERNEL_MPF_BLKHDL_NULL                        NULL
+#define _KERNEL_MPF_BLKHDL2PTR(mpfhdl, blkhdl)         (blkhdl)
+#define _KERNEL_MPF_PTR2BLKHDL(mpfhdl, blkptr)         (blkptr)
+
+#elif _KERNEL_MPF_ALGORITHM == _KERNEL_MPF_ALG_CHAIN_NUM       /* %jp{ブロック番号管理} */
+
+typedef _KERNEL_MPF_T_BLKCNT                   _KERNEL_MPF_T_BLKHDL;
+typedef _KERNEL_MPFCB_T_BLKCNT                 _KERNEL_MPFCB_T_BLKHDL;
+#define _KERNEL_MPFCB_TBITDEF_BLKHDL   _KERNEL_MPFCB_TBITDEF_BLKCNT
+#define _KERNEL_MPF_BLKHDL_NULL                        0
+#define _KERNEL_MPF_BLKHDL2PTR(mpfhdl, blkhdl)         ((VP)((VB *)_KERNEL_MPF_GET_MPF(mpfhdl) + ((SIZE)((blkhdl) - 1) * (SIZE)_KERNEL_MPF_GET_BLKSZ(mpfhdl))))
+#define _KERNEL_MPF_PTR2BLKHDL(mpfhdl, blkptr)         (((VB *)(blkptr) - (VB *)_KERNEL_MPF_GET_MPF(mpfhdl)) / _KERNEL_MPF_GET_BLKSZ(mpfhdl) + 1)
+
+#endif
+
+
+/* ------------------------------------------ */
+/*  Control block                             */
+/* ------------------------------------------ */
+
+#if _KERNEL_MPFCB_ROM
+
+
+/** %jp{固定長メモリプールコントロールブロック(ROM部)} */
+typedef struct _kernel_t_mpfcb_rom
+{
+#if _KERNEL_MPFCB_MPFATR
+       _KERNEL_MPFCB_T_MPFATR  mpfatr          _KERNEL_MPFCB_TBITDEF_MPFATR;           /**< %jp{固定長メモリプール属性} */
+#endif
+
+#if _KERNEL_MPFCB_BLKCNT
+       _KERNEL_MPFCB_T_BLKCNT  blkcnt          _KERNEL_MPFCB_TBITDEF_BLKCNT;           /**< %jp{獲得できるメモリブロック数(個数)} */
+#endif
+
+#if _KERNEL_MPFCB_BLKSZ
+       _KERNEL_MPFCB_T_BLKCNT  blksz           _KERNEL_MPFCB_TBITDEF_BLKSZ;            /**< %jp{メモリブロックのサイズ(バイト数)} */
+#endif
+
+#if _KERNEL_MPFCB_MPF
+       _KERNEL_MPFCB_T_MPF             mpf                     _KERNEL_MPFCB_TBITDEF_MPF;                      /**< %jp{固定長メモリプール領域の先頭番地} */
+#endif
+} _KERNEL_MPFCB_T_ROM;
+
+/** %jp{固定長メモリプールコントロールブロック(RAM部)} */
+typedef struct _kernel_t_mpfcb
+{
+#if _KERNEL_MPFCB_QUE
+       _KERNEL_T_QUE                   que;                                                                                    /**< %jp{固定長メモリプール待ちタスクキュー} */
+#endif
+
+#if _KERNEL_MPFCB_FREBLK
+       _KERNEL_MPFCB_T_BLKHDL  freblk          _KERNEL_MPFCB_TBITDEF_BLKHDL;           /**< %jp{最初のメモリプールの空きメモリブロック位置} */
+#endif
+
+#if _KERNEL_MPFCB_FBLKCNT
+       _KERNEL_MPFCB_T_BLKCNT  fblkcnt         _KERNEL_MPFCB_TBITDEF_BLKCNT;           /**< %jp{固定長メモリプールの空きメモリブロック数(個数)} */
+#endif
+
+#if _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_PTRARRAY
+       _KERNEL_MPFCB_T_ROM             *mpfcb_rom;                                                                             /**< %jp{固定長メモリプールコントロールブロックROM部へのポインタ} */
+#endif
+} _KERNEL_T_MPFCB;
+
+
+#else
+
+
+/** %jp{固定長メモリプールコントロールブロック} */
+typedef struct _kernel_t_mpfcb
+{
+#if _KERNEL_MPFCB_QUE
+       _KERNEL_T_QUE                   que;                                                                                    /**< %jp{固定長メモリプール待ちタスクキュー} */
+#endif
+
+#if _KERNEL_MPFCB_FREBLK
+       _KERNEL_MPFCB_T_BLKHDL  freblk          _KERNEL_MPFCB_TBITDEF_BLKHDL;           /**< %jp{最初のメモリプールの空きメモリブロック位置} */
+#endif
+
+#if _KERNEL_MPFCB_FBLKCNT
+       _KERNEL_MPFCB_T_BLKCNT  fblkcnt         _KERNEL_MPFCB_TBITDEF_BLKCNT;           /**< %jp{固定長メモリプールの空きメモリブロック数(個数)} */
+#endif
+
+#if _KERNEL_MPFCB_MPFATR
+       _KERNEL_MPFCB_T_MPFATR  mpfatr          _KERNEL_MPFCB_TBITDEF_MPFATR;           /**< %jp{固定長メモリプール属性} */
+#endif
+
+#if _KERNEL_MPFCB_BLKCNT
+       _KERNEL_MPFCB_T_BLKCNT  blkcnt          _KERNEL_MPFCB_TBITDEF_BLKCNT;           /**< %jp{獲得できるメモリブロック数(個数)} */
+#endif
+
+#if _KERNEL_MPFCB_BLKSZ
+       _KERNEL_MPFCB_T_BLKSZ   blksz           _KERNEL_MPFCB_TBITDEF_BLKSZ;            /**< %jp{メモリブロックのサイズ(バイト数)} */
+#endif
+
+#if _KERNEL_MPFCB_MPF
+       _KERNEL_MPFCB_T_MPF             mpf                     _KERNEL_MPFCB_TBITDEF_MPF;                      /**< %jp{固定長メモリプール領域の先頭番地} */
+#endif
+} _KERNEL_T_MPFCB;
+
+#endif
+
+
+
+/* Fixed memory pool handle */
+typedef _KERNEL_T_MPFCB*                               _KERNEL_T_MPFHDL;
+
+
+
+#if _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_BLKARRAY                      /* block array */
+
+extern       _KERNEL_T_MPFCB                   _kernel_mpfcb_tbl[];                    /** %jp{固定長メモリプールコントロールブロックテーブル} */
+extern const ID                                                        _kernel_max_mpfid;                              /** %jp{固定長メモリプールコントロールブロック個数} */
+
+#define _KERNEL_MPF_ID2MPFCB(mpfid)            (&_kernel_mpfcb_tbl[(mpfid) - _KERNEL_MPF_TMIN_ID])                     /** %jp{固定長メモリプールIDからMPFCB アドレスを取得} */
+#define _KERNEL_MPF_ID2MPFHDL(mpfid)   (&_kernel_mpfcb_tbl[(mpfid) - _KERNEL_MPF_TMIN_ID])
+
+#define _KERNEL_MPF_MPFHDL2MPFCB(mpfhdl)       (mpfhdl)
+#define _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)    (mpfhdl)
+
+
+
+/* %jp{オブジェクトの存在チェック} */
+#define _KERNEL_MPF_CHECK_EXS(mpfid)   (_KERNEL_MPF_ID2MPFHDL(mpfid)->mpf != NULL)
+
+
+
+#elif _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_PTRARRAY            /* pointer array */
+
+extern       _KERNEL_T_MPFCB                   *_kernel_mpfcb_tbl[];                   /**< %jp{固定長メモリプールコントロールブロックテーブル} */
+extern const ID                                                        _kernel_max_mpfid;                              /**< %jp{固定長メモリプールコントロールブロック個数} */
+
+#define _KERNEL_MPF_ID2MPFCB(mpfid)            (_kernel_mpfcb_tbl[(mpfid) - _KERNEL_MPF_TMIN_ID])
+                                                                                                                                               /**< %jp{固定長メモリプールIDからMPFCB アドレスを取得} */
+#define _KERNEL_MPF_ID2MPFHDL(mpfid)   (_kernel_mpfcb_tbl[(mpfid) - _KERNEL_MPF_TMIN_ID])
+                                                                                                                                               /**< %jp{固定長メモリプールIDからMPFハンドルを取得} */
+
+/* %jp{オブジェクトの存在チェック} */
+#define _KERNEL_MPF_CHECK_EXS(mpfid)   (_KERNEL_MPF_ID2MPFHDL(mpfid) != NULL)
+
+#endif
+
+
+
+/* %jp{ID範囲定義} */
+#define _KERNEL_MPF_TMIN_ID                            1
+#define _KERNEL_MPF_TMAX_ID                            (_kernel_max_mpfid)
+
+/* %jp{ID範囲チェック} */
+#define _KERNEL_MPF_CHECK_MPFID(mpfid) ((mpfid) >= _KERNEL_MPF_TMIN_ID && (mpfid) <= _KERNEL_MPF_TMAX_ID)
+
+
+
+
+/* ------------------------------------------ */
+/*   Accessor for MPFCB                       */
+/* ------------------------------------------ */
+
+/* que */
+#define _KERNEL_MPF_GET_QUE(mpfhdl)                    (&(mpfhdl)->que)
+
+
+/* freblk */
+#if _KERNEL_MPFCB_FREBLK
+#define _KERNEL_MPF_SET_FREBLK(mpfhdl, x)      do { _KERNEL_MPF_MPFHDL2MPFCB(mpfhdl)->freblk = (_KERNEL_MPFCB_T_BLKHDL)(x); } while (0)
+#define _KERNEL_MPF_GET_FREBLK(mpfhdl)         ((_KERNEL_MPF_T_BLKHDL)_KERNEL_MPF_MPFHDL2MPFCB(mpfhdl)->freblk)
+#else
+#define _KERNEL_MPF_SET_FREBLK(mpfhdl, x)      do { } while (0)
+#define _KERNEL_MPF_GET_FREBLK(mpfhdl)         (0)
+#endif
+
+/* fblkcnt */
+#if _KERNEL_MPFCB_FBLKCNT
+#define _KERNEL_MPF_SET_FBLKCNT(mpfhdl, x)     do { _KERNEL_MPF_MPFHDL2MPFCB(mpfhdl)->fblkcnt = (_KERNEL_MPFCB_T_BLKCNT)(x); } while (0)
+#define _KERNEL_MPF_GET_FBLKCNT(mpfhdl)                ((_KERNEL_MPF_T_BLKCNT)_KERNEL_MPF_MPFHDL2MPFCB(mpfhdl)->fblkcnt)
+#else
+#define _KERNEL_MPF_SET_FBLKCNT(mpfhdl, x)     do { } while (0)
+#define _KERNEL_MPF_GET_FBLKCNT(mpfhdl)                (0)
+#endif
+
+
+/* mpfatr */
+#if _KERNEL_MPFCB_MPFATR
+#define _KERNEL_MPF_SET_MPFATR(mpfhdl, x)      do { _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->mpfatr = (_KERNEL_MPFCB_T_MPFATR)(x); } while (0)
+#define _KERNEL_MPF_GET_MPFATR(mpfhdl)         ((_KERNEL_MPF_T_MPFATR)_KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->mpfatr)
+#else
+#define _KERNEL_MPF_SET_MPFATR(mpfhdl, x)      do { } while (0)
+#if _KERNEL_SPT_MPF_TA_TFIFO
+#define _KERNEL_MPF_GET_MPFATR(mpfhdl)         (TA_TFIFO)
+#else
+#define _KERNEL_MPF_GET_MPFATR(mpfhdl)         (TA_TPRI)
+#endif
+#endif
+
+/* blkcnt */
+#if _KERNEL_MPFCB_BLKCNT
+#define _KERNEL_MPF_SET_BLKCNT(mpfhdl, x)      do { _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->blkcnt = (_KERNEL_MPFCB_T_BLKCNT)(x); } while (0)
+#define _KERNEL_MPF_GET_BLKCNT(mpfhdl)         ((_KERNEL_MPF_T_BLKCNT)_KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->blkcnt)
+#else
+#define _KERNEL_MPF_SET_BLKCNT(mpfhdl, x)      do { } while (0)
+#define _KERNEL_MPF_GET_BLKCNT(mpfhdl)         (0)
+#endif
+
+/* blksz */
+#if _KERNEL_MPFCB_BLKSZ
+#define _KERNEL_MPF_SET_BLKSZ(mpfhdl, x)       do { _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->blksz = (_KERNEL_MPFCB_T_BLKCNT)(x); } while (0)
+#define _KERNEL_MPF_GET_BLKSZ(mpfhdl)          ((_KERNEL_MPF_T_BLKCNT)_KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->blksz)
+#else
+#define _KERNEL_MPF_SET_BLKSZ(mpfhdl, x)       do { } while (0)
+#define _KERNEL_MPF_GET_BLKSZ(mpfhdl)          (_KERNEL_TMAX_BLKCNT)
+#endif
+
+/* mpf */
+#if _KERNEL_MPFCB_MPF
+#define _KERNEL_MPF_SET_MPF(mpfhdl, x)         do { _KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->mpf = (_KERNEL_MPFCB_T_MPF)(x); } while (0)
+#define _KERNEL_MPF_GET_MPF(mpfhdl)                    ((_KERNEL_MPF_T_MPF)_KERNEL_MPF_MPFHDL2MPFCBROM(mpfhdl)->mpf)
+#else
+#define _KERNEL_MPF_SET_MPF(mpfhdl, x)         do { } while (0)
+#define _KERNEL_MPF_GET_MPF(mpfhdl)                    (_KERNEL_TMAX_BLKCNT)
+#endif
+
+
+
+
+/* %jp{キュー接続} */
+#if _KERNEL_SPT_MPF_TA_TFIFO && _KERNEL_SPT_MPF_TA_TPRI                /* %jp{TA_TFIFO と TA_TPRI の混在 } */
+#define _KERNEL_MPF_ADD_QUE(semhdl, tskhdl)    _KERNEL_ADD_QUE(_KERNEL_MPF_GET_QUE(semhdl), tskhdl, _KERNEL_MPF_GET_MPFATR(semhdl))
+#elif _KERNEL_SPT_MPF_TA_TFIFO && !_KERNEL_SPT_SE_TA_TPRI      /* %jp{TA_TFIFO のみ利用 } */
+#define _KERNEL_MPF_ADD_QUE(semhdl, tskhdl)    _KERNEL_ADF_QUE(_KERNEL_MPF_GET_QUE(semhdl), tskhdl)
+#elif !_KERNEL_SPT_MPF_TA_TFIFO && _KERNEL_SPT_MPF_TA_TPRI     /* %jp{TA_TPRI のみ利用 } */
+#define _KERNEL_MPF_ADD_QUE(semhdl, tskhdl)    _KERNEL_ADP_QUE(_KERNEL_MPF_GET_QUE(semhdl), tskhdl)
+#else
+#error error:_KERNEL_SPT_MPF_TA_TPRI and _KERNEL_SPT_MPF_TA_TFIFO
+#endif
+
+/* %jp{キュー取り外し} */
+#define _KERNEL_MPF_RMV_QUE(semhdl, tskhdl)    _KERNEL_RMV_QUE(semhdl, tskhdl)
+
+/* %jp{キュー先頭取り出し} */
+#define _KERNEL_MPF_RMH_QUE(semhdl)                    _KERNEL_RMH_QUE(semhdl)
+
+
+/* %jp{タイムアウトキュー接続} */
+#if _KERNEL_SPT_TGET_MPF       /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */
+#define _KERNEL_MPF_ADD_TOQ(tskhdl, tmout)     _KERNEL_ADD_TOQ(tskhdl, tmout)
+#else
+#define _KERNEL_MPF_ADD_TOQ(tskhdl)                    do { } while (0)
+#endif
+
+/* %jp{タイムアウトキュー取り外し} */
+#if _KERNEL_SPT_TGET_MPF       /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */
+#define _KERNEL_MPF_RMV_TOQ(tskhdl)                    _KERNEL_RMV_TOQ(tskhdl)
+#else
+#define _KERNEL_MPF_RMV_TOQ(tskhdl)                    do { } while (0)
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ER _kernel_cre_mpf(ID mpfid, const T_CMPF *pk_cmpf);   /**< %jp{固定長メモリプール生成} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
+#endif /* _KERNEL__object__mpfobj_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/object/semobj.h b/kernel/include/object/semobj.h
new file mode 100755 (executable)
index 0000000..b010da1
--- /dev/null
@@ -0,0 +1,311 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  knl_sem.h
+ * @brief %en{Semaphore object heder file}%jp{セマフォオジェクトのヘッダファイル}
+ *
+ * @version $Id: semobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__object__semobj_h__
+#define _KERNEL__object__semobj_h__
+
+
+
+/* ------------------------------------------ */
+/*  Primitive type definition                 */
+/* ------------------------------------------ */
+
+/* %jp{セマフォカウンタ値用の型} */
+#if _KERNEL_SEMCB_BITFIELD             /* %jp{SEMCBにビットフィールドを利用する場合 */
+
+#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE     /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef signed int                                             _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#define _KERNEL_SEMCB_TBITDEF_SEMCNT   : (_KERNEL_SEM_TBIT_SEMCNT+1)   /**< %jp{セマフォカウンタのビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#define _KERNEL_SEMCB_TBITDEF_SEMCNT   : _KERNEL_SEM_TBIT_SEMCNT               /**< %jp{セマフォカウンタのビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{SEMCBにビットフィールドを利用しない場合 */
+
+#if (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_H                              _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UH                             _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_W                              _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UW                             _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#elif (_KERNEL_SEM_TMAX_SEMCNT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_D                              _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_SEM_T_SEMCNT;                   /**< %jp{セマフォカウンタを演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UD                             _KERNEL_SEMCB_T_SEMCNT;                 /**< %jp{セマフォカウンタをSEMCBに格納するときの型} */
+#endif
+#define _KERNEL_SEMCB_TBITDEF_SEMCNT                                                                   /**< %jp{セマフォカウンタのビットフィールド宣言時の幅} */
+
+#endif
+
+
+/* %jp{セマフォ属性用の型} */
+#if _KERNEL_SEMCB_BITFIELD             /* %jp{SEMCBにビットフィールドを利用する場合 */
+
+/* %jp{TA_TFIFO と TA_TPRI の判定に 1bit 必要} */
+typedef unsigned int                                   _KERNEL_SEM_T_SEMATR;
+typedef unsigned int                                   _KERNEL_SEMCB_T_SEMATR;
+#define _KERNEL_SEMCB_TBITDEF_SEMATR   : 1
+
+#else                                                  /* %jp{SEMCBにビットフィールドを利用しない場合 */
+
+typedef _KERNEL_T_FAST_UB                              _KERNEL_SEM_T_SEMATR;
+typedef _KERNEL_T_OPT_UB                               _KERNEL_SEMCB_T_SEMATR;
+#define _KERNEL_SEMCB_TBITDEF_SEMATR
+
+#endif
+
+
+
+/* ------------------------------------------ */
+/*  Control block                             */
+/* ------------------------------------------ */
+
+#if _KERNEL_SEMCB_SPLIT_RO
+
+/** %jp{セマフォコントロールブロック(リードオンリー部)}%en{Semaphore Control Block(read-only)} */
+typedef struct _kernel_t_semcb_ro
+{
+#if _KERNEL_SEMCB_SEMATR
+       _KERNEL_SEMCB_T_SEMATR  sematr          _KERNEL_SEMCB_TBITDEF_SEMATR;           /**< %jp{セマフォ属性} */
+#endif
+
+#if _KERNEL_SEMCB_MAXSEM
+       _KERNEL_SEMCB_T_SEMCNT  maxsem          _KERNEL_SEMCB_TBITDEF_SEMCNT;           /**< %jp{セマフォの最大資源数} */
+#endif
+} _KERNEL_T_SEMCB_RO;
+
+/** %jp{セマフォコントロールブロック}%en{Semaphore Control Block} */
+typedef struct _kernel_t_semcb
+{
+       _KERNEL_T_QUE                   que;                                                                                    /**< %jp{セマフォ待ちタスクキュー} */
+
+#if _KERNEL_SEMCB_SEMCNT
+       _KERNEL_SEMCB_T_SEMCNT  semcnt          _KERNEL_SEMCB_TBITDEF_SEMCNT;           /**< %jp{セマフォの資源数} */
+#endif
+
+
+#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY
+       const _KERNEL_T_SEMCB_RO        *semcb_ro;                                                                      /**< %jp{セマフォコントロールブロックROM部へのポインタ} */
+#endif
+} _KERNEL_T_SEMCB;
+
+
+#else
+
+
+/** %jp{セマフォコントロールブロック}%en{Semaphore Control Block} */
+typedef struct _kernel_t_semcb
+{
+#if _KERNEL_SEMCB_QUE
+       _KERNEL_T_QUE                   que;                                                                                    /**< %jp{セマフォ待ちタスクキュー} */
+#endif
+
+#if _KERNEL_SEMCB_SEMCNT
+       _KERNEL_SEMCB_T_SEMCNT  semcnt          _KERNEL_SEMCB_TBITDEF_SEMCNT;           /**< %jp{セマフォの資源数} */
+#endif
+
+#if _KERNEL_SEMCB_SEMATR
+       _KERNEL_SEMCB_T_SEMATR  sematr          _KERNEL_SEMCB_TBITDEF_SEMATR;           /**< %jp{セマフォ属性} */
+#endif
+
+#if _KERNEL_SEMCB_MAXSEM
+       _KERNEL_SEMCB_T_SEMCNT  maxsem          _KERNEL_SEMCB_TBITDEF_SEMCNT;           /**< %jp{セマフォの最大資源数} */
+#endif
+} _KERNEL_T_SEMCB;
+
+typedef _KERNEL_T_SEMCB                _KERNEL_T_SEMCB_RO;
+
+#endif
+
+
+
+/* ------------------------------------------ */
+/*  ID range                                  */
+/* ------------------------------------------ */
+
+extern const ID                                                        _kernel_max_semid;                                                                              /**< %jp{セマフォIDの最大値} */
+
+#define _KERNEL_SEM_TMIN_ID                            1                                                                                                               /**< %jp{セマフォIDの最小値} */
+#define _KERNEL_SEM_TMAX_ID                            (_kernel_max_semid)                                                                             /**< %jp{セマフォIDの最大値} */
+
+#define _KERNEL_SEM_CHECK_SEMID(semid) ((semid) >= _KERNEL_SEM_TMIN_ID && (semid) <= _KERNEL_SEM_TMAX_ID)
+                                                                                                                                                                                               /**< %jp{ID範囲チェック} */
+
+
+/* ------------------------------------------ */
+/*  Control block tables                      */
+/* ------------------------------------------ */
+
+#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY
+#if _KERNEL_SEMCB_SPLIT_RO
+
+/* %jp{ブロック配列管理でRO分離の場合}%en{block array} */
+extern  _KERNEL_T_SEMCB                                        _kernel_semcb_tbl[];                                                                    /**< %jp{セマフォコントロールブロックテーブル} */
+extern const _KERNEL_T_SEMCB_RO                        _kernel_semcb_ro_tbl[];                                                                 /**< %jp{セマフォコントロールブロック(リードオンリー部)テーブル} */
+#define _KERNEL_SEM_ID2SEMCB(semid)            (&_kernel_semcb_tbl[(semid) - _KERNEL_SEM_TMIN_ID])             /**< %jp{コントロールブロックの取得} */
+#define _KERNEL_SEM_CHECK_EXS(semid)   (_kernel_semcb_ro_tbl[(semid) - _KERNEL_SEM_TMIN_ID].maxsem > 0)                                
+                                                                                                                                                                                               /**< %jp{オブジェクトの存在チェック} */
+
+#else
+
+/* %jp{ブロック配列管理の場合}%en{block array} */
+extern  _KERNEL_T_SEMCB                                        _kernel_semcb_tbl[];                                                                    /**< %jp{セマフォコントロールブロックテーブル} */
+#define _KERNEL_SEM_ID2SEMCB(semid)            (&_kernel_semcb_tbl[(semid) - _KERNEL_SEM_TMIN_ID])             /**< %jp{コントロールブロックの取得} */
+#define _KERNEL_SEM_CHECK_EXS(semid)   (_kernel_semcb_tbl[(semid) - _KERNEL_SEM_TMIN_ID].maxsem > 0)                           
+                                                                                                                                                                                               /**< %jp{オブジェクトの存在チェック} */
+
+#endif
+
+#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY
+
+/* %jp{ポインタ配列管理の場合}%en{pointer array} */
+extern  _KERNEL_T_SEMCB                                        *_kernel_semcb_tbl[];                                                                   /**< %jp{セマフォコントロールブロックテーブル} */
+#define _KERNEL_SEM_ID2SEMCB(semid)            (_kernel_semcb_tbl[(semid) - _KERNEL_TMIN_SEMID])               /**< %jp{セマフォIDからSEMCB アドレスを取得} */
+#define _KERNEL_SEM_CHECK_EXS(semid)   (_KERNEL_SEM_ID2SEMCB(semid) != NULL)                                   /**< %jp{オブジェクトの存在チェック} */
+
+#endif
+
+
+
+/* ------------------------------------------ */
+/*   Accessor for SEMCB                       */
+/* ------------------------------------------ */
+
+/* semcb_ro */
+#if !_KERNEL_SEMCB_SPLIT_RO                                                            
+#define _KERNEL_SEM_GET_SEMCB_RO(semid, semcb) (semcb)
+#else
+#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY              /* %jp{SEMCBを単純配列で管理}%en{array of block} */
+#define _KERNEL_SEM_GET_SEMCB_RO(semid, semcb) (&_kernel_semcb_ro_tbl[(semid)])
+#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY            /* %jp{SEMCBをポインタ配列で管理}%en{array of pointer} */
+#define _KERNEL_SEM_GET_SEMCB_RO(semid, semcb) ((semcb)->semcb_ro)
+#endif
+#endif
+
+
+/* que */
+#define _KERNEL_SEM_GET_QUE(semcb)                     (&(semcb)->que)
+
+
+/* semcnt */
+#if _KERNEL_SEMCB_SEMCNT
+#define _KERNEL_SEM_SET_SEMCNT(semcb, x)       do { (semcb)->semcnt = (_KERNEL_SEMCB_T_SEMCNT)(x); } while (0)
+#define _KERNEL_SEM_GET_SEMCNT(semcb)          ((_KERNEL_SEM_T_SEMCNT)(semcb)->semcnt)
+#else
+#define _KERNEL_SEM_SET_SEMCNT(semcb, x)       do { } while (0)
+#define _KERNEL_SEM_GET_SEMCNT(semcb)          (0)
+#endif
+
+
+/* sematr */
+#if _KERNEL_SEMCB_SEMATR
+#define _KERNEL_SEM_SET_SEMATR(semcb, x)       do { (semcb)->sematr = (_KERNEL_SEMCB_T_SEMATR)(x); } while (0)
+#define _KERNEL_SEM_GET_SEMATR(semcb)          ((_KERNEL_SEM_T_SEMATR)(semcb)->sematr)
+#else
+#define _KERNEL_SEM_SET_SEMATR(semcb, x)       do { } while (0)
+#if _KERNEL_SPT_SEM_TA_TFIFO
+#define _KERNEL_SEM_GET_SEMATR(semcb)          (TA_TFIFO)
+#else
+#define _KERNEL_SEM_GET_SEMATR(semcb)          (TA_TPRI)
+#endif
+#endif
+
+
+/* maxsem */
+#if _KERNEL_SEMCB_MAXSEM
+#define _KERNEL_SEM_SET_MAXSEM(semcb_ro, x)    do { (semcb_ro)->maxsem = (_KERNEL_SEMCB_T_SEMCNT)(x); } while (0)
+#define _KERNEL_SEM_GET_MAXSEM(semcb_ro)       ((_KERNEL_SEM_T_SEMCNT)(semcb_ro)->maxsem)
+#else
+#define _KERNEL_SEM_SET_MAXSEM(semcb_ro, x)    do { } while (0)
+#define _KERNEL_SEM_GET_MAXSEM(semcb_ro)       (_KERNEL_TMAX_SEMCNT)
+#endif
+
+
+
+/* ------------------------------------------ */
+/*   Macro functions                          */
+/* ------------------------------------------ */
+
+/* %jp{キュー接続} */
+#if _KERNEL_SPT_SEM_TA_TFIFO && _KERNEL_SPT_SEM_TA_TPRI                /* %jp{TA_TFIFO と TA_TPRI の混在 } */
+#define _KERNEL_SEM_ADD_QUE(semcb, semcb_ro, tskhdl)   _KERNEL_ADD_QUE(_KERNEL_SEM_GET_QUE(semcb), tskhdl, _KERNEL_SEM_GET_SEMATR(semcb_ro))
+#elif _KERNEL_SPT_SEM_TA_TFIFO && !_KERNEL_SPT_SE_TA_TPRI      /* %jp{TA_TFIFO のみ利用 } */
+#define _KERNEL_SEM_ADD_QUE(semcb, semcb_ro, tskhdl)   _KERNEL_ADF_QUE(_KERNEL_SEM_GET_QUE(semcb), tskhdl)
+#elif !_KERNEL_SPT_SEM_TA_TFIFO && _KERNEL_SPT_SEM_TA_TPRI     /* %jp{TA_TPRI のみ利用 } */
+#define _KERNEL_SEM_ADD_QUE(semcb, semcb_ro, tskhdl)   _KERNEL_ADP_QUE(_KERNEL_SEM_GET_QUE(semcb), tskhdl)
+#else
+#error error:_KERNEL_SPT_SEM_TA_TPRI and _KERNEL_SPT_SEM_TA_TFIFO
+#endif
+
+/* %jp{キュー取り外し} */
+#define _KERNEL_SEM_RMV_QUE(semcb, tskhdl)     _KERNEL_RMV_QUE(semcb, tskhdl)
+
+/* %jp{キュー先頭取り出し} */
+#define _KERNEL_SEM_RMH_QUE(semcb)                     _KERNEL_RMH_QUE(semcb)
+
+
+/* %jp{タイムアウトキュー接続} */
+#if _KERNEL_SPT_TWAI_SEM       /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */
+#define _KERNEL_SEM_ADD_TOQ(tskhdl, tmout)     _KERNEL_ADD_TOQ(tskhdl, tmout)
+#else
+#define _KERNEL_SEM_ADD_TOQ(tskhdl)                    do { } while (0)
+#endif
+
+/* %jp{タイムアウトキュー取り外し} */
+#if _KERNEL_SPT_TWAI_SEM       /* %jp{twai_semサポート時はタイムアウトキューも考慮する} */
+#define _KERNEL_SEM_RMV_TOQ(tskhdl)                    _KERNEL_RMV_TOQ(tskhdl)
+#else
+#define _KERNEL_SEM_RMV_TOQ(tskhdl)                    do { } while (0)
+#endif
+
+
+
+/* ------------------------------------------ */
+/*   Functions                                */
+/* ------------------------------------------ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ER _kernel_cre_sem(ID semid, const T_CSEM *pk_csem);   /**< %jp{セマフォ生成}%en{Create Semaphore} */
+ER _kernel_wai_sem(ID semid, TMO tmout);                               /**< %jp{セマフォ資源の獲得(統合版)}%en{Acquire Semaphore Resource} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+
+#endif /* _KERNEL__object__semobj_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/object/tskobj.h b/kernel/include/object/tskobj.h
new file mode 100755 (executable)
index 0000000..fbb8b5d
--- /dev/null
@@ -0,0 +1,959 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  knl_que.h
+ * @brief %jp{タスクブジェクトのヘッダファイル}%en{task object heder file}
+ *
+ * @version $Id: tskobj.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__object__tskobj_h__
+#define _KERNEL__object__tskobj_h__
+
+
+
+/* ------------------------------------------ */
+/*  Primitive type definition                 */
+/* ------------------------------------------ */
+
+/* %jp{タスクハンドルの型}%en{Task-handle} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合 */
+typedef int                                                            _KERNEL_TCB_T_TSKHDL;                   /**< %jp{タスクハンドルをTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TSKHDL             : _KERNEL_TBIT_TSKHDL                   /**< %jp{タスクハンドルのビットフィールド宣言時の幅} */
+#else
+typedef _KERNEL_T_TSKHDL                               _KERNEL_TCB_T_TSKHDL;                   /**< %jp{タスクハンドルをTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TSKHDL                                                                             /**< %jp{タスクハンドルのビットフィールド宣言時の幅} */
+#endif
+
+
+/* %jp{タスク状態の型}%en{Task-state} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合 */
+
+#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE     /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_TSKSTAT;                  /**< %jp{タスク状態を演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_TSKSTAT;                  /**< %jp{タスク状態をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TSKSTAT            : (_KERNEL_TSK_TBIT_TSKSTAT+1)  /**< %jp{タスク状態のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TSK_T_TSKSTAT;                  /**< %jp{タスク状態を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TCB_T_TSKSTAT;                  /**< %jp{タスク状態をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TSKSTAT            : _KERNEL_TSK_TBIT_TSKSTAT              /**< %jp{タスク状態のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TCBにビットフィールドを利用しない場合 */
+
+#if _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_TSKSTAT;                  /**< %jp{タスク状態を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_TSKSTAT;                  /**< %jp{タスク状態をTCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_TSKSTAT;                  /**< %jp{タスク状態を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_TSKSTAT;                  /**< %jp{タスク状態をTCBに格納するときの型} */
+#endif
+#define _KERNEL_TCB_TBITDEF_TSKSTAT                                                                            /**< %jp{タスク状態のビットフィールド宣言時の幅} */
+
+#endif
+
+
+/* %jp{タスク優先度の型}%en{Task priopity} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE     /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TPRI               : (_KERNEL_TSK_TBIT_TPRI+1)             /**< %jp{タスク優先度のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TPRI               : _KERNEL_TSK_TBIT_TPRI                 /**< %jp{タスク優先度のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TCBにビットフィールドを利用しない場合} */
+
+#if (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_H                              _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UH                             _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_W                              _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UW                             _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TPRI <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_D                              _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_TSK_T_TPRI;                             /**< %jp{タスク優先度を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UD                             _KERNEL_TCB_T_TPRI;                             /**< %jp{タスク優先度をTCBに格納するときの型} */
+#endif
+#define _KERNEL_TCB_TBITDEF_TPRI                                                                               /**< %jp{タスク優先度のビットフィールド宣言時の幅} */
+
+#endif
+
+
+/* %jp{タスク待ち要因}%en{Task wait} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE     /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TSKWAIT            : (_KERNEL_TSK_TBIT_TSKWAIT+1)  /**< %jp{タスク待ち要因のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_TSKWAIT            : _KERNEL_TSK_TBIT_TSKWAIT              /**< %jp{タスク待ち要因のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TCBにビットフィールドを利用しない場合} */
+
+#if (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_H                              _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UH                             _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_W                              _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UW                             _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_TSKWAIT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_D                              _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_TSK_T_TSKWAIT;                  /**< %jp{タスク待ち要因を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UD                             _KERNEL_TCB_T_TSKWAIT;                  /**< %jp{タスク待ち要因をTCBに格納するときの型} */
+#endif
+#define _KERNEL_TCB_TBITDEF_TSKWAIT                                                                            /**< %jp{タスク待ち要因のビットフィールド宣言時の幅} */
+
+#endif
+
+
+/* %jp{待ち対象のオブジェクトのID番号}%jp{Waitbject-ID} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE     /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_WOBJID             : (_KERNEL_TSK_TBIT_WOBJID+1)   /**< %jp{待ち対象のオブジェクトのID番号のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_WOBJID             : _KERNEL_TSK_TBIT_WOBJID               /**< %jp{待ち対象のオブジェクトのID番号のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TCBにビットフィールドを利用しない場合} */
+
+#if (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_H                              _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UH                             _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_W                              _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UW                             _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WOBJID <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_D                              _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_TSK_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UD                             _KERNEL_TCB_T_WOBJID;                   /**< %jp{待ち対象のオブジェクトのID番号をTCBに格納するときの型} */
+#endif
+#define _KERNEL_TCB_TBITDEF_WOBJID                                                                             /**< %jp{待ち対象のオブジェクトのID番号のビットフィールド宣言時の幅} */
+
+#endif
+
+
+/* %jp{起動要求キューイング数}%en{Activate queuing count} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE     /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_ACTCNT             : (_KERNEL_TSK_TBIT_ACTCNT+1)   /**< %jp{起動要求キューイング数のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_ACTCNT             : _KERNEL_TSK_TBIT_ACTCNT               /**< %jp{起動要求キューイング数のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TCBにビットフィールドを利用しない場合} */
+
+#if (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_H                              _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UH                             _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_W                              _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UW                             _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_ACTCNT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_D                              _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_TSK_T_ACTCNT;                   /**< %jp{起動要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UD                             _KERNEL_TCB_T_ACTCNT;                   /**< %jp{起動要求キューイング数をTCBに格納するときの型} */
+#endif
+#define _KERNEL_TCB_TBITDEF_ACTCNT                                                                             /**< %jp{起動要求キューイング数のビットフィールド宣言時の幅} */
+
+#endif
+
+
+/*  %jp{起床要求キューイング数}%en{Wakeup queuing count} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE     /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_WUPCNT             : (_KERNEL_TSK_TBIT_WUPCNT+1)   /**< %jp{起床要求キューイング数のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_WUPCNT             : _KERNEL_TSK_TBIT_WUPCNT               /**< %jp{起床要求キューイング数のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TCBにビットフィールドを利用しない場合} */
+
+#if (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_H                              _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UH                             _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_W                              _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UW                             _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_WUPCNT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_D                              _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_TSK_T_WUPCNT;                   /**< %jp{起床要求キューイング数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UD                             _KERNEL_TCB_T_WUPCNT;                   /**< %jp{起床要求キューイング数をTCBに格納するときの型} */
+#endif
+#define _KERNEL_TCB_TBITDEF_WUPCNT                                                                             /**< %jp{起床要求キューイング数のビットフィールド宣言時の幅} */
+
+#endif
+
+
+/*  %jp{強制待ち要求ネスト数}%en{Suspend nest count} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE     /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_SUSCNT             : (_KERNEL_TSK_TBIT_SUSCNT+1)   /**< %jp{強制待ち要求ネスト数のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_SUSCNT             : _KERNEL_TSK_TBIT_SUSCNT               /**< %jp{強制待ち要求ネスト数のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TCBにビットフィールドを利用しない場合} */
+
+#if (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_H                              _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UH                             _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_W                              _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UW                             _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_SUSCNT <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_D                              _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_TSK_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UD                             _KERNEL_TCB_T_SUSCNT;                   /**< %jp{強制待ち要求ネスト数をTCBに格納するときの型} */
+#endif
+#define _KERNEL_TCB_TBITDEF_SUSCNT                                                                             /**< %jp{強制待ち要求ネスト数のビットフィールド宣言時の幅} */
+
+#endif
+
+
+/*  %jp{タスクデータ}%en{Task data} */
+#if _KERNEL_TCB_BITFIELD                       /* %jp{TCBにビットフィールドを利用する場合} */
+
+typedef VP_INT                                                 _KERNEL_TSK_T_DATA;
+typedef int                                                            _KERNEL_TCB_T_DATA;
+#define _KERNEL_TCB_TBITDEF_DATA               : _KERNEL_TSK_TBIT_DATA
+
+#else                                                          /* %jp{TCBにビットフィールドを利用しない場合} */
+
+typedef VP_INT                                                 _KERNEL_TSK_T_DATA;
+typedef VP_INT                                                 _KERNEL_TCB_T_DATA;
+#define _KERNEL_TCB_TBITDEF_DATA
+
+#endif
+
+
+/*  %jp{エラーコード}%en{Error code} */
+#if _KERNEL_TCB_BITFIELD                       /* %jp{TCBにビットフィールドを利用する場合 */
+
+typedef signed int                                             _KERNEL_TSK_T_ERCD;
+typedef signed int                                             _KERNEL_TCB_T_ERCD;
+#define _KERNEL_TCB_TBITDEF_ERCD               : _KERNEL_TSK_TBIT_ERCD
+
+#else                                                          /* %jp{TCBにビットフィールドを利用しない場合} */
+
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_ERCD;
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_ERCD;
+#define _KERNEL_TCB_TBITDEF_ERCD
+
+#endif
+
+
+/* %jp{タスク属性}%en{Task attribute} */
+typedef ATR                                                            _KERNEL_TSK_T_TSKATR;
+typedef ATR                                                            _KERNEL_TCB_T_TSKATR;
+#define _KERNEL_TCB_TBITDEF_TSKATR
+
+
+/* %jp{タスク拡張情報}%jp{Extended information} */
+typedef VP_INT                                                 _KERNEL_TSK_T_EXINF;
+typedef VP_INT                                                 _KERNEL_TCB_T_EXINF;
+#define _KERNEL_TCB_TBITDEF_EXINF
+
+
+/* %jp{タスクの開始番地}%en{Start address} */
+typedef FP                                                             _KERNEL_TSK_T_TASK;
+typedef FP                                                             _KERNEL_TCB_T_TASK;
+#define _KERNEL_TCB_TBITDEF_TASK
+
+
+/* %jp{スタックサイズ}%en{Stack size} */
+typedef SIZE                                                   _KERNEL_TSK_T_STKSZ;
+typedef SIZE                                                   _KERNEL_TCB_T_STKSZ;
+#define _KERNEL_TCB_TBITDEF_STKSZ
+
+
+/* %jp{スタック領域の先頭番地}%en{Stack base address} */
+typedef VP                                                             _KERNEL_TSK_T_STK;
+typedef VP                                                             _KERNEL_TCB_T_STK;
+#define _KERNEL_TCB_TBITDEF_STK
+
+
+/* Initial stack pointer */
+typedef VP                                                             _KERNEL_TSK_T_ISP;
+typedef VP                                                             _KERNEL_TCB_T_ISP;
+#define _KERNEL_TCB_TBITDEF_ISP
+
+
+
+/* %jp{相対時間}%en{Relative-Time} */
+#if _KERNEL_TCB_BITFIELD               /* %jp{TCBにビットフィールドを利用する場合} */
+
+#if _KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE     /* %jp{符号付優先の場合1bit増やして符号付を使う} */
+typedef signed int                                             _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef signed int                                             _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_RELTIM             : (_KERNEL_TSK_TBIT_RELTIM+1)   /**< %jp{相対時間のビットフィールド宣言時の幅} */
+#else
+typedef unsigned int                                   _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef unsigned int                                   _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#define _KERNEL_TCB_TBITDEF_RELTIM             : _KERNEL_TSK_TBIT_RELTIM               /**< %jp{相対時間のビットフィールド宣言時の幅} */
+#endif
+
+#else                                                  /* %jp{TCBにビットフィールドを利用しない場合} */
+
+#if (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_B) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_B                               _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_B                              _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_UB) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UB                              _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UB                             _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_H) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_H                               _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_H                              _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_UH) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UH                              _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UH                             _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_W) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_W                               _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_W                              _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_UW) && !(_KERNEL_OPT_SIGNED_INT && !_KERNEL_OPT_CB_SIZE)
+typedef _KERNEL_T_FAST_UW                              _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UW                             _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#elif (_KERNEL_TSK_TMAX_RELTIM <= _KERNEL_TMAX_D) && _KERNEL_OPT_SIGNED_INT
+typedef _KERNEL_T_FAST_D                               _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_D                              _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#else
+typedef _KERNEL_T_FAST_UD                              _KERNEL_TSK_T_RELTIM;                   /**< %jp{相対時間を演算操作するときの型} */
+typedef _KERNEL_T_LEAST_UD                             _KERNEL_TCB_T_RELTIM;                   /**< %jp{相対時間をTCBに格納するときの型} */
+#endif
+#define _KERNEL_TCB_TBITDEF_RELTIM                                                                             /**< %jp{相対時間のビットフィールド宣言時の幅} */
+
+#endif
+
+
+
+/* -------------------------------------------------------------------- */
+/*  TCB definetion                                                      */
+/* -------------------------------------------------------------------- */
+
+#include "core/dsp.h"
+#include "core/que.h"
+#include "core/rdq.h"
+#include "core/toq.h"
+#include "core/sys.h"
+
+
+
+/* -------------------------------------------------------------------- */
+/*  TCB definetion                                                      */
+/* -------------------------------------------------------------------- */
+
+#if _KERNEL_TCB_SPLIT_RO
+
+/** %jp{タスクコントロールブロック(ROM部)}%en{Task control block for ROM} */
+typedef struct _kernel_t_tcb_ro                                /* タスクコントロールブロック(ROM部) */
+{
+#if _KERNEL_TCB_TSKATR
+       _KERNEL_TCB_T_TSKATR    tskatr          _KERNEL_TCB_TBITDEF_TSKATR;             /**< %jp{タスク属性}%en{Task attribute} */
+#endif
+
+#if _KERNEL_TCB_EXINF
+       _KERNEL_TCB_T_EXINF             exinf           _KERNEL_TCB_TBITDEF_EXINF;              /**< %jp{タスクの拡張情報}%en{Task extend information} */
+#endif
+
+#if _KERNEL_TCB_TASK
+       _KERNEL_TCB_T_TASK              task            _KERNEL_TCB_TBITDEF_TASK;               /**< %jp{タスクの起動番地}%en{Task start address} */
+#endif
+
+#if _KERNEL_TCB_TSKPRI
+       _KERNEL_TCB_T_TPRI              itskpri         _KERNEL_TCB_TBITDEF_TPRI;               /**< %jp{タスクの起動時優先度}%en{Task initial priority} */
+#endif
+
+#if _KERNEL_TCB_STKSZ
+       _KERNEL_TCB_T_STKSZ             stksz           _KERNEL_TCB_TBITDEF_STKSZ;              /**< %jp{タスクのスタックのサイズ(バイト数)}%en{Task stack size(in bytes)} */
+#endif
+
+#if _KERNEL_TCB_STK
+       _KERNEL_TCB_T_STK               stk                     _KERNEL_TCB_TBITDEF_STK;                /**< %jp{タスクのスタック領域の先頭番地}%en{Base address of task stack space} */
+#endif
+
+#if _KERNEL_TCB_ISP
+       _KERNEL_TCB_T_ISP               isp                     _KERNEL_TCB_TBITDEF_ISP;                /**< %jp{スタックポインタの初期値}%en{Task initial stack pointer} */
+#endif
+} _KERNEL_T_TCB_RO;
+
+
+/** %jp{タスクコントロールブロック(RAM部)}%en{Task control block for RAM} */
+typedef struct _kernel_t_tcb
+{
+#if _KERNEL_TCB_CTXCB
+       _KERNEL_T_CTXCB                 ctxcb;                                                                          /**< %jp{タスクのコンテキスト}%en{Execution context control block} */
+#endif
+
+#if _KERNEL_TCB_QUE
+       _KERNEL_T_QUE                   *pk_que;                                                                        /**< %jp{属しているキュー}%en{Pointer of the queue for which the task connected} */
+#endif
+
+#if _KERNEL_TCB_QUEOBJ
+       _KERNEL_QUEOBJ                                                                                                          /**< %jp{キューに接続する為のオブジェクト}%en{Object for queue connection} */
+#endif
+
+#if _KERNEL_TCB_TOQOBJ
+       _KERNEL_TOQOBJ                                                                                                          /* %jp{タイムアウトキューに接続する為のオブジェクト}%en{Timeout queue object} */
+#endif
+
+#if _KERNEL_TCB_TSKSTAT
+       _KERNEL_TCB_T_TSKSTAT   tskstat         _KERNEL_TCB_TBITDEF_TSKSTAT;    /**< %jp{タスク状態}%en{Task state} */
+#endif
+
+#if _KERNEL_TCB_TSKPRI
+       _KERNEL_TCB_T_TPRI              tskpri          _KERNEL_TCB_TBITDEF_TPRI;               /**< %jp{タスクの現在優先度}%en{Task current priority} */
+#endif
+
+#if _KERNEL_TCB_TSKBPRI
+       _KERNEL_TCB_T_TPRI              tskbpri         _KERNEL_TCB_TBITDEF_TPRI;               /**< %jp{タスクのベース優先度}%en{Task base priority} */
+#endif
+
+#if _KERNEL_TCB_TSKWAIT
+       _KERNEL_TCB_T_TSKWAIT   tskwait         _KERNEL_TCB_TBITDEF_TSKWAIT;    /**< %jp{待ち要因}%en{Reason for waiting} */
+#endif
+
+#if _KERNEL_TCB_WOBJID
+       _KERNEL_TCB_T_WOBJID    wobjid          _KERNEL_TCB_TBITDEF_WOBJID;             /**< %jp{待ち対象のオブジェクトのID番号}%en{Object ID number for which the task waiting} */
+#endif
+
+#if _KERNEL_TCB_ACTCNT
+       _KERNEL_TCB_T_ACTCNT    actcnt          _KERNEL_TCB_TBITDEF_ACTCNT;             /**< %jp{起動要求キューイング回数}%en{Activation request count} */
+#endif
+
+#if _KERNEL_TCB_WUPCNT
+       _KERNEL_TCB_T_WUPCNT    wupcnt          _KERNEL_TCB_TBITDEF_WUPCNT;             /**< %jp{起床要求キューイング回数}%en{Wakeup request count} */
+#endif
+
+#if _KERNEL_TCB_SUSCNT
+       _KERNEL_TCB_T_SUSCNT    suscnt          _KERNEL_TCB_TBITDEF_SUSCNT;             /**< %jp{強制待ち要求ネスト回数}%en{Suspension count} */
+#endif
+
+
+#if _KERNEL_TCB_ERCD
+       _KERNEL_TCB_T_ERCD              ercd            _KERNEL_TCB_TBITDEF_ERCD;               /**< %jp{待ち解除時のエラーコード}%en{error code} */
+#endif
+
+#if _KERNEL_TCB_DATA
+       _KERNEL_TCB_T_DATA              data            _KERNEL_TCB_TBITDEF_DATA;               /**< %jp{タスク同期時の受け渡しデータ}%en{task data} */
+#endif
+
+#if _KERNEL_TCB_TSKID
+       _KERNEL_TCB_T_TSKID             tskid           _KERNEL_TCB_TBITDEF_TSKID;              /**< %jp{タスクID番号の逆引き用}%en{Task object ID} */
+#endif
+
+
+/* %jp{ポインタ管理時にROM部/RAM部を分離する場合はポインタを張る} */
+#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY
+       const _KERNEL_T_TCB_RO  *tcb_ro;
+#endif
+} _KERNEL_T_TCB;
+
+
+#else
+
+
+/** %jp{タスクコントロールブロック}%en{Task Control Block} */
+typedef struct _kernel_t_tcb
+{
+#if _KERNEL_TCB_CTXCB
+       _KERNEL_T_CTXCB                 ctxcb;                                                                          /**< %jp{タスクのコンテキスト}%en{Execution context control block} */
+#endif
+
+#if _KERNEL_TCB_QUE
+       _KERNEL_T_QUE                   *pk_que;                                                                        /**< %jp{属しているキュー}%en{Pointer of the queue for which the task connected} */
+#endif
+
+#if _KERNEL_TCB_QUEOBJ
+       _KERNEL_QUEOBJ                                                                                                          /**< %jp{キューに接続する為のオブジェクト}%en{Object for queue connection} */
+#endif
+       
+#if _KERNEL_TCB_TOQOBJ
+       _KERNEL_TOQOBJ                                                                                                          /* %jp{タイムアウトキューに接続する為のオブジェクト}%en{Timeout queue object} */
+#endif
+
+#if _KERNEL_TCB_TSKSTAT
+       _KERNEL_TCB_T_TSKSTAT   tskstat         _KERNEL_TCB_TBITDEF_TSKSTAT;    /**< %jp{タスク状態}%en{Task state} */
+#endif
+
+#if _KERNEL_TCB_TSKPRI
+       _KERNEL_TCB_T_TPRI              tskpri          _KERNEL_TCB_TBITDEF_TPRI;               /**< %jp{タスクの現在優先度}%en{Task current priority} */
+#endif
+
+#if _KERNEL_TCB_TSKBPRI
+       _KERNEL_TCB_T_TPRI              tskbpri         _KERNEL_TCB_TBITDEF_TPRI;               /**< %jp{タスクのベース優先度}%en{Task base priority} */
+#endif
+
+#if _KERNEL_TCB_TSKWAIT
+       _KERNEL_TCB_T_TSKWAIT   tskwait         _KERNEL_TCB_TBITDEF_TSKWAIT;    /**< %jp{待ち要因}%en{Reason for waiting} */
+#endif
+
+#if _KERNEL_TCB_WOBJID
+       _KERNEL_TCB_T_WOBJID    wobjid          _KERNEL_TCB_TBITDEF_WOBJID;             /**< %jp{待ち対象のオブジェクトのID番号}%en{Object ID number for which the task waiting} */
+#endif
+
+#if _KERNEL_TCB_ACTCNT
+       _KERNEL_TCB_T_ACTCNT    actcnt          _KERNEL_TCB_TBITDEF_ACTCNT;             /**< %jp{起動要求キューイング回数}%en{Activation request count} */
+#endif
+
+#if _KERNEL_TCB_WUPCNT
+       _KERNEL_TCB_T_WUPCNT    wupcnt          _KERNEL_TCB_TBITDEF_WUPCNT;             /**< %jp{起床要求キューイング回数}%en{Wakeup request count} */
+#endif
+
+#if _KERNEL_TCB_SUSCNT
+       _KERNEL_TCB_T_SUSCNT    suscnt          _KERNEL_TCB_TBITDEF_SUSCNT;             /**< %jp{強制待ち要求ネスト回数}%en{Suspension count} */
+#endif
+
+
+#if _KERNEL_TCB_ERCD
+       _KERNEL_TCB_T_ERCD              ercd            _KERNEL_TCB_TBITDEF_ERCD;               /**< %jp{待ち解除時のエラーコード}%en{error code} */
+#endif
+
+#if _KERNEL_TCB_DATA
+       _KERNEL_TCB_T_DATA              data            _KERNEL_TCB_TBITDEF_DATA;               /**< %jp{タスク同期時の受け渡しデータ}%en{task data} */
+#endif
+
+#if _KERNEL_TCB_TSKID
+       _KERNEL_TCB_T_TSKID             tskid           _KERNEL_TCB_TBITDEF_TSKID;              /**< %jp{タスクID番号の逆引き用}%en{Task object ID} */
+#endif
+       
+       
+#if _KERNEL_TCB_TSKATR
+       _KERNEL_TCB_T_TSKATR    tskatr          _KERNEL_TCB_TBITDEF_TSKATR;             /**< %jp{タスク属性}%en{Task attribute} */
+#endif
+
+#if _KERNEL_TCB_EXINF
+       _KERNEL_TCB_T_EXINF             exinf           _KERNEL_TCB_TBITDEF_EXINF;              /**< %jp{タスクの拡張情報}%en{Task extend information} */
+#endif
+
+#if _KERNEL_TCB_TASK
+       _KERNEL_TCB_T_TASK              task            _KERNEL_TCB_TBITDEF_TASK;               /**< %jp{タスクの起動番地}%en{Task start address} */
+#endif
+
+#if _KERNEL_TCB_ITSKPRI
+       _KERNEL_TCB_T_TPRI              itskpri         _KERNEL_TCB_TBITDEF_TPRI;               /**< %jp{タスクの起動時優先度}%en{Task initial priority} */
+#endif
+
+#if _KERNEL_TCB_STKSZ
+       _KERNEL_TCB_T_STKSZ             stksz           _KERNEL_TCB_TBITDEF_STKSZ;              /**< %jp{タスクのスタックのサイズ(バイト数)}%en{Task stack size(in bytes)} */
+#endif
+
+#if _KERNEL_TCB_STK
+       _KERNEL_TCB_T_STK               stk                     _KERNEL_TCB_TBITDEF_STK;                /**< %jp{タスクのスタック領域の先頭番地}%en{Base address of task stack space} */
+#endif
+
+#if _KERNEL_TCB_ISP
+       _KERNEL_TCB_T_ISP               isp                     _KERNEL_TCB_TBITDEF_ISP;                /**< %jp{スタックポインタの初期値}%en{Task initial stack pointer} */
+#endif
+} _KERNEL_T_TCB;
+
+typedef _KERNEL_T_TCB          _KERNEL_T_TCB_RO;
+
+#endif
+
+
+
+/* ------------------------------------------ */
+/*  ID range                                  */
+/* ------------------------------------------ */
+
+extern const ID                                                        _kernel_max_tskid;                                                                              /**< %jp{タスクIDの最大値} */
+
+#define _KERNEL_TSK_TMIN_ID                            1                                                                                                               /**< %jp{タスクIDの最小値} */
+#define _KERNEL_TSK_TMAX_ID                            (_kernel_max_tskid)                                                                             /**< %jp{タスクIDの最大値} */
+
+#define _KERNEL_TSK_CHECK_TSKID(tskid) ((tskid) >= _KERNEL_TSK_TMIN_ID && (tskid) <= _KERNEL_TSK_TMAX_ID)
+                                                                                                                                                                                               /**< %jp{ID範囲チェック} */
+
+
+/* ------------------------------------------ */
+/*  Control block tables                      */
+/* ------------------------------------------ */
+
+#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY
+#if _KERNEL_TCB_SPLIT_RO
+
+/* %jp{ブロック配列管理でRO分離の場合}%en{block array} */
+extern  _KERNEL_T_TCB                                  _kernel_tcb_tbl[];                                                                              /**< %jp{タスクコントロールブロックテーブル} */
+extern const _KERNEL_T_TCB_RO                  _kernel_tcb_ro_tbl[];                                                                   /**< %jp{タスクコントロールブロック(リードオンリー部)テーブル} */
+#define _KERNEL_TSK_ID2TCB(tskid)              (&_kernel_tcb_tbl[(tskid) - _KERNEL_TSK_TMIN_ID])               /**< %jp{コントロールブロックの取得} */
+#define _KERNEL_TSK_CHECK_EXS(tskid)   (_kernel_tcb_ro_tbl[(tskid) - _KERNEL_TSK_TMIN_ID].task != NULL)                                
+                                                                                                                                                                                               /**< %jp{オブジェクトの存在チェック} */
+
+#else
+
+/* %jp{ブロック配列管理の場合}%en{block array} */
+extern  _KERNEL_T_TCB                                  _kernel_tcb_tbl[];                                                                              /**< %jp{タスクコントロールブロックテーブル} */
+#define _KERNEL_TSK_ID2TCB(tskid)              (&_kernel_tcb_tbl[(tskid) - _KERNEL_TSK_TMIN_ID])               /**< %jp{コントロールブロックの取得} */
+#define _KERNEL_TSK_CHECK_EXS(tskid)   (_kernel_tcb_tbl[(tskid) - _KERNEL_TSK_TMIN_ID].task != NULL)                           
+                                                                                                                                                                                               /**< %jp{オブジェクトの存在チェック} */
+
+#endif
+
+#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY
+
+/* %jp{ポインタ配列管理の場合}%en{pointer array} */
+extern  _KERNEL_T_TCB                                  *_kernel_tcb_tbl[];                                                                             /**< %jp{タスクコントロールブロックテーブル} */
+#define _KERNEL_TSK_ID2TCB(tskid)              (_kernel_tcb_tbl[(tskid) - _KERNEL_TMIN_TSKID])                 /**< %jp{タスクIDからTCB アドレスを取得} */
+#define _KERNEL_TSK_CHECK_EXS(tskid)   (_KERNEL_TSK_ID2TCB(tskid) != NULL)                                             /**< %jp{オブジェクトの存在チェック} */
+
+#endif
+
+
+
+
+/* ------------------------------------------ */
+/*  Convert Handle                            */
+/* ------------------------------------------ */
+
+#if _KERNEL_TSKHDL_ID          /* %en{TSKHDL is ID}%jp{タスクポインタにIDを使う} */
+
+#define _KERNEL_TSK_ID2TSKHDL(tskid)           (tskid)
+#define _KERNEL_TSK_TSKHDL2ID(tskhdl)          (tskhdl)
+#define _KERNEL_TSK_TCB2TSKHDL(tcb)                    _KERNEL_TSK_TCB2ID(tcb)
+#define _KERNEL_TSK_TSKHDL2TCB(tskhdl)         _KERNEL_TSK_ID2TCB(tskhdl)
+#define _KERNEL_TSK_GET_TSKHDL(tskid, tcb)     (tskid)
+
+#else                                          /* %en{TSKHDL is Address of TCB}%jp{タスクポインタにTCBのアドレスを使う} */
+
+#define _KERNEL_TSK_ID2TSKHDL(tskid)           _KERNEL_TSK_ID2TCB(tskid)
+#define _KERNEL_TSK_TSKHDL2ID(tskhdl)          _KERNEL_TSK_TCB2ID(tskhdl)
+#define _KERNEL_TSK_TCB2TSKHDL(tskhdl)         (tskhdl)
+#define _KERNEL_TSK_TSKHDL2TCB(tskhdl)         (tskhdl)
+#define _KERNEL_TSK_GET_TSKHDL(tskid, tcb)     (tcb)
+
+#endif
+
+
+
+/* ------------------------------------------ */
+/*   Accessor for TCB                         */
+/* ------------------------------------------ */
+
+/* tcb_ro */
+#if !_KERNEL_TCB_SPLIT_RO
+#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb)     (tcb)
+#else
+#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY          /* %jp{TCBを単純配列で管理}%en{array of block} */
+#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb)     (&_kernel_tcb_ro_tbl[(tskid)])
+#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY                /* %jp{TCBをポインタ配列で管理}%en{array of pointer} */
+#define _KERNEL_TSK_GET_TCB_RO(tskid, tcb)     ((tcb)->tcb_ro)
+#endif
+#endif
+
+
+/* ctxcb */
+#define _KERNEL_TSK_GET_CTXCB(tcb)                     (&(tcb)->ctxcb)
+
+/* que */
+#if _KERNEL_TCB_QUE
+#define _KERNEL_TSK_SET_QUE(tcb, x)                    do { (tcb)->pk_que = (_KERNEL_T_QUE *)(x); } while(0)
+#define _KERNEL_TSK_GET_QUE(tcb)                       ((_KERNEL_T_QUE *)(tcb)->pk_que)
+#else  /* %jp{TCBに所属キューの情報を持たせない場合は別情報からの探索で求める} */
+#define _KERNEL_TSK_SET_QUE(tcb, x)                    do { } while(0)
+#define _KERNEL_TSK_GET_QUE(tcb)                       _kernel_get_que(tcb)
+#endif
+
+/* tskstat */
+#if _KERNEL_TCB_TSKSTAT
+#define _KERNEL_TSK_SET_TSKSTAT(tcb, x)                do { (tcb)->tskstat = (_KERNEL_TCB_T_TSKSTAT)(x); } while(0)
+#define _KERNEL_TSK_GET_TSKSTAT(tcb)           ((_KERNEL_TSK_T_TSKSTAT)(tcb)->tskstat)
+#else
+#define _KERNEL_TSK_SET_TSKSTAT(tcb, x)                do { } while(0)
+#define _KERNEL_TSK_GET_TSKSTAT(tcb)           0
+#endif
+
+/* tskpri */
+#if _KERNEL_TCB_TSKPRI /* %jp{通常のTCBへのアクセサ} */
+#define _KERNEL_TSK_SET_TSKPRI(tcb, x)         do { (tcb)->tskpri = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKPRI(tcb)                    ((tcb)->tskpri)
+#else
+#if _KERNEL_TCB_ITSKPRI        /* %jp{優先度固定(ROM配置)時のアクセサ} */
+#define _KERNEL_TSK_SET_TSKPRI(tcb, x)         do { } while(0)
+#define _KERNEL_TSK_GET_TSKPRI(tcb)                    ((tcb)->itskpri)
+#else                                  /* %jp{優先度未使用時(全てFIFO順)は1に固定する} */
+#define _KERNEL_TSK_SET_TSKPRI(tcb, x)         do { } while(0)
+#define _KERNEL_TSK_GET_TSKPRI(tcb)                    (1)
+#endif
+#endif
+
+/* tskbpri */
+#if _KERNEL_TCB_TSKBPRI
+#define _KERNEL_TSK_SET_TSKBPRI(tcb, x)                do { (tcb)->tskbpri = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKBPRI(tcb)           ((tcb)->tskbpri)
+#else
+#define _KERNEL_TSK_SET_TSKBPRI(tcb, x)                do { } while(0)
+#define _KERNEL_TSK_GET_TSKBPRI(tcb)           _KERNEL_TSK_GET_TSKPRI(tcb)
+#endif
+
+/* tskwait */
+#if _KERNEL_TCB_TSKWAIT
+#define _KERNEL_TSK_SET_TSKWAIT(tcb, x)                do { (tcb)->tskwait = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKWAIT(tcb)           ((tcb)->tskwait)
+#else
+#define _KERNEL_TSK_SET_TSKWAIT(tcb, x)                do { } while(0)
+#define _KERNEL_TSK_GET_TSKWAIT(tcb)           (0)
+#endif
+
+/* wobjid */
+#if _KERNEL_TCB_WOBJID
+#define _KERNEL_TSK_SET_WOBJID(tcb, x)         do { (tcb)->wobjid = (x); } while(0)
+#define _KERNEL_TSK_GET_WOBJID(tcb)                    ((tcb)->wobjid)
+#else
+#define _KERNEL_TSK_SET_WOBJID(tcb, x)         do { } while(0)
+#define _KERNEL_TSK_GET_WOBJID(tcb)                    (0)
+#endif
+
+/* actcnt */
+#if _KERNEL_TCB_ACTCNT
+#define _KERNEL_TSK_SET_ACTCNT(tcb, x)         do { (tcb)->actcnt = (x); } while(0)
+#define _KERNEL_TSK_GET_ACTCNT(tcb)                    ((tcb)->actcnt)
+#else
+#define _KERNEL_TSK_SET_ACTCNT(tcb, x)         do { } while(0)
+#define _KERNEL_TSK_GET_ACTCNT(tcb)                    (0)
+#endif
+
+/* wupcnt */
+#if _KERNEL_TCB_WUPCNT
+#define _KERNEL_TSK_SET_WUPCNT(tcb, x)         do { (tcb)->wupcnt = (x); } while(0)
+#define _KERNEL_TSK_GET_WUPCNT(tcb)                    ((tcb)->wupcnt)
+#else
+#define _KERNEL_TSK_SET_WUPCNT(tcb, x)         do { } while(0)
+#define _KERNEL_TSK_GET_WUPCNT(tcb)                    (0)
+#endif
+
+/* suscnt */
+#if _KERNEL_TCB_SUSCNT
+#define _KERNEL_TSK_SET_SUSCNT(tcb, x)         do { (tcb)->suscnt = (x); } while(0)
+#define _KERNEL_TSK_GET_SUSCNT(tcb)                    ((tcb)->suscnt)
+#else
+#define _KERNEL_TSK_SET_SUSCNT(tcb, x)         do { } while(0)
+#define _KERNEL_TSK_GET_SUSCNT(tcb)                    (0)
+#endif
+
+/* ercd */
+#if _KERNEL_TCB_ERCD
+#define _KERNEL_TSK_SET_ERCD(tcb, x)           do { (tcb)->ercd = (x); } while(0)
+#define _KERNEL_TSK_GET_ERCD(tcb)                      ((tcb)->ercd)
+#else
+#define _KERNEL_TSK_SET_ERCD(tcb, x)           do { } while(0)
+#define _KERNEL_TSK_GET_ERCD(tcb)                      (E_OK)
+#endif
+
+/* data */
+#if _KERNEL_TCB_DATA
+#define _KERNEL_TSK_SET_DATA(tcb, x)           do { (tcb)->data = (x); } while(0)
+#define _KERNEL_TSK_GET_DATA(tcb)                      ((tcb)->data)
+#else
+#define _KERNEL_TSK_SET_DATA(tcb, x)           do { } while(0)
+#define _KERNEL_TSK_GET_DATA(tcb)                      (0)
+#endif
+
+
+/* tskid */
+#if _KERNEL_TCB_TSKID
+#define _KERNEL_TSK_SET_TSKID(tcb_ro, x)       do { (tcb_ro)->tskid = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKID(tcb_ro)          ((tcb_ro)->tskid)
+#else
+#define _KERNEL_TSK_SET_TSKID(tcb_ro, x)       do { } while(0)
+#define _KERNEL_TSK_GET_TSKID(tcb_ro)          (0)
+#endif
+
+/* tskatr */
+#if _KERNEL_TCB_TSKATR
+#define _KERNEL_TSK_SET_TSKATR(tcb_ro, x)      do { (tcb_ro)->tskatr = (x); } while(0)
+#define _KERNEL_TSK_GET_TSKATR(tcb_ro)         ((tcb_ro)->tskatr)
+#else  /* %jp{tskatr未使用時はTA_HLNGに固定する} */
+#define _KERNEL_TSK_SET_TSKATR(tcb_ro, x)      do { } while(0)
+#define _KERNEL_TSK_GET_TSKATR(tcb_ro)         (TA_HLNG)
+#endif
+
+/* exinf */
+#if _KERNEL_TCB_EXINF
+#define _KERNEL_TSK_SET_EXINF(tcb_ro, x)       do { (tcb_ro)->exinf = (x); } while(0)
+#define _KERNEL_TSK_GET_EXINF(tcb_ro)          ((tcb_ro)->exinf)
+#else
+#define _KERNEL_TSK_SET_EXINF(tcb_ro, x)       do { } while(0)
+#define _KERNEL_TSK_GET_EXINF(tcb_ro)          (0)
+#endif
+
+/* task */
+#if _KERNEL_TCB_TASK
+#define _KERNEL_TSK_SET_TASK(tcb_ro, x)                do { (tcb_ro)->task = (x); } while(0)
+#define _KERNEL_TSK_GET_TASK(tcb_ro)           ((tcb_ro)->task)
+#else
+#define _KERNEL_TSK_SET_TASK(tcb_ro, x)                do { } while(0)
+#define _KERNEL_TSK_GET_TASK(tcb_ro)           (0)
+#endif
+
+/* tskipri */
+#if _KERNEL_TCB_ITSKPRI
+#define _KERNEL_TSK_SET_ITSKPRI(tcb_ro, x)     do { (tcb_ro)->itskpri = (x); } while(0)
+#define _KERNEL_TSK_GET_ITSKPRI(tcb_ro)                ((tcb_ro)->itskpri)
+#else  /* %jp{tskatr未使用時はTA_HLNGに固定する} */
+#define _KERNEL_TSK_SET_ITSKPRI(tcb_ro, x)     do { } while(0)
+#define _KERNEL_TSK_GET_ITSKPRI(tcb_ro)                (1)
+#endif
+
+/* stksz */
+#if _KERNEL_TCB_STKSZ
+#define _KERNEL_TSK_SET_STKSZ(tcb_ro, x)       do { (tcb_ro)->stksz = (x); } while(0)
+#define _KERNEL_TSK_GET_STKSZ(tcb_ro)          ((tcb_ro)->stksz)
+#else
+#define _KERNEL_TSK_SET_STKSZ(tcb_ro, x)       do { } while(0)
+#define _KERNEL_TSK_GET_STKSZ(tcb_ro)          (0)
+#endif
+
+/* stk */
+#if _KERNEL_TCB_STK
+#define _KERNEL_TSK_SET_STK(tcb_ro, x)         do { (tcb_ro)->stk = (x); } while(0)
+#define _KERNEL_TSK_GET_STK(tcb_ro)                    ((tcb_ro)->stk)
+#else
+#define _KERNEL_TSK_SET_STK(tcb_ro, x)         do { } while(0)
+#define _KERNEL_TSK_GET_STK(tcb_ro)                    (0)
+#endif
+
+/* isp */
+#if _KERNEL_TCB_ISP
+#define _KERNEL_TSK_SET_ISP(tcb_ro, x)         do { (tcb_ro)->isp = (x); } while(0)
+#define _KERNEL_TSK_GET_ISP(tcb_ro)                    ((tcb_ro)->isp)
+#else
+#define _KERNEL_TSK_SET_ISP(tcb_ro, x)         do { } while(0)
+#define _KERNEL_TSK_GET_ISP(tcb_ro)                    ((VP)((UB *)_KERNEL_TSK_GET_STK(tcb_ro) + _KERNEL_TSK_GET_STKSZ(tcb_ro)))
+#endif
+
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+ER _kernel_cre_tsk(ID tskid, const T_CTSK *pk_ctsk);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* _KERNEL__object__tskobj_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/parser/parserr.h b/kernel/include/parser/parserr.h
new file mode 100755 (executable)
index 0000000..4a56896
--- /dev/null
@@ -0,0 +1,412 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  parserr.h
+ * @brief %jp{エラー処理コンフィギュレーションの解析}%en{error configulation parser}
+ *
+ * @version $Id: parserr.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__parser__parserr_h__
+#define _KERNEL__parser__parserr_h__
+
+
+
+/* cre_tsk */
+/* acre_tsk */
+/* del_tsk */
+
+/* act_tsk */
+#define _KERNEL_SPT_ACT_TSK_E_ID               _KERNEL_CFG_ACT_TSK_E_ID
+
+/* iact_tsk */
+/* can_act */
+/* sta_tsk */
+/* ext_tsk */
+/* exd_tsk */
+/* ter_tsk */
+/* chg_pri */
+/* get_pri */
+/* ref_tsk */
+#define _KERNEL_SPT_REF_TSK_E_ID               _KERNEL_CFG_REF_TSK_E_ID
+
+/* ref_tst */
+
+/* slp_tsk */
+/* tslp_tsk */
+/* wup_tsk */
+#define _KERNEL_SPT_WUP_TSK_E_ID               _KERNEL_CFG_WUP_TSK_E_ID
+#define _KERNEL_SPT_WUP_TSK_E_NOEXS            _KERNEL_CFG_WUP_TSK_E_NOEXS
+
+/* iwup_tsk */
+/* can_wup */
+#define _KERNEL_SPT_CAN_WUP_E_ID               _KERNEL_CFG_CAN_WUP_E_ID
+#define _KERNEL_SPT_CAN_WUP_E_NOEXS            _KERNEL_CFG_CAN_WUP_E_NOEXS
+
+/* rel_wai */
+#define _KERNEL_SPT_REL_WAI_E_ID               _KERNEL_CFG_REL_WAI_E_ID
+#define _KERNEL_SPT_REL_WAI_E_NOEXS            _KERNEL_CFG_REL_WAI_E_NOEXS
+/* irel_wai */
+/* sus_tsk */
+/* rsm_tsk */
+/* frsm_tsk */
+/* dly_tsk */
+
+
+
+/* def_tex */
+/* ras_tex */
+/* iras_tex */
+/* dis_tex */
+/* ena_tex */
+/* sns_tex */
+/* ref_tex */
+
+
+/* cre_sem */
+#define _KERNEL_SPT_CRE_SEM_E_ID               _KERNEL_CFG_CRE_SEM_E_ID        
+#define _KERNEL_SPT_CRE_SEM_E_RSATR    _KERNEL_CFG_CRE_SEM_E_RSATR 
+#define _KERNEL_SPT_CRE_SEM_E_OBJ              _KERNEL_CFG_CRE_SEM_E_OBJ
+#define _KERNEL_SPT_CRE_SEM_E_NOMEM            _KERNEL_CFG_CRE_SEM_E_NOMEM     
+#define _KERNEL_SPT_CRE_SEM_E_NOSPT            _KERNEL_CFG_CRE_SEM_E_NOSPT
+
+/* acre_sem */
+#define _KERNEL_SPT_ACRE_SEM_E_NOID            _KERNEL_CFG_ACRE_SEM_E_NOID
+#define _KERNEL_SPT_ACRE_SEM_E_RSATR   _KERNEL_CFG_ACRE_SEM_E_RSATR
+#define _KERNEL_SPT_ACRE_SEM_E_NOMEM   _KERNEL_CFG_ACRE_SEM_E_NOMEM    
+#define _KERNEL_SPT_ACRE_SEM_E_NOSPT   _KERNEL_CFG_ACRE_SEM_E_NOSPT
+
+/* del_sem */
+#define _KERNEL_SPT_DEL_SEM_E_ID               _KERNEL_CFG_DEL_SEM_E_ID
+#define _KERNEL_SPT_DEL_SEM_E_NOEXS            _KERNEL_CFG_DEL_SEM_E_NOEXS
+#define _KERNEL_SPT_DEL_SEM_E_NOSPT            _KERNEL_CFG_DEL_SEM_E_NOSPT
+
+/* sig_sem */
+#define _KERNEL_SPT_SIG_SEM_E_ID               _KERNEL_CFG_SIG_SEM_E_ID
+#define _KERNEL_SPT_SIG_SEM_E_NOEXS            _KERNEL_CFG_SIG_SEM_E_NOEXS
+#define _KERNEL_SPT_SIG_SEM_E_QOVR             _KERNEL_CFG_SIG_SEM_E_QOVR
+#define _KERNEL_SPT_SIG_SEM_E_NOSPT            _KERNEL_CFG_SIG_SEM_E_NOSPT
+/* isig_sem */
+
+/* wai_sem */
+#define _KERNEL_SPT_WAI_SEM_E_ID               _KERNEL_CFG_WAI_SEM_E_ID
+#define _KERNEL_SPT_WAI_SEM_E_CTX              _KERNEL_CFG_WAI_SEM_E_CTX
+#define _KERNEL_SPT_WAI_SEM_E_NOEXS            _KERNEL_CFG_WAI_SEM_E_NOEXS
+#define _KERNEL_SPT_WAI_SEM_E_RLWAI    _KERNEL_CFG_WAI_SEM_E_RLWAI 
+#define _KERNEL_SPT_WAI_SEM_E_DLT      _KERNEL_CFG_WAI_SEM_E_DLT   
+#define _KERNEL_SPT_WAI_SEM_E_NOSPT            _KERNEL_CFG_WAI_SEM_E_NOSPT
+
+/* pol_sem */
+#define _KERNEL_SPT_POL_SEM_E_ID               _KERNEL_CFG_POL_SEM_E_ID
+#define _KERNEL_SPT_POL_SEM_E_NOEXS            _KERNEL_CFG_POL_SEM_E_NOEXS
+#define _KERNEL_SPT_POL_SEM_E_TMOUT            _KERNEL_CFG_POL_SEM_E_TMOUT
+#define _KERNEL_SPT_POL_SEM_E_NOSPT            _KERNEL_CFG_POL_SEM_E_NOSPT
+
+/* twai_sem */
+#define _KERNEL_SPT_TWAI_SEM_E_ID              _KERNEL_CFG_TWAI_SEM_E_ID
+#define _KERNEL_SPT_TWAI_SEM_E_CTX             _KERNEL_CFG_TWAI_SEM_E_CTX
+#define _KERNEL_SPT_TWAI_SEM_E_NOEXS   _KERNEL_CFG_TWAI_SEM_E_NOEXS
+#define _KERNEL_SPT_TWAI_SEM_E_TMOUT   _KERNEL_CFG_TWAI_SEM_E_TMOUT
+#define _KERNEL_SPT_TWAI_SEM_E_RLWAI   _KERNEL_CFG_TWAI_SEM_E_RLWAI 
+#define _KERNEL_SPT_TWAI_SEM_E_DLT     _KERNEL_CFG_TWAI_SEM_E_DLT   
+#define _KERNEL_SPT_TWAI_SEM_E_NOSPT   _KERNEL_CFG_TWAI_SEM_E_NOSPT
+
+/* _kernel_wai_sem */
+#if _KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED /* %jp{wai_sem, pol_sem, twai_semのコード統合を行うなら} */
+#define _KERNEL_SPT_KWAI_SEM_E_ID              (_KERNEL_CFG_TWAI_SEM_E_ID    || _KERNEL_CFG_WAI_SEM_E_ID    || _KERNEL_CFG_POL_SEM_E_ID)
+#define _KERNEL_SPT_KWAI_SEM_E_CTX             (_KERNEL_CFG_TWAI_SEM_E_CTX   || _KERNEL_CFG_WAI_SEM_E_CTX)
+#define _KERNEL_SPT_KWAI_SEM_E_NOEXS   (_KERNEL_CFG_TWAI_SEM_E_NOEXS || _KERNEL_CFG_WAI_SEM_E_NOEXS || _KERNEL_CFG_POL_SEM_E_NOEXS)
+#define _KERNEL_SPT_KWAI_SEM_E_TMOUT   (_KERNEL_CFG_TWAI_SEM_E_TMOUT                                || _KERNEL_CFG_POL_SEM_E_TMOUT)
+#define _KERNEL_SPT_KWAI_SEM_E_RLWAI   (_KERNEL_CFG_TWAI_SEM_E_RLWAI || _KERNEL_CFG_WAI_SEM_E_RLWAI)
+#define _KERNEL_SPT_KWAI_SEM_E_DLT     (_KERNEL_CFG_TWAI_SEM_E_DLT   || _KERNEL_CFG_WAI_SEM_E_DLT)
+#define _KERNEL_SPT_KWAI_SEM_E_NOSPT   _KERNEL_CFG_TWAI_SEM_E_NOSPT
+#else
+#define _KERNEL_SPT_KWAI_SEM_E_ID              _KERNEL_CFG_TWAI_SEM_E_ID
+#define _KERNEL_SPT_KWAI_SEM_E_CTX             _KERNEL_CFG_TWAI_SEM_E_CTX
+#define _KERNEL_SPT_KWAI_SEM_E_NOEXS   _KERNEL_CFG_TWAI_SEM_E_NOEXS
+#define _KERNEL_SPT_KWAI_SEM_E_TMOUT   _KERNEL_CFG_TWAI_SEM_E_TMOUT
+#define _KERNEL_SPT_KWAI_SEM_E_RLWAI   _KERNEL_CFG_TWAI_SEM_E_RLWAI 
+#define _KERNEL_SPT_KWAI_SEM_E_DLT     _KERNEL_CFG_TWAI_SEM_E_DLT   
+#define _KERNEL_SPT_KWAI_SEM_E_NOSPT   _KERNEL_CFG_TWAI_SEM_E_NOSPT
+#endif
+
+/* ref_sem */
+#define _KERNEL_SPT_REF_SEM_E_ID               _KERNEL_CFG_REF_SEM_E_ID
+#define _KERNEL_SPT_REF_SEM_E_NOEXS            _KERNEL_CFG_REF_SEM_E_NOEXS
+#define _KERNEL_SPT_REF_SEM_E_PAR              _KERNEL_CFG_REF_SEM_E_PAR
+#define _KERNEL_SPT_REF_SEM_E_NOSPT            _KERNEL_CFG_REF_SEM_E_NOSPT
+
+
+/* cre_flg */
+#define _KERNEL_SPT_CRE_FLG_E_ID               _KERNEL_CFG_CRE_FLG_E_ID        
+#define _KERNEL_SPT_CRE_FLG_E_RSATR    _KERNEL_CFG_CRE_FLG_E_RSATR 
+#define _KERNEL_SPT_CRE_FLG_E_OBJ              _KERNEL_CFG_CRE_FLG_E_OBJ
+#define _KERNEL_SPT_CRE_FLG_E_NOMEM            _KERNEL_CFG_CRE_FLG_E_NOMEM     
+#define _KERNEL_SPT_CRE_FLG_E_NOSPT            _KERNEL_CFG_CRE_FLG_E_NOSPT
+
+/* acre_flg */
+#define _KERNEL_SPT_ACRE_FLG_E_NOID            _KERNEL_CFG_ACRE_FLG_E_NOID     
+#define _KERNEL_SPT_ACRE_FLG_E_RSATR   _KERNEL_CFG_ACRE_FLG_E_RSATR
+#define _KERNEL_SPT_ACRE_FLG_E_NOMEM   _KERNEL_CFG_ACRE_FLG_E_NOMEM
+#define _KERNEL_SPT_ACRE_FLG_E_NOSPT   _KERNEL_CFG_ACRE_FLG_E_NOSPT
+
+/* del_flg */
+#define _KERNEL_SPT_DEL_FLG_E_ID               _KERNEL_CFG_DEL_FLG_E_ID
+#define _KERNEL_SPT_DEL_FLG_E_NOEXS            _KERNEL_CFG_DEL_FLG_E_NOEXS
+#define _KERNEL_SPT_DEL_FLG_E_NOSPT            _KERNEL_CFG_DEL_FLG_E_NOSPT
+
+/* set_flg */
+#define _KERNEL_SPT_SET_FLG_E_ID               _KERNEL_CFG_SET_FLG_E_ID
+#define _KERNEL_SPT_SET_FLG_E_NOEXS            _KERNEL_CFG_SET_FLG_E_NOEXS
+#define _KERNEL_SPT_SET_FLG_E_PAR              _KERNEL_CFG_SET_FLG_E_PAR
+#define _KERNEL_SPT_SET_FLG_E_NOSPT            _KERNEL_CFG_SET_FLG_E_NOSPT
+
+/* iset_flg */
+/* clr_flg */
+#define _KERNEL_SPT_SET_FLG_E_ID               _KERNEL_CFG_SET_FLG_E_ID
+#define _KERNEL_SPT_SET_FLG_E_NOEXS            _KERNEL_CFG_SET_FLG_E_NOEXS
+#define _KERNEL_SPT_SET_FLG_E_PAR              _KERNEL_CFG_SET_FLG_E_PAR
+#define _KERNEL_SPT_SET_FLG_E_NOSPT            _KERNEL_CFG_SET_FLG_E_NOSPT
+
+/* wai_flg */
+#define _KERNEL_SPT_WAI_FLG_E_ID               _KERNEL_CFG_WAI_FLG_E_ID                
+#define _KERNEL_SPT_WAI_FLG_E_CTX              _KERNEL_CFG_WAI_FLG_E_CTX
+#define _KERNEL_SPT_WAI_FLG_E_NOEXS            _KERNEL_CFG_WAI_FLG_E_NOEXS 
+#define _KERNEL_SPT_WAI_FLG_E_PAR              _KERNEL_CFG_WAI_FLG_E_PAR   
+#define _KERNEL_SPT_WAI_FLG_E_ILUSE            _KERNEL_CFG_WAI_FLG_E_ILUSE 
+#define _KERNEL_SPT_WAI_FLG_E_RLWAI            _KERNEL_CFG_WAI_FLG_E_RLWAI 
+#define _KERNEL_SPT_WAI_FLG_E_DLT              _KERNEL_CFG_WAI_FLG_E_DLT   
+#define _KERNEL_SPT_WAI_FLG_E_NOSPT            _KERNEL_CFG_WAI_FLG_E_NOSPT             
+
+/* pol_flg */
+#define _KERNEL_SPT_WAI_FLG_E_ID               _KERNEL_CFG_WAI_FLG_E_ID
+#define _KERNEL_SPT_WAI_FLG_E_NOEXS    _KERNEL_CFG_WAI_FLG_E_NOEXS
+#define _KERNEL_SPT_WAI_FLG_E_PAR      _KERNEL_CFG_WAI_FLG_E_PAR  
+#define _KERNEL_SPT_WAI_FLG_E_TMOUT    _KERNEL_CFG_WAI_FLG_E_TMOUT
+#define _KERNEL_SPT_WAI_FLG_E_NOSPT            _KERNEL_CFG_WAI_FLG_E_NOSPT
+
+/* twai_flg */
+#if _KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED /* %jp{twai_flgへの集約を行う場合} */
+#define _KERNEL_SPT_TWAI_FLG_E_ID              (_KERNEL_CFG_TWAI_FLG_E_ID    || _KERNEL_CFG_WAI_FLG_E_ID    || _KERNEL_CFG_POL_FLG_E_ID) 
+#define _KERNEL_SPT_TWAI_FLG_E_CTX             (_KERNEL_CFG_TWAI_FLG_E_CTX   || _KERNEL_CFG_WAI_FLG_E_CTX)
+#define _KERNEL_SPT_TWAI_FLG_E_NOEXS   (_KERNEL_CFG_TWAI_FLG_E_NOEXS || _KERNEL_CFG_WAI_FLG_E_NOEXS || _KERNEL_CFG_POL_FLG_E_NOEXS)
+#define _KERNEL_SPT_TWAI_FLG_E_PAR     (_KERNEL_CFG_TWAI_FLG_E_PAR   || _KERNEL_CFG_WAI_FLG_E_PAR   || _KERNEL_CFG_POL_FLG_E_PAR)
+#define _KERNEL_SPT_TWAI_FLG_E_ILUSE   (_KERNEL_CFG_TWAI_FLG_E_ILUSE || _KERNEL_CFG_WAI_FLG_E_ILUSE)
+#define _KERNEL_SPT_TWAI_FLG_E_TMOUT           (_KERNEL_CFG_TWAI_FLG_E_TMOUT                                || _KERNEL_CFG_POL_FLG_E_TMOUT)
+#define _KERNEL_SPT_TWAI_FLG_E_RLWAI   (_KERNEL_CFG_TWAI_FLG_E_RLWAI || _KERNEL_CFG_WAI_FLG_E_RLWAI)
+#define _KERNEL_SPT_TWAI_FLG_E_DLT     (_KERNEL_CFG_TWAI_FLG_E_DLT   || _KERNEL_CFG_WAI_FLG_E_DLT)
+#define _KERNEL_SPT_TWAI_FLG_E_NOSPT   _KERNEL_CFG_TWAI_FLG_E_NOSPT
+#else
+#define _KERNEL_SPT_TWAI_FLG_E_ID              _KERNEL_CFG_TWAI_FLG_E_ID
+#define _KERNEL_SPT_TWAI_FLG_E_CTX             _KERNEL_CFG_TWAI_FLG_E_CTX
+#define _KERNEL_SPT_TWAI_FLG_E_NOEXS   _KERNEL_CFG_TWAI_FLG_E_NOEXS
+#define _KERNEL_SPT_TWAI_FLG_E_PAR     _KERNEL_CFG_TWAI_FLG_E_PAR  
+#define _KERNEL_SPT_TWAI_FLG_E_ILUSE   _KERNEL_CFG_TWAI_FLG_E_ILUSE
+#define _KERNEL_SPT_TWAI_FLG_E_TMOUT           _KERNEL_CFG_TWAI_FLG_E_TMOUT
+#define _KERNEL_SPT_TWAI_FLG_E_RLWAI   _KERNEL_CFG_TWAI_FLG_E_RLWAI
+#define _KERNEL_SPT_TWAI_FLG_E_DLT     _KERNEL_CFG_TWAI_FLG_E_DLT  
+#define _KERNEL_SPT_TWAI_FLG_E_NOSPT   _KERNEL_CFG_TWAI_FLG_E_NOSPT
+#endif
+
+/* ref_flg */
+#define _KERNEL_SPT_REF_FLG_E_ID               _KERNEL_CFG_REF_FLG_E_ID
+#define _KERNEL_SPT_REF_FLG_E_NOEXS    _KERNEL_CFG_REF_FLG_E_NOEXS
+#define _KERNEL_SPT_REF_FLG_E_PAR      _KERNEL_CFG_REF_FLG_E_PAR  
+#define _KERNEL_SPT_REF_FLG_E_NOSPT            _KERNEL_CFG_REF_FLG_E_NOSPT
+
+
+/* cre_dtq */
+/* acre_dtq */
+/* del_dtq */
+/* snd_dtq */
+/* ipsnd_dtq */
+/* tsnd_dtq */
+/* fsnd_dtq */
+/* ifsnd_dtq */
+/* rcv_dtq */
+/* prcv_dtq */
+/* trcv_dtq */
+/* ref_dtq */
+
+
+/* cre_mbx */
+#define _KERNEL_SPT_CRE_MBX_E_ID               _KERNEL_CFG_CRE_MBX_E_ID        
+#define _KERNEL_SPT_CRE_MBX_E_RSATR    _KERNEL_CFG_CRE_MBX_E_RSATR 
+#define _KERNEL_SPT_CRE_MBX_E_OBJ              _KERNEL_CFG_CRE_MBX_E_OBJ
+#define _KERNEL_SPT_CRE_MBX_E_NOMEM            _KERNEL_CFG_CRE_MBX_E_NOMEM     
+#define _KERNEL_SPT_CRE_MBX_E_NOSPT            _KERNEL_CFG_CRE_MBX_E_NOSPT
+
+/* acre_mbx */
+#define _KERNEL_SPT_ACRE_MBX_E_NOID            _KERNEL_CFG_ACRE_MBX_E_NOID
+#define _KERNEL_SPT_ACRE_MBX_E_RSATR   _KERNEL_CFG_ACRE_MBX_E_RSATR
+#define _KERNEL_SPT_ACRE_MBX_E_NOMEM   _KERNEL_CFG_ACRE_MBX_E_NOMEM    
+#define _KERNEL_SPT_ACRE_MBX_E_NOSPT   _KERNEL_CFG_ACRE_MBX_E_NOSPT
+
+/* del_mbx */
+#define _KERNEL_SPT_DEL_MBX_E_ID               _KERNEL_CFG_DEL_MBX_E_ID
+#define _KERNEL_SPT_DEL_MBX_E_NOEXS            _KERNEL_CFG_DEL_MBX_E_NOEXS
+#define _KERNEL_SPT_DEL_MBX_E_NOSPT            _KERNEL_CFG_DEL_MBX_E_NOSPT
+
+/* snd_mbx */
+/* rcv_mbx */
+/* prcv_mbx */
+/* trcv_mbx */
+/* ref_mbx */
+
+
+/* cre_mtx */
+/* acre_mtx */
+/* del_mtx */
+/* loc_mtx */
+/* ploc_mtx */
+/* tloc_mtx */
+/* unl_mtx */
+/* ref_mtx */
+
+
+/* cre_mbf */
+/* acre_mbf */
+/* del_mbf */
+/* snd_mbf */
+/* psnd_mbf */
+/* tsnd_mbf */
+/* rcv_mbf */
+/* prcv_mbf */
+/* trcv_mbf */
+/* ref_mbf */
+
+
+/* cre_por */
+/* acre_por */
+/* del_por */
+/* cal_por */
+/* tcal_por */
+/* acp_por */
+/* pacp_por */
+/* tacp_por */
+/* fwd_por */
+/* rpl_rdv */
+/* ref_por */
+/* ref_rdv */
+
+
+/* cre_mpf */
+#define _KERNEL_SPT_CRE_MPF_E_ID               _KERNEL_CFG_CRE_MPF_E_ID        
+#define _KERNEL_SPT_CRE_MPF_E_RSATR    _KERNEL_CFG_CRE_MPF_E_RSATR 
+#define _KERNEL_SPT_CRE_MPF_E_OBJ              _KERNEL_CFG_CRE_MPF_E_OBJ
+#define _KERNEL_SPT_CRE_MPF_E_NOMEM            _KERNEL_CFG_CRE_MPF_E_NOMEM     
+#define _KERNEL_SPT_CRE_MPF_E_NOSPT            _KERNEL_CFG_CRE_MPF_E_NOSPT
+
+/* acre_mpf */
+#define _KERNEL_SPT_ACRE_MPF_E_NOID            _KERNEL_CFG_ACRE_MPF_E_NOID
+#define _KERNEL_SPT_ACRE_MPF_E_RSATR   _KERNEL_CFG_ACRE_MPF_E_RSATR
+#define _KERNEL_SPT_ACRE_MPF_E_NOMEM   _KERNEL_CFG_ACRE_MPF_E_NOMEM    
+#define _KERNEL_SPT_ACRE_MPF_E_NOSPT   _KERNEL_CFG_ACRE_MPF_E_NOSPT
+
+/* del_mpf */
+#define _KERNEL_SPT_DEL_MPF_E_ID               _KERNEL_CFG_DEL_MPF_E_ID
+#define _KERNEL_SPT_DEL_MPF_E_NOEXS            _KERNEL_CFG_DEL_MPF_E_NOEXS
+#define _KERNEL_SPT_DEL_MPF_E_NOSPT            _KERNEL_CFG_DEL_MPF_E_NOSPT
+
+
+/* get_mpf */
+#define _KERNEL_SPT_GET_MPF_E_ID               _KERNEL_CFG_GET_MPF_E_ID
+#define _KERNEL_SPT_GET_MPF_E_CTX              _KERNEL_CFG_GET_MPF_E_CTX
+#define _KERNEL_SPT_GET_MPF_E_NOEXS    _KERNEL_CFG_GET_MPF_E_NOEXS
+#define _KERNEL_SPT_GET_MPF_E_PAR      _KERNEL_CFG_GET_MPF_E_PAR  
+#define _KERNEL_SPT_GET_MPF_E_ILUSE    _KERNEL_CFG_GET_MPF_E_ILUSE
+#define _KERNEL_SPT_GET_MPF_E_RLWAI    _KERNEL_CFG_GET_MPF_E_RLWAI
+#define _KERNEL_SPT_GET_MPF_E_DLT      _KERNEL_CFG_GET_MPF_E_DLT  
+#define _KERNEL_SPT_GET_MPF_E_NOSPT            _KERNEL_CFG_GET_MPF_E_NOSPT
+
+/* pget_mpf */
+/* tget_mpf */
+/* rel_mpf */
+/* ref_mpf */
+
+
+/* cre_mpl */
+/* acre_mpl */
+/* del_mpl */
+/* get_mpl */
+/* pget_mpl */
+/* tget_mpl */
+/* rel_mpl */
+/* ref_mpl */
+
+
+/* set_tim */
+/* get_tim */
+/* isig_tim */
+
+
+/* cre_cyc */
+/* acre_cyc */
+/* del_cyc */
+/* sta_cyc */
+/* stp_cyc */
+/* ref_cyc */
+
+
+/* cre_alm */
+/* acre_alm */
+/* del_alm */
+/* sta_alm */
+/* stp_alm */
+/* ref_alm */
+
+
+/* def_ovr */
+/* sta_ovr */
+/* stp_ovr */
+/* ref_ovr */
+
+
+/* rot_rdq */
+/* irot_rdq */
+/* get_tid */
+/* iget_tid */
+/* loc_cpu */
+/* iloc_cpu */
+/* unl_cpu */
+/* ilnl_cpu */
+/* dis_dsp */
+/* ena_dsp */
+/* sns_ctx */
+/* sns_loc */
+/* sns_dsp */
+/* sns_dpn */
+/* ref_sys */
+
+
+/* def_inh */
+/* cre_isr */
+/* acre_isr */
+/* del_isr */
+/* ref_isr */
+/* dis_int */
+/* ena_int */
+/* chg_ilv */
+/* get_ilv */
+
+
+/* def_svc */
+/* cal_svc */
+
+
+/* def_exc */
+/* ref_cfg */
+/* ref_ver */
+
+
+
+
+#endif /* _KERNEL__parser__parserr_h__ */
+
+
+/* end of file */
diff --git a/kernel/include/parser/parshok.h b/kernel/include/parser/parshok.h
new file mode 100755 (executable)
index 0000000..3c50c23
--- /dev/null
@@ -0,0 +1,24 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  parshok.h
+ * @brief %jp{カーネルフックのコンフィギュレーション解析}
+ *
+ * @version $Id: parshok.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__parser__parshok_h__
+#define _KERNEL__parser__parshok_h__
+
+
+
+#endif /* _KERNEL__parser__parshok_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/parser/parsknl.h b/kernel/include/parser/parsknl.h
new file mode 100755 (executable)
index 0000000..6043c24
--- /dev/null
@@ -0,0 +1,943 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  parsknl.h
+ * @brief %jp{カーネルコンフィギュレーションの解析}%en{kernel configuration parser}
+ *
+ * @version $Id: parsknl.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef _KERNEL__parser__parsknl_h__
+#define _KERNEL__parser__parsknl_h__
+
+
+/* ---------------------------------------------- */
+/*  Processor Attribute                           */
+/* ---------------------------------------------- */
+
+/* 割り込み用スタックの本数 */
+#ifndef _KERNEL_PROCATR_INTSTK_NUM
+#define _KERNE_INTSTK_NUM                      1
+#else
+#define _KERNE_INTSTK_NUM                      _KERNEL_PROCATR_INTSTK_NUM
+#endif
+
+
+/* ---------------------------------------------- */
+/*  Optimize                                      */
+/* ---------------------------------------------- */
+
+/* %jp{数値の小さいものを優先して最適化する} */
+#define _KERNEL_OPT_RW_SIZE                    _KERNEL_CFG_OPT_RW_SIZE         /**< %jp{リードライトデータサイズ(通常はRAM配置)の優先度} */
+#define _KERNEL_OPT_RO_SIZE                    _KERNEL_CFG_OPT_RO_SIZE         /**< %jp{リードオンリーデータ(通常はROM配置)のサイズの優先度} */
+#define _KERNEL_OPT_CODE_SIZE          _KERNEL_CFG_OPT_CODE_SIZE       /**< %jp{コードサイズ(通常はROM配置)の優先度} */
+#define _KERNEL_OPT_SPEED                      _KERNEL_CFG_OPT_SPEED           /**< %jp{実行速度の優先度} */
+
+
+/* %jp{コードサイズ/速度を重視しない限り、コントロールブロックはサイズ優先} */
+#if (_KERNEL_OPT_RW_SIZE <= _KERNEL_OPT_CODE_SIZE) && (_KERNEL_OPT_RW_SIZE <= _KERNEL_OPT_SPEED)
+#define _KERNEL_OPT_CB_SIZE                    TRUE
+#else
+#define _KERNEL_OPT_CB_SIZE                    FALSE
+#endif
+
+/* %jp{符号付きが得意なプロセッサなら符号付きを優先して最適化する} */
+#if defined(_KERNEL_PROCATR_SIGNED_INT) && _KERNEL_PROCATR_SIGNED_INT > 0
+#define _KERNEL_OPT_SIGNED_INT         TRUE
+#else
+#define _KERNEL_OPT_SIGNED_INT         FALSE
+#endif
+
+
+
+#if _KERNEL_CFG_TMAX_ACTCNT < 0
+#define _KERNEL_TMAX_ACTCNT                    _KERNEL_TMAX_UINT
+#else
+#define _KERNEL_TMAX_ACTCNT                    _KERNEL_CFG_TMAX_ACTCNT
+#endif
+
+#if _KERNEL_CFG_TMAX_WUPCNT < 0
+#define _KERNEL_TMAX_WUPCNT                    _KERNEL_TMAX_UINT
+#else
+#define _KERNEL_TMAX_WUPCNT                    _KERNEL_CFG_TMAX_WUPCNT
+#endif
+
+#if _KERNEL_CFG_TMAX_SUSCNT    < 0
+#define _KERNEL_TMAX_SUSCNT                    _KERNEL_TMAX_UINT
+#else
+#define _KERNEL_TMAX_SUSCNT                    _KERNEL_CFG_TMAX_SUSCNT
+#endif
+
+
+
+
+/* ---------------------------------------------- */
+/*  Kernel                                        */
+/* ---------------------------------------------- */
+
+/* %jp{遅延プロシージャーコール(きっと当分未実装)} */
+#define _KERNEL_SPT_DPC                                _KERNEL_CFG_DPC                         /**< Deferred Procedure Call */
+
+/* %jp{対称型マルチプロセッサ対応(きっと永遠に未実装)} */
+#define _KERNEL_SPT_SMP                                _KERNEL_CFG_SMP                         /**< Symmetric Multiple Processor */
+
+/* %jp{多重割り込み} */
+#define _KERNEL_SPT_MULTIPLE_INT       _KERNEL_CFG_MULTIPLE_INT
+
+
+
+/* %jp{システムタスク(アイドル)にTCBを割り当てる} */
+#define _KERNEL_SYSTSK_TCB                     _KERNEL_CFG_SYSTSK_TCB
+
+/* %jp{実行時にタスクをレディーキューに繋げたままとする} */
+#define _KERNEL_RUNTSK_ON_RDQ          _KERNEL_CFG_RUNTSK_ON_RDQ
+
+/* %jp{サスペンド時にタスクをレディーキューに繋げたままとする} */
+#define _KERNEL_SUSTSK_ON_RDQ          _KERNEL_CFG_SUSTSK_ON_RDQ
+
+
+
+
+/* -------------------------------------------------------------------- */
+/*  service call support                                                */
+/* -------------------------------------------------------------------- */
+
+/* Task management functions */
+#define _KERNEL_SPT_CRE_TSK                    _KERNEL_CFG_CRE_TSK                     /* cre_tsk */
+#define _KERNEL_SPT_ACRE_TSK           _KERNEL_CFG_ACRE_TSK            /* acre_tsk */
+#define _KERNEL_SPT_DEL_TSK                    _KERNEL_CFG_DEL_TSK                     /* del_tsk */
+#define _KERNEL_SPT_ACT_TSK                    _KERNEL_CFG_ACT_TSK                     /* act_tsk */
+#define _KERNEL_SPT_IACT_TSK           _KERNEL_CFG_IACT_TSK            /* iact_tsk */
+#define _KERNEL_SPT_CAN_ACT            _KERNEL_CFG_CAN_ACT             /* can_act */
+#define _KERNEL_SPT_STA_TSK            _KERNEL_CFG_STA_TSK             /* sta_tsk */
+#define _KERNEL_SPT_EXT_TSK            _KERNEL_CFG_EXT_TSK             /* ext_tsk */
+#define _KERNEL_SPT_EXD_TSK            _KERNEL_CFG_EXD_TSK             /* exd_tsk */
+#define _KERNEL_SPT_TER_TSK            _KERNEL_CFG_TER_TSK             /* ter_tsk */
+#define _KERNEL_SPT_CHG_PRI            _KERNEL_CFG_CHG_PRI             /* chg_pri */
+#define _KERNEL_SPT_GET_PRI            _KERNEL_CFG_GET_PRI             /* get_pri */
+#define _KERNEL_SPT_REF_TSK            _KERNEL_CFG_REF_TSK             /* ref_tsk */
+#define _KERNEL_SPT_REF_TST            _KERNEL_CFG_REF_TST             /* ref_tst */
+
+/* Task dependent synchronization functions */
+#define _KERNEL_SPT_SLP_TSK            _KERNEL_CFG_SLP_TSK             /* slp_tsk */
+#define _KERNEL_SPT_TSLP_TSK           _KERNEL_CFG_TSLP_TSK            /* tslp_tsk */
+#define _KERNEL_SPT_WUP_TSK            _KERNEL_CFG_WUP_TSK             /* wup_tsk */
+#define _KERNEL_SPT_IWUP_TSK           _KERNEL_CFG_IWUP_TSK            /* iwup_tsk */
+#define _KERNEL_SPT_CAN_WUP            _KERNEL_CFG_CAN_WUP             /* can_wup */
+#define _KERNEL_SPT_REL_WAI            _KERNEL_CFG_REL_WAI             /* rel_wai */
+#define _KERNEL_SPT_IREL_WAI           _KERNEL_CFG_IREL_WAI            /* irel_wai */
+#define _KERNEL_SPT_SUS_TSK            _KERNEL_CFG_SUS_TSK             /* sus_tsk */
+#define _KERNEL_SPT_RSM_TSK            _KERNEL_CFG_RSM_TSK             /* rsm_tsk */
+#define _KERNEL_SPT_FRSM_TSK           _KERNEL_CFG_FRSM_TSK            /* frsm_tsk */
+#define _KERNEL_SPT_DLY_TSK            _KERNEL_CFG_DLY_TSK             /* dly_tsk */
+
+
+/* Task exception handling functions */
+#define _KERNEL_SPT_DEF_TEX            _KERNEL_CFG_DEF_TEX             /* def_tex */
+#define _KERNEL_SPT_RAS_TEX            _KERNEL_CFG_RAS_TEX             /* ras_tex */
+#define _KERNEL_SPT_IRAS_TEX           _KERNEL_CFG_IRAS_TEX            /* iras_tex */
+#define _KERNEL_SPT_DIS_TEX            _KERNEL_CFG_DIS_TEX             /* dis_tex */
+#define _KERNEL_SPT_ENA_TEX            _KERNEL_CFG_ENA_TEX             /* ena_tex */
+#define _KERNEL_SPT_SNS_TEX            _KERNEL_CFG_SNS_TEX             /* sns_tex */
+#define _KERNEL_SPT_REF_TEX            _KERNEL_CFG_REF_TEX             /* ref_tex */
+
+
+/* Semaphores */
+#define _KERNEL_SPT_CRE_SEM            _KERNEL_CFG_CRE_SEM             /* cre_sem */
+#define _KERNEL_SPT_ACRE_SEM           _KERNEL_CFG_ACRE_SEM            /* acre_sem */
+#define _KERNEL_SPT_DEL_SEM            _KERNEL_CFG_DEL_SEM             /* del_sem */
+#define _KERNEL_SPT_SIG_SEM            _KERNEL_CFG_SIG_SEM             /* sig_sem */
+#define _KERNEL_SPT_ISIG_SEM           _KERNEL_CFG_ISIG_SEM            /* isig_sem */
+#define _KERNEL_SPT_WAI_SEM            _KERNEL_CFG_WAI_SEM             /* wai_sem */
+#define _KERNEL_SPT_POL_SEM            _KERNEL_CFG_POL_SEM             /* pol_sem */
+#define _KERNEL_SPT_TWAI_SEM           _KERNEL_CFG_TWAI_SEM            /* twai_sem */
+#define _KERNEL_SPT_REF_SEM            _KERNEL_CFG_REF_SEM             /* ref_sem */
+
+#if _KERNEL_SPT_TWAI_SEM || (_KERNEL_SPT_WAI_SEM && _KERNEL_SPT_POL_SEM)
+#define _KERNEL_SPT_KWAI_SEM           TRUE
+#else
+#define _KERNEL_SPT_KWAI_SEM           FALSE
+#endif
+
+
+/* Eventflags */
+#define _KERNEL_SPT_CRE_FLG            _KERNEL_CFG_CRE_FLG             /* cre_flg */
+#define _KERNEL_SPT_ACRE_FLG           _KERNEL_CFG_ACRE_FLG            /* acre_flg */
+#define _KERNEL_SPT_DEL_FLG            _KERNEL_CFG_DEL_FLG             /* del_flg */
+#define _KERNEL_SPT_SET_FLG            _KERNEL_CFG_SET_FLG             /* set_flg */
+#define _KERNEL_SPT_ISET_FLG           _KERNEL_CFG_ISET_FLG            /* iset_flg */
+#define _KERNEL_SPT_CLR_FLG            _KERNEL_CFG_CLR_FLG             /* clr_flg */
+#define _KERNEL_SPT_WAI_FLG            _KERNEL_CFG_WAI_FLG             /* wai_flg */
+#define _KERNEL_SPT_POL_FLG            _KERNEL_CFG_POL_FLG             /* pol_flg */
+#define _KERNEL_SPT_TWAI_FLG           _KERNEL_CFG_TWAI_FLG            /* twai_flg */
+#define _KERNEL_SPT_REF_FLG            _KERNEL_CFG_REF_FLG             /* ref_flg */
+
+/* Data queues */
+#define _KERNEL_SPT_CRE_DTQ            _KERNEL_CFG_CRE_DTQ             /* cre_dtq */
+#define _KERNEL_SPT_ACRE_DTQ           _KERNEL_CFG_ACRE_DTQ            /* acre_dtq */
+#define _KERNEL_SPT_DEL_DTQ            _KERNEL_CFG_DEL_DTQ             /* del_dtq */
+#define _KERNEL_SPT_SND_DTQ            _KERNEL_CFG_SND_DTQ             /* snd_dtq */
+#define _KERNEL_SPT_IPSND_DT           _KERNEL_CFG_IPSND_DT            /* ipsnd_dtq */
+#define _KERNEL_SPT_TSND_DTQ           _KERNEL_CFG_TSND_DTQ            /* tsnd_dtq */
+#define _KERNEL_SPT_FSND_DTQ           _KERNEL_CFG_FSND_DTQ            /* fsnd_dtq */
+#define _KERNEL_SPT_IFSND_DT           _KERNEL_CFG_IFSND_DT            /* ifsnd_dtq */
+#define _KERNEL_SPT_RCV_DTQ            _KERNEL_CFG_RCV_DTQ             /* rcv_dtq */
+#define _KERNEL_SPT_PRCV_DTQ           _KERNEL_CFG_PRCV_DTQ            /* prcv_dtq */
+#define _KERNEL_SPT_TRCV_DTQ           _KERNEL_CFG_TRCV_DTQ            /* trcv_dtq */
+#define _KERNEL_SPT_REF_DTQ            _KERNEL_CFG_REF_DTQ             /* ref_dtq */
+
+/* Mailboxes */
+#define _KERNEL_SPT_CRE_MBX            _KERNEL_CFG_CRE_MBX             /* cre_mbx */
+#define _KERNEL_SPT_ACRE_MBX           _KERNEL_CFG_ACRE_MBX            /* acre_mbx */
+#define _KERNEL_SPT_DEL_MBX            _KERNEL_CFG_DEL_MBX             /* del_mbx */
+#define _KERNEL_SPT_SND_MBX            _KERNEL_CFG_SND_MBX             /* snd_mbx */
+#define _KERNEL_SPT_RCV_MBX            _KERNEL_CFG_RCV_MBX             /* rcv_mbx */
+#define _KERNEL_SPT_PRCV_MBX           _KERNEL_CFG_PRCV_MBX            /* prcv_mbx */
+#define _KERNEL_SPT_TRCV_MBX           _KERNEL_CFG_TRCV_MBX            /* trcv_mbx */
+#define _KERNEL_SPT_REF_MBX            _KERNEL_CFG_REF_MBX             /* ref_mbx */
+
+/* Mutexes */
+#define _KERNEL_SPT_CRE_MTX            _KERNEL_CFG_CRE_MTX             /* cre_mtx */
+#define _KERNEL_SPT_ACRE_MTX           _KERNEL_CFG_ACRE_MTX            /* acre_mtx */
+#define _KERNEL_SPT_DEL_MTX            _KERNEL_CFG_DEL_MTX             /* del_mtx */
+#define _KERNEL_SPT_LOC_MTX            _KERNEL_CFG_LOC_MTX             /* loc_mtx */
+#define _KERNEL_SPT_PLOC_MTX           _KERNEL_CFG_PLOC_MTX            /* ploc_mtx */
+#define _KERNEL_SPT_TLOC_MTX           _KERNEL_CFG_TLOC_MTX            /* tloc_mtx */
+#define _KERNEL_SPT_UNL_MTX            _KERNEL_CFG_UNL_MTX             /* unl_mtx */
+#define _KERNEL_SPT_REF_MTX            _KERNEL_CFG_REF_MTX             /* ref_mtx */
+
+/* Message buffers */
+#define _KERNEL_SPT_CRE_MBF            _KERNEL_CFG_CRE_MBF             /* cre_mbf */
+#define _KERNEL_SPT_ACRE_MBF           _KERNEL_CFG_ACRE_MBF            /* acre_mbf */
+#define _KERNEL_SPT_DEL_MBF            _KERNEL_CFG_DEL_MBF             /* del_mbf */
+#define _KERNEL_SPT_SND_MBF            _KERNEL_CFG_SND_MBF             /* snd_mbf */
+#define _KERNEL_SPT_PSND_MBF           _KERNEL_CFG_PSND_MBF            /* psnd_mbf */
+#define _KERNEL_SPT_TSND_MBF           _KERNEL_CFG_TSND_MBF            /* tsnd_mbf */
+#define _KERNEL_SPT_RCV_MBF            _KERNEL_CFG_RCV_MBF             /* rcv_mbf */
+#define _KERNEL_SPT_PRCV_MBF           _KERNEL_CFG_PRCV_MBF            /* prcv_mbf */
+#define _KERNEL_SPT_TRCV_MBF           _KERNEL_CFG_TRCV_MBF            /* trcv_mbf */
+#define _KERNEL_SPT_REF_MBF            _KERNEL_CFG_REF_MBF             /* ref_mbf */
+
+/* Rendezvous */
+#define _KERNEL_SPT_CRE_POR            _KERNEL_CFG_CRE_POR             /* cre_por */
+#define _KERNEL_SPT_ACRE_POR           _KERNEL_CFG_ACRE_POR            /* acre_por */
+#define _KERNEL_SPT_DEL_POR            _KERNEL_CFG_DEL_POR             /* del_por */
+#define _KERNEL_SPT_CAL_POR            _KERNEL_CFG_CAL_POR             /* cal_por */
+#define _KERNEL_SPT_TCAL_POR           _KERNEL_CFG_TCAL_POR            /* tcal_por */
+#define _KERNEL_SPT_ACP_POR            _KERNEL_CFG_ACP_POR             /* acp_por */
+#define _KERNEL_SPT_PACP_POR           _KERNEL_CFG_PACP_POR            /* pacp_por */
+#define _KERNEL_SPT_TACP_POR           _KERNEL_CFG_TACP_POR            /* tacp_por */
+#define _KERNEL_SPT_FWD_POR            _KERNEL_CFG_FWD_POR             /* fwd_por */
+#define _KERNEL_SPT_RPL_RDV            _KERNEL_CFG_RPL_RDV             /* rpl_rdv */
+#define _KERNEL_SPT_REF_POR            _KERNEL_CFG_REF_POR             /* ref_por */
+#define _KERNEL_SPT_REF_RDV            _KERNEL_CFG_REF_RDV             /* ref_rdv */
+
+/* Fixed-sized memory pools */
+#define _KERNEL_SPT_CRE_MPF            _KERNEL_CFG_CRE_MPF             /* cre_mpf */
+#define _KERNEL_SPT_ACRE_MPF           _KERNEL_CFG_ACRE_MPF            /* acre_mpf */
+#define _KERNEL_SPT_DEL_MPF            _KERNEL_CFG_DEL_MPF             /* del_mpf */
+#define _KERNEL_SPT_GET_MPF            _KERNEL_CFG_GET_MPF             /* get_mpf */
+#define _KERNEL_SPT_PGET_MPF           _KERNEL_CFG_PGET_MPF            /* pget_mpf */
+#define _KERNEL_SPT_TGET_MPF           _KERNEL_CFG_TGET_MPF            /* tget_mpf */
+#define _KERNEL_SPT_REL_MPF            _KERNEL_CFG_REL_MPF             /* rel_mpf */
+#define _KERNEL_SPT_REF_MPF            _KERNEL_CFG_REF_MPF             /* ref_mpf */
+
+/* Variable-sized memory pools */
+#define _KERNEL_SPT_CRE_MPL            _KERNEL_CFG_CRE_MPL             /* cre_mpl */
+#define _KERNEL_SPT_ACRE_MPL           _KERNEL_CFG_ACRE_MPL            /* acre_mpl */
+#define _KERNEL_SPT_DEL_MPL            _KERNEL_CFG_DEL_MPL             /* del_mpl */
+#define _KERNEL_SPT_GET_MPL            _KERNEL_CFG_GET_MPL             /* get_mpl */
+#define _KERNEL_SPT_PGET_MPL           _KERNEL_CFG_PGET_MPL            /* pget_mpl */
+#define _KERNEL_SPT_TGET_MPL           _KERNEL_CFG_TGET_MPL            /* tget_mpl */
+#define _KERNEL_SPT_REL_MPL            _KERNEL_CFG_REL_MPL             /* rel_mpl */
+#define _KERNEL_SPT_REF_MPL            _KERNEL_CFG_REF_MPL             /* ref_mpl */
+
+/* System time management */
+#define _KERNEL_SPT_SET_TIM            _KERNEL_CFG_SET_TIM             /* set_tim */
+#define _KERNEL_SPT_GET_TIM            _KERNEL_CFG_GET_TIM             /* get_tim */
+#define _KERNEL_SPT_ISIG_TIM           _KERNEL_CFG_ISIG_TIM            /* isig_tim */
+
+/* Cyclic handlers */
+#define _KERNEL_SPT_CRE_CYC            _KERNEL_CFG_CRE_CYC             /* cre_cyc */
+#define _KERNEL_SPT_ACRE_CYC           _KERNEL_CFG_ACRE_CYC            /* acre_cyc */
+#define _KERNEL_SPT_DEL_CYC            _KERNEL_CFG_DEL_CYC             /* del_cyc */
+#define _KERNEL_SPT_STA_CYC            _KERNEL_CFG_STA_CYC             /* sta_cyc */
+#define _KERNEL_SPT_STP_CYC            _KERNEL_CFG_STP_CYC             /* stp_cyc */
+#define _KERNEL_SPT_REF_CYC            _KERNEL_CFG_REF_CYC             /* ref_cyc */
+
+/* Alarm handlers */
+#define _KERNEL_SPT_CRE_ALM            _KERNEL_CFG_CRE_ALM             /* cre_alm */
+#define _KERNEL_SPT_ACRE_ALM           _KERNEL_CFG_ACRE_ALM            /* acre_alm */
+#define _KERNEL_SPT_DEL_ALM            _KERNEL_CFG_DEL_ALM             /* del_alm */
+#define _KERNEL_SPT_STA_ALM            _KERNEL_CFG_STA_ALM             /* sta_alm */
+#define _KERNEL_SPT_STP_ALM            _KERNEL_CFG_STP_ALM             /* stp_alm */
+#define _KERNEL_SPT_REF_ALM            _KERNEL_CFG_REF_ALM             /* ref_alm */
+
+/* Overrun handlers */
+#define _KERNEL_SPT_DEF_OVR            _KERNEL_CFG_DEF_OVR             /* def_ovr */
+#define _KERNEL_SPT_STA_OVR            _KERNEL_CFG_STA_OVR             /* sta_ovr */
+#define _KERNEL_SPT_STP_OVR            _KERNEL_CFG_STP_OVR             /* stp_ovr */
+#define _KERNEL_SPT_REF_OVR            _KERNEL_CFG_REF_OVR             /* ref_ovr */
+
+/* System management functions */
+#define _KERNEL_SPT_ROT_RDQ            _KERNEL_CFG_ROT_RDQ             /* rot_rdq */
+#define _KERNEL_SPT_IROT_RDQ           _KERNEL_CFG_IROT_RDQ            /* irot_rdq */
+#define _KERNEL_SPT_GET_TID            _KERNEL_CFG_GET_TID             /* get_tid */
+#define _KERNEL_SPT_IGET_TID           _KERNEL_CFG_IGET_TID            /* iget_tid */
+#define _KERNEL_SPT_LOC_CPU            _KERNEL_CFG_LOC_CPU             /* loc_cpu */
+#define _KERNEL_SPT_ILOC_CPU           _KERNEL_CFG_ILOC_CPU            /* iloc_cpu */
+#define _KERNEL_SPT_UNL_CPU            _KERNEL_CFG_UNL_CPU             /* unl_cpu */
+#define _KERNEL_SPT_ILNL_CPU           _KERNEL_CFG_ILNL_CPU            /* ilnl_cpu */
+#define _KERNEL_SPT_DIS_DSP            _KERNEL_CFG_DIS_DSP             /* dis_dsp */
+#define _KERNEL_SPT_ENA_DSP            _KERNEL_CFG_ENA_DSP             /* ena_dsp */
+#define _KERNEL_SPT_SNS_CTX            _KERNEL_CFG_SNS_CTX             /* sns_ctx */
+#define _KERNEL_SPT_SNS_LOC            _KERNEL_CFG_SNS_LOC             /* sns_loc */
+#define _KERNEL_SPT_SNS_DSP            _KERNEL_CFG_SNS_DSP             /* sns_dsp */
+#define _KERNEL_SPT_SNS_DPN            _KERNEL_CFG_SNS_DPN             /* sns_dpn */
+#define _KERNEL_SPT_REF_SYS            _KERNEL_CFG_REF_SYS             /* ref_sys */
+
+/* Interrupt management functions */
+#define _KERNEL_SPT_DEF_INH            _KERNEL_CFG_DEF_INH             /* def_inh */
+#define _KERNEL_SPT_CRE_ISR            _KERNEL_CFG_CRE_ISR             /* cre_isr */
+#define _KERNEL_SPT_ACRE_ISR           _KERNEL_CFG_ACRE_ISR            /* acre_isr */
+#define _KERNEL_SPT_DEL_ISR            _KERNEL_CFG_DEL_ISR             /* del_isr */
+#define _KERNEL_SPT_REF_ISR            _KERNEL_CFG_REF_ISR             /* ref_isr */
+#define _KERNEL_SPT_DIS_INT            _KERNEL_CFG_DIS_INT             /* dis_int */
+#define _KERNEL_SPT_ENA_INT            _KERNEL_CFG_ENA_INT             /* ena_int */
+#define _KERNEL_SPT_CHG_ILV            _KERNEL_CFG_CHG_ILV             /* chg_ilv */
+#define _KERNEL_SPT_GET_ILV            _KERNEL_CFG_GET_ILV             /* get_ilv */
+
+/* Service call management functions */
+#define _KERNEL_SPT_DEF_SVC            _KERNEL_CFG_DEF_SVC             /* def_svc */
+#define _KERNEL_SPT_CAL_SVC            _KERNEL_CFG_CAL_SVC             /* cal_svc */
+
+/* System configulation management functions */
+#define _KERNEL_SPT_DEF_EXC            _KERNEL_CFG_DEF_EXC             /* def_exc */
+#define _KERNEL_SPT_REF_CFG            _KERNEL_CFG_REF_CFG             /* ref_cfg */
+#define _KERNEL_SPT_REF_VER            _KERNEL_CFG_REF_VER             /* ref_ver */
+
+/* Static API */
+#define _KERNEL_SPT_SCRE_TSK           _KERNEL_CFG_SCRE_TSK            /* CRE_TSK */
+#define _KERNEL_SPT_SDEF_TEX           _KERNEL_CFG_SDEF_TEX            /* DEF_TEX */
+#define _KERNEL_SPT_SCRE_SEM           _KERNEL_CFG_SCRE_SEM            /* CRE_SEM */
+#define _KERNEL_SPT_SCRE_FLG           _KERNEL_CFG_SCRE_FLG            /* CRE_FLG */
+#define _KERNEL_SPT_SCRE_DTQ           _KERNEL_CFG_SCRE_DTQ            /* CRE_DTQ */
+#define _KERNEL_SPT_SCRE_MBX           _KERNEL_CFG_SCRE_MBX            /* CRE_MBX */
+#define _KERNEL_SPT_SCRE_MTX           _KERNEL_CFG_SCRE_MTX            /* CRE_MTX */
+#define _KERNEL_SPT_SCRE_MBX           _KERNEL_CFG_SCRE_MBX            /* CRE_MBX */
+#define _KERNEL_SPT_SCRE_MTX           _KERNEL_CFG_SCRE_MTX            /* CRE_MTX */
+#define _KERNEL_SPT_SCRE_MBF           _KERNEL_CFG_SCRE_MBF            /* CRE_MBF */
+#define _KERNEL_SPT_SCRE_POR           _KERNEL_CFG_SCRE_POR            /* CRE_POR */
+#define _KERNEL_SPT_SCRE_MPF           _KERNEL_CFG_SCRE_MPF            /* CRE_MPF */
+#define _KERNEL_SPT_SCRE_MPL           _KERNEL_CFG_SCRE_MPL            /* CRE_MPL */
+#define _KERNEL_SPT_SCRE_CYC           _KERNEL_CFG_SCRE_CYC            /* CRE_CYC */
+#define _KERNEL_SPT_SCRE_ALM           _KERNEL_CFG_SCRE_ALM            /* CRE_ALM */
+#define _KERNEL_SPT_SDEF_OVR           _KERNEL_CFG_SDEF_OVR            /* DEF_OVR */
+#define _KERNEL_SPT_SDEF_INH           _KERNEL_CFG_SDEF_INH            /* DEF_INH */
+#define _KERNEL_SPT_SCRE_ISR           _KERNEL_CFG_SCRE_ISR            /* CRE_ISR */
+#define _KERNEL_SPT_SDEF_SVC           _KERNEL_CFG_SDEF_SVC            /* DEF_SVC */
+#define _KERNEL_SPT_SDEF_EXC           _KERNEL_CFG_SDEF_EXC            /* DEF_EXC */
+#define _KERNEL_SPT_SATT_INI           _KERNEL_CFG_SATT_INI            /* ATT_INI */
+#define _KERNEL_SPT_SINCLUDE           _KERNEL_CFG_SINCLUDE            /* INCLUDE */
+
+
+/* %jp{オブジェクト動的生成サポートの判定} */
+#if ((_KERNEL_CFG_CRE_TSK)                     \
+       || (_KERNEL_CFG_ACRE_TSK)               \
+       || (_KERNEL_CFG_SCRE_TSK))              \
+       && (_KERNEL_CFG_TMAX_TSKID) > 0
+#define _KERNEL_SPT_TSK                                TRUE
+#else
+#define _KERNEL_SPT_TSK                                FALSE
+#endif
+
+#define _KERNEL_SPT_TEX                                FALSE
+#define _KERNEL_SPT_SEM                                TRUE
+#define _KERNEL_SPT_FLG                                TRUE
+#define _KERNEL_SPT_DTQ                                FALSE
+#define _KERNEL_SPT_MBX                                FALSE
+#define _KERNEL_SPT_MTX                                FALSE
+#define _KERNEL_SPT_MBF                                FALSE
+#define _KERNEL_SPT_MPF                                FALSE
+#define _KERNEL_SPT_MPL                                FALSE
+#define _KERNEL_SPT_CYC                                FALSE
+#define _KERNEL_SPT_ALM                                FALSE
+#define _KERNEL_SPT_OVR                                FALSE
+#define _KERNEL_SPT_ISR                                TRUE
+
+
+/* %jp{オブジェクト動的生成サポートの判定} */
+#if (_KERNEL_SPT_CRE_TSK)                      \
+       || (_KERNEL_SPT_ACRE_TSK)               \
+       || (_KERNEL_SPT_DEF_TEX)                \
+       || (_KERNEL_SPT_CRE_SEM)                \
+       || (_KERNEL_SPT_ACRE_SEM)               \
+       || (_KERNEL_SPT_CRE_FLG)                \
+       || (_KERNEL_SPT_ACRE_FLG)               \
+       || (_KERNEL_SPT_CRE_DTQ)                \
+       || (_KERNEL_SPT_ACRE_DTQ)               \
+       || (_KERNEL_SPT_CRE_MBX)                \
+       || (_KERNEL_SPT_ACRE_MBX)               \
+       || (_KERNEL_SPT_CRE_MTX)                \
+       || (_KERNEL_SPT_ACRE_MTX)               \
+       || (_KERNEL_SPT_CRE_MBF)                \
+       || (_KERNEL_SPT_ACRE_MBF)               \
+       || (_KERNEL_SPT_CRE_MPF)                \
+       || (_KERNEL_SPT_ACRE_MPF)               \
+       || (_KERNEL_SPT_CRE_MPL)                \
+       || (_KERNEL_SPT_ACRE_MPL)               \
+       || (_KERNEL_SPT_CRE_CYC)                \
+       || (_KERNEL_SPT_ACRE_CYC)               \
+       || (_KERNEL_SPT_CRE_ALM)                \
+       || (_KERNEL_SPT_ACRE_ALM)               \
+       || (_KERNEL_SPT_DEF_OVR)                \
+       || (_KERNEL_SPT_CRE_ISR)                \
+       || (_KERNEL_SPT_ACRE_ISR)
+#define _KERNEL_SPT_CREOBJ                     TRUE
+#else
+#define _KERNEL_SPT_CREOBJ                     FALSE
+#endif
+
+
+/* %jp{オブジェクト動的削除サポートの判定} */
+#if (_KERNEL_SPT_DEL_TSK)                      \
+       || (_KERNEL_SPT_DEL_SEM)                \
+       || (_KERNEL_SPT_DEL_FLG)                \
+       || (_KERNEL_SPT_DEL_DTQ)                \
+       || (_KERNEL_SPT_DEL_MBX)                \
+       || (_KERNEL_SPT_DEL_MTX)                \
+       || (_KERNEL_SPT_DEL_MBF)                \
+       || (_KERNEL_SPT_DEL_MPF)                \
+       || (_KERNEL_SPT_DEL_MPL)                \
+       || (_KERNEL_SPT_DEL_CYC)                \
+       || (_KERNEL_SPT_DEL_ALM)                \
+       || (_KERNEL_SPT_DEL_ISR)
+#define _KERNEL_SPT_DELOBJ                     TRUE
+#else
+#define _KERNEL_SPT_DELOBJ                     FALSE
+#endif
+
+
+/* %jp{タイムアウトサポートの判定} */
+#if (_KERNEL_SPT_TSLP_TSK)                     \
+       || (_KERNEL_SPT_DLY_TSK)                \
+       || (_KERNEL_SPT_TWAI_SEM)               \
+       || (_KERNEL_SPT_TWAI_FLG)               \
+       || (_KERNEL_SPT_TSND_DTQ)               \
+       || (_KERNEL_SPT_TRCV_DTQ)               \
+       || (_KERNEL_SPT_TRCV_MBX)               \
+       || (_KERNEL_SPT_TLOC_MTX)               \
+       || (_KERNEL_SPT_TSND_MBF)               \
+       || (_KERNEL_SPT_TRCV_MBF)               \
+       || (_KERNEL_SPT_TCAL_POR)               \
+       || (_KERNEL_SPT_TACP_POR)               \
+       || (_KERNEL_SPT_TGET_MPF)               \
+       || (_KERNEL_SPT_TGET_MPL)
+#define _KERNEL_SPT_TOQ                                TRUE
+#else
+#define _KERNEL_SPT_TOQ                                FALSE
+#endif
+
+
+
+#define _KERNEL_SPT_TSK_TA_ACT         _KERNEL_CFG_TSK_TA_ACT
+
+#define _KERNEL_SPT_SEM_TA_TFIFO       _KERNEL_CFG_SEM_TA_TFIFO
+#define _KERNEL_SPT_SEM_TA_TPRI                _KERNEL_CFG_SEM_TA_TPRI
+
+
+/* -------------------------------------------------------------------- */
+/*  Task-queue                                                          */
+/* -------------------------------------------------------------------- */
+
+#define _KERNEL_QUE_ALG_ONEWAYLIST             1
+#define _KERNEL_QUE_ALG_TWOWAYLIST             2
+
+#define _KERNEL_QUE_ALGORITHM                  _KERNEL_CFG_QUE_ALGORITHM
+
+
+
+/* -------------------------------------------------------------------- */
+/*  TCB                                                                 */
+/* -------------------------------------------------------------------- */
+
+/* ---------------------------------- */
+/*            Task-ID                 */
+/* ---------------------------------- */
+
+/* %jp{タスクIDの最小値} */
+#define _KERNEL_TMIN_TSKID                     1
+
+/* %jp{タスクIDの最大値} */
+#if _KERNEL_CFG_TMAX_TSKID < 0
+#define _KERNEL_TMAX_TSKID                     _KERNEL_TMAX_ID                                 
+#else
+#define _KERNEL_TMAX_TSKID                     _KERNEL_CFG_TMAX_TSKID
+#endif
+
+/**< %jp{タスクIDを示すのに最低限必要なbit数} */
+#define _KERNEL_TBIT_TSKID                     _KERNEL_MAXNUM2BIT(_KERNEL_TMAX_TSKID)
+
+
+/* ---------------------------------- */
+/*          Semaphore-ID              */
+/* ---------------------------------- */
+
+/* %jp{セマフォIDの最小値} */
+#define _KERNEL_TMIN_SEMID             1               
+
+/* %jp{セマフォIDの最大値} */
+#if _KERNEL_CFG_TMAX_SEMID < 0
+#define _KERNEL_TMAX_SEMID                     _KERNEL_TMAX_ID                                 
+#else
+#define _KERNEL_TMAX_SEMID                     _KERNEL_CFG_TMAX_SEMID
+#endif
+
+
+#define _KERNEL_TMAX_FLGID                     _KERNEL_CFG_TMAX_FLGID
+#define _KERNEL_TMAX_DTQID                     _KERNEL_CFG_TMAX_DTQID
+#define _KERNEL_TMAX_MBXID                     _KERNEL_CFG_TMAX_MBXID
+#define _KERNEL_TMAX_MTXID                     _KERNEL_CFG_TMAX_MTXID
+#define _KERNEL_TMAX_MBFID                     _KERNEL_CFG_TMAX_MBFID
+#define _KERNEL_TMAX_PORID                     _KERNEL_CFG_TMAX_PORID
+#define _KERNEL_TMAX_MPFID                     _KERNEL_CFG_TMAX_MPFID
+#define _KERNEL_TMAX_MPLID                     _KERNEL_CFG_TMAX_MPLID
+#define _KERNEL_TMAX_CYCID                     _KERNEL_CFG_TMAX_CYCID
+#define _KERNEL_TMAX_ALMID                     _KERNEL_CFG_TMAX_ALMID
+#define _KERNEL_TMAX_OVRID                     _KERNEL_CFG_TMAX_OVRID
+#define _KERNEL_TMAX_ISRID                     _KERNEL_CFG_TMAX_ISRID
+
+
+
+
+/* ---------------------------------- */
+/*          Task-Handle               */
+/* ---------------------------------- */
+
+#define _KERNEL_TSKHDL_ID                      _KERNEL_CFG_TSKHDL_ID   /* %en{_KERNEL_T_TSKHDL is ID}%jp{タスクポインタにIDを使う} */
+
+
+
+
+/* ------------------------------------------------------------------ */
+/*  TCB                                                               */
+/* ------------------------------------------------------------------ */
+
+#define _KERNEL_TCB_ALG_BLKARRAY       1
+#define _KERNEL_TCB_ALG_PTRARRAY       2
+
+#define _KERNEL_TCB_BITFIELD           _KERNEL_CFG_TCB_BITFIELD
+#define _KERNEL_TCB_ALGORITHM          _KERNEL_CFG_TCB_ALGORITHM
+
+#if (_KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY) && (_KERNEL_SPT_CRE_TSK || _KERNEL_SPT_ACRE_TSK)
+#define _KERNEL_TCB_SPLIT_RO           FALSE
+#else
+#define _KERNEL_TCB_SPLIT_RO           _KERNEL_CFG_TCB_SPLIT_RO
+#endif
+
+
+
+
+/* ---------------------------------- */
+/*           Task-state               */
+/* ---------------------------------- */
+
+/* Task State */
+#define _KERNEL_TTS_RUN                                TTS_RUN                 /**< %jp{実行状態} */
+#define _KERNEL_TTS_RDY                                TTS_RDY                 /**< %jp{実行可能状態} */
+#define _KERNEL_TTS_WAI                                TTS_WAI                 /**< %jp{待ち状態} */
+#define _KERNEL_TTS_SUS                                TTS_SUS                 /**< %jp{強制待ち状態} */
+#define _KERNEL_TTS_WAS                                TTS_WAS                 /**< %jp{二重待ち状態} */
+#define _KERNEL_TTS_DMT                                0                               /**< %jp{休止状態} */
+
+#define _KERNEL_TSK_TBIT_TSKSTAT       4                               /**< %jp{タスク状態を示すのに最低限必要なビット幅(5ビット)} */
+
+#define _KERNEL_ENC_TTS(x)                     ((x) & 0xf)
+#define _KERNEL_DEC_TTS(x)                     ((x) == 0 ? TTS_DMT : (x))
+
+
+/* ---------------------------------- */
+/*           Task priopity            */
+/* ---------------------------------- */
+
+/* %jp{優先度の範囲}%en{Priority Range} */
+#if _KERNEL_CFG_TMAX_TPRI < 0
+#define _KERNEL_TSK_TMAX_TPRI          _KERNEL_TMAX_PRI
+#else
+#define _KERNEL_TSK_TMAX_TPRI          _KERNEL_CFG_TMAX_TPRI
+#endif
+
+#define _KERNEL_TSK_TBIT_TPRI          _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_TPRI)
+
+
+
+/* ---------------------------------- */
+/*           Task wait                */
+/* ---------------------------------- */
+
+/* Task Wait */
+#if _KERNEL_OPT_CB_SIZE || _KERNEL_CFG_TTW_PACK                /**< %jp{待ち状態をパッキングして保存なら} */
+
+#define _KERNEL_TTW_SLP                                0                               /**< %jp{起床待ち状態} */
+#define _KERNEL_TTW_DLY                                1                               /**< %jp{時間経過待ち状態} */
+#define _KERNEL_TTW_SEM                                2                               /**< %jp{セマフォ資源の獲得待ち状態} */
+#define _KERNEL_TTW_FLG                                3                               /**< %jp{イベントフラグ待ち状態} */
+#define _KERNEL_TTW_SDTQ                       4                               /**< %jp{データキューへの送信待ち状態} */
+#define _KERNEL_TTW_RDTQ                       5                               /**< %jp{データキューからの受信待ち状態} */
+#define _KERNEL_TTW_MBX                                6                               /**< %jp{メールボックスからの受信待ち状態} */
+#define _KERNEL_TTW_MTX                                7                               /**< %jp{ミューテックスのロック待ち状態} */
+#define _KERNEL_TTW_SMBF                       8                               /**< %jp{メッセージバッファへの送信待ち状態} */
+#define _KERNEL_TTW_RMBF                       9                               /**< %jp{メッセージバッファからの受信待ち状態} */
+#define _KERNEL_TTW_CAL                                10                              /**< %jp{ランデブの呼び出し待ち状態} */
+#define _KERNEL_TTW_ACP                                11                              /**< %jp{ランデブの受付待ち状態} */
+#define _KERNEL_TTW_RDV                                12                              /**< %jp{ランデブの終了待ち状態} */
+#define _KERNEL_TTW_MPF                                13                              /**< %jp{固定長メモリブロックの獲得待ち状態} */
+#define _KERNEL_TTW_MPL                                14                              /**< %jp{可変長メモリブロックの獲得待ち状態} */
+
+#define _KERNEL_DEC_TTW(x)                     (1 << (x))
+
+#define _KERNEL_TSK_TBIT_TSKWAIT       4                               /**< %jp{ビット幅4ビット} */
+
+#else                                                                                          /**< %jp{待ち状態をパックしないなら} */
+
+#define _KERNEL_TTW_SLP                                TTW_SLP                 /* 起床待ち状態 */
+#define _KERNEL_TTW_DLY                                TTW_DLY                 /* 時間経過待ち状態 */
+#define _KERNEL_TTW_SEM                                TTW_SEM                 /* セマフォ資源の獲得待ち状態 */
+#define _KERNEL_TTW_FLG                                TTW_FLG                 /* イベントフラグ待ち状態 */
+#define _KERNEL_TTW_SDTQ                       TTW_SDTQ                /* データキューへの送信待ち状態 */
+#define _KERNEL_TTW_RDTQ                       TTW_RDTQ                /* データキューからの受信待ち状態 */
+#define _KERNEL_TTW_MBX                                TTW_MBX                 /* メールボックスからの受信待ち状態 */
+#define _KERNEL_TTW_MTX                                TTW_MTX                 /* ミューテックスのロック待ち状態 */
+#define _KERNEL_TTW_SMBF                       TTW_SMBF                /* メッセージバッファへの送信待ち状態 */
+#define _KERNEL_TTW_RMBF                       TTW_RMBF                /* メッセージバッファからの受信待ち状態 */
+#define _KERNEL_TTW_CAL                                TTW_CAL                 /* ランデブの呼び出し待ち状態 */
+#define _KERNEL_TTW_ACP                                TTW_ACP                 /* ランデブの受付待ち状態 */
+#define _KERNEL_TTW_RDV                                TTW_RDV                 /* ランデブの終了待ち状態 */
+#define _KERNEL_TTW_MPF                                TTW_MPF                 /* 固定長メモリブロックの獲得待ち状態 */
+#define _KERNEL_TTW_MPL                                TTW_MPL                 /* 可変長メモリブロックの獲得待ち状態 */
+
+#define _KERNEL_DEC_TTW(x)                     (x)
+
+#define _KERNEL_TSK_TBIT_TSKWAIT       15                              /**< %jp{ビット幅15ビット} */
+
+#endif
+
+
+/* ---------------------------------- */
+/*           Waitbject-ID             */
+/* ---------------------------------- */
+
+/* %jp{IDの最小値} */
+#define _KERNEL_TMIN_TSK_WOBJID                1
+
+/* %jp{IDの最大値} */
+#define _KERNEL_TSK_TMAX_WOBJID                1
+#if _KERNEL_TMAX_SEMID > _KERNEL_TSK_TMAX_WOBJID
+#undef _KERNEL_TSK_TMAX_WOBJID
+#define _KERNEL_TSK_TMAX_WOBJID                _KERNEL_TMAX_SEMID
+#endif
+
+#if _KERNEL_TMAX_FLGID > _KERNEL_TSK_TMAX_WOBJID
+#undef _KERNEL_TSK_TMAX_WOBJID
+#define _KERNEL_TSK_TMAX_WOBJID                _KERNEL_TMAX_FLGID
+#endif
+
+#if _KERNEL_TMAX_DTQID > _KERNEL_TSK_TMAX_WOBJID
+#undef _KERNEL_TSK_TMAX_WOBJID
+#define _KERNEL_TSK_TMAX_WOBJID                _KERNEL_TMAX_DTQID
+#endif
+
+#if _KERNEL_TMAX_MBXID > _KERNEL_TSK_TMAX_WOBJID
+#undef _KERNEL_TSK_TMAX_WOBJID
+#define _KERNEL_TSK_TMAX_WOBJID                _KERNEL_TMAX_MBXID
+#endif
+
+#if _KERNEL_TMAX_MTXID > _KERNEL_TSK_TMAX_WOBJID
+#undef _KERNEL_TSK_TMAX_WOBJID
+#define _KERNEL_TSK_TMAX_WOBJID                _KERNEL_TMAX_MTXID
+#endif
+
+#if _KERNEL_TMAX_MBFID > _KERNEL_TSK_TMAX_WOBJID
+#undef _KERNEL_TSK_TMAX_WOBJID
+#define _KERNEL_TSK_TMAX_WOBJID                _KERNEL_TMAX_MBFID
+#endif
+
+/**< %jp{IDを示すのに最低限必要なbit数} */
+#define _KERNEL_TSK_TBIT_WOBJID                _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_WOBJID)
+
+
+/* ---------------------------------- */
+/*       activate queuing count       */
+/* ---------------------------------- */
+
+/* %jp{タスク起動要求キューイング数の最大値} */
+#define _KERNEL_TSK_TMAX_ACTCNT                _KERNEL_TMAX_ACTCNT
+#define _KERNEL_TSK_TBIT_ACTCNT                _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_ACTCNT)
+
+
+/* ---------------------------------- */
+/*       wakeup queuing count         */
+/* ---------------------------------- */
+
+/* %jp{タスク起床要求キューイング数の最大値} */
+#define _KERNEL_TSK_TMAX_WUPCNT                _KERNEL_TMAX_WUPCNT
+#define _KERNEL_TSK_TBIT_WUPCNT                _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_WUPCNT)
+
+
+/* ---------------------------------- */
+/*         suspend nest count         */
+/* ---------------------------------- */
+
+/* %jp{タスク強制待ち要求ネスト数の最大値} */
+#define _KERNEL_TSK_TMAX_SUSCNT                _KERNEL_TMAX_SUSCNT
+#define _KERNEL_TSK_TBIT_SUSCNT                _KERNEL_MAXNUM2BIT(_KERNEL_TSK_TMAX_SUSCNT)
+
+
+/* ---------------------------------- */
+/*           task data                */
+/* ---------------------------------- */
+
+#define _KERNEL_TSK_TBIT_DATA          _KERNEL_TBIT_VP_INT
+
+
+/* ---------------------------------- */
+/*            error code              */
+/* ---------------------------------- */
+
+#define _KERNEL_TSK_TBIT_ERCD          7
+
+
+/* ---------------------------------- */
+/*          Task-ID                   */
+/* ---------------------------------- */
+
+#define _KERNEL_TSK_TMAX_TSKID         _KERNEL_TMAX_TSKID
+
+
+
+
+/* ---------------------------------- */
+/*            TCB member              */
+/* ---------------------------------- */
+
+/* %jp{必須} */
+#define _KERNEL_TCB_CTXCB                      TRUE
+#define _KERNEL_TCB_QUE                                TRUE
+#define _KERNEL_TCB_QUEOBJ                     TRUE
+#define _KERNEL_TCB_TSKSTAT                    TRUE
+
+/* %jp{タイムアウトキュー}*/
+#define _KERNEL_TCB_TOQOBJ                     _KERNEL_SPT_TOQ
+
+
+#if _KERNEL_TMAX_TPRI <= 1
+/* %jp{優先度単一(全てFIFO順)なら優先度管理不要}*/
+#define _KERNEL_TCB_TSKPRI                     FALSE
+#define _KERNEL_TCB_TSKBPRI                    FALSE
+#define _KERNEL_TCB_ITSKPRI                    FALSE
+#else
+/* %jp{動的に優先度を変更するならtskpriの管理が必要}*/
+#define _KERNEL_TCB_TSKPRI                     (_KERNEL_SPT_CHG_PRI || _KERNEL_SPT_MTX)
+/* %jp{ミューテックスをサポートするならtskbpriの管理が必要}*/
+#define _KERNEL_TCB_TSKBPRI                    _KERNEL_SPT_MTX
+/* %jp{itskpriは必須}*/
+#define _KERNEL_TCB_ITSKPRI                    TRUE
+#endif
+
+/* %jp{ref_tskによる逆引きの必要があるなら含める(ter_tskでも要るかも)} */
+#define _KERNEL_TCB_TSKWAIT                    _KERNEL_SPT_REF_TSK
+#define _KERNEL_TCB_WOBJID                     _KERNEL_SPT_REF_TSK     
+
+
+/* %jp{キューイング/ネストが必要なら含める} */
+#define _KERNEL_TCB_ACTCNT                     (_KERNEL_TMAX_ACTCNT > 0)
+#define _KERNEL_TCB_WUPCNT                     (_KERNEL_TMAX_WUPCNT > 0)
+#define _KERNEL_TCB_SUSCNT                     (_KERNEL_TMAX_SUSCNT > 0)
+
+/* %jp{E_OK以外の待ち解除要因があれば必要} */
+#define _KERNEL_TCB_ERCD                       (_KERNEL_SPT_REL_WAI || _KERNEL_SPT_TER_TSK || _KERNEL_SPT_TMOUT || _KERNEL_SPT_DELOBJ)
+
+/* %jp{データ渡しの必要なオブジェクトを使うなら必要} */
+#define _KERNEL_TCB_DATA                       (_KERNEL_SPT_FLG || _KERNEL_SPT_DTQ || _KERNEL_SPT_MBX || _KERNEL_SPT_MPF || _KERNEL_SPT_MPL)
+
+/* %jp{IDの高速逆引き時に必要} */
+#define _KERNEL_TCB_TSKID                      FALSE                                           /**< %jp{TCBにtskidを含めるか} */
+
+/* %jp{含める理由があまりない?} */
+#define _KERNEL_TCB_TSKATR                     FALSE                                           /**< %jp{TCBにtskatrを含めるか} */
+
+/* %jp{タスクの拡張情報を使わないなら不要} */
+#define _KERNEL_TCB_EXINF                      TRUE                                            /**< %jp{TCBにexinfを含めるか} */
+
+#if !(_KERNEL_SPT_ACT_TSK) && !(_KERNEL_SPT_IACT_TSK) && !(_KERNEL_SPT_STA_TSK)
+/* %jp{タスク生成時のTA_ACTで一回だけ起動するなら、生成情報の保持は不要} */
+#define _KERNEL_TCB_TASK                       FALSE                                                           /**< %jp{TCBにtaskを含めるか} */
+#define _KERNEL_TCB_STKSZ                      FALSE                                                           /**< %jp{TCBにtskszを含めるか} */
+#define _KERNEL_TCB_STK                                FALSE                                                           /**< %jp{TCBにtskを含めるか} */
+#define _KERNEL_TCB_ISP                                FALSE                                                           /**< %jp{TCBにispを含めるか} */
+#else
+/* %jp{アーキテクチャ依存で必要な情報を含める} */
+#define _KERNEL_TCB_TASK                       TRUE                                                            /**< %jp{TCBにtaskを含めるか} */
+#define _KERNEL_TCB_STKSZ                      _KERNEL_PROCATR_CTX_STKSZ                       /**< %jp{TCBにtskszを含めるか} */
+#define _KERNEL_TCB_STK                                _KERNEL_PROCATR_CTX_STK                         /**< %jp{TCBにtskを含めるか} */
+#define _KERNEL_TCB_ISP                                _KERNEL_PROCATR_CTX_ISP                         /**< %jp{TCBにispを含めるか} */
+#endif
+
+
+
+/* ------------------------------------------------------------------ */
+/*  Semaphore                                                         */
+/* ------------------------------------------------------------------ */
+
+#define _KERNEL_SEMCB_ALG_BLKARRAY     1
+#define _KERNEL_SEMCB_ALG_PTRARRAY     2
+
+
+#define _KERNEL_SEMCB_ALGORITHM                _KERNEL_CFG_SEMCB_ALGORITHM
+#define _KERNEL_SEMCB_BITFIELD         _KERNEL_CFG_SEMCB_BITFIELD
+
+/*  */
+#if (_KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY) && (_KERNEL_SPT_CRE_SEM || _KERNEL_SPT_ACRE_SEM)
+#define _KERNEL_SEMCB_SPLIT_RO         FALSE
+#else
+#define _KERNEL_SEMCB_SPLIT_RO         _KERNEL_CFG_SEMCB_SPLIT_RO
+#endif
+
+#define _KERNEL_SEM_TMAX_SEMCNT                _KERNEL_TMAX_MAXSEM
+#define _KERNEL_SEM_TBIT_SEMCNT                _KERNEL_MAXNUM2BIT(_KERNEL_SEM_TMAX_SEMCNT)
+
+
+#define _KERNEL_SEMCB_QUE                      TRUE
+#define _KERNEL_SEMCB_SEMCNT           TRUE
+#define _KERNEL_SEMCB_SEMATR           TRUE
+#define _KERNEL_SEMCB_MAXSEM           TRUE
+
+#define _KERNEL_SPT_SEM_TA_TFIFO       _KERNEL_CFG_SEM_TA_TFIFO
+#define _KERNEL_SPT_SEM_TA_TPRI                _KERNEL_CFG_SEM_TA_TPRI
+
+
+
+/* ------------------------------------------------------------------ */
+/*  Eventflags                                                        */
+/* ------------------------------------------------------------------ */
+
+#define _KERNEL_FLGCB_ALG_BLKARRAY             1
+#define _KERNEL_FLGCB_ALG_PTRARRAY             2
+
+/* control block */
+#define _KERNEL_FLGCB_ALGORITHM                _KERNEL_CFG_FLGCB_ALGORITHM
+#define _KERNEL_FLGCB_BITFIELD         _KERNEL_CFG_FLGCB_BITFIELD
+#define _KERNEL_FLGCB_ROM                      _KERNEL_CFG_FLGCB_ROM
+
+/* Attribute */
+#define _KERNEL_SPT_FLG_TA_TFIFO       _KERNEL_CFG_FLG_TA_TFIFO                        /**< %jp{TA_TFIFO属性に対応する} */
+#define _KERNEL_SPT_FLG_TA_TPRI                _KERNEL_CFG_FLG_TA_TPRI                         /**< %jp{TA_TPRI属性に対応する} */
+#define _KERNEL_SPT_FLG_TA_WSGL                _KERNEL_CFG_FLG_TA_WSGL                         /**< %jp{TA_WSGL属性に対応する} */
+#define _KERNEL_SPT_FLG_TA_WMUL                _KERNEL_CFG_FLG_TA_WMUL                         /**< %jp{TA_WMUL属性に対応する} */
+#define _KERNEL_SPT_FLG_TA_CLR         _KERNEL_CFG_FLG_TA_CLR                          /**< %jp{TA_CLR属性に対応する} */
+
+
+
+#define _KERNEL_FLGCB_QUE                      TRUE
+#define _KERNEL_FLGCB_FLGPTN           TRUE
+#define _KERNEL_FLGCB_FLGATR           TRUE
+
+
+
+/* ---------------------------------------------- */
+/* Mailbox objects                                */
+/* ---------------------------------------------- */
+
+#define _KERNEL_MBXCB_ALG_BLKARRAY     1
+#define _KERNEL_MBXCB_ALG_PTRARRAY     2
+
+/* Attribute */
+#define _KERNEL_SPT_MBX_TA_TFIFO       _KERNEL_CFG_MBX_TA_TFIFO                /**< %jp{TA_TFIFO属性に対応する} */
+#define _KERNEL_SPT_MBX_TA_TPRI                _KERNEL_CFG_MBX_TA_TPRI                 /**< %jp{TA_TPRI属性に対応する} */
+#define _KERNEL_SPT_MBX_TA_MFIFO       _KERNEL_CFG_MBX_TA_MFIFO                /**< %jp{TA_MFIFO属性に対応する} */
+#define _KERNEL_SPT_MBX_TA_MPRI                _KERNEL_CFG_MBX_TA_MPRI                 /**< %jp{TA_MPRI属性に対応する} */
+
+/* Control block */
+#define _KERNEL_MBXCB_ALGORITHM                _KERNEL_MBXCB_ALG_BLKARRAY
+
+#define _KERNEL_MBXCB_ROM                      FALSE                                                   /**< %jp{TCBの不変部を分割してROM部配置とするか} */
+#define _KERNEL_MBXCB_BITFIELD         FALSE                                                   /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */
+
+
+#define _KERNEL_MBXCB_QUE                      TRUE
+#define _KERNEL_MBXCB_MSGQUE           TRUE
+#define _KERNEL_MBXCB_MBXATR           TRUE
+#define _KERNEL_MBXCB_MAXMPRI          TRUE
+
+
+
+/* ---------------------------------------------- */
+/* Fixed-sized memory pools                       */
+/* ---------------------------------------------- */
+
+
+#define _KERNEL_MPF_ALG_CHAIN_PTR      1
+#define _KERNEL_MPF_ALG_CHAIN_NUM      2
+
+#define _KERNEL_MPFCB_ALG_BLKARRAY     1
+#define _KERNEL_MPFCB_ALG_PTRARRAY     2
+
+
+/* Attribute */
+#define _KERNEL_SPT_MPF_TA_TFIFO       _KERNEL_CFG_MPF_TA_TFIFO                /**< %jp{TA_TFIFO属性に対応する} */
+#define _KERNEL_SPT_MPF_TA_TPRI                _KERNEL_CFG_MPF_TA_TPRI                 /**< %jp{TA_TPRI属性に対応する} */
+
+#define _KERNEL_MPF_ALGORITHM          _KERNEL_CFG_MPF_ALGORITHM
+
+
+/* Control block */
+#define _KERNEL_MPFCB_ALGORITHM                _KERNEL_MPFCB_ALG_BLKARRAY
+
+#define _KERNEL_MPFCB_ROM                      FALSE                                                   /**< %jp{TCBの不変部を分割してROM部配置とするか} */
+#define _KERNEL_MPFCB_BITFIELD         FALSE                                                   /**< %jp{ビットフィールドを利用してTCBを圧縮するか} */
+
+#if _KERNEL_CFG_MPF_TMAX_BLKCNT <= 0
+#define _KERNEL_MPF_TMAX_BLKCNT                _KERNEL_TMAX_UINT
+#else
+#define _KERNEL_MPF_TMAX_BLKCNT                _KERNEL_CFG_MPF_TMAX_BLKCNT
+#endif
+
+#if _KERNEL_CFG_MPF_TMAX_BLKSZ <= 0
+#define _KERNEL_MPF_TMAX_BLKSZ         _KERNEL_TMAX_UINT
+#else
+#define _KERNEL_MPF_TMAX_BLKSZ         _KERNEL_CFG_MPF_TMAX_BLKSZ
+#endif
+
+
+#define _KERNEL_MPFCB_QUE                      TRUE
+#define _KERNEL_MPFCB_FREBLK           TRUE
+#define _KERNEL_MPFCB_FBLKCNT          FALSE
+#define _KERNEL_MPFCB_MPFATR           TRUE
+#define _KERNEL_MPFCB_BLKCNT           TRUE
+#define _KERNEL_MPFCB_BLKSZ                    TRUE
+#define _KERNEL_MPFCB_MPF                      TRUE
+
+
+
+/* ------------------------------------------------------------------ */
+/*  inh                                                               */
+/* ------------------------------------------------------------------ */
+
+#define KERNEL_TMIN_INH_INHNO          _KERNEL_PROCATR_TMIN_INHNO
+#define KERNEL_TMAX_INH_INHNO          _KERNEL_PROCATR_TMAX_INHNO
+
+#define KERNEL_TMIN_ISR_INTNO          _KERNEL_IRCATR_TMIN_INHNO
+#define KERNEL_TMAX_ISR_INTNO          _KERNEL_IRCATR_TMAX_INHNO
+
+
+
+#endif /* _KERNEL__parser__parsknl_h__ */
+
+
+
+/* end of file */
diff --git a/kernel/include/parser/parssys.h b/kernel/include/parser/parssys.h
new file mode 100755 (executable)
index 0000000..d0d38ba
--- /dev/null
@@ -0,0 +1,306 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  pitrncfg.h
+ * @brief %jp{itrncfgのパーサー}%en{perser for itrncfg.h}
+ *
+ * @version $Id: parssys.h,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef _KERNEL__prser_pitrncfg_h__
+#define _KERNEL__prser_pitrncfg_h__
+
+
+#if _KERNEL_CFG_MEM_ALIGN <= 0
+#define _KERNEL_MEM_ALIGN                      (sizeof(void *))
+#else
+#define _KERNEL_MEM_ALIGN                      _KERNEL_CFG_MEM_ALIGN
+#endif
+
+
+/* %jp{INT型のbit数を定義する} */
+#if _KERNEL_CFG_TBIT_INT <= 0          /* default */
+#define _KERNEL_TBIT_INT               _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_INT               _KERNEL_CFG_TBIT_INT
+#endif
+
+/* %jp{UINT型のbit数を定義する} */
+#if _KERNEL_CFG_TBIT_UINT <= 0         /* default */
+#define _KERNEL_TBIT_UINT              _KERNEL_TBIT_PROC_UINT
+#else
+#define _KERNEL_TBIT_UINT              _KERNEL_CFG_TBIT_UINT
+#endif
+
+
+/* %jp{VP_INTをポインタ型とするか} */
+#define _KERNEL_VP_INT_PTR             _KERNEL_CFG_VP_INT_PTR
+
+
+/* %jp{BOOL型のbit数を定義する} */
+#if _KERNEL_CFG_TBIT_BOOL <= 0         /* default */
+#define _KERNEL_TBIT_BOOL              _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_BOOL              _KERNEL_CFG_TBIT_BOOL
+#endif
+
+
+/*  %jp{FN型のbit数を定義する}%en{Function code} */
+#if _KERNEL_CFG_TBIT_FN <= 0                   /* default */
+#define _KERNEL_TBIT_FN                        _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_FN                        _KERNEL_CFG_TBIT_FN
+#endif
+
+
+/* %jp{ER型のbit数を定義する}%en{Error code(signed integer)} */
+#if _KERNEL_CFG_TBIT_ER <= 0                   /* default */
+#define _KERNEL_TBIT_ER                        _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_ER                        _KERNEL_CFG_TBIT_ER
+#endif
+
+
+/* %jp{ID型のbit数を定義する}%en{Object ID number(signed integer)} */
+#if _KERNEL_CFG_TBIT_ID <= 0                   /* default */
+#define _KERNEL_TBIT_ID                        _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_ID                        _KERNEL_CFG_TBIT_ID
+#endif
+
+
+/* %jp{ATR型のbit数を定義する}%en{Object attribute(unsigned integer)} */
+#if _KERNEL_CFG_TBIT_ATR <= 0          /* default */
+#define _KERNEL_TBIT_ATR                       _KERNEL_TBIT_PROC_UINT
+#else
+#define _KERNEL_TBIT_ATR                       _KERNEL_CFG_TBIT_ATR
+#endif
+
+
+/* %jp{STAT型のbit数を定義する}%en{Object state(unsigned integer)} */
+#if _KERNEL_CFG_TBIT_STAT <= 0         /* default */
+#define _KERNEL_TBIT_STAT              _KERNEL_TBIT_PROC_UINT
+#else
+#define _KERNEL_TBIT_STAT              _KERNEL_CFG_TBIT_STAT
+#endif
+
+
+/* %jp{MODE型のbit数を定義する}%en{Service call operational mode(unsigned integer)} */
+#if _KERNEL_CFG_TBIT_MODE <= 0         /* default */
+#define _KERNEL_TBIT_MODE              _KERNEL_TBIT_PROC_UINT
+#else
+#define _KERNEL_TBIT_MODE              _KERNEL_CFG_TBIT_MODE
+#endif
+
+
+/* %jp{PRI型のbit数を定義する}%en{Priority(signed integer)} */
+#if _KERNEL_CFG_TBIT_PRI <= 0          /* default */
+#define _KERNEL_TBIT_PRI               _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_PRI               _KERNEL_CFG_TBIT_PRI
+#endif
+
+
+/* %jp{SIZE型のbit数を定義する}%en{Memory area size(unsigned integer)} */
+#if _KERNEL_CFG_TBIT_SIZE <= 0         /* default */
+#define _KERNEL_TBIT_SIZE              _KERNEL_TBIT_UINTPTR
+#else
+#define _KERNEL_TBIT_SIZE              _KERNEL_CFG_TBIT_SIZE
+#endif
+
+
+/* %jp{TMO型のbit数を定義する}%en{Timeout} */
+#if _KERNEL_CFG_TBIT_TMO <= 0          /* default */
+#define _KERNEL_TBIT_TMO               _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_TMO               _KERNEL_CFG_TBIT_TMO
+#endif
+
+
+/* %jp{RELTIM型のbit数を定義する}%en{Relative time(unsigned integer, unit of time is implementation-defined)} */
+#if _KERNEL_CFG_TBIT_RELTIM <= 0               /* default */
+#define _KERNEL_TBIT_RELTIM            _KERNEL_TBIT_PROC_UINT
+#else
+#define _KERNEL_TBIT_RELTIM            _KERNEL_CFG_TBIT_RELTIM
+#endif
+
+
+/* %jp{SYSTIM型のbit数を定義する}%en{System time(unsigned integer, unit of time is implementation-defined)} */
+#define _KERNEL_SYSTIM_STRUCT  _KERNEL_CFG_SYSTIM_STRUCT
+#if _KERNEL_CFG_TBIT_SYSTIM < 0                /* default */
+#if _KERNEL_SYSTIM_STRUCT              /* %jp{構造体化するなら} */
+#define _KERNEL_TBIT_SYSTIM            48
+#else
+#define _KERNEL_TBIT_SYSTIM            32
+#endif
+#else
+#define _KERNEL_TBIT_SYSTIM            _KERNEL_CFG_TBIT_SYSTIM
+#endif
+
+
+/* %jp{ER_BOOL型のbit数を定義する}%en{Error code or a boolean value} */
+#if _KERNEL_CFG_TBIT_ER_BOOL <= 0
+#if _KERNEL_TBIT_ER >= _KERNEL_TBIT_BOOL
+#define _KERNEL_TBIT_ER_BOOL   _KERNEL_TBIT_ER
+#else
+#define _KERNEL_TBIT_ER_BOOL   _KERNEL_TBIT_BOOL
+#endif
+#else
+#define _KERNEL_TBIT_ER_BOOL   _KERNEL_CFG_TBIT_ER_BOOL
+#endif
+
+
+/* %jp{ER_IDのbit数を定義する}%en{Error code or an object ID number} */
+#if _KERNEL_CFG_TBIT_ER_ID <= 0
+#if _KERNEL_TBIT_ER >= _KERNEL_TBIT_ID
+#define _KERNEL_TBIT_ER_ID             _KERNEL_TBIT_ER
+#else
+#define _KERNEL_TBIT_ER_ID             _KERNEL_TBIT_ID
+#endif
+#else
+#define _KERNEL_TBIT_ER_ID             _KERNEL_CFG_TBIT_ER_ID
+#endif
+
+
+/* %jp{ER_IDのbit数を定義する}%en{Error code or an object ID number} */
+#if _KERNEL_CFG_TBIT_ER_ID <= 0
+#if _KERNEL_TBIT_ER >= _KERNEL_TBIT_ID
+#define _KERNEL_TBIT_ER_ID             _KERNEL_TBIT_ER
+#else
+#define _KERNEL_TBIT_ER_ID             _KERNEL_TBIT_ID
+#endif
+#else
+#define _KERNEL_TBIT_ER_ID             _KERNEL_CFG_TBIT_ER_ID
+#endif
+
+
+/**< %jp{ER_UINTのbit数を定義する}%en{Error code or an unsigned integer} */
+#if _KERNEL_CFG_TBIT_ER_UINT <= 0
+#if _KERNEL_TBIT_ER >= _KERNEL_TBIT_UINT
+#define _KERNEL_TBIT_ER_UINT   _KERNEL_TBIT_ER
+#else
+#define _KERNEL_TBIT_ER_UINT   _KERNEL_TBIT_UINT
+#endif
+#else
+#define _KERNEL_TBIT_ER_UINT   _KERNEL_CFG_TBIT_ER_UINT
+#endif
+
+
+
+/**< %jp{タスク例外要因のパターン(符号無し整数)}%en{Bit pattern for the task exception code(unsigned integer)} */
+#if _KERNEL_CFG_TBIT_TEXPTN <= 0
+#define _KERNEL_TBIT_TEXPTN            _KERNEL_TBIT_PROC_UINT
+#else
+#define _KERNEL_TBIT_TEXPTN            _KERNEL_CFG_TBIT_TEXPTN
+#endif
+
+
+#if _KERNEL_CFG_TBIT_FLGPTN <= 0
+#define _KERNEL_TBIT_FLGPTN            _KERNEL_TBIT_PROC_UINT
+#else
+#define _KERNEL_TBIT_FLGPTN            _KERNEL_CFG_TBIT_FLGPTN
+#endif
+
+
+#if _KERNEL_CFG_TBIT_RDVPTN <= 0
+#define _KERNEL_TBIT_RDVPTN            _KERNEL_TBIT_PROC_UINT
+#else
+#define _KERNEL_TBIT_RDVPTN            _KERNEL_CFG_TBIT_RDVPTN
+#endif
+
+
+#if _KERNEL_CFG_TBIT_RDVNO <= 0
+
+#define _KERNEL_TBIT_RDVNO             _KERNEL_TBIT_PROC_UINT
+#else
+#define _KERNEL_TBIT_RDVNO             _KERNEL_CFG_TBIT_RDVNO
+#endif
+
+
+#if _KERNEL_CFG_TBIT_OVRTIM <= 0
+#define _KERNEL_TBIT_OVRTIM            _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_OVRTIM            _KERNEL_CFG_TBIT_OVRTIM
+#endif
+
+
+#if _KERNEL_CFG_TBIT_INHNO <= 0
+#define _KERNEL_TBIT_INHNO             _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_INHNO             _KERNEL_CFG_TBIT_INHNO
+#endif
+
+
+#if _KERNEL_CFG_TBIT_INTNO <= 0
+#define _KERNEL_TBIT_INTNO             _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_INTNO             _KERNEL_CFG_TBIT_INTNO
+#endif
+
+
+#if _KERNEL_CFG_TBIT_EXCNO <= 0
+#define _KERNEL_TBIT_EXCNO             _KERNEL_TBIT_PROC_INT
+#else
+#define _KERNEL_TBIT_EXCNO             _KERNEL_CFG_TBIT_EXCNO
+#endif
+
+
+/* */
+/* %jp{優先度の範囲}%en{Priority Range} */
+#if _KERNEL_CFG_TMAX_TPRI <= 0
+#define _KERNEL_TMAX_TPRI              _KERNEL_TMAX_PROC_INT                                   /**< %jp{タスク優先度の最大値}%en{Maximum task priority} */
+#else
+#define _KERNEL_TMAX_TPRI              _KERNEL_CFG_TMAX_TPRI                                   /**< %jp{タスク優先度の最大値}%en{Maximum task priority} */
+#endif
+
+#if _KERNEL_CFG_TMAX_MPRI <= 0
+#define _KERNEL_TMAX_MPRI              _KERNEL_TMAX_PROC_INT                                   /**< %jp{メッセージ優先度の最大値}%en{Maximum message priority} */
+#else
+#define _KERNEL_TMAX_MPRI              _KERNEL_CFG_TMAX_MPRI                                   /**< %jp{メッセージ優先度の最大値}%en{Maximum message priority} */
+#endif
+
+
+/* %jp{キューイング/ネスト回数の最大値}%en{Maximum Nesting/Queueing Count} */
+#define _KERNEL_TMAX_ACTCNT            _KERNEL_CFG_TMAX_ACTCNT                                 /**< %jp{タスク起動要求キューイング数の最大値(-1の時デフォルト値)} */
+#define _KERNEL_TMAX_WUPCNT            _KERNEL_CFG_TMAX_WUPCNT                                 /**< %jp{タスク起床要求キューイング数の最大値(-1の時デフォルト値)} */
+#define _KERNEL_TMAX_SUSCNT            _KERNEL_CFG_TMAX_SUSCNT                                 /**< %jp{タスク強制待ち要求ネスト数の最大値(-1の時デフォルト値)} */
+
+
+/* */
+
+#if _KERNEL_CFG_TEX_TBIT_TEXPTN < 0                                                            /**< %jp{タスク例外要因のビット数} */
+#define _KERNEL_TEX_TBIT_TEXPTN        _KERNEL_TBIT_TEXPTN
+#else
+#define _KERNEL_TEX_TBIT_TEXPTN        _KERNEL_CFG_TEX_TBIT_TEXPTN
+#endif
+
+#if _KERNEL_CFG_FLG_TBIT_FLGPTN < 0                                                            /**< %jp{イベントフラグのビット数} */
+#define _KERNEL_FLG_TBIT_FLGPTN        _KERNEL_TBIT_FLGPTN
+#else
+#define _KERNEL_FLG_TBIT_FLGPTN        _KERNEL_CFG_FLG_TBIT_FLGPTN
+#endif
+
+#if _KERNEL_CFG_RDV_TBIT_RDVPTN < 0
+#define _KERNEL_RDV_TBIT_RDVPTN        _KERNEL_TBIT_RDVPTN                             /**< %jp{ランデブ条件のビット数} */
+#else
+#define _KERNEL_RDV_TBIT_RDVPTN        _KERNEL_CFG_RDV_TBIT_RDVPTN
+#endif
+
+
+/* %jp{セマフォの最大値}%en{Maximum value of the maximum definable semaphore resource count} */
+#if _KERNEL_CFG_TMAX_MAXSEM <= 0
+#define _KERNEL_TMAX_MAXSEM            _KERNEL_TMAX_PROC_UINT
+#else
+#define _KERNEL_TMAX_MAXSEM            _KERNEL_CFG_TMAX_MAXSEM
+#endif
+
+
+
+#endif /* _KERNEL__prser_pitrncfg_h__ */
+
+
+/* end of file */
diff --git a/kernel/source/arch/irc/arm/ADuC7019/intc.c b/kernel/source/arch/irc/arm/ADuC7019/intc.c
new file mode 100755 (executable)
index 0000000..bbd784e
--- /dev/null
@@ -0,0 +1,109 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  intc.h
+ * @brief %jp{ADuC7019/20/21/22/24/25/26/27用割り込みコントローラ操作}%en{ADuC7019/20/21/22/24/25/26/27}
+ *
+ * @version $Id: intc.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+#include "object/isrobj.h"
+
+
+#define IRQSTA         (*(volatile UW *)0xffff0000)
+#define IRQSIG         (*(volatile UW *)0xffff0004)
+#define IRQEN          (*(volatile UW *)0xffff0008)
+#define IRQCLR         (*(volatile UW *)0xffff000c)
+
+#define FIQSTA         (*(volatile UW *)0xffff0100)
+#define FIQSIG         (*(volatile UW *)0xffff0104)
+#define FIQEN          (*(volatile UW *)0xffff0108)
+#define FIQCLR         (*(volatile UW *)0xffff010c)
+
+
+
+void _kernel_arm_irq(void);
+void _kernel_arm_fiq(void);
+
+
+/** %jp{割込みコントローラの初期化} */
+void _kernel_ini_irc(void)
+{
+       IRQCLR = 0x00ffffff;
+       FIQCLR = 0x00ffffff;
+       
+       _kernel_inh_tbl[_KERNEL_ARM_INHNO_IRQ].inthdr = (FP)_kernel_arm_irq;
+       _kernel_inh_tbl[_KERNEL_ARM_INHNO_FIQ].inthdr = (FP)_kernel_arm_fiq;
+}
+
+
+/** %jp{IRQ割り込み処理開始} */
+void _kernel_arm_irq(void)
+{
+       INTNO intno;
+       UW    irqsta;
+       
+       irqsta = IRQSTA;
+       
+       /* 割り込み番号取得 */
+       for ( intno = 0; intno <= 23; intno++ )
+       {
+               if ( irqsta & 1 )
+               {
+                       /* 割込みサービスルーチン呼び出し */
+                       _kernel_exe_isr(intno);
+               }
+               
+               irqsta >>= 1;
+       }
+}
+
+
+/* FIQ割り込み処理開始 */
+void _kernel_arm_fiq(void)
+{
+       INTNO intno;
+       UW    fiqsta;
+       
+       fiqsta = FIQSTA;
+       
+       /* 割り込み番号取得 */
+       for ( intno = 0; intno <= 23; intno++ )
+       {
+               if ( fiqsta & 1 )
+               {
+                       /* 割込みサービスルーチン呼び出し */
+                       _kernel_exe_isr(intno);
+               }
+               
+               fiqsta >>= 1;
+       }
+}
+
+
+/* 割り込みの許可 */
+ER ena_int(INTNO intno)
+{
+       IRQEN |= (1 << intno);
+       
+       return E_OK;
+}
+
+
+/* 割り込みの禁止 */
+ER dis_int(INTNO intno)
+{
+       IRQCLR = (1 << intno);
+
+       return E_OK;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/arm/arm_v4t/gcc/armctx.S b/kernel/source/arch/proc/arm/arm_v4t/gcc/armctx.S
new file mode 100755 (executable)
index 0000000..2d71e4b
--- /dev/null
@@ -0,0 +1,174 @@
+/****************************************************************************
+  Hyper Operating System V4 Advance
+
+  @file  armctx.s
+  @brief %en{コンテキスト制御(ARM v4t アーキテクチャ)}%jp{ARM v4t}
+  @version $Id: armctx.S,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+
+  Copyright (C) 1998-2006 by Project HOS
+  http://sourceforge.jp/projects/hos/
+****************************************************************************/
+
+
+
+/* ---- プロセッサモード定義 ---- */
+#define Mode_USR               0x10            /* USR モード */
+#define Mode_FIQ               0x11            /* FIQ モード */
+#define Mode_IRQ               0x12            /* IRQ モード */
+#define Mode_SVC               0x13            /* SVC モード */
+#define Mode_ABT               0x17            /* ABT モード */
+#define Mode_UND               0x1b            /* UND モード */
+#define Mode_SYS               0x1f            /* SYS モード */
+#define Mode_MASK              0x1f            /* モードビットマスク */
+
+
+/* ---- フラグ定義 ---- */
+#define T_Bit                  0x20            /* T ビット */
+#define F_Bit                  0x40            /* F ビット */
+#define I_Bit                  0x80            /* I ビット */
+
+
+
+                               .global _kernel_ena_int                         /* 割り込み許可 */
+                               .global _kernel_dis_int                         /* 割り込み禁止 */
+                               .global _kernel_wai_int                         /* CPUのアイドル処理 */
+                               .global _kernel_cre_ctx                         /* 実行コンテキストの作成 */
+                               .global _kernel_sta_ctx                         /* 実行コンテキストの開始 */
+                               .global _kernel_rst_ctx                         /* 実行コンテキストのリスタート */
+                               .global _kernel_swi_ctx                         /* 実行コンテキストの切替 */
+
+
+                               .text
+                               .align  2
+
+/************************************************
+  割り込み許可
+   void _kernel_ena_int(void)
+ ************************************************/
+                               .type   _kernel_ena_int, %function
+_kernel_ena_int:
+                               mrs     r0, cpsr                                        /* cpsr取得 */
+                               bic             r0, r0, #(F_Bit | I_Bit)        /* FビットとIビットをクリア */
+                               msr     cpsr_c, r0                                      /* cpsr設定 */
+                               bx              lr                                                      /* リターン */
+                               .size   _kernel_ena_int, .-_kernel_ena_int
+
+
+/************************************************
+  割り込み禁止
+   void _kernel_dis_int(void)
+ ************************************************/
+                               .type   _kernel_dis_int, %function
+_kernel_dis_int:
+                               mrs     r0, cpsr                                        /*  cpsr取得 */
+                               orr             r0, r0, #(F_Bit | I_Bit)        /*  FビットとIビットを設定 */
+                               msr     cpsr_c, r0                                      /*  cpsr設定 */
+                               bx              lr                                                      /*  リターン */
+                               .size   _kernel_dis_int, .-_kernel_dis_int
+
+
+/************************************************
+ 割り込み待ち(CPUのアイドル処理)
+   void _kernel_wai_int(void);
+*************************************************/
+                               .type   _kernel_wai_int, %function
+_kernel_wai_int:
+                               mov     r0, #0
+/*                             mcr             p15, 0, r0, c7, c0, 4   */      /* WaitForInterrupt */
+                               b               _kernel_wai_int
+                               .size   _kernel_wai_int, .-_kernel_wai_int
+
+                               
+                               .code 16
+
+/************************************************
+  実行コンテキストの作成
+  void _kernel_cre_ctx(
+                       _KERNEL_T_CTXCB *pk_ctxcb,      作成するコンテキスト (r0)
+                       VP             isp,                     スタックポインタ     (r1)
+                       FP             entry,           実行アドレス         (r2)
+                       VP_INT         par1,            実行時パラメータ     (r3)
+                       VP_INT         par2)            実行時パラメータ     (sp[0])
+*************************************************/
+                               .thumb_func
+                               .type   _kernel_cre_ctx, %function
+_kernel_cre_ctx:
+                               sub             r1, #36                                         /* スタックを確保 */
+                               str             r2, [r1, #0]                            /* r4 部分にentryを設定 */
+                               str             r3, [r1, #4]                            /* r5 部分にpar1を設定 */
+                               ldr             r2, [sp, #0]                            /* par2を取り出し */
+                               str             r2, [r1, #8]                            /* r6 部分にpar2を設定 */
+                               adr             r2, ctx_entry                           /* エントリーアドレス設定 */
+                               add             r2, #1                                          /* Thumbモードアドレスとして設定 */
+                               str             r2, [r1, #32]                           /* lr 部分にエントリーアドレスを設定 */
+                               str             r1, [r0]                                        /* ctxcb に新 sp を保存 */
+                               bx              lr                                                      /* リターン */
+                               .size   _kernel_cre_ctx, .-_kernel_cre_ctx
+
+
+/************************************************
+  実行コンテキストエントリーアドレス
+*************************************************/
+                               .thumb_func
+                               .type   ctx_entry, %function
+ctx_entry:
+                               mov             r0, r5                                          /* par1を設定 */
+                               mov             r1, r6                                          /* par2を設定 */
+                               bx              r4                                                      /* entry を実行 */
+                               .size   ctx_entry, .-ctx_entry
+
+
+
+/************************************************
+  実行コンテキストのリスタート
+  void _kernel_rst_ctx(
+                       VP_INT         par1,            実行時パラメータ (r0)
+                       VP_INT         par2,            実行時パラメータ (r1)
+                       FP             entry,           実行アドレス     (r2)
+                       VP             isp)                     スタックポインタ (r3)
+*************************************************/
+                               .thumb_func
+                               .type   _kernel_rst_ctx, %function
+_kernel_rst_ctx:
+                               mov             sp, r3                                          /* スタックを初期値にリセット */
+                               bx              r2                                                      /* エントリーアドレスから再開始 */
+                               .size   _kernel_rst_ctx, .-_kernel_rst_ctx
+
+
+
+                               .align  2
+                               .code   32
+
+
+/************************************************
+  実行コンテキストの切替
+  void _kernel_swi_ctx(
+                       _KERNEL_T_CTXCB *pk_ctxinf_nxt,         現在のコンテキストの保存先 (r0)
+                       _KERNEL_T_CTXCB *pk_ctxinf_now)         切り替えるコンテキスト     (r1)
+*************************************************/
+                               .type   _kernel_swi_ctx, %function
+_kernel_swi_ctx:
+                               stmfd   sp!, {r4-r11, lr}                       /* レジスタ保存 */
+                               str             sp, [r1]                                        /* スタックポインタ保存 */
+               /* ---- そのまま _kernel_sta_ctx に続ける ---- */
+
+
+/************************************************
+  実行コンテキストの開始
+  void _kernel_sta_ctx(
+                       _KERNEL_T_CTXCB *pk_ctxcb)                      実行を開始するコンテキスト (r0)
+*************************************************/
+                               .type   _kernel_sta_ctx, %function
+_kernel_sta_ctx:
+                               ldr             sp, [r0]                                        /* スタックポインタ復帰 */
+                               ldmfd   sp!, {r4-r11, pc}                       /* レジスタ復帰 */
+
+                               .size   _kernel_swi_ctx, .-_kernel_swi_ctx
+                               .size   _kernel_sta_ctx, .-_kernel_sta_ctx
+
+
+                               .END
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/arm/arm_v4t/gcc/armirq.S b/kernel/source/arch/proc/arm/arm_v4t/gcc/armirq.S
new file mode 100755 (executable)
index 0000000..c772bab
--- /dev/null
@@ -0,0 +1,125 @@
+
+
+
+/* ---- プロセッサモード定義 ---- */
+#define Mode_USR               0x10            /* USR モード */
+#define Mode_FIQ               0x11            /* FIQ モード */
+#define Mode_IRQ               0x12            /* IRQ モード */
+#define Mode_SVC               0x13            /* SVC モード */
+#define Mode_ABT               0x17            /* ABT モード */
+#define Mode_UND               0x1b            /* UND モード */
+#define Mode_SYS               0x1f            /* SYS モード */
+#define Mode_MASK              0x1f            /* モードビットマスク */
+
+
+/* ---- フラグ定義 ---- */
+#define T_Bit                  0x20            /* T ビット */
+#define F_Bit                  0x40            /* F ビット */
+#define I_Bit                  0x80            /* I ビット */
+
+
+/* ---- 割り込みハンドラ番号 ---- */
+#define INHNO_IRQ              0
+#define INHNO_FIQ              1
+
+
+                               .global _kernel_int_isp
+                               .global _kernel_sta_inh
+                               .global _kernel_end_inh
+                               .global _kernel_exe_inh
+                               .global _kernel_int_armirq
+                               
+
+                               .text
+                               .align  2
+
+
+/************************************************
+  IRQ ハンドラ
+ ************************************************/
+_kernel_int_armirq:
+                       /* ---- レジスタ退避 ---- */
+                               msr             cpsr_c, #(Mode_SYS | F_Bit | I_Bit)             /* SYSモードに移行 */
+                               stmfd   sp!, {r0-r3, r12, lr}                                   /* SYSモードの汎用レジスタ退避 */
+                               msr             cpsr_c, #(Mode_IRQ | F_Bit | I_Bit)             /* IRQモードに移行 */
+                               mov             r0, lr                                                                  /* lr_irq 取り出し */
+                               mrs             r1, spsr                                                                /* spsr_irq 取り出し */
+                               msr             cpsr_c, #(Mode_SYS | F_Bit | I_Bit)             /* SYSモードに移行 */
+                               stmfd   sp!, {r0, r1}                                                   /* lr_irq, spsr_irq退避 */
+                               
+                       /* ---- 多重割込み判定 ---- */
+                               ldr             r0, =_kernel_int_nst_cnt                                /* 割り込みネストカウンタのアドレス取得 */
+                               ldrb    r1, [r0]                                                                /* 割り込みネストカウンタ値取得 */
+                               subs    r1, r1, #1                                                              /* カウンタ減算(0判定が楽なのでマイナス方向にカウント) */
+                               strb    r1, [r0]                                                                /* 割り込みネストカウンタ値設定 */
+                               bcs             multiple_int                                                    /* 多重割り込みなら分岐 */
+                               
+                       /* ---- 割り込み用スタックに入れ替え ---- */
+                               ldr             r2, =_kernel_int_isp                                    /* 割り込み用スタックの初期値アドレスを取得 */
+                               mov             r1, sp                                                                  /* タスクのSPを保存 */
+                               ldr             sp, [r2]                                                                /* 割り込み用スタックに切り替え */
+                               stmfd   sp!, {r0, r1}                                                   /* タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も) */
+                               
+                       /* ---- 割り込み処理 ---- */
+                               bl              _kernel_sta_inh                                                 /* 割り込み開始 */
+                               
+                       /* ---- 割り込みハンドラ実行 ---- */
+                               mov             r0, #INHNO_IRQ
+                               bl              _kernel_exe_inh
+                               
+                       /* ---- 割り込み処理の終了設定 ---- */
+                               ldmfd   sp!, {r0, r1}                                                   /* 汎用レジスタ復帰 */
+                               mov             sp, r1                                                                  /* スタックを戻す */
+
+                               mov             r1, #0                                                                  /* 割り込みネストカウンタを0に戻す */
+                               strb    r1, [r0]                                                                /* 割り込みネストカウンタ値設定 */
+
+                       /* ---- 遅延ディスパッチ処理 ---- */
+                               bl              _kernel_end_inh                                                 /* 割り込み終了処理 */
+
+return_int:
+                       /* ---- 復帰処理
+                               ldmfd   sp!, {r0, r1}                                                   /* lr_irq, spsr_irq 復帰 */
+                               msr             cpsr_c, #(Mode_IRQ | F_Bit | I_Bit)             /* IRQモードに移行 */
+                               mov             lr, r0                                                                  /* lr_irq 復帰 */
+                               msr             spsr_csxf, r1                                                   /* spsr_irq 復帰 */
+                               msr             cpsr_c, #(Mode_SYS | F_Bit | I_Bit)             /* SYSモードに移行 */
+                               ldmfd   sp!, {r0-r3, r12, lr}                                   /* SYSモードの汎用レジスタ復帰 */
+                               msr             cpsr_c, #(Mode_IRQ | F_Bit | I_Bit)             /* IRQモードに移行 */
+                               subs    pc, lr, #4                                                              /* 割込み復帰 */
+
+
+                       /* ---- 多重割り込み処理 ---- */
+multiple_int:
+                       /* ---- スタックを8バイトアライメントに移動 ---- */
+                               mov             r1,  sp                                                                 /* 割り込み発生時のSYSモードのSPに8の倍数の保証されないので */
+                               bic             sp, sp, #0x7
+                               stmfd   sp!, {r0, r1}                                                   /* タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も) */
+                               
+                       /* ---- 割り込みハンドラ実行 ---- */
+                               mov             r0, #INHNO_IRQ
+                               bl              _kernel_exe_inh
+
+                       /* ---- スタックアライメント復帰 ---- */
+                               ldmfd   sp!, {r0, r1}                                                   /* 汎用レジスタ復帰 */
+                               mov             sp, r1
+                               
+                       /* ---- 割り込みカウンタ復帰 ---- */
+                               ldrb    r1, [r0]
+                               add             r1, r1, #1
+                               strb    r1, [r0]
+
+                               b               return_int                                                              /* 復帰処理 */
+
+
+
+                       .bss
+                       
+_kernel_int_nst_cnt:
+                               .space  1
+
+
+                               .END
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/arm/arm_v4t/rvct/armctx.s b/kernel/source/arch/proc/arm/arm_v4t/rvct/armctx.s
new file mode 100755 (executable)
index 0000000..5bd05bb
--- /dev/null
@@ -0,0 +1,158 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+;
+; @file  armctx.s
+; @brief %en{コンテキスト制御(ARM v4t アーキテクチャ)}%jp{ARM v4t}
+;
+; @version $Id: armctx.s,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+;
+; Copyright (C) 1998-2006 by Project HOS
+; http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+
+; ---- プロセッサモード定義 ----
+Mode_USR               EQU     0x10            ; USR モード
+Mode_FIQ               EQU             0x11            ; FIQ モード
+Mode_IRQ               EQU     0x12            ; IRQ モード
+Mode_SVC               EQU             0x13            ; SVC モード
+Mode_ABT               EQU             0x17            ; ABT モード
+Mode_UND               EQU             0x1b            ; UND モード
+Mode_SYS               EQU     0x1f            ; SYS モード
+Mode_MASK              EQU     0x1f            ; モードビットマスク
+
+
+; ---- フラグ定義 ----
+T_Bit                  EQU             0x20            ; T ビット
+F_Bit                  EQU     0x40            ; F ビット
+I_Bit                  EQU     0x80            ; I ビット
+
+
+                               
+                               EXPORT  _kernel_ena_int                         ; 割り込み許可
+                               EXPORT  _kernel_dis_int                         ; 割り込み禁止
+                               EXPORT  _kernel_wai_int                         ; CPUのアイドル処理
+                               EXPORT  _kernel_cre_ctx                         ; 実行コンテキストの作成
+                               EXPORT  _kernel_sta_ctx                         ; 実行コンテキストの開始
+                               EXPORT  _kernel_rst_ctx                         ; 実行コンテキストのリスタート
+                               EXPORT  _kernel_swi_ctx                         ; 実行コンテキストの切替
+                               
+
+                               PRESERVE8
+                               AREA    code, CODE, READONLY
+
+                               ALIGN
+                               CODE32
+; -----------------------------------------------
+;  割り込み許可
+;  void _kernel_ena_int(void)
+; -----------------------------------------------
+_kernel_ena_int
+                               mrs     r0, cpsr                                        ; cpsr取得
+                               bic             r0, r0, #F_Bit:OR:I_Bit         ; FビットとIビットをクリア
+                               msr     cpsr_c, r0                                      ; cpsr設定
+                               bx              lr                                                      ; リターン
+
+
+; -----------------------------------------------
+;  割り込み禁止
+;  void hospac_dis_int(void)
+; -----------------------------------------------
+_kernel_dis_int
+                               mrs     r0, cpsr                                        ; cpsr取得
+                               orr             r0, r0, #F_Bit:OR:I_Bit         ; FビットとIビットを設定
+                               msr     cpsr_c, r0                                      ; cpsr設定
+                               bx              lr                                                      ; リターン
+
+
+; -----------------------------------------------
+;  割り込み待ち(CPUのアイドル処理)
+;  void        _kernel_wai_int(void);
+; -----------------------------------------------
+_kernel_wai_int
+                               b               _kernel_wai_int
+
+                               
+
+
+
+                               CODE16
+
+; -----------------------------------------------
+;  実行コンテキストの作成
+;  void _kernel_cre_ctx(
+;                      _KERNEL_T_CTXCB *pk_ctxcb,                      /* r0   :作成するコンテキスト */
+;                      VP             isp,                                     /* r1   :スタックポインタ */
+;                      FP             entry,                           /* r2   :実行アドレス */
+;                      VP_INT         par1,                            /* r3   :実行時パラメータ */
+;                      VP_INT         par2)                            /* sp[0]:実行時パラメータ */
+; -----------------------------------------------
+_kernel_cre_ctx
+                               sub             r1, #36                                         ; スタックを確保
+                               str             r2, [r1, #0]                            ; r4 部分にentryを設定
+                               str             r3, [r1, #4]                            ; r5 部分にpar1を設定
+                               ldr             r2, [sp, #0]                            ; par2を取り出し
+                               str             r2, [r1, #8]                            ; r6 部分にpar2を設定
+                               adr             r2, ctx_entry                           ; エントリーアドレス設定
+                               add             r2, #1                                          ; Thumbモードアドレスとして設定
+                               str             r2, [r1, #32]                           ; lr 部分にエントリーアドレスを設定
+                               str             r1, [r0]                                        ; ctxcb に新 sp を保存
+                               bx              lr                                                      ; リターン
+
+
+; -----------------------------------------------
+;  実行コンテキストエントリーアドレス
+; -----------------------------------------------
+ctx_entry      
+                               mov             r0, r5                                          ; par1を設定
+                               mov             r1, r6                                          ; par2を設定
+                               bx              r4                                                      ; entry を実行
+
+
+; -----------------------------------------------
+;  実行コンテキストのリスタート
+;  void _kernel_rst_ctx(
+;                      VP_INT         par1,                            /* r0   :実行時パラメータ */
+;                      VP_INT         par2,                            /* r1   :実行時パラメータ */
+;                      FP             entry,                           /* r2   :実行アドレス */
+;                      VP             isp)                                     /* r3   :スタックポインタ */
+; -----------------------------------------------
+_kernel_rst_ctx
+                               mov             sp, r3                                          ; スタックを初期値にリセット
+                               bx              r2                                                      ; エントリーアドレスから再開始
+
+
+
+                               ALIGN
+                               CODE32
+
+; -----------------------------------------------
+;  実行コンテキストの切替
+;  void _kernel_swi_ctx(
+;                      _KERNEL_T_CTXCB *pk_ctxinf_nxt,         /* r0 : 現在のコンテキストの保存先 */
+;                      _KERNEL_T_CTXCB *pk_ctxinf_now)         /* r1 : 切り替えるコンテキスト */
+; -----------------------------------------------
+_kernel_swi_ctx
+                               stmfd   sp!, {r4-r11, lr}                       ; レジスタ保存
+                               str             sp, [r1]                                        ; スタックポインタ保存
+                       ; ---- そのまま _kernel_sta_ctx に続ける
+
+
+; -----------------------------------------------
+;  実行コンテキストの開始
+;  void _kernel_sta_ctx(
+;                      _KERNEL_T_CTXCB *pk_ctxcb)                      /* r0: 実行を開始するコンテキスト */
+; -----------------------------------------------
+_kernel_sta_ctx
+                               ldr             sp, [r0]                                        ; スタックポインタ復帰
+                               ldmfd   sp!, {r4-r11, pc}                       ; レジスタ復帰
+
+
+                               END
+
+
+
+; --------------------------------------------------------------------------- 
+;  End of file
+; --------------------------------------------------------------------------- 
diff --git a/kernel/source/arch/proc/arm/arm_v4t/rvct/armirq.s b/kernel/source/arch/proc/arm/arm_v4t/rvct/armirq.s
new file mode 100755 (executable)
index 0000000..b06098c
--- /dev/null
@@ -0,0 +1,123 @@
+
+; ---- プロセッサモード定義 ----
+Mode_USR               EQU     0x10            ; USR モード
+Mode_FIQ               EQU             0x11            ; FIQ モード
+Mode_IRQ               EQU     0x12            ; IRQ モード
+Mode_SVC               EQU             0x13            ; SVC モード
+Mode_ABT               EQU             0x17            ; ABT モード
+Mode_UND               EQU             0x1b            ; UND モード
+Mode_SYS               EQU     0x1f            ; SYS モード
+Mode_MASK              EQU     0x1f            ; モードビットマスク
+
+; ---- フラグ定義 ----
+T_Bit                  EQU             0x20            ; T ビット
+F_Bit                  EQU     0x40            ; F ビット
+I_Bit                  EQU     0x80            ; I ビット
+
+
+; ---- 割り込みハンドラ番号 ----
+INHNO_IRQ              EQU     0
+INHNO_FIQ              EQU     1
+
+
+                               IMPORT  _kernel_int_isp
+                               IMPORT  _kernel_sta_inh
+                               IMPORT  _kernel_end_inh
+                               IMPORT  _kernel_exe_inh
+                               EXPORT  _kernel_int_armirq                                              ; IRQハンドラ
+
+
+                               PRESERVE8
+                               AREA    inthdr_code, CODE, READONLY
+                               CODE32
+
+; ----------------------------------------------
+;  IRQ ハンドラ
+; ----------------------------------------------
+_kernel_int_armirq
+                       ; ---- レジスタ退避
+                               msr             cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit             ; SYSモードに移行
+                               stmfd   sp!, {r0-r3, r12, lr}                                   ; SYSモードの汎用レジスタ退避
+                               msr             cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit             ; IRQモードに移行
+                               mov             r0, lr                                                                  ; lr_irq 取り出し
+                               mrs             r1, spsr                                                                ; spsr_irq 取り出し
+                               msr             cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit             ; SYSモードに移行
+                               stmfd   sp!, {r0, r1}                                                   ; lr_irq, spsr_irq退避
+                               
+                       ; ---- 多重割込み判定
+                               ldr             r0, =_kernel_int_nst_cnt                                ; 割り込みネストカウンタのアドレス取得
+                               ldrb    r1, [r0]                                                                ; 割り込みネストカウンタ値取得
+                               subs    r1, r1, #1                                                              ; カウンタ減算(0判定が楽なのでマイナス方向にカウント)
+                               strb    r1, [r0]                                                                ; 割り込みネストカウンタ値設定
+                               bcs             multiple_int                                                    ; 多重割り込みなら分岐
+                               
+                       ; ---- 割り込み用スタックに入れ替え
+                               ldr             r2, =_kernel_int_isp                                    ; 割り込み用スタックの初期値アドレスを取得
+                               mov             r1, sp                                                                  ; タスクのSPを保存
+                               ldr             sp, [r2]                                                                ; 割り込み用スタックに切り替え
+                               stmfd   sp!, {r0, r1}                                                   ; タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も)
+                               
+                       ; ---- 割り込み処理
+                               bl              _kernel_sta_inh                                                 ; 割り込み開始
+                               
+                       ; ---- 割り込みハンドラ実行
+                               mov             r0, #INHNO_IRQ
+                               bl              _kernel_exe_inh
+                               
+                       ; ---- 割り込み処理の終了設定
+                               ldmfd   sp!, {r0, r1}                                                   ; 汎用レジスタ復帰
+                               mov             sp, r1                                                                  ; スタックを戻す
+
+                               mov             r1, #0                                                                  ; 割り込みネストカウンタを0に戻す
+                               strb    r1, [r0]                                                                ; 割り込みネストカウンタ値設定
+
+                       ; ---- 遅延ディスパッチ処理
+                               bl              _kernel_end_inh                                                 ; 割り込み終了処理
+
+return_int
+                       ; ---- 復帰処理
+                               ldmfd   sp!, {r0, r1}                                                   ; lr_irq, spsr_irq 復帰
+                               msr             cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit             ; IRQモードに移行
+                               mov             lr, r0                                                                  ; lr_irq 復帰
+                               msr             spsr_csxf, r1                                                   ; spsr_irq 復帰
+                               msr             cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit             ; SYSモードに移行
+                               ldmfd   sp!, {r0-r3, r12, lr}                                   ; SYSモードの汎用レジスタ復帰
+                               msr             cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit             ; IRQモードに移行
+                               subs    pc, lr, #4                                                              ; 割込み復帰
+
+
+                       ; ---- 多重割り込み処理
+multiple_int
+                       ; ---- スタックを8バイトアライメントに移動
+                               mov             r1,  sp                                                                 ; 割り込み発生時のSYSモードのSPに8の倍数の保証されないので
+                               bic             sp, sp, #0x7
+                               stmfd   sp!, {r0, r1}                                                   ; タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も)
+                               
+                       ; ---- 割り込みハンドラ実行
+                               mov             r0, #INHNO_IRQ
+                               bl              _kernel_exe_inh
+
+                       ; ---- スタックアライメント復帰
+                               ldmfd   sp!, {r0, r1}                                                   ; 汎用レジスタ復帰
+                               mov             sp, r1
+                               
+                       ; ---- 割り込みカウンタ復帰
+                               ldrb    r1, [r0]
+                               add             r1, r1, #1
+                               strb    r1, [r0]
+
+                               b               return_int                                                              ; 復帰処理
+
+
+
+                       AREA data, DATA, ALIGN=0
+_kernel_int_nst_cnt
+                       DCB      0x00
+
+
+                               END
+
+
+; --------------------------------------------------------------------------- 
+;  End of file
+; --------------------------------------------------------------------------- 
diff --git a/kernel/source/arch/proc/arm/arm_v5/rvct/armctx.s b/kernel/source/arch/proc/arm/arm_v5/rvct/armctx.s
new file mode 100755 (executable)
index 0000000..148802f
--- /dev/null
@@ -0,0 +1,162 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+;
+; @file  armctx.s
+; @brief %en{コンテキスト制御(ARM v5 アーキテクチャ)}%jp{ARM v5}
+;
+; @version $Id: armctx.s,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+;
+; Copyright (C) 1998-2006 by Project HOS
+; http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+
+; ---- プロセッサモード定義 ----
+Mode_USR               EQU     0x10            ; USR モード
+Mode_FIQ               EQU             0x11            ; FIQ モード
+Mode_IRQ               EQU     0x12            ; IRQ モード
+Mode_SVC               EQU             0x13            ; SVC モード
+Mode_ABT               EQU             0x17            ; ABT モード
+Mode_UND               EQU             0x1b            ; UND モード
+Mode_SYS               EQU     0x1f            ; SYS モード
+Mode_MASK              EQU     0x1f            ; モードビットマスク
+
+
+; ---- フラグ定義 ----
+T_Bit                  EQU             0x20            ; T ビット
+F_Bit                  EQU     0x40            ; F ビット
+I_Bit                  EQU     0x80            ; I ビット
+
+
+                               
+                               EXPORT  _kernel_ena_int                         ; 割り込み許可
+                               EXPORT  _kernel_dis_int                         ; 割り込み禁止
+                               EXPORT  _kernel_wai_int                         ; CPUのアイドル処理
+                               EXPORT  _kernel_cre_ctx                         ; 実行コンテキストの作成
+                               EXPORT  _kernel_sta_ctx                         ; 実行コンテキストの開始
+                               EXPORT  _kernel_rst_ctx                         ; 実行コンテキストのリスタート
+                               EXPORT  _kernel_swi_ctx                         ; 実行コンテキストの切替
+                               
+
+                               PRESERVE8
+                               AREA    code, CODE, READONLY
+
+                               ALIGN
+                               CODE32
+; -----------------------------------------------
+;  割り込み許可
+;  void _kernel_ena_int(void)
+; -----------------------------------------------
+_kernel_ena_int
+                               mrs     r0, cpsr                                        ; cpsr取得
+                               bic             r0, r0, #F_Bit:OR:I_Bit         ; FビットとIビットをクリア
+                               msr     cpsr_c, r0                                      ; cpsr設定
+                               bx              lr                                                      ; リターン
+
+
+; -----------------------------------------------
+;  割り込み禁止
+;  void hospac_dis_int(void)
+; -----------------------------------------------
+_kernel_dis_int
+                               mrs     r0, cpsr                                        ; cpsr取得
+                               orr             r0, r0, #F_Bit:OR:I_Bit         ; FビットとIビットを設定
+                               msr     cpsr_c, r0                                      ; cpsr設定
+                               bx              lr                                                      ; リターン
+
+
+; -----------------------------------------------
+;  割り込み待ち(CPUのアイドル処理)
+;  void        _kernel_wai_int(void);
+; -----------------------------------------------
+_kernel_wai_int
+                               mov     r0, #0
+                               mcr             p15, 0, r0, c7, c0, 4           ; WaitForInterrupt
+                               b               _kernel_wai_int
+
+                               
+                               
+                               CODE16
+
+; -----------------------------------------------
+;  実行コンテキストの作成
+;  void _kernel_cre_ctx(
+;                      _KERNEL_T_CTXCB *pk_ctxcb,                      /* r0   :作成するコンテキスト */
+;                      VP             isp,                                     /* r1   :スタックポインタ */
+;                      FP             entry,                           /* r2   :実行アドレス */
+;                      VP_INT         par1,                            /* r3   :実行時パラメータ */
+;                      VP_INT         par2)                            /* sp[0]:実行時パラメータ */
+; -----------------------------------------------
+_kernel_cre_ctx
+                               sub             r1, #36                                         ; スタックを確保
+                               str             r2, [r1, #0]                            ; r4 部分にentryを設定
+                               str             r3, [r1, #4]                            ; r5 部分にpar1を設定
+                               ldr             r2, [sp, #0]                            ; par2を取り出し
+                               str             r2, [r1, #8]                            ; r6 部分にpar2を設定
+                               adr             r1, ctx_entry                           ; エントリーアドレス設定
+                               add             r1, #1                                          ; Thumbモードアドレスとして設定
+                               str             r1, [r1, #32]                           ; lr 部分にエントリーアドレスを設定
+                               str             r1, [r0]                                        ; ctxcb に新 sp を保存
+                               bx              lr                                                      ; リターン
+
+; -----------------------------------------------
+;  実行コンテキストエントリーアドレス
+; -----------------------------------------------
+ctx_entry      
+                               mov             r0, r5                                          ; par1を設定
+                               mov             r1, r6                                          ; par2を設定
+                               bx              r4                                                      ; entry を実行
+
+
+
+
+; -----------------------------------------------
+;  実行コンテキストのリスタート
+;  void _kernel_rst_ctx(
+;                      VP_INT         par1,                            /* r0   :実行時パラメータ */
+;                      VP_INT         par2,                            /* r1   :実行時パラメータ */
+;                      FP             entry,                           /* r2   :実行アドレス */
+;                      VP             isp)                                     /* r3   :スタックポインタ */
+; -----------------------------------------------
+_kernel_rst_ctx
+                               mov             sp, r3                                          ; スタックを初期値にリセット
+                               bx              r2                                                      ; エントリーアドレスから再開始
+
+
+
+                               ALIGN
+                               CODE32
+
+                               ALIGN
+                               CODE32
+
+; -----------------------------------------------
+;  実行コンテキストの切替
+;  void _kernel_swi_ctx(
+;                      _KERNEL_T_CTXCB *pk_ctxinf_nxt,         /* r0 : 現在のコンテキストの保存先 */
+;                      _KERNEL_T_CTXCB *pk_ctxinf_now)         /* r1 : 切り替えるコンテキスト */
+; -----------------------------------------------
+_kernel_swi_ctx
+                               stmfd   sp!, {r4-r11, lr}                       ; レジスタ保存
+                               str             sp, [r1]                                        ; スタックポインタ保存
+                       ; ---- そのまま _kernel_sta_ctx に続ける
+
+
+; -----------------------------------------------
+;  実行コンテキストの開始
+;  void _kernel_sta_ctx(
+;                      _KERNEL_T_CTXCB *pk_ctxcb)                      /* r0: 実行を開始するコンテキスト */
+; -----------------------------------------------
+_kernel_sta_ctx
+                               ldr             sp, [r0]                                        ; スタックポインタ復帰
+                               ldmfd   sp!, {r4-r11, pc}                       ; レジスタ復帰
+
+                               
+                               END
+
+
+
+; --------------------------------------------------------------------------- 
+;  End of file
+; --------------------------------------------------------------------------- 
diff --git a/kernel/source/arch/proc/arm/arm_v5/rvct/armirq.s b/kernel/source/arch/proc/arm/arm_v5/rvct/armirq.s
new file mode 100755 (executable)
index 0000000..fda51b2
--- /dev/null
@@ -0,0 +1,123 @@
+
+; ---- プロセッサモード定義 ----
+Mode_USR               EQU     0x10            ; USR モード
+Mode_FIQ               EQU             0x11            ; FIQ モード
+Mode_IRQ               EQU     0x12            ; IRQ モード
+Mode_SVC               EQU             0x13            ; SVC モード
+Mode_ABT               EQU             0x17            ; ABT モード
+Mode_UND               EQU             0x1b            ; UND モード
+Mode_SYS               EQU     0x1f            ; SYS モード
+Mode_MASK              EQU     0x1f            ; モードビットマスク
+
+; ---- フラグ定義 ----
+T_Bit                  EQU             0x20            ; T ビット
+F_Bit                  EQU     0x40            ; F ビット
+I_Bit                  EQU     0x80            ; I ビット
+
+
+; ---- 割り込みハンドラ番号 ----
+INHNO_IRQ              EQU     0
+INHNO_FIQ              EQU     1
+
+
+                               IMPORT  _kernel_int_isp
+                               IMPORT  _kernel_sta_int
+                               IMPORT  _kernel_end_int
+                               IMPORT  _kernel_exe_inh
+                               EXPORT  _kernel_int_armirq                                              ; IRQハンドラ
+
+
+                               PRESERVE8
+                               AREA    inthdr_code, CODE, READONLY
+                               CODE32
+
+; ----------------------------------------------
+;  IRQ ハンドラ
+; ----------------------------------------------
+_kernel_int_armirq
+                       ; ---- レジスタ退避
+                               msr             cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit             ; SYSモードに移行
+                               stmfd   sp!, {r0-r3, r12, lr}                                   ; SYSモードの汎用レジスタ退避
+                               msr             cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit             ; IRQモードに移行
+                               mov             r0, lr                                                                  ; lr_irq 取り出し
+                               mrs             r1, spsr                                                                ; spsr_irq 取り出し
+                               msr             cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit             ; SYSモードに移行
+                               stmfd   sp!, {r0, r1}                                                   ; lr_irq, spsr_irq退避
+                               
+                       ; ---- 多重割込み判定
+                               ldr             r0, =_kernel_int_nst_cnt                                        ; 割り込みネストカウンタのアドレス取得
+                               ldrb    r1, [r0]                                                                ; 割り込みネストカウンタ値取得
+                               subs    r1, r1, #1                                                              ; カウンタ減算(0判定が楽なのでマイナス方向にカウント)
+                               strb    r1, [r0]                                                                ; 割り込みネストカウンタ値設定
+                               bcs             multiple_int                                                    ; 多重割り込みなら分岐
+                               
+                       ; ---- 割り込み用スタックに入れ替え
+                               ldr             r2, _kernel_int_isp                                             ; 割り込み用スタックの初期値アドレスを取得
+                               mov             r1, sp                                                                  ; タスクのSPを保存
+                               ldr             sp, [r2]                                                                ; 割り込み用スタックに切り替え
+                               stmfd   sp!, {r0, r1}                                                   ; タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も)
+                               
+                       ; ---- 割り込み処理
+                               bl              _kernel_sta_int                                                 ; 割り込み開始
+                               
+                       ; ---- 割り込みハンドラ実行
+                               mov             r0, #INHNO_IRQ
+                               bl              _kernel_exe_inh
+                               
+                       ; ---- 割り込み処理の終了設定
+                               ldmfd   sp!, {r0, r1}                                                   ; 汎用レジスタ復帰
+                               mov             sp, r1                                                                  ; スタックを戻す
+
+                               mov             r1, #0                                                                  ; 割り込みネストカウンタを0に戻す
+                               strb    r1, [r0]                                                                ; 割り込みネストカウンタ値設定
+
+                       ; ---- 遅延ディスパッチ処理
+                               bl              _kernel_end_int                                                 ; 割り込み終了処理
+
+return_int
+                       ; ---- 復帰処理
+                               ldmfd   sp!, {r0, r1}                                                   ; lr_irq, spsr_irq 復帰
+                               msr             cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit             ; IRQモードに移行
+                               mov             lr, r0                                                                  ; lr_irq 復帰
+                               msr             spsr_csxf, r1                                                   ; spsr_irq 復帰
+                               msr             cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit             ; SYSモードに移行
+                               ldmfd   sp!, {r0-r3, r12, lr}                                   ; SYSモードの汎用レジスタ復帰
+                               msr             cpsr_c, #Mode_IRQ:OR:F_Bit:OR:I_Bit             ; IRQモードに移行
+                               subs    pc, lr, #4                                                              ; 割込み復帰
+
+
+                       ; ---- 多重割り込み処理
+multiple_int
+                       ; ---- スタックを8バイトアライメントに移動
+                               mov             r1,  sp                                                                 ; 割り込み発生時のSYSモードのSPに8の倍数の保証されないので
+                               bic             sp, sp, #0x7
+                               stmfd   sp!, {r0, r1}                                                   ; タスクのSPを割り込み用スタックに保存(8の倍数になるようにr1も)
+                               
+                       ; ---- 割り込みハンドラ実行
+                               mov             r0, #INHNO_IRQ
+                               bl              _kernel_exe_inh
+
+                       ; ---- スタックアライメント復帰
+                               ldmfd   sp!, {r0, r1}                                                   ; 汎用レジスタ復帰
+                               mov             sp, r1
+                               
+                       ; ---- 割り込みカウンタ復帰
+                               ldrb    r1, [r0]
+                               add             r1, r1, #1
+                               strb    r1, [r0]
+
+                               b               return_int                                                              ; 復帰処理
+
+
+
+                       AREA data, DATA, ALIGN=0
+_kernel_int_nst_cnt
+                       DCB      0x00
+
+
+                               END
+
+
+; --------------------------------------------------------------------------- 
+;  End of file
+; --------------------------------------------------------------------------- 
diff --git a/kernel/source/arch/proc/arm/arm_v6/rvct/armctx.s b/kernel/source/arch/proc/arm/arm_v6/rvct/armctx.s
new file mode 100755 (executable)
index 0000000..064a913
--- /dev/null
@@ -0,0 +1,138 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+;
+; @file  dsp_tsk.c
+; @brief %en{コンテキスト制御(ARM v6 アーキテクチャ)}%jp{ARM v6}
+;
+; @version $Id: armctx.s,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+;
+; Copyright (C) 1998-2006 by Project HOS
+; http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               
+                               EXPORT  _kernel_ena_int                         ; 割り込み許可
+                               EXPORT  _kernel_dis_int                         ; 割り込み禁止
+                               EXPORT  _kernel_wai_int                         ; CPUのアイドル処理
+                               EXPORT  _kernel_cre_ctx                         ; 実行コンテキストの作成
+                               EXPORT  _kernel_sta_ctx                         ; 実行コンテキストの開始
+                               EXPORT  _kernel_rst_ctx                         ; 実行コンテキストのリスタート
+                               EXPORT  _kernel_swi_ctx                         ; 実行コンテキストの切替
+                               
+
+
+                               PRESERVE8
+                               AREA    code, CODE, READONLY
+
+                               ALIGN
+                               CODE32
+
+; -----------------------------------------------
+;  割り込み許可
+;  void _kernel_ena_int(void)
+; -----------------------------------------------
+_kernel_ena_int
+                               cpsie   i                                                       ; 割り込み許可
+                               bx              lr                                                      ; リターン
+
+
+; -----------------------------------------------
+;  割り込み禁止
+;  void _kernel_dis_int(void)
+; -----------------------------------------------
+_kernel_dis_int
+                               cpsid   fi                                                      ; 割り込み禁止
+                               bx              lr                                                      ; リターン
+
+
+; -----------------------------------------------
+;  割り込み待ち(CPUのアイドル処理)
+;  void        _kernel_wai_int(void);
+; -----------------------------------------------
+_kernel_wai_int
+                               mov     r0, #0
+;                              mcr             p15, 0, r0, c7, c0, 4           ; WaitForInterrupt
+                               b               _kernel_wai_int
+
+
+
+                               CODE16
+
+; -----------------------------------------------
+;  実行コンテキストの作成
+;  void _kernel_cre_ctx(
+;                      _KERNEL_T_CTXCB *pk_ctxcb,                      /* r0   :作成するコンテキスト */
+;                      VP             isp,                                     /* r1   :スタックポインタ */
+;                      FP             entry,                           /* r2   :実行アドレス */
+;                      VP_INT         par1,                            /* r3   :実行時パラメータ */
+;                      VP_INT         par2)                            /* sp[0]:実行時パラメータ */
+; -----------------------------------------------
+_kernel_cre_ctx
+                               sub             r1, #36                                         ; スタックを確保
+                               str             r2, [r1, #0]                            ; r4 部分にentryを設定
+                               str             r3, [r1, #4]                            ; r5 部分にpar1を設定
+                               ldr             r2, [sp, #0]                            ; par2を取り出し
+                               str             r2, [r1, #8]                            ; r6 部分にpar2を設定
+                               adr             r2, ctx_entry                           ; エントリーアドレス設定
+                               add             r2, #1                                          ; Thumbモードアドレスとして設定
+                               str             r2, [r1, #32]                           ; lr 部分にエントリーアドレスを設定
+                               str             r1, [r0]                                        ; ctxcb に新 sp を保存
+                               bx              lr                                                      ; リターン
+
+
+; -----------------------------------------------
+;  実行コンテキストエントリーアドレス
+; -----------------------------------------------
+ctx_entry      
+                               mov             r0, r5                                          ; par1を設定
+                               mov             r1, r6                                          ; par2を設定
+                               bx              r4                                                      ; entry を実行
+
+
+; -----------------------------------------------
+;  実行コンテキストのリスタート
+;  void _kernel_rst_ctx(
+;                      VP_INT         par1,                            /* r0   :実行時パラメータ */
+;                      VP_INT         par2,                            /* r1   :実行時パラメータ */
+;                      FP             entry,                           /* r2   :実行アドレス */
+;                      VP             isp)                                     /* r3   :スタックポインタ */
+; -----------------------------------------------
+_kernel_rst_ctx
+                               mov             sp, r3                                          ; スタックを初期値にリセット
+                               bx              r2                                                      ; エントリーアドレスから再開始
+
+
+
+                               ALIGN
+                               CODE32
+
+; -----------------------------------------------
+;  実行コンテキストの切替
+;  void _kernel_swi_ctx(
+;                      _KERNEL_T_CTXCB *pk_ctxinf_nxt,         /* r0 : 現在のコンテキストの保存先 */
+;                      _KERNEL_T_CTXCB *pk_ctxinf_now)         /* r1 : 切り替えるコンテキスト */
+; -----------------------------------------------
+_kernel_swi_ctx
+                               stmfd   sp!, {r4-r11, lr}                       ; レジスタ保存
+                               str             sp, [r1]                                        ; スタックポインタ保存
+                       ; ---- そのまま _kernel_sta_ctx に続ける
+
+
+; -----------------------------------------------
+;  実行コンテキストの開始
+;  void _kernel_sta_ctx(
+;                      _KERNEL_T_CTXCB *pk_ctxcb)                      /* r0: 実行を開始するコンテキスト */
+; -----------------------------------------------
+_kernel_sta_ctx
+                               ldr             sp, [r0]                                        ; スタックポインタ復帰
+                               ldmfd   sp!, {r4-r11, pc}                       ; レジスタ復帰
+
+                               
+                               END
+
+
+
+; --------------------------------------------------------------------------- 
+;  End of file
+; --------------------------------------------------------------------------- 
diff --git a/kernel/source/arch/proc/arm/arm_v6/rvct/armirq.s b/kernel/source/arch/proc/arm/arm_v6/rvct/armirq.s
new file mode 100755 (executable)
index 0000000..daba401
--- /dev/null
@@ -0,0 +1,119 @@
+; --------------------------------------------------------------------------- 
+;  $Name:  $
+;  $Revision: 1.1 $
+; --------------------------------------------------------------------------- 
+
+
+
+
+; ---- プロセッサモード定義 ----
+Mode_USR               EQU     0x10            ; USR モード
+Mode_FIQ               EQU             0x11            ; FIQ モード
+Mode_IRQ               EQU     0x12            ; IRQ モード
+Mode_SVC               EQU             0x13            ; SVC モード
+Mode_ABT               EQU             0x17            ; ABT モード
+Mode_UND               EQU             0x1b            ; UND モード
+Mode_SYS               EQU     0x1f            ; SYS モード
+
+
+; ---- 割り込みハンドラ番号 ----
+INHNO_IRQ              EQU     0
+INHNO_FIQ              EQU     1
+
+
+                               PRESERVE8
+                               AREA    code, CODE, READONLY
+
+                               IMPORT  _kernel_int_isp
+                               IMPORT  _kernel_sta_inh
+                               IMPORT  _kernel_exe_inh
+                               IMPORT  _kernel_end_inh
+
+                               EXPORT  _kernel_int_armirq                              ; IRQハンドラ
+
+
+                               ALIGN
+                               CODE32
+
+; ----------------------------------------------
+;  IRQ ハンドラ
+; ----------------------------------------------
+_kernel_int_armirq
+                       ; ---- レジスタ退避
+                               sub             lr, lr, #4                                              ; リターンアドレス算出
+                               srsfd   #Mode_SYS!                                              ; lr_irq, spsr_irqをSYSモードスタックに退避
+                               cps             #Mode_SYS                                               ; SYSモードに移行
+                               stmfd   sp!, {r0-r3, r12, lr}                   ; 汎用レジスタ退避
+                               
+                       ; ---- 多重割込み判定
+                               ldr             r0, =_kernel_int_nst_cnt                        ; 割り込みネストカウンタのアドレス取得
+                               ldrb    r1, [r0]
+                               subs    r1, r1, #1
+                               strb    r1, [r0]
+                               bcs             multiple_int                                    ; 多重割り込みなら分岐
+                               
+                       ; ---- 割り込み用スタックに入れ替え
+                               ldr             r2, =_kernel_int_isp                    ; 割り込み用スタックの初期値アドレスを取得
+                               mov             r1, sp                                                  ; タスクのSPを保存
+                               ldr             sp, [r2]                                                ; 割り込み用スタックに切り替え
+                               stmfd   sp!, {r0, r1}                                   ; タスクのSPを割り込み用スタックに保存
+                               
+                       ; ---- 割り込み処理
+                               bl              _kernel_sta_inh                                 ; 割り込み開始
+                               
+                       ; ---- 割り込みハンドラ実行
+                               mov             r0, #INHNO_IRQ
+                               bl              _kernel_exe_inh
+                               
+                       ; ---- 割り込み処理の終了設定
+                               ldmfd   sp!, {r0, r1}                                   ; 汎用レジスタ復帰
+                               mov             sp, r1                                                  ; スタックを戻す
+                               mov             r1, #0
+                               strb    r1, [r0]
+                               
+                       ; ---- 遅延ディスパッチ処理
+                               bl              _kernel_end_inh                                 ; 割り込み終了
+
+
+                       ; ---- 復帰処理
+return_int
+                       ; ---- 復帰処理
+                               ldmfd   sp!, {r0-r3, r12, lr}                   ; 汎用レジスタ復帰
+                               rfefd   sp!                                                             ; リターン
+                               
+                               
+                       ; ---- 多重割り込み処理
+multiple_int
+                       ; ---- スタックを8バイトアライメントに移動
+                               mov             r1,  sp
+                               bic             sp, sp, #0x7
+                               stmfd   sp!, {r0, r1}
+                               
+                       ; ---- 割り込みハンドラ実行
+                               mov             r0, #INHNO_IRQ
+                               bl              _kernel_exe_inh
+
+                       ; ---- スタックアライメント復帰
+                               ldmfd   sp!, {r0, r1}                                   ; 汎用レジスタ復帰
+                               mov             sp, r1
+                               
+                       ; ---- 割り込みカウンタ復帰
+                               ldrb    r1, [r0]
+                               add             r1, r1, #1
+                               strb    r1, [r0]
+
+                               b               return_int                                              ; 復帰処理
+
+
+
+                       AREA data, DATA, ALIGN=0
+_kernel_int_nst_cnt
+                       DCB      0x00
+
+
+                               END
+
+
+; --------------------------------------------------------------------------- 
+;  End of file
+; --------------------------------------------------------------------------- 
diff --git a/kernel/source/arch/proc/h8/h8300/ctxctl.src b/kernel/source/arch/proc/h8/h8300/ctxctl.src
new file mode 100755 (executable)
index 0000000..d0dd325
--- /dev/null
@@ -0,0 +1,107 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance μITRON4.0仕様 Real-Time OS              
+;    コンテキスト制御                                                         
+;                                                                             
+;                                     Copyright (C) 1998-2006 by Project HOS  
+;                                     http://sourceforge.jp/projects/hos/     
+; --------------------------------------------------------------------------- 
+
+
+
+                               .EXPORT __kernel_dis_int                ; 割り込み禁止
+                               .EXPORT __kernel_ena_int                ; 割り込み許可
+                               .EXPORT __kernel_cre_ctx                ; 実行コンテキストの作成
+                               .EXPORT __kernel_swi_ctx                ; 実行コンテキストの切替
+                               .IMPORT __kernel_h83_imsk               ; 割り込みマスク
+
+
+                               .SECTION  P, CODE, ALIGN=2
+
+
+; -----------------------------------------------
+;  割り込み禁止
+;  void _kernel_dis_int(void)
+; -----------------------------------------------
+                               .STACK  __kernel_dis_int=4
+__kernel_dis_int:
+                               orc             #h'c0, ccr                              ; 割り込みの禁止
+                               rts
+
+
+; -----------------------------------------------
+;  割り込み許可
+;  void _kernel_ena_int(void)
+; -----------------------------------------------
+                               .STACK  __kernel_ena_int=4
+__kernel_ena_int:
+                               mov.b   @__kernel_h83_imsk, r0l
+                               ldc.b   r0l, ccr                                ; 割り込みの許可
+                               rts
+
+
+; -----------------------------------------------
+;  実行コンテキストエントリーアドレス
+; -----------------------------------------------
+ctx_entry:     
+                               mov.l   er3, er0                                ; 実行時パラメータを第一引数に設定
+                               mov.l   er4, er1                                ; 実行時パラメータを第一引数に設定
+                               jmp             @er2                                    ; 実行アドレスにジャンプ
+
+
+; -----------------------------------------------
+;  実行コンテキストの作成
+;  _kernel_cre_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb,                              作成するコンテキスト [er0]
+;              VP              isp,                                    初期スタックポインタ [er1]
+;              FP              entry,                                  実行アドレス         [er2]
+;              VP_INT          par1,                                   実行時パラメータ1    [@(4, er7)]
+;              VP_INT          par2)                                   実行時パラメータ2    [@(8, er7)]
+; -----------------------------------------------
+                               .STACK  __kernel_cre_ctx=12
+__kernel_cre_ctx:
+                               sub.l   #24, er1                                ; エントリーポイント+er2〜er6 までの退避分
+                               mov.l   er2, @(0, er1)                  ; 実行アドレスの格納(er2部分)
+                               mov.l   @(4, er7), er2
+                               mov.l   er2, @(4, er1)                  ; 実行時パラメータ1の格納(er3部分)
+                               mov.l   @(8, er7), er2
+                               mov.l   er2, @(8, er1)                  ; 実行時パラメータ1の格納(er4部分)
+                               mov.l   #ctx_entry, er2
+                               mov.l   er2, @(20, er1)                 ; 実行エントリーポイントの設定
+                               mov.l   er1, @(0, er0)                  ; スタックポインタの格納
+                               rts
+
+
+; -----------------------------------------------
+;  実行コンテキストの切替
+;  void _kernel_swi_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb_nxt,                  切り替え先のコンテキスト [er0]
+;              _KERNEL_T_CTXCB *pk_ctxcb_now)                  現在のコンテキスト       [er1]
+; -----------------------------------------------
+                               .STACK  __kernel_swi_ctx=24
+__kernel_swi_ctx:
+                               push.l  er2
+                               push.l  er3
+                               push.l  er4
+                               push.l  er5
+                               push.l  er6
+                               mov.l   er7,@(0, er1)                   ; スタックポインタ保存
+               ; ---- このまま _kernel_sta_ctx に続ける
+
+; -----------------------------------------------
+;  実行コンテキストの開始
+;  void _kernel_sta_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb)                              開始するコンテキスト [er0]
+; -----------------------------------------------
+                               .STACK  __kernel_sta_ctx=4
+__kernel_sta_ctx:
+                               mov.l   @(0, er0), er7                  ; スタックポインタ復帰
+                               pop.l   er6
+                               pop.l   er5
+                               pop.l   er4
+                               pop.l   er3
+                               pop.l   er2
+                               rts
+
+
+
+                               .END
diff --git a/kernel/source/arch/proc/h8/h8300ha/ctxctl.src b/kernel/source/arch/proc/h8/h8300ha/ctxctl.src
new file mode 100755 (executable)
index 0000000..c593a64
--- /dev/null
@@ -0,0 +1,144 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance μITRON4.0仕様 Real-Time OS              
+;    コンテキスト制御                                                         
+;                                                                             
+;                                     Copyright (C) 1998-2006 by Project HOS  
+;                                     http://sourceforge.jp/projects/hos/     
+; --------------------------------------------------------------------------- 
+
+
+
+                               .EXPORT __kernel_dis_int                ; 割り込み禁止
+                               .EXPORT __kernel_ena_int                ; 割り込み許可
+                               .EXPORT __kernel_wai_int                ; 割り込み待ち
+                               .EXPORT __kernel_cre_ctx                ; 実行コンテキストの作成
+                               .EXPORT __kernel_swi_ctx                ; 実行コンテキストの切替
+                               .EXPORT __kernel_sta_ctx                ; 実行コンテキストの開始
+                               .EXPORT __kernel_rst_ctx                ; 実行コンテキストのリスタート
+                               .EXPORT __kernel_h83_imsk               ; 割り込みマスク
+
+
+                               .SECTION  P, CODE, ALIGN=2
+
+
+; -----------------------------------------------
+;  割り込み禁止
+;  void _kernel_dis_int(void)
+; -----------------------------------------------
+                               .STACK  __kernel_dis_int=4
+__kernel_dis_int:
+                               orc             #h'c0, ccr                              ; 割り込みの禁止
+                               rts
+
+
+; -----------------------------------------------
+;  割り込み許可
+;  void _kernel_ena_int(void)
+; -----------------------------------------------
+                               .STACK  __kernel_ena_int=4
+__kernel_ena_int:
+                               mov.b   @__kernel_h83_imsk, r0l
+                               ldc.b   r0l, ccr                                ; 割り込みの許可
+                               rts
+
+;------------------------------------------------
+; 割り込み待ち
+; void _kernel_wai_int(void)
+;------------------------------------------------
+                               .STACK  __kernel_wai_int=4
+__kernel_wai_int:
+       ;                       sleep
+                               jmp             @__kernel_wai_int
+
+
+
+; -----------------------------------------------
+;  実行コンテキストエントリーアドレス
+; -----------------------------------------------
+ctx_entry:     
+                               mov.l   er3, er0                                ; 実行時パラメータを第一引数に設定
+                               mov.l   er4, er1                                ; 実行時パラメータを第一引数に設定
+                               jmp             @er2                                    ; 実行アドレスにジャンプ
+
+
+; -----------------------------------------------
+;  実行コンテキストの作成
+;  _kernel_cre_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb,                              作成するコンテキスト [er0]
+;              VP              isp,                                    初期スタックポインタ [er1]
+;              FP              entry,                                  実行アドレス         [@(4, er7)]
+;              VP_INT          par1,                                   実行時パラメータ1    [@(8, er7)]
+;              VP_INT          par2)                                   実行時パラメータ2    [@(12, er7)]
+; -----------------------------------------------
+                               .STACK  __kernel_cre_ctx=12
+__kernel_cre_ctx:
+                               sub.l   #24, er1                                ; エントリーポイント+er2〜er6 までの退避分
+                               mov.l   er1, @(0, er0)                  ; スタックポインタの格納
+                               mov.l   #ctx_entry, er0
+                               mov.l   er0, @(20, er1)                 ; 実行エントリーポイントの設定
+                               mov.l   @(4, er7), er0
+                               mov.l   er0, @(16, er1)                 ; 実行アドレスの格納(er2部分)
+                               mov.l   @(8, er7), er0
+                               mov.l   er0, @(12, er1)                 ; 実行時パラメータ1の格納(er3部分)
+                               mov.l   @(12, er7), er0
+                               mov.l   er0, @(8, er1)                  ; 実行時パラメータ1の格納(er4部分)
+                               rts
+
+
+; -----------------------------------------------
+;  実行コンテキストの切替
+;  void _kernel_swi_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb_nxt,                  切り替え先のコンテキスト [er0]
+;              _KERNEL_T_CTXCB *pk_ctxcb_now)                  現在のコンテキスト       [er1]
+; -----------------------------------------------
+                               .STACK  __kernel_swi_ctx=24
+__kernel_swi_ctx:
+                               push.l  er2
+                               push.l  er3
+                               push.l  er4
+                               push.l  er5
+                               push.l  er6
+                               mov.l   er7,@(0, er1)                   ; スタックポインタ保存
+               ; ---- このまま _kernel_sta_ctx に続ける
+
+; -----------------------------------------------
+;  実行コンテキストの開始
+;  void _kernel_sta_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb)                              開始するコンテキスト [er0]
+; -----------------------------------------------
+                               .STACK  __kernel_sta_ctx=4
+__kernel_sta_ctx:
+                               mov.l   @(0, er0), er7                  ; スタックポインタ復帰
+                               pop.l   er6
+                               pop.l   er5
+                               pop.l   er4
+                               pop.l   er3
+                               pop.l   er2
+                               rts
+
+
+;------------------------------------------------
+; 実行コンテキストのリスタート
+; void _kernel_rst_ctx(
+;              VP_INT par1,                                                    実行時パラメータ1    [er0]
+;              VP_INT par2,                                                    実行時パラメータ2    [er1]
+;              VP     isp,                                                             初期スタックポインタ [@(4, er7)]
+;              FP     entry)                                                   実行アドレス         [@(8, er7)]
+;------------------------------------------------
+                               .STACK  __kernel_rst_ctx=8
+__kernel_rst_ctx:
+                               mov.l   @(4, er7), er3                  ; 初期スタックポインタ
+                               mov.l   @(8, er7), er4                  ; 実行アドレス取り出し
+                               mov.l   er3, er7                                ; スタックポインタリセット
+                               jmp             @r4                                             ; 実行アドレスに分岐
+
+
+
+
+                               .SECTION        B, DATA, ALIGN=2
+
+__kernel_h83_imsk:
+                               .RES.B  1
+
+
+                               .END
diff --git a/kernel/source/arch/proc/h8/h8300ha/intctl.src b/kernel/source/arch/proc/h8/h8300ha/intctl.src
new file mode 100755 (executable)
index 0000000..9fd649f
--- /dev/null
@@ -0,0 +1,133 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                     
+;    プロセッサ抽象化コンポーネント (日立 H8/300H 用)                         
+;    割り込みハンドラ                                                         
+;                                                                             
+;                                   Copyright (C) 1998-2006 by Project HOS    
+;                                   http://sourceforge.jp/projects/hos/       
+; --------------------------------------------------------------------------- 
+
+
+
+                               .EXPORT __kernel_int_hdr
+                               .IMPORT __kernel_sta_inh                        ; 割り込み処理開始
+                               .IMPORT __kernel_end_inh                        ; 割り込み処理終了
+                               .IMPORT __kernel_exe_inh                        ; 割り込み処理実行
+                               .IMPORT __kernel_int_isp                        ; 割り込み用スタックアドレス
+                               .IMPORT __kernel_h83_imsk                       ; 現在の割り込みマスク値
+
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+
+; -----------------------------------------------
+;  割り込み処理
+;
+;  割り込み発生時は er0 を push した後、er0 に
+;  割り込み番号をセットして、ここにジャンプする
+; -----------------------------------------------
+
+__kernel_int_hdr:
+               ; ---- レジスタ保存
+                               push.l  er1
+                               
+               ; ---- 割り込みをマスク
+                               stc.b   ccr, r1l                                        ; ccr保存
+                               orc             #h'c0, ccr                                      ; 割込み全マスク
+                               and.b   #h'c0, r1l
+                               
+               ; -------- 多重割り込みの判別
+                               mov.b   @__kernel_int_cnt, r1h
+                               bne             multiple_int
+                               
+               ; ======== 最初の割り込み ========
+               ; ---- 割込みマスク値(_kernel_h83_imsk)を設定
+                               mov.b   @__kernel_h83_imsk, r0h         ; 古い割込みマスク値を保存
+                               mov.b   r1l, @__kernel_h83_imsk         ; 新しいマスク値を設定
+                               
+               ; ---- 割り込みネストカウンタ設定
+                               mov.b   #1, r1h
+                               mov.b   r1h, @__kernel_int_cnt
+                               
+               ; ---- スタックポインタの入れ替え
+                               mov.l   er7, er1
+                               mov.l   @__kernel_int_isp, er7
+                               push.l  er1                                                     ; 直前のスタックポインタを保存
+               
+               ; ---- 古い割込みマスク値(r0h)と割込み番号(r0l)の保存
+                               push.w  r0
+
+               ; ---- 割り込み処理の開始
+                               jsr             @__kernel_sta_inh
+                               
+               ; -------- 割り込みハンドラの処理
+                               mov.b   @(1, er7), r0l                          ; スタックから割込み番号を取り出す
+                               extu.w  r0
+                               extu.l  er0
+                               jsr             @__kernel_exe_inh
+
+               ; ---- 古い割込みマスク値(r0h)と割込み番号(r0l)の復帰
+                               pop.w   r0
+                               
+               ; -------- スタックポインタ復帰
+                               mov.l   @er7, er7
+                               
+               ; -------- 割り込みネストカウンタクリア
+                               xor.b   r1l, r1l
+                               mov.b   r1l, @__kernel_int_cnt
+                               
+               ; -------- 割り込みマスク値の復帰
+                               mov.b   @(10, er7), r1l
+                               and.b   #h'c0, r1l
+                               mov.b   r1l, @__kernel_h83_imsk         ; 割込み前の値に戻す
+                               cmp.b   r1l, r0h
+                               bne             return_int                                      ; 割込み前処理中の多重割り込みなら後処理をカット
+                               
+               ; -------- コンテキストスイッチ実施
+                               jsr             @__kernel_end_inh
+               
+               ; -------- コンテキストスイッチの後処理
+                               mov.b   @__kernel_h83_imsk, r0l         ; マスク値取り出し
+                               mov.b   @(10, er7), r1l
+                               and.b   #h'3f, r1l                                      
+                               or.b    r0l, r1l
+                               mov.b   r1l, @(10, er7)                         ; スタック上のCCRを更新
+
+return_int:
+               ; -------- 復帰
+                               pop.l   er1
+                               pop.l   er0
+                               rte
+
+
+               ; ======== 多重割り込み ========
+multiple_int:
+               ; -------- 割り込みネストカウンタ加算
+                               add.b   #1, r1h
+                               mov.b   r1h, @__kernel_int_cnt
+
+               ; ---- 割込みマスク値(_kernel_h83_imsk)を設定
+                               mov.b   r1l, @__kernel_h83_imsk         ; 新しいマスク値を設定
+                               
+               ; -------- 割り込みハンドラ呼び出し
+                               jsr             @__kernel_exe_inh
+                               
+               ; -------- 割り込みネストカウンタ減算
+                               mov.b   @__kernel_int_cnt, r1h
+                               dec.b   r1h
+                               mov.b   r1h, @__kernel_int_cnt
+                               
+               ; -------- 復帰
+                               bra             return_int
+
+
+                               .SECTION        B, DATA, ALIGN=2
+
+__kernel_int_cnt:
+                               .RES.B  1
+
+
+                               .END
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/mk_vec/mk_vec.c b/kernel/source/arch/proc/h8/h8300ha/mk_vec/mk_vec.c
new file mode 100755 (executable)
index 0000000..37da2ee
--- /dev/null
@@ -0,0 +1,125 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+
+int main()
+{
+       FILE *fp;
+       char fname[64];
+       int  i;
+       
+       for ( i = 1; i <= 11; i++ )
+       {
+               sprintf(fname ,"../vect_%03d.src", i);
+               if ( (fp = fopen(fname, "w")) == NULL )
+               {
+                       return 1;
+               }
+               
+               fprintf(fp, 
+                       "; --------------------------------------------------------------------------- \n"
+                       ";  Hyper Operating System V4 Advance\n"
+                       "; \n"
+                       ";                                   Copyright (C) 1998-2006 by Project HOS\n"
+                       ";                                   http://sourceforge.jp/projects/hos/\n"
+                       "; --------------------------------------------------------------------------- \n"
+                       "\n"
+                       "\n"
+                       "                               .EXPORT __kernel_vector_%03d\n"
+                       "                               .IMPORT __kernel_exc_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .SECTION P, CODE, ALIGN=2\n"
+                       "\n"
+                       "__kernel_vector_%03d:\n"
+                       "                               push.l  er0\n"
+                       "                               mov.b   #%d, r0l\n"
+                       "                               bra             __kernel_exc_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .END\n"
+                       "\n"
+                       "\n"
+                       "; end of file\n",
+                       i, i, i);
+               
+               fclose(fp);
+       }
+       
+       
+       for ( i = 12; i <= 63; i++ )
+       {
+               sprintf(fname ,"../vect_%03d.src", i);
+               if ( (fp = fopen(fname, "w")) == NULL )
+               {
+                       return 1;
+               }
+               
+               fprintf(fp, 
+                       "; --------------------------------------------------------------------------- \n"
+                       ";  Hyper Operating System V4 Advance\n"
+                       "; \n"
+                       ";                                   Copyright (C) 1998-2006 by Project HOS\n"
+                       ";                                   http://sourceforge.jp/projects/hos/\n"
+                       "; --------------------------------------------------------------------------- \n"
+                       "\n"
+                       "\n"
+                       "                               .EXPORT __kernel_vector_%03d\n"
+                       "                               .IMPORT __kernel_int_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .SECTION P, CODE, ALIGN=2\n"
+                       "\n"
+                       "__kernel_vector_%03d:\n"
+                       "                               push.l  er0\n"
+                       "                               mov.b   #%d, r0l\n"
+                       "                               bra             __kernel_int_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .END\n"
+                       "\n"
+                       "\n"
+                       "; end of file\n",
+                       i, i, i);
+               
+               fclose(fp);
+       }
+       
+       {
+                       sprintf(fname ,"../vect_dmy.src", i);
+               if ( (fp = fopen(fname, "w")) == NULL )
+               {
+                       return 1;
+               }
+               
+               fprintf(fp, 
+                       "; --------------------------------------------------------------------------- \n"
+                       ";  Hyper Operating System V4 Advance\n"
+                       "; \n"
+                       ";                                   Copyright (C) 1998-2006 by Project HOS\n"
+                       ";                                   http://sourceforge.jp/projects/hos/\n"
+                       "; --------------------------------------------------------------------------- \n"
+                       "\n"
+                       "\n"
+                       "                               .EXPORT __kernel_vector_dmy\n"
+                       "                               .IMPORT __kernel_int_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .SECTION P, CODE, ALIGN=2\n"
+                       "\n"
+                       "__kernel_vector_dmy:\n"
+                       "                               rte\n"
+                       "\n"
+                       "\n"
+                       "                               .END\n"
+                       "\n"
+                       "\n"
+                       "; end of file\n",
+                       i, i);
+               
+               fclose(fp);
+       }
+       
+       return 0;
+}
+
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_001.src b/kernel/source/arch/proc/h8/h8300ha/vect_001.src
new file mode 100755 (executable)
index 0000000..6610a07
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_001
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_001:
+                               push.l  er0
+                               mov.b   #1, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_002.src b/kernel/source/arch/proc/h8/h8300ha/vect_002.src
new file mode 100755 (executable)
index 0000000..f78cfcb
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_002
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_002:
+                               push.l  er0
+                               mov.b   #2, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_003.src b/kernel/source/arch/proc/h8/h8300ha/vect_003.src
new file mode 100755 (executable)
index 0000000..4379e0e
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_003
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_003:
+                               push.l  er0
+                               mov.b   #3, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_004.src b/kernel/source/arch/proc/h8/h8300ha/vect_004.src
new file mode 100755 (executable)
index 0000000..26b68e9
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_004
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_004:
+                               push.l  er0
+                               mov.b   #4, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_005.src b/kernel/source/arch/proc/h8/h8300ha/vect_005.src
new file mode 100755 (executable)
index 0000000..2706d5d
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_005
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_005:
+                               push.l  er0
+                               mov.b   #5, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_006.src b/kernel/source/arch/proc/h8/h8300ha/vect_006.src
new file mode 100755 (executable)
index 0000000..a586f3e
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_006
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_006:
+                               push.l  er0
+                               mov.b   #6, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_007.src b/kernel/source/arch/proc/h8/h8300ha/vect_007.src
new file mode 100755 (executable)
index 0000000..8d60b5d
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_007
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_007:
+                               push.l  er0
+                               mov.b   #7, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_008.src b/kernel/source/arch/proc/h8/h8300ha/vect_008.src
new file mode 100755 (executable)
index 0000000..509cbec
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_008
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_008:
+                               push.l  er0
+                               mov.b   #8, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_009.src b/kernel/source/arch/proc/h8/h8300ha/vect_009.src
new file mode 100755 (executable)
index 0000000..7f6b88a
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_009
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_009:
+                               push.l  er0
+                               mov.b   #9, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_010.src b/kernel/source/arch/proc/h8/h8300ha/vect_010.src
new file mode 100755 (executable)
index 0000000..557f52f
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_010
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_010:
+                               push.l  er0
+                               mov.b   #10, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_011.src b/kernel/source/arch/proc/h8/h8300ha/vect_011.src
new file mode 100755 (executable)
index 0000000..407ad35
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_011
+                               .IMPORT __kernel_exc_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_011:
+                               push.l  er0
+                               mov.b   #11, r0l
+                               bra             __kernel_exc_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_012.src b/kernel/source/arch/proc/h8/h8300ha/vect_012.src
new file mode 100755 (executable)
index 0000000..06cd771
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_012
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_012:
+                               push.l  er0
+                               mov.b   #12, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_013.src b/kernel/source/arch/proc/h8/h8300ha/vect_013.src
new file mode 100755 (executable)
index 0000000..ea14d4f
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_013
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_013:
+                               push.l  er0
+                               mov.b   #13, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_014.src b/kernel/source/arch/proc/h8/h8300ha/vect_014.src
new file mode 100755 (executable)
index 0000000..76be3a9
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_014
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_014:
+                               push.l  er0
+                               mov.b   #14, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_015.src b/kernel/source/arch/proc/h8/h8300ha/vect_015.src
new file mode 100755 (executable)
index 0000000..a11f1ac
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_015
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_015:
+                               push.l  er0
+                               mov.b   #15, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_016.src b/kernel/source/arch/proc/h8/h8300ha/vect_016.src
new file mode 100755 (executable)
index 0000000..e31f5f0
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_016
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_016:
+                               push.l  er0
+                               mov.b   #16, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_017.src b/kernel/source/arch/proc/h8/h8300ha/vect_017.src
new file mode 100755 (executable)
index 0000000..3327681
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_017
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_017:
+                               push.l  er0
+                               mov.b   #17, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_018.src b/kernel/source/arch/proc/h8/h8300ha/vect_018.src
new file mode 100755 (executable)
index 0000000..aee10b5
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_018
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_018:
+                               push.l  er0
+                               mov.b   #18, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_019.src b/kernel/source/arch/proc/h8/h8300ha/vect_019.src
new file mode 100755 (executable)
index 0000000..87321e6
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_019
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_019:
+                               push.l  er0
+                               mov.b   #19, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_020.src b/kernel/source/arch/proc/h8/h8300ha/vect_020.src
new file mode 100755 (executable)
index 0000000..0ee345f
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_020
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_020:
+                               push.l  er0
+                               mov.b   #20, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_021.src b/kernel/source/arch/proc/h8/h8300ha/vect_021.src
new file mode 100755 (executable)
index 0000000..267dd08
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_021
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_021:
+                               push.l  er0
+                               mov.b   #21, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_022.src b/kernel/source/arch/proc/h8/h8300ha/vect_022.src
new file mode 100755 (executable)
index 0000000..8ca4365
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_022
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_022:
+                               push.l  er0
+                               mov.b   #22, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_023.src b/kernel/source/arch/proc/h8/h8300ha/vect_023.src
new file mode 100755 (executable)
index 0000000..beb4ec1
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_023
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_023:
+                               push.l  er0
+                               mov.b   #23, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_024.src b/kernel/source/arch/proc/h8/h8300ha/vect_024.src
new file mode 100755 (executable)
index 0000000..3701b96
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_024
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_024:
+                               push.l  er0
+                               mov.b   #24, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_025.src b/kernel/source/arch/proc/h8/h8300ha/vect_025.src
new file mode 100755 (executable)
index 0000000..bab3ca1
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_025
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_025:
+                               push.l  er0
+                               mov.b   #25, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_026.src b/kernel/source/arch/proc/h8/h8300ha/vect_026.src
new file mode 100755 (executable)
index 0000000..e82b452
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_026
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_026:
+                               push.l  er0
+                               mov.b   #26, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_027.src b/kernel/source/arch/proc/h8/h8300ha/vect_027.src
new file mode 100755 (executable)
index 0000000..95c4a9b
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_027
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_027:
+                               push.l  er0
+                               mov.b   #27, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_028.src b/kernel/source/arch/proc/h8/h8300ha/vect_028.src
new file mode 100755 (executable)
index 0000000..4c5d4bf
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_028
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_028:
+                               push.l  er0
+                               mov.b   #28, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_029.src b/kernel/source/arch/proc/h8/h8300ha/vect_029.src
new file mode 100755 (executable)
index 0000000..b83a2c5
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_029
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_029:
+                               push.l  er0
+                               mov.b   #29, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_030.src b/kernel/source/arch/proc/h8/h8300ha/vect_030.src
new file mode 100755 (executable)
index 0000000..18a37d9
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_030
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_030:
+                               push.l  er0
+                               mov.b   #30, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_031.src b/kernel/source/arch/proc/h8/h8300ha/vect_031.src
new file mode 100755 (executable)
index 0000000..7a9c4d8
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_031
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_031:
+                               push.l  er0
+                               mov.b   #31, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_032.src b/kernel/source/arch/proc/h8/h8300ha/vect_032.src
new file mode 100755 (executable)
index 0000000..fa4090d
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_032
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_032:
+                               push.l  er0
+                               mov.b   #32, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_033.src b/kernel/source/arch/proc/h8/h8300ha/vect_033.src
new file mode 100755 (executable)
index 0000000..f1149b1
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_033
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_033:
+                               push.l  er0
+                               mov.b   #33, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_034.src b/kernel/source/arch/proc/h8/h8300ha/vect_034.src
new file mode 100755 (executable)
index 0000000..723b9b9
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_034
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_034:
+                               push.l  er0
+                               mov.b   #34, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_035.src b/kernel/source/arch/proc/h8/h8300ha/vect_035.src
new file mode 100755 (executable)
index 0000000..813536d
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_035
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_035:
+                               push.l  er0
+                               mov.b   #35, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_036.src b/kernel/source/arch/proc/h8/h8300ha/vect_036.src
new file mode 100755 (executable)
index 0000000..4beaaf7
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_036
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_036:
+                               push.l  er0
+                               mov.b   #36, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_037.src b/kernel/source/arch/proc/h8/h8300ha/vect_037.src
new file mode 100755 (executable)
index 0000000..d69a970
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_037
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_037:
+                               push.l  er0
+                               mov.b   #37, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_038.src b/kernel/source/arch/proc/h8/h8300ha/vect_038.src
new file mode 100755 (executable)
index 0000000..1ffb615
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_038
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_038:
+                               push.l  er0
+                               mov.b   #38, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_039.src b/kernel/source/arch/proc/h8/h8300ha/vect_039.src
new file mode 100755 (executable)
index 0000000..eb73016
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_039
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_039:
+                               push.l  er0
+                               mov.b   #39, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_040.src b/kernel/source/arch/proc/h8/h8300ha/vect_040.src
new file mode 100755 (executable)
index 0000000..7618be1
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_040
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_040:
+                               push.l  er0
+                               mov.b   #40, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_041.src b/kernel/source/arch/proc/h8/h8300ha/vect_041.src
new file mode 100755 (executable)
index 0000000..2695e9e
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_041
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_041:
+                               push.l  er0
+                               mov.b   #41, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_042.src b/kernel/source/arch/proc/h8/h8300ha/vect_042.src
new file mode 100755 (executable)
index 0000000..b82efdf
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_042
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_042:
+                               push.l  er0
+                               mov.b   #42, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_043.src b/kernel/source/arch/proc/h8/h8300ha/vect_043.src
new file mode 100755 (executable)
index 0000000..285e87d
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_043
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_043:
+                               push.l  er0
+                               mov.b   #43, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_044.src b/kernel/source/arch/proc/h8/h8300ha/vect_044.src
new file mode 100755 (executable)
index 0000000..bf73fd5
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_044
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_044:
+                               push.l  er0
+                               mov.b   #44, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_045.src b/kernel/source/arch/proc/h8/h8300ha/vect_045.src
new file mode 100755 (executable)
index 0000000..70dd35e
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_045
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_045:
+                               push.l  er0
+                               mov.b   #45, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_046.src b/kernel/source/arch/proc/h8/h8300ha/vect_046.src
new file mode 100755 (executable)
index 0000000..8fe452e
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_046
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_046:
+                               push.l  er0
+                               mov.b   #46, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_047.src b/kernel/source/arch/proc/h8/h8300ha/vect_047.src
new file mode 100755 (executable)
index 0000000..9a94dbd
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_047
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_047:
+                               push.l  er0
+                               mov.b   #47, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_048.src b/kernel/source/arch/proc/h8/h8300ha/vect_048.src
new file mode 100755 (executable)
index 0000000..baecd3b
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_048
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_048:
+                               push.l  er0
+                               mov.b   #48, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_049.src b/kernel/source/arch/proc/h8/h8300ha/vect_049.src
new file mode 100755 (executable)
index 0000000..44d0613
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_049
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_049:
+                               push.l  er0
+                               mov.b   #49, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_050.src b/kernel/source/arch/proc/h8/h8300ha/vect_050.src
new file mode 100755 (executable)
index 0000000..31d55ee
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_050
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_050:
+                               push.l  er0
+                               mov.b   #50, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_051.src b/kernel/source/arch/proc/h8/h8300ha/vect_051.src
new file mode 100755 (executable)
index 0000000..5fdd7e7
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_051
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_051:
+                               push.l  er0
+                               mov.b   #51, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_052.src b/kernel/source/arch/proc/h8/h8300ha/vect_052.src
new file mode 100755 (executable)
index 0000000..edace57
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_052
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_052:
+                               push.l  er0
+                               mov.b   #52, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_053.src b/kernel/source/arch/proc/h8/h8300ha/vect_053.src
new file mode 100755 (executable)
index 0000000..493a12d
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_053
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_053:
+                               push.l  er0
+                               mov.b   #53, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_054.src b/kernel/source/arch/proc/h8/h8300ha/vect_054.src
new file mode 100755 (executable)
index 0000000..d2b5d0a
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_054
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_054:
+                               push.l  er0
+                               mov.b   #54, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_055.src b/kernel/source/arch/proc/h8/h8300ha/vect_055.src
new file mode 100755 (executable)
index 0000000..87d196c
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_055
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_055:
+                               push.l  er0
+                               mov.b   #55, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_056.src b/kernel/source/arch/proc/h8/h8300ha/vect_056.src
new file mode 100755 (executable)
index 0000000..44540b9
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_056
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_056:
+                               push.l  er0
+                               mov.b   #56, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_057.src b/kernel/source/arch/proc/h8/h8300ha/vect_057.src
new file mode 100755 (executable)
index 0000000..1c03cbd
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_057
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_057:
+                               push.l  er0
+                               mov.b   #57, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_058.src b/kernel/source/arch/proc/h8/h8300ha/vect_058.src
new file mode 100755 (executable)
index 0000000..ad1038f
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_058
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_058:
+                               push.l  er0
+                               mov.b   #58, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_059.src b/kernel/source/arch/proc/h8/h8300ha/vect_059.src
new file mode 100755 (executable)
index 0000000..792702c
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_059
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_059:
+                               push.l  er0
+                               mov.b   #59, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_060.src b/kernel/source/arch/proc/h8/h8300ha/vect_060.src
new file mode 100755 (executable)
index 0000000..994d7c8
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_060
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_060:
+                               push.l  er0
+                               mov.b   #60, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_061.src b/kernel/source/arch/proc/h8/h8300ha/vect_061.src
new file mode 100755 (executable)
index 0000000..7341e91
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_061
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_061:
+                               push.l  er0
+                               mov.b   #61, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_062.src b/kernel/source/arch/proc/h8/h8300ha/vect_062.src
new file mode 100755 (executable)
index 0000000..6029571
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_062
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_062:
+                               push.l  er0
+                               mov.b   #62, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_063.src b/kernel/source/arch/proc/h8/h8300ha/vect_063.src
new file mode 100755 (executable)
index 0000000..c920bfc
--- /dev/null
@@ -0,0 +1,24 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_063
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_063:
+                               push.l  er0
+                               mov.b   #63, r0l
+                               bra             __kernel_int_hdr
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8300ha/vect_dmy.src b/kernel/source/arch/proc/h8/h8300ha/vect_dmy.src
new file mode 100755 (executable)
index 0000000..0666ce6
--- /dev/null
@@ -0,0 +1,22 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_dmy
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+__kernel_vector_dmy:
+                               rte
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/h8/h8s2600a/ctxctl.src b/kernel/source/arch/proc/h8/h8s2600a/ctxctl.src
new file mode 100755 (executable)
index 0000000..df6f667
--- /dev/null
@@ -0,0 +1,138 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance μITRON4.0仕様 Real-Time OS              
+;    コンテキスト制御                                                         
+;                                                                             
+;                                     Copyright (C) 1998-2006 by Project HOS  
+;                                     http://sourceforge.jp/projects/hos/     
+; --------------------------------------------------------------------------- 
+
+
+
+                               .EXPORT __kernel_dis_int                ; 割り込み禁止
+                               .EXPORT __kernel_ena_int                ; 割り込み許可
+                               .EXPORT __kernel_wai_int                ; 割り込み待ち
+                               .EXPORT __kernel_cre_ctx                ; 実行コンテキストの作成
+                               .EXPORT __kernel_swi_ctx                ; 実行コンテキストの切替
+                               .EXPORT __kernel_sta_ctx                ; 実行コンテキストの開始
+                               .EXPORT __kernel_rst_ctx                ; 実行コンテキストのリスタート
+                               .EXPORT __kernel_h83_imsk               ; 割り込みマスク
+
+
+                               .SECTION  P, CODE, ALIGN=2
+
+
+; -----------------------------------------------
+;  割り込み禁止
+;  void _kernel_dis_int(void)
+; -----------------------------------------------
+                               .STACK  __kernel_dis_int=4
+__kernel_dis_int:
+                               orc             #h'c0, ccr                              ; 割り込みの禁止
+                               rts
+
+
+; -----------------------------------------------
+;  割り込み許可
+;  void _kernel_ena_int(void)
+; -----------------------------------------------
+                               .STACK  __kernel_ena_int=4
+__kernel_ena_int:
+                               mov.b   @__kernel_h83_imsk, r0l
+                               ldc.b   r0l, ccr                                ; 割り込みの許可
+                               rts
+
+;------------------------------------------------
+; 割り込み待ち
+; void _kernel_wai_int(void)
+;------------------------------------------------
+                               .STACK  __kernel_wai_int=4
+__kernel_wai_int:
+       ;                       sleep
+                               jmp             @__kernel_wai_int
+
+
+
+; -----------------------------------------------
+;  実行コンテキストエントリーアドレス
+; -----------------------------------------------
+ctx_entry:     
+                               mov.l   er3, er0                                ; 実行時パラメータを第一引数に設定
+                               mov.l   er4, er1                                ; 実行時パラメータを第一引数に設定
+                               jmp             @er2                                    ; 実行アドレスにジャンプ
+
+
+; -----------------------------------------------
+;  実行コンテキストの作成
+;  _kernel_cre_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb,                              作成するコンテキスト [er0]
+;              VP              isp,                                    初期スタックポインタ [er1]
+;              FP              entry,                                  実行アドレス         [@(4, er7)]
+;              VP_INT          par1,                                   実行時パラメータ1    [@(8, er7)]
+;              VP_INT          par2)                                   実行時パラメータ2    [@(12, er7)]
+; -----------------------------------------------
+                               .STACK  __kernel_cre_ctx=12
+__kernel_cre_ctx:
+                               sub.l   #24, er1                                ; エントリーポイント+er2〜er6 までの退避分
+                               mov.l   er1, @(0, er0)                  ; スタックポインタの格納
+                               mov.l   #ctx_entry, er0
+                               mov.l   er0, @(20, er1)                 ; 実行エントリーポイントの設定
+                               mov.l   @(4, er7), er0
+                               mov.l   er0, @(16, er1)                 ; 実行アドレスの格納(er2部分)
+                               mov.l   @(8, er7), er0
+                               mov.l   er0, @(12, er1)                 ; 実行時パラメータ1の格納(er3部分)
+                               mov.l   @(12, er7), er0
+                               mov.l   er0, @(8, er1)                  ; 実行時パラメータ1の格納(er4部分)
+                               rts
+
+
+; -----------------------------------------------
+;  実行コンテキストの切替
+;  void _kernel_swi_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb_nxt,                  切り替え先のコンテキスト [er0]
+;              _KERNEL_T_CTXCB *pk_ctxcb_now)                  現在のコンテキスト       [er1]
+; -----------------------------------------------
+                               .STACK  __kernel_swi_ctx=24
+__kernel_swi_ctx:
+                               stm.l   (er2-er3), @-er7
+                               stm.l   (er4-er6), @-er7
+                               mov.l   er7,@(0, er1)                   ; スタックポインタ保存
+               ; ---- このまま _kernel_sta_ctx に続ける
+
+; -----------------------------------------------
+;  実行コンテキストの開始
+;  void _kernel_sta_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb)                              開始するコンテキスト [er0]
+; -----------------------------------------------
+                               .STACK  __kernel_sta_ctx=4
+__kernel_sta_ctx:
+                               mov.l   @(0, er0), er7                  ; スタックポインタ復帰
+                               ldm.l   @er7+, (er4-er6)
+                               ldm.l   @er7+, (er2-er3)
+                               rts
+
+
+;------------------------------------------------
+; 実行コンテキストのリスタート
+; void _kernel_rst_ctx(
+;              VP_INT par1,                                                    実行時パラメータ1    [er0]
+;              VP_INT par2,                                                    実行時パラメータ2    [er1]
+;              VP     isp,                                                             初期スタックポインタ [@(4, er7)]
+;              FP     entry)                                                   実行アドレス         [@(8, er7)]
+;------------------------------------------------
+                               .STACK  __kernel_rst_ctx=8
+__kernel_rst_ctx:
+                               mov.l   @(4, er7), er3                  ; 初期スタックポインタ
+                               mov.l   @(8, er7), er4                  ; 実行アドレス取り出し
+                               mov.l   er3, er7                                ; スタックポインタリセット
+                               jmp             @r4                                             ; 実行アドレスに分岐
+
+
+
+
+                               .SECTION        B, DATA, ALIGN=2
+
+__kernel_h83_imsk:
+                               .RES.B  1
+
+
+                               .END
diff --git a/kernel/source/arch/proc/h8/h8s2600a/intctl.src b/kernel/source/arch/proc/h8/h8s2600a/intctl.src
new file mode 100755 (executable)
index 0000000..9fd649f
--- /dev/null
@@ -0,0 +1,133 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                     
+;    プロセッサ抽象化コンポーネント (日立 H8/300H 用)                         
+;    割り込みハンドラ                                                         
+;                                                                             
+;                                   Copyright (C) 1998-2006 by Project HOS    
+;                                   http://sourceforge.jp/projects/hos/       
+; --------------------------------------------------------------------------- 
+
+
+
+                               .EXPORT __kernel_int_hdr
+                               .IMPORT __kernel_sta_inh                        ; 割り込み処理開始
+                               .IMPORT __kernel_end_inh                        ; 割り込み処理終了
+                               .IMPORT __kernel_exe_inh                        ; 割り込み処理実行
+                               .IMPORT __kernel_int_isp                        ; 割り込み用スタックアドレス
+                               .IMPORT __kernel_h83_imsk                       ; 現在の割り込みマスク値
+
+
+
+                               .SECTION P, CODE, ALIGN=2
+
+
+; -----------------------------------------------
+;  割り込み処理
+;
+;  割り込み発生時は er0 を push した後、er0 に
+;  割り込み番号をセットして、ここにジャンプする
+; -----------------------------------------------
+
+__kernel_int_hdr:
+               ; ---- レジスタ保存
+                               push.l  er1
+                               
+               ; ---- 割り込みをマスク
+                               stc.b   ccr, r1l                                        ; ccr保存
+                               orc             #h'c0, ccr                                      ; 割込み全マスク
+                               and.b   #h'c0, r1l
+                               
+               ; -------- 多重割り込みの判別
+                               mov.b   @__kernel_int_cnt, r1h
+                               bne             multiple_int
+                               
+               ; ======== 最初の割り込み ========
+               ; ---- 割込みマスク値(_kernel_h83_imsk)を設定
+                               mov.b   @__kernel_h83_imsk, r0h         ; 古い割込みマスク値を保存
+                               mov.b   r1l, @__kernel_h83_imsk         ; 新しいマスク値を設定
+                               
+               ; ---- 割り込みネストカウンタ設定
+                               mov.b   #1, r1h
+                               mov.b   r1h, @__kernel_int_cnt
+                               
+               ; ---- スタックポインタの入れ替え
+                               mov.l   er7, er1
+                               mov.l   @__kernel_int_isp, er7
+                               push.l  er1                                                     ; 直前のスタックポインタを保存
+               
+               ; ---- 古い割込みマスク値(r0h)と割込み番号(r0l)の保存
+                               push.w  r0
+
+               ; ---- 割り込み処理の開始
+                               jsr             @__kernel_sta_inh
+                               
+               ; -------- 割り込みハンドラの処理
+                               mov.b   @(1, er7), r0l                          ; スタックから割込み番号を取り出す
+                               extu.w  r0
+                               extu.l  er0
+                               jsr             @__kernel_exe_inh
+
+               ; ---- 古い割込みマスク値(r0h)と割込み番号(r0l)の復帰
+                               pop.w   r0
+                               
+               ; -------- スタックポインタ復帰
+                               mov.l   @er7, er7
+                               
+               ; -------- 割り込みネストカウンタクリア
+                               xor.b   r1l, r1l
+                               mov.b   r1l, @__kernel_int_cnt
+                               
+               ; -------- 割り込みマスク値の復帰
+                               mov.b   @(10, er7), r1l
+                               and.b   #h'c0, r1l
+                               mov.b   r1l, @__kernel_h83_imsk         ; 割込み前の値に戻す
+                               cmp.b   r1l, r0h
+                               bne             return_int                                      ; 割込み前処理中の多重割り込みなら後処理をカット
+                               
+               ; -------- コンテキストスイッチ実施
+                               jsr             @__kernel_end_inh
+               
+               ; -------- コンテキストスイッチの後処理
+                               mov.b   @__kernel_h83_imsk, r0l         ; マスク値取り出し
+                               mov.b   @(10, er7), r1l
+                               and.b   #h'3f, r1l                                      
+                               or.b    r0l, r1l
+                               mov.b   r1l, @(10, er7)                         ; スタック上のCCRを更新
+
+return_int:
+               ; -------- 復帰
+                               pop.l   er1
+                               pop.l   er0
+                               rte
+
+
+               ; ======== 多重割り込み ========
+multiple_int:
+               ; -------- 割り込みネストカウンタ加算
+                               add.b   #1, r1h
+                               mov.b   r1h, @__kernel_int_cnt
+
+               ; ---- 割込みマスク値(_kernel_h83_imsk)を設定
+                               mov.b   r1l, @__kernel_h83_imsk         ; 新しいマスク値を設定
+                               
+               ; -------- 割り込みハンドラ呼び出し
+                               jsr             @__kernel_exe_inh
+                               
+               ; -------- 割り込みネストカウンタ減算
+                               mov.b   @__kernel_int_cnt, r1h
+                               dec.b   r1h
+                               mov.b   r1h, @__kernel_int_cnt
+                               
+               ; -------- 復帰
+                               bra             return_int
+
+
+                               .SECTION        B, DATA, ALIGN=2
+
+__kernel_int_cnt:
+                               .RES.B  1
+
+
+                               .END
+
+; end of file
diff --git a/kernel/source/arch/proc/mn103/mn1030/gcc/ctxctl.S b/kernel/source/arch/proc/mn103/mn1030/gcc/ctxctl.S
new file mode 100755 (executable)
index 0000000..f3c4896
--- /dev/null
@@ -0,0 +1,151 @@
+/****************************************************************************
+  Hyper Operating System V4 Advance
+
+  @file  armctx.s
+  @brief %en{コンテキスト制御}%jp{}
+  @version $Id: ctxctl.S,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+
+  Copyright (C) 1998-2006 by Project HOS
+  http://sourceforge.jp/projects/hos/
+****************************************************************************/
+
+
+
+                               .global __kernel_ena_int                        /* 割り込み許可 */
+                               .global __kernel_dis_int                        /* 割り込み禁止 */
+                               .global __kernel_wai_int                        /* CPUのアイドル処理 */
+                               .global __kernel_cre_ctx                        /* 実行コンテキストの作成 */
+                               .global __kernel_sta_ctx                        /* 実行コンテキストの開始 */
+                               .global __kernel_rst_ctx                        /* 実行コンテキストのリスタート */
+                               .global __kernel_swi_ctx                        /* 実行コンテキストの切替 */
+
+
+                               .text
+                               .align  2
+
+/************************************************
+  割り込み許可
+   void _kernel_ena_int(void)
+ ************************************************/
+                               .type   __kernel_ena_int, %function
+__kernel_ena_int:
+                               or              0x0800, psw                                     /* IEビットセット */
+                               rets                                                            /* リターン */
+                               .size   __kernel_ena_int, .-__kernel_ena_int
+
+
+/************************************************
+  割り込み禁止
+   void _kernel_dis_int(void)
+ ************************************************/
+                               .type   __kernel_dis_int, %function
+__kernel_dis_int:
+                               and             0xf7ff, psw                                     /* IEビットクリア */
+                               rets                                                            /* リターン */
+                               .size   __kernel_dis_int, .-__kernel_dis_int
+
+
+/************************************************
+ 割り込み待ち(CPUのアイドル処理)
+   void __kernel_wai_int(void);
+*************************************************/
+                               .type   _kernel_wai_int, %function
+__kernel_wai_int:
+                               jmp             __kernel_wai_int
+                               .size   _kernel_wai_int, .-_kernel_wai_int
+
+
+
+/************************************************
+  実行コンテキストの作成
+  void __kernel_cre_ctx(
+                       VP_INT          par1,           実行時パラメータ1    [d0]
+                       VP_INT          par2,           実行時パラメータ2    [d1]
+                       _KERNEL_T_CTXCB *pk_ctxcb,      作成するコンテキスト [(12, sp)]
+                       VP              isp,            スタックポインタ     [(16, sp)]
+                       FP              entry)          実行アドレス         [(20, sp)]
+*************************************************/
+                               .type   __kernel_cre_ctx, %function
+__kernel_cre_ctx:
+                               mov             (12, sp), a0    /* コンテキストアドレス取り出し */
+                               mov             (16, sp), a1    /* 初期スタックポインタ取り出し */
+                               add             -20, a1                 /* スタック領域を確保 */
+                               mov             a1, (a0)                /* スタックポインタ保存 */
+                               mov             d0, (12, a1)    /* 実行時パラメータ1設定 */
+                               mov             d1, (8, a1)             /* 実行時パラメータ2設定 */
+                               mov             (20, sp), a0    /* 実行アドレス取り出し */
+                               mov             a0, (0, a1)             /* 実行アドレス設定 */
+                               mov             ctx_entry, a0   
+                               mov             a0, (16, a1)    /* エントリーアドレス設定 */
+                               rets
+                               .size   __kernel_cre_ctx, .-__kernel_cre_ctx
+
+
+/************************************************
+  実行コンテキストエントリーアドレス
+*************************************************/
+                               .type   ctx_entry, %function
+ctx_entry:
+                               mov             d2, d0                  /* par1を設定 */
+                               mov             d3, d1                  /* par2を設定 */
+                               jmp             (a2)                    /* entry を実行 */
+                               .size   ctx_entry, .-ctx_entry
+
+
+
+/************************************************
+  実行コンテキストのリスタート
+  void _kernel_rst_ctx(
+                       VP_INT         par1,            実行時パラメータ     [r0]
+                       VP_INT         par2,            実行時パラメータ     [r1]
+                       FP             entry,           実行アドレス         [(12, sp)]
+                       VP             isp)                     初期スタックポインタ [(16, sp)]
+*************************************************/
+                               .type   __kernel_rst_ctx, %function
+__kernel_rst_ctx:
+                               mov             (12, sp), a0            /* 初期スタックポインタ取り出し */
+                               mov             (16, sp), a1            /* 実行アドレス取り出し */
+                               mov             a1, sp                          /* スタックを初期値にリセット */
+                               jmp             (a0)                            /* 実行アドレスから再開始 */
+                               .size   __kernel_rst_ctx, .-_kernel_rst_ctx
+
+
+
+
+
+/************************************************
+  実行コンテキストの切替
+  void _kernel_swi_ctx(
+                       _KERNEL_T_CTXCB *pk_ctxinf_nxt,         実行を開始するコンテキスト [d0]
+                       _KERNEL_T_CTXCB *pk_ctxinf_now)         現在のコンテキストの保存先 [d1]
+*************************************************/
+                               .type   __kernel_swi_ctx, %function
+__kernel_swi_ctx:
+                               movm    [d2,d3,a2,a3], (sp)
+                               mov             d1, a0
+                               mov             sp, a1
+                               mov             d1, (a0)                                        /* スタックポインタ保存 */
+               /* ---- そのまま _kernel_sta_ctx に続ける ---- */
+
+
+/************************************************
+  実行コンテキストの開始
+  void _kernel_sta_ctx(
+                       _KERNEL_T_CTXCB *pk_ctxcb)                      実行を開始するコンテキスト [d0]
+*************************************************/
+                               .type   __kernel_sta_ctx, %function
+__kernel_sta_ctx:
+                               mov             d0, a0
+                               mov             (a0), a0
+                               mov             a0, sp
+                               ret             [d2,d3,a2,a3], 16
+
+                               .size   __kernel_swi_ctx, .-__kernel_swi_ctx
+                               .size   __kernel_sta_ctx, .-__kernel_sta_ctx
+
+
+                               .END
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/mn103/mn1030/gcc/intctl.S b/kernel/source/arch/proc/mn103/mn1030/gcc/intctl.S
new file mode 100755 (executable)
index 0000000..dd49b35
--- /dev/null
@@ -0,0 +1,82 @@
+
+
+
+                               .global _kernel_int_isp
+                               .global _kernel_sta_inh
+                               .global _kernel_end_inh
+                               .global _kernel_exe_inh
+                               .global _kernel_int
+                               
+
+                               .text
+                               .align  2
+
+
+/************************************************
+  IRQ ハンドラ
+ ************************************************/
+_kernel_int_irq:
+                       /* ---- レジスタ退避 ---- */
+                               movm    [other], (sp)                                                   /* レジスタ退避 */
+                               
+                       /* ---- 多重割込み判定 ---- */
+                               mov             __kernel_int_cnt, a0
+                               movbu   (a0), d0
+                               extb    d0
+                               add             -1, d0
+                               movbu   d0, (a0)
+                               bcs             multiple_int
+                               
+                       /* ---- 割り込み用スタックに入れ替え ---- */
+                               mov             sp, a0                                                                  /* タスクのSPを保存 */
+                               mov             (_kernel_int_isp), a1
+                               mov             a1, sp
+                               add             -8, sp
+                               mov             a0, (4, sp)
+                               
+                       /* ---- 割り込み処理 ---- */
+                               call    __kernel_sta_inh,[],0                                   /* 割り込み開始 */
+                               
+                       /* ---- 割り込みハンドラ実行 ---- */
+                               clr             d0
+                               call    __kernel_exe_inh,[],0
+                               
+                       /* ---- 割り込み処理の終了設定 ---- */
+                               mov             (4, sp), a0
+                               mov             a0, sp
+                               
+                               clr             d0
+                               mov             d0, (__kernel_int_cnt)
+               
+                       /* ---- 遅延ディスパッチ処理 ---- */
+                               call    _kernel_end_inh,[],0                                    /* 割り込み終了処理 */
+                               
+return_int:
+                       /* ---- 復帰処理 ---- */
+                               movm    (sp), [other]                                                   /* レジスタ退避 */
+                               rti
+
+                       /* ---- 多重割り込み処理 ---- */
+multiple_int:
+                       /* ---- 割り込みハンドラ実行 ---- */
+                               add             -4, sp
+                               clr             d0
+                               call    _kernel_exe_inh,[],0
+                               
+                       /* ---- 割り込みカウンタ復帰 ---- */
+                               mov             __kernel_int_cnt, a0
+                               movbu   (a0), d0
+                               add             1, d0
+                               movbu   d0, (a0)
+
+                               jmp             return_int                                                              /* 復帰処理 */
+
+
+
+                               .comm   __kernel_int_cnt,1,1
+
+
+                               .END
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S b/kernel/source/arch/proc/sh/sh2/gcc/ctxctl.S
new file mode 100755 (executable)
index 0000000..f2d6801
--- /dev/null
@@ -0,0 +1,130 @@
+/* ------------------------------------------------------------------------ */
+/*  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                  */
+/*    プロセッサ抽象化コンポーネント (日立 SH2用)                           */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2002 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+
+                               .global __kernel_dis_int                /* 割り込み禁止 */
+                               .global __kernel_ena_int                /* 割り込み許可 */
+                               .global __hospac_cre_ctx                /* 実行コンテキストの作成 */
+                               .global __hospac_swi_ctx                /* 実行コンテキストの切替 */
+                               .global __kernel_sta_ctx                /* 実行コンテキストの開始 */
+                               .global __kernel_sh_imsk                /* 割り込みマスクの値 */
+
+
+                               .text
+
+
+/************************************************
+  割り込み禁止
+  void _kernel_dis_int(void)
+************************************************/
+                               .align  2
+__kernel_dis_int:
+                               stc             sr, r0
+                               or              #0xf0, r0                       /* 全割り込みマスク */
+                               rts
+                               ldc             r0, sr
+
+
+
+/************************************************
+  割り込み許可
+  void _kernel_ena_int(void)
+************************************************/
+                               .text
+                               .align  2
+_kernel_ena_int:
+                               mov             #0xf0, r1                       /* 0x00f0 を反転させて 0xff0f を作成 */
+                               not             r1, r1
+                               stc             sr, r0
+                               and             r1, r0                          /* 割り込みマスク値以外を取得 */
+                               mov.l   imsk_addr, r1
+                               mov.l   @r1, r1
+                               or              r1, r0                          /* 割り込みマスクの値を設定 */
+                               rts
+                               ldc             r0, sr
+
+                               .align  2
+imsk_addr:
+                               .long   __kernel_sh_imsk        /* 割り込みマスク */
+
+
+
+/************************************************
+  実行コンテキストの作成
+  _kernel_cre_ctx(
+               _KERNEL_T_CTXCB *pk_ctxcb,              作成するコンテキスト [r4]
+               VP              isp,                    初期スタックポインタ [r5]
+               FP              entry,                  実行アドレス         [r6]
+               VP_INT          par1,                   実行時パラメータ1    [r7]
+               VP_INT          par2)                   実行時パラメータ2    [@(4, r15)]
+************************************************/
+                               .align 2
+__kernel_cre_ctx:
+                               mov.l   @(4, r15), r0           /* 実行時パラメータ2を取り出し */
+                               add     #-16, r5                        /* r8-r11用領域分空ける */
+                               mov.l   r6, @-r5                        /* 実行アドレスを      r12 の領域に設定 */
+                               mov.l   r7, @-r5                        /* 実行時パラメータ1を r13 の領域に設定 */
+                               mov.l   r0, @-r5                        /* 実行時パラメータ2を r14 の領域に設定 */
+                               mov.l   ctx_entry, r0
+                               mov.l   r0, @-r5                        /* 実行エントリポイントをリターンアドレスに設定 */
+                               rts
+                               mov.l   r5, @(0, r4)            /* スタックポインタを保存(遅延スロット) */
+
+
+/************************************************
+  実行コンテキストエントリーアドレス
+************************************************/
+ctx_entry:             
+                               mov             r13, r4                         /* 実行時パラメータ1を設定 */
+                               jmp             @r12                            /* 実行開始アドレスに分岐 */
+                               mov             r14, r5                         /* 実行時パラメータ2を設定(遅延スロット) */
+
+
+
+/************************************************
+ 実行コンテキストの切替
+ void _kernel_swi_ctx(
+               _KERNEL_T_CTXCB *pk_ctxcb_nxt,  切り替え先のコンテキスト [r4]
+               _KERNEL_T_CTXCB *pk_ctxcb_now)  現在のコンテキスト       [r5]
+************************************************/
+                               .align 2
+__kernel_swi_ctx:
+                               mov.l    r8, @-r15              /* 8-r14,prを退避 */
+                               mov.l    r9, @-r15
+                               mov.l    r10, @-r15
+                               mov.l    r11, @-r15
+                               mov.l    r12, @-r15
+                               mov.l    r13, @-r15
+                               mov.l    r14, @-r15
+                               sts.l    pr, @-r15
+                               mov.l    r15, @(0, r5)  /* スタックポインタ保存 */
+               /* ---- このまま _kernel_sta_ctx に続ける ---- */
+
+/************************************************
+ 実行コンテキストの開始
+ void _kernel_sta_ctx(
+               _KERNEL_T_CTXCB *pk_ctxcb)              開始するコンテキスト [r4]
+************************************************/
+__kernel_sta_ctx:
+                               mov.l    @(0, r4), r15  /* スタックポインタ復帰 */
+                               lds.l    @r15+, pr              /* r8-r14,prを復帰 */
+                               mov.l    @r15+, r14
+                               mov.l    @r15+, r13
+                               mov.l    @r15+, r12
+                               mov.l    @r15+, r11
+                               mov.l    @r15+, r10
+                               mov.l    @r15+, r9
+                               rts
+                               mov.l    @r15+, r8
+
+
+                               .end
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/sh/sh2/gcc/intctl.S b/kernel/source/arch/proc/sh/sh2/gcc/intctl.S
new file mode 100755 (executable)
index 0000000..1b7670f
--- /dev/null
@@ -0,0 +1,1123 @@
+/* ------------------------------------------------------------------------ */
+/*  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                  */
+/*    プロセッサ抽象化コンポーネント (日立 SH2用)                           */
+/*    割り込みハンドラ                                                      */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2006 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+
+                               .global _kernel_vecter004
+                               .global _kernel_vecter005
+                               .global _kernel_vecter006
+                               .global _kernel_vecter007
+                               .global _kernel_vecter008
+                               .global _kernel_vecter009
+                               .global _kernel_vecter010
+                               .global _kernel_vecter011
+                               .global _kernel_vecter012
+                               .global _kernel_vecter013
+                               .global _kernel_vecter014
+                               .global _kernel_vecter015
+                               .global _kernel_vecter016
+                               .global _kernel_vecter017
+                               .global _kernel_vecter018
+                               .global _kernel_vecter019
+                               .global _kernel_vecter020
+                               .global _kernel_vecter021
+                               .global _kernel_vecter022
+                               .global _kernel_vecter023
+                               .global _kernel_vecter024
+                               .global _kernel_vecter025
+                               .global _kernel_vecter026
+                               .global _kernel_vecter027
+                               .global _kernel_vecter028
+                               .global _kernel_vecter029
+                               .global _kernel_vecter030
+                               .global _kernel_vecter031
+                               .global _kernel_vecter032
+                               .global _kernel_vecter033
+                               .global _kernel_vecter034
+                               .global _kernel_vecter035
+                               .global _kernel_vecter036
+                               .global _kernel_vecter037
+                               .global _kernel_vecter038
+                               .global _kernel_vecter039
+                               .global _kernel_vecter040
+                               .global _kernel_vecter041
+                               .global _kernel_vecter042
+                               .global _kernel_vecter043
+                               .global _kernel_vecter044
+                               .global _kernel_vecter045
+                               .global _kernel_vecter046
+                               .global _kernel_vecter047
+                               .global _kernel_vecter048
+                               .global _kernel_vecter049
+                               .global _kernel_vecter050
+                               .global _kernel_vecter051
+                               .global _kernel_vecter052
+                               .global _kernel_vecter053
+                               .global _kernel_vecter054
+                               .global _kernel_vecter055
+                               .global _kernel_vecter056
+                               .global _kernel_vecter057
+                               .global _kernel_vecter058
+                               .global _kernel_vecter059
+                               .global _kernel_vecter060
+                               .global _kernel_vecter061
+                               .global _kernel_vecter062
+                               .global _kernel_vecter063
+                               .global _kernel_vecter064
+                               .global _kernel_vecter065
+                               .global _kernel_vecter066
+                               .global _kernel_vecter067
+                               .global _kernel_vecter068
+                               .global _kernel_vecter069
+                               .global _kernel_vecter070
+                               .global _kernel_vecter071
+                               .global _kernel_vecter072
+                               .global _kernel_vecter073
+                               .global _kernel_vecter074
+                               .global _kernel_vecter075
+                               .global _kernel_vecter076
+                               .global _kernel_vecter077
+                               .global _kernel_vecter078
+                               .global _kernel_vecter079
+                               .global _kernel_vecter080
+                               .global _kernel_vecter081
+                               .global _kernel_vecter082
+                               .global _kernel_vecter083
+                               .global _kernel_vecter084
+                               .global _kernel_vecter085
+                               .global _kernel_vecter086
+                               .global _kernel_vecter087
+                               .global _kernel_vecter088
+                               .global _kernel_vecter089
+                               .global _kernel_vecter090
+                               .global _kernel_vecter091
+                               .global _kernel_vecter092
+                               .global _kernel_vecter093
+                               .global _kernel_vecter094
+                               .global _kernel_vecter095
+                               .global _kernel_vecter096
+                               .global _kernel_vecter097
+                               .global _kernel_vecter098
+                               .global _kernel_vecter099
+                               .global _kernel_vecter100
+                               .global _kernel_vecter101
+                               .global _kernel_vecter102
+                               .global _kernel_vecter103
+                               .global _kernel_vecter104
+                               .global _kernel_vecter105
+                               .global _kernel_vecter106
+                               .global _kernel_vecter107
+                               .global _kernel_vecter108
+                               .global _kernel_vecter109
+                               .global _kernel_vecter110
+                               .global _kernel_vecter111
+                               .global _kernel_vecter112
+                               .global _kernel_vecter113
+                               .global _kernel_vecter114
+                               .global _kernel_vecter115
+                               .global _kernel_vecter116
+                               .global _kernel_vecter117
+                               .global _kernel_vecter118
+                               .global _kernel_vecter119
+                               .global _kernel_vecter120
+                               .global _kernel_vecter121
+                               .global _kernel_vecter122
+                               .global _kernel_vecter123
+                               .global _kernel_vecter124
+                               .global _kernel_vecter125
+                               .global _kernel_vecter126
+                               .global _kernel_vecter127
+                               .global _kernel_vecter128
+                               .global _kernel_vecter129
+                               .global _kernel_vecter130
+                               .global _kernel_vecter131
+                               .global _kernel_vecter132
+                               .global _kernel_vecter133
+                               .global _kernel_vecter134
+                               .global _kernel_vecter135
+                               .global _kernel_vecter136
+                               .global _kernel_vecter137
+                               .global _kernel_vecter138
+                               .global _kernel_vecter139
+                               .global _kernel_vecter140
+                               .global _kernel_vecter141
+                               .global _kernel_vecter142
+                               .global _kernel_vecter143
+                               .global _kernel_vecter144
+                               .global _kernel_vecter145
+                               .global _kernel_vecter146
+                               .global _kernel_vecter147
+                               .global _kernel_vecter148
+                               .global _kernel_vecter149
+                               .global _kernel_vecter150
+                               .global _kernel_vecter151
+                               .global _kernel_vecter152
+                               .global _kernel_vecter153
+                               .global _kernel_vecter154
+                               .global _kernel_vecter155
+                               .global _kernel_vecter156
+
+
+                               .text
+
+
+/************************************************
+  割り込みハンドラ
+************************************************/
+_kernel_vecter004:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #4, r4
+
+_kernel_vecter005:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #5, r4
+
+_kernel_vecter006:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #6, r4
+
+_kernel_vecter007:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #7, r4
+
+_kernel_vecter008:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #8, r4
+
+_kernel_vecter009:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #9, r4
+
+_kernel_vecter010:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #10, r4
+
+_kernel_vecter011:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #11, r4
+
+_kernel_vecter012:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #12, r4
+
+_kernel_vecter013:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #13, r4
+
+_kernel_vecter014:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #14, r4
+
+_kernel_vecter015:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #15, r4
+
+_kernel_vecter016:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #16, r4
+
+_kernel_vecter017:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #17, r4
+
+_kernel_vecter018:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #18, r4
+
+_kernel_vecter019:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #19, r4
+
+_kernel_vecter020:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #20, r4
+
+_kernel_vecter021:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #21, r4
+
+_kernel_vecter022:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #22, r4
+
+_kernel_vecter023:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #23, r4
+
+_kernel_vecter024:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #24, r4
+
+_kernel_vecter025:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #25, r4
+
+_kernel_vecter026:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #26, r4
+
+_kernel_vecter027:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #27, r4
+
+_kernel_vecter028:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #28, r4
+
+_kernel_vecter029:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #29, r4
+
+_kernel_vecter030:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #30, r4
+
+_kernel_vecter031:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #31, r4
+
+_kernel_vecter032:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #32, r4
+
+_kernel_vecter033:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #33, r4
+
+_kernel_vecter034:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #34, r4
+
+_kernel_vecter035:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #35, r4
+
+_kernel_vecter036:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #36, r4
+
+_kernel_vecter037:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #37, r4
+
+_kernel_vecter038:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #38, r4
+
+_kernel_vecter039:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #39, r4
+
+_kernel_vecter040:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #40, r4
+
+_kernel_vecter041:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #41, r4
+
+_kernel_vecter042:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #42, r4
+
+_kernel_vecter043:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #43, r4
+
+_kernel_vecter044:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #44, r4
+
+_kernel_vecter045:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #45, r4
+
+_kernel_vecter046:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #46, r4
+
+_kernel_vecter047:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #47, r4
+
+_kernel_vecter048:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #48, r4
+
+_kernel_vecter049:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #49, r4
+
+_kernel_vecter050:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #50, r4
+
+_kernel_vecter051:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #51, r4
+
+_kernel_vecter052:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #52, r4
+
+_kernel_vecter053:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #53, r4
+
+_kernel_vecter054:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #54, r4
+
+_kernel_vecter055:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #55, r4
+
+_kernel_vecter056:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #56, r4
+
+_kernel_vecter057:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #57, r4
+
+_kernel_vecter058:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #58, r4
+
+_kernel_vecter059:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #59, r4
+
+_kernel_vecter060:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #60, r4
+
+_kernel_vecter061:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #61, r4
+
+_kernel_vecter062:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #62, r4
+
+_kernel_vecter063:
+                               mov.l   r4, @-r15
+                               bra             _kernel_exc_hdr
+                               mov             #63, r4
+
+
+
+_kernel_vecter064:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #64, r4
+
+_kernel_vecter065:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #65, r4
+
+_kernel_vecter066:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #66, r4
+
+_kernel_vecter067:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #67, r4
+
+_kernel_vecter068:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #68, r4
+
+_kernel_vecter069:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #69, r4
+
+_kernel_vecter070:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #70, r4
+
+_kernel_vecter071:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #71, r4
+
+_kernel_vecter072:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #72, r4
+
+_kernel_vecter073:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #73, r4
+
+_kernel_vecter074:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #74, r4
+
+_kernel_vecter075:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #75, r4
+
+_kernel_vecter076:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #76, r4
+
+_kernel_vecter077:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #77, r4
+
+_kernel_vecter078:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #78, r4
+
+_kernel_vecter079:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #79, r4
+
+_kernel_vecter080:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #80, r4
+
+_kernel_vecter081:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #81, r4
+
+_kernel_vecter082:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #82, r4
+
+_kernel_vecter083:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #83, r4
+
+_kernel_vecter084:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #84, r4
+
+_kernel_vecter085:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #85, r4
+
+_kernel_vecter086:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #86, r4
+
+_kernel_vecter087:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #87, r4
+
+_kernel_vecter088:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #88, r4
+
+_kernel_vecter089:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #89, r4
+
+_kernel_vecter090:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #90, r4
+
+_kernel_vecter091:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #91, r4
+
+_kernel_vecter092:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #92, r4
+
+_kernel_vecter093:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #93, r4
+
+_kernel_vecter094:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #94, r4
+
+_kernel_vecter095:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #95, r4
+
+_kernel_vecter096:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #96, r4
+
+_kernel_vecter097:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #97, r4
+
+_kernel_vecter098:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #98, r4
+
+_kernel_vecter099:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #99, r4
+
+_kernel_vecter100:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #100, r4
+
+_kernel_vecter101:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #101, r4
+
+_kernel_vecter102:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #102, r4
+
+_kernel_vecter103:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #103, r4
+
+_kernel_vecter104:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #104, r4
+
+_kernel_vecter105:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #105, r4
+
+_kernel_vecter106:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #106, r4
+
+_kernel_vecter107:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #107, r4
+
+_kernel_vecter108:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #108, r4
+
+_kernel_vecter109:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #109, r4
+
+_kernel_vecter110:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #110, r4
+
+_kernel_vecter111:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #111, r4
+
+_kernel_vecter112:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #112, r4
+
+_kernel_vecter113:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #113, r4
+
+_kernel_vecter114:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #114, r4
+
+_kernel_vecter115:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #115, r4
+
+_kernel_vecter116:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #116, r4
+
+_kernel_vecter117:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #117, r4
+
+_kernel_vecter118:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #118, r4
+
+_kernel_vecter119:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #119, r4
+
+_kernel_vecter120:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #120, r4
+
+_kernel_vecter121:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #121, r4
+
+_kernel_vecter122:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #122, r4
+
+_kernel_vecter123:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #123, r4
+
+_kernel_vecter124:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #124, r4
+
+_kernel_vecter125:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #125, r4
+
+_kernel_vecter126:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #126, r4
+
+_kernel_vecter127:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #127, r4
+
+_kernel_vecter128:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #128, r4
+
+_kernel_vecter129:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #129, r4
+
+_kernel_vecter130:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #130, r4
+
+_kernel_vecter131:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #131, r4
+
+_kernel_vecter132:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #132, r4
+
+_kernel_vecter133:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #133, r4
+
+_kernel_vecter134:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #134, r4
+
+_kernel_vecter135:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #135, r4
+
+_kernel_vecter136:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #136, r4
+
+_kernel_vecter137:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #137, r4
+
+_kernel_vecter138:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #138, r4
+
+_kernel_vecter139:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #139, r4
+
+_kernel_vecter140:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #140, r4
+
+_kernel_vecter141:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #141, r4
+
+_kernel_vecter142:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #142, r4
+
+_kernel_vecter143:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #143, r4
+
+_kernel_vecter144:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #144, r4
+
+_kernel_vecter145:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #145, r4
+
+_kernel_vecter146:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #146, r4
+
+_kernel_vecter147:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #147, r4
+
+_kernel_vecter148:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #148, r4
+
+_kernel_vecter149:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #149, r4
+
+_kernel_vecter150:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #150, r4
+
+_kernel_vecter151:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #151, r4
+
+_kernel_vecter152:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #152, r4
+
+_kernel_vecter153:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #153, r4
+
+_kernel_vecter154:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #154, r4
+
+_kernel_vecter155:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #155, r4
+
+_kernel_vecter156:
+                               mov.l   r4, @-r15
+                               bra             _kernel_int_hdr
+                               mov             #156, r4
+
+
+/************************************************
+  CPU例外ハンドラ
+  r4をスタックに積んだ後、r4に割り込み番号を
+  格納してここに分岐するものとする
+************************************************/
+_kernel_exc_hdr:
+                               rte
+                               nop
+
+
+/************************************************
+  割り込みハンドラ
+
+  r4をスタックに積んだ後、r4に割り込み番号を
+  格納してここに分岐するものとする
+************************************************/
+                               .align  2
+_kernel_int_hdr:
+                               /* レジスタ退避(r0-r1) */
+                               mov.l   r0, @-r15
+                               mov.l   r1, @-r15
+                               
+                               /* 割り込みマスク設定 */
+                               stc             sr, r0
+                               mov             r0, r1
+                               or              #0xf0, r0       /* 割り込み全マスク設定 */
+                               ldc             r0, sr
+                               
+                               /* 割り込みマスクの保存 */
+                               mov             r1, r0
+                               and             #0xf0, r0
+                               mov.l   imsk_addr, r1
+                               mov.l   r0, @r1
+                               
+                               /* 割り込み番号の符号拡張をクリア */
+                               extu.b  r4, r4
+                               
+                               /* レジスタ保存(r2-r7,mach,macl,pr) */
+                               mov.l   r2, @-r15
+                               mov.l   r3, @-r15
+                               mov.l   r5, @-r15
+                               mov.l   r6, @-r15
+                               mov.l   r7, @-r15
+                               sts.l   mach, @-r15
+                               sts.l   macl, @-r15
+                               sts.l   pr, @-r15
+                               
+                               /* 多重割り込み判定 */
+                               mov.l   int_cnt_addr, r1
+                               mov.l   @r1, r0
+                               cmp/eq  #0, r0
+                               bf/s    int_multi
+                               add             #1, r0
+                               
+                               /* 単独割り込み時 */
+                               mov.l   r0, @r1                         /* 割り込みネスト値を設定 */
+                               
+                               /* スタック入れ替え */
+                               mov.l   save_sp_addr, r0
+                               mov.l   r15, @r0                        /* 現在のスタックを退避 */
+                               mov.l   int_sp_addr, r0
+                               mov.l   @r0, r15                        /* 割り込み用スタックを設定 */
+                               
+                               mov.l   r4, @-r15                       /* 割り込み番号を退避 */
+                               
+                               /* 割り込み開始処理呼び出し */
+                               mov.l   sta_int_addr, r1
+                               jsr             @r1
+                               nop
+                               
+                               /* 割り込み実行処理呼び出し */
+                               mov.l   exe_int_addr, r1
+                               jsr             @r1
+                               mov.l   @r15+, r4                       /* 割り込み番号を引数とする */
+                               
+                               /* スタックの復帰 */
+                               mov.l   save_sp_addr, r0
+                               mov.l   @r0, r15
+                               
+                               /* 割り込みカウンタのクリア */
+                               mov.l   int_cnt_addr, r1
+                               xor             r0, r0
+                               mov.l   r0, @r1
+                               
+                               /* ベースマスク値に戻す */
+                               mov.l   imsk_base_addr, r0
+                               mov.l   @r0, r1
+                               mov.l   imsk_addr, r0
+                               mov.l   r1, @r0
+                               
+                               /* 割り込み終了処理呼び出し */
+                               mov.l   end_int_addr, r1
+                               jsr             @r1
+                               nop
+                               
+                               /* レジスタ復帰 */
+                               lds.l   @r15+, pr
+                               lds.l   @r15+, macl
+                               lds.l   @r15+, mach
+                               mov.l   @r15+, r7
+                               mov.l   @r15+, r6
+                               mov.l   @r15+, r5
+                               mov.l   @r15+, r3
+                               mov.l   @r15+, r2
+                               mov.l   @r15+, r1
+                               
+                               /* 復帰時割り込みマスクの設定 */
+                               mov.l   imsk_addr, r4
+                               mov.l   @r4, r4                                 /* マスク値取得 */
+                               mov.l   @(8, r15), r0
+                               or              r4, r0
+                               mov.l   r0, @(8, r15)                   /* 復帰時SRのマスク設定 */
+                               
+                               mov.l   @r15+, r0
+                               mov.l   @r15+, r4
+                               rte
+                               nop
+
+                               /* 多重割り込み処理 */
+int_multi:             
+                               mov.l   r0, @r1                         /* 割り込みネスト値を設定 */
+                               
+                               /* 割り込み実行処理呼び出し */
+                               mov.l   exe_int_addr, r1
+                               jsr             @r1                     /* 割り込み番号を引数とする */
+                               nop
+                               
+                               /* 割り込みカウンタの減算 */
+                               mov.l   int_cnt_addr, r1
+                               mov.l   @r1, r0
+                               add             #-1, r0
+                               mov.l   r0, @r1
+                               
+                               /* レジスタ復帰 */
+                               lds.l   @r15+, pr
+                               lds.l   @r15+, macl
+                               lds.l   @r15+, mach
+                               mov.l   @r15+, r7
+                               mov.l   @r15+, r6
+                               mov.l   @r15+, r5
+                               mov.l   @r15+, r3
+                               mov.l   @r15+, r2
+                               mov.l   @r15+, r1
+                               mov.l   @r15+, r0
+                               mov.l   @r15+, r4
+                               rte
+                               nop
+
+
+                               .align  2
+
+imsk_addr:
+                               .long   _kernel_sh_imsk                 /* 割り込みマスク */
+
+imsk_base_addr:
+                               .long   _hospac_sh_imsk_base    /* 割り込みマスクベース値 */
+
+int_cnt_addr:
+                               .long   _kernel_int_cnt                 /* 割り込みネスト回数 */
+
+save_sp_addr:
+                               .long   _kernel_int_ssp                 /* 割り込み用スタックポインタ退避 */
+
+int_sp_addr:
+                               .long   _kernel_int_sp                  /* 割り込み用スタックポインタ */
+
+sta_int_addr:
+                               .long   _kernel_sta_int                 /* 割り込み開始処理 */
+
+end_int_addr:
+                               .long   _kernel_end_int                 /* 割り込み終了処理 */
+
+exe_int_addr:
+                               .long   _kernel_exe_int                 /* 割り込み実行処理 */
+
+
+
+                               .end
+
+
+/* ------------------------------------------------------------------------ */
+/*  Copyright (C) 1998-2002 by Project HOS                                  */
+/* ------------------------------------------------------------------------ */
diff --git a/kernel/source/arch/proc/sh/sh2/shc/ctxctl.src b/kernel/source/arch/proc/sh/sh2/shc/ctxctl.src
new file mode 100755 (executable)
index 0000000..c2cc6c5
--- /dev/null
@@ -0,0 +1,167 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+;                                                                             
+;                                     Copyright (C) 1998-2006 by Project HOS  
+;                                     http://sourceforge.jp/projects/hos/     
+; --------------------------------------------------------------------------- 
+
+
+
+                               .CPU    SH2
+
+
+                               .EXPORT __kernel_dis_int                ; 割り込み禁止
+                               .EXPORT __kernel_ena_int                ; 割り込み許可
+                               .EXPORT __kernel_wai_int                ; 割り込み待ち
+                               .EXPORT __kernel_cre_ctx                ; 実行コンテキストの作成
+                               .EXPORT __kernel_swi_ctx                ; 実行コンテキストの切替
+                               .EXPORT __kernel_sta_ctx                ; 実行コンテキストの開始
+                               .EXPORT __kernel_rst_ctx                ; 実行コンテキストのリスタート
+                               .EXPORT __kernel_sh_imsk                ; 割り込みマスクの値
+
+
+                               .SECTION  P, CODE, ALIGN=4
+
+;------------------------------------------------
+; 割り込み禁止
+; void _kernel_dis_int(void)
+;------------------------------------------------
+                               .STACK  __kernel_dis_int=0
+__kernel_dis_int:
+                               stc             sr, r0
+                               or              #h'f0, r0                               ; 全割り込みマスク
+                               rts
+                               ldc             r0, sr
+
+
+;------------------------------------------------
+; 割り込み許可
+; void _kernel_ena_int(void)
+;------------------------------------------------
+                               .STACK  __kernel_ena_int=0
+__kernel_ena_int:
+                               mov             #h'f0, r1                               ; 0x00f0 を反転させて 0xff0f を作成
+                               not             r1, r1
+                               stc             sr, r0
+                               and             r1, r0                                  ; 割り込みマスク値以外を取得
+                               mov.l   L_imsk, r2
+                               mov.l   @r2, r1
+                               or              r1, r0                                  ; 割り込みマスクの値を設定
+                               rts
+                               ldc             r0, sr
+
+                               .ALIGN  4
+L_imsk                 .DATA.L __kernel_sh_imsk                ; 割り込みマスク
+
+
+;------------------------------------------------
+; 割り込み待ち
+; void _kernel_wai_int(void)
+;------------------------------------------------
+                               .STACK  __kernel_wai_int=0
+__kernel_wai_int:
+               ;               sleep
+                               bra             __kernel_wai_int
+                               nop
+
+
+
+;------------------------------------------------
+;  実行コンテキストの作成
+;  _kernel_cre_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb,                              作成するコンテキスト [r4]
+;              VP              isp,                                    初期スタックポインタ [r5]
+;              FP              entry,                                  実行アドレス         [r6]
+;              VP_INT          par1,                                   実行時パラメータ1    [r7]
+;              VP_INT          par2)                                   実行時パラメータ2    [@(0, r15)]
+;------------------------------------------------
+                               .STACK  __kernel_cre_ctx=0
+__kernel_cre_ctx:
+                               add     #-40, r5                                ; スタックに領域を確保
+                               mov.l   r6, @(36, r5)                   ; 実行アドレスを      r8 の領域に設定
+                               mov.l   r7, @(32, r5)                   ; 実行時パラメータ1を r9 の領域に設定
+                               mov.l   @(0, r15), r0
+                               mov.l   r0, @(28, r5)                   ; 実行時パラメータ2を r10 の領域に設定
+                               mov.l   #ctx_entry, r0
+                               mov.l   r0, @(0, r5)                    ; 実行エントリポイントを pr の領域に設定
+                               rts
+                               mov.l   r5, @(0, r4)                    ; スタックポインタを保存(遅延スロット)
+
+
+;------------------------------------------------
+; 実行コンテキストエントリーアドレス
+;------------------------------------------------
+ctx_entry:             
+                               mov             r9, r4                                  ; 実行時パラメータ1を設定
+                               jmp             @r8                                             ; 実行開始アドレスに分岐
+                               mov             r10, r5                                 ; 実行時パラメータ2を設定(遅延スロット)
+
+
+
+;------------------------------------------------
+; 実行コンテキストの切替
+; void _kernel_swi_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb_nxt,                  切り替え先のコンテキスト [r4]
+;              _KERNEL_T_CTXCB *pk_ctxcb_now)                  現在のコンテキスト       [r5]
+;------------------------------------------------
+                               .STACK  __kernel_swi_ctx=40
+__kernel_swi_ctx:
+                               mov.l   r8, @-r15                               ; レジスタを退避
+                               mov.l   r9, @-r15
+                               mov.l   r10, @-r15
+                               mov.l   r11, @-r15
+                               mov.l   r12, @-r15
+                               mov.l   r13, @-r15
+                               mov.l   r14, @-r15
+                               sts.l   macl, @-r15
+                               sts.l   mach, @-r15
+                               sts.l   pr, @-r15
+                               mov.l   r15, @(0, r5)                   ; スタックポインタ保存
+               ; ---- このまま _kernel_sta_ctx に続ける
+
+;------------------------------------------------
+; 実行コンテキストの開始
+; void _kernel_sta_ctx(
+;              _KERNEL_T_CTXCB *pk_ctxcb)              開始するコンテキスト [r4]
+;------------------------------------------------
+                               .STACK  __kernel_sta_ctx=0
+__kernel_sta_ctx:
+                               mov.l   @(0, r4), r15                   ; スタックポインタ復帰
+                               lds.l   @r15+, pr                               ; r8-r14,prを復帰
+                               lds.l   @r15+, mach
+                               lds.l   @r15+, macl
+                               mov.l   @r15+, r14
+                               mov.l   @r15+, r13
+                               mov.l   @r15+, r12
+                               mov.l   @r15+, r11
+                               mov.l   @r15+, r10
+                               mov.l   @r15+, r9
+                               rts
+                               mov.l   @r15+, r8
+
+
+;------------------------------------------------
+; 実行コンテキストのリスタート
+; void _kernel_rst_ctx(
+;              VP_INT par1,                                                    実行時パラメータ1    [r4]
+;              VP_INT par2,                                                    実行時パラメータ2    [r5]
+;              VP     isp,                                                             初期スタックポインタ [r6]
+;              FP     entry)                                                   実行アドレス         [r7]
+;------------------------------------------------
+                               .STACK  __kernel_rst_ctx=0
+__kernel_rst_ctx:
+                               jmp             @r7                                             ; 実行アドレスに分岐
+                               mov             r6, r15                                 ; スタックポインタリセット(遅延スロット)
+
+
+
+                               .SECTION        B, DATA, ALIGN=4 
+__kernel_sh_imsk:
+                               .RES.L      1
+
+
+                               .END
+
+
+
+; end of file
diff --git a/kernel/source/arch/proc/sh/sh2/shc/dmyhdr.src b/kernel/source/arch/proc/sh/sh2/shc/dmyhdr.src
new file mode 100755 (executable)
index 0000000..a024da7
--- /dev/null
@@ -0,0 +1,23 @@
+; --------------------------------------------------------------------------- 
+;  Hyper Operating System V4 Advance
+; 
+;                                   Copyright (C) 1998-2006 by Project HOS
+;                                   http://sourceforge.jp/projects/hos/
+; --------------------------------------------------------------------------- 
+
+
+                               .EXPORT __kernel_vector_dmy
+                               .IMPORT __kernel_int_hdr
+
+
+                               .SECTION P, CODE, ALIGN=4
+
+__kernel_vector_dmy:
+                               rte
+                               nop
+
+
+                               .END
+
+
+; end of file
diff --git a/kernel/source/arch/proc/sh/sh2/shc/exchdr.src b/kernel/source/arch/proc/sh/sh2/shc/exchdr.src
new file mode 100755 (executable)
index 0000000..80b3b3b
--- /dev/null
@@ -0,0 +1,408 @@
+; ---------------------------------------------------------------------------
+;  Hyper Operating System V4 Advance
+;
+;                                     Copyright (C) 1998-2006 by Project HOS
+;                                     http://sourceforge.jp/projects/hos/
+; ---------------------------------------------------------------------------
+
+
+                               .EXPORT __kernel_exc_hdr
+                               .IMPORT __kernel_int_cnt
+                               .IMPORT __kernel_sh_imsk
+                               .IMPORT __kernel_int_isp
+
+
+
+                               .SECTION  P, CODE, ALIGN=4
+
+
+;------------------------------------------------
+;   高速割り込みベクタ利用時、bra で分岐可能な
+; 位置にベクタ入り口を設置。ただし未使用の
+; ベクタまでリンクされてしまう。
+;------------------------------------------------
+
+               .AIFDEF         _KERNEL_FAST_EXCVEC
+
+                               .EXPORT __kernel_vector_004
+                               .EXPORT __kernel_vector_005
+                               .EXPORT __kernel_vector_006
+                               .EXPORT __kernel_vector_007
+                               .EXPORT __kernel_vector_008
+                               .EXPORT __kernel_vector_009
+                               .EXPORT __kernel_vector_010
+                               .EXPORT __kernel_vector_011
+                               .EXPORT __kernel_vector_012
+                               .EXPORT __kernel_vector_013
+                               .EXPORT __kernel_vector_014
+                               .EXPORT __kernel_vector_015
+                               .EXPORT __kernel_vector_016
+                               .EXPORT __kernel_vector_017
+                               .EXPORT __kernel_vector_018
+                               .EXPORT __kernel_vector_019
+                               .EXPORT __kernel_vector_020
+                               .EXPORT __kernel_vector_021
+                               .EXPORT __kernel_vector_022
+                               .EXPORT __kernel_vector_023
+                               .EXPORT __kernel_vector_024
+                               .EXPORT __kernel_vector_025
+                               .EXPORT __kernel_vector_026
+                               .EXPORT __kernel_vector_027
+                               .EXPORT __kernel_vector_028
+                               .EXPORT __kernel_vector_029
+                               .EXPORT __kernel_vector_030
+                               .EXPORT __kernel_vector_031
+                               .EXPORT __kernel_vector_032
+                               .EXPORT __kernel_vector_033
+                               .EXPORT __kernel_vector_034
+                               .EXPORT __kernel_vector_035
+                               .EXPORT __kernel_vector_036
+                               .EXPORT __kernel_vector_037
+                               .EXPORT __kernel_vector_038
+                               .EXPORT __kernel_vector_039
+                               .EXPORT __kernel_vector_040
+                               .EXPORT __kernel_vector_041
+                               .EXPORT __kernel_vector_042
+                               .EXPORT __kernel_vector_043
+                               .EXPORT __kernel_vector_044
+                               .EXPORT __kernel_vector_045
+                               .EXPORT __kernel_vector_046
+                               .EXPORT __kernel_vector_047
+                               .EXPORT __kernel_vector_048
+                               .EXPORT __kernel_vector_049
+                               .EXPORT __kernel_vector_050
+                               .EXPORT __kernel_vector_051
+                               .EXPORT __kernel_vector_052
+                               .EXPORT __kernel_vector_053
+                               .EXPORT __kernel_vector_054
+                               .EXPORT __kernel_vector_055
+                               .EXPORT __kernel_vector_056
+                               .EXPORT __kernel_vector_057
+                               .EXPORT __kernel_vector_058
+                               .EXPORT __kernel_vector_059
+                               .EXPORT __kernel_vector_060
+                               .EXPORT __kernel_vector_061
+                               .EXPORT __kernel_vector_062
+                               .EXPORT __kernel_vector_063
+
+__kernel_vector_004:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #4, r4
+
+__kernel_vector_005:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #5, r4
+
+__kernel_vector_006:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #6, r4
+
+__kernel_vector_007:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #7, r4
+
+__kernel_vector_008:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #8, r4
+
+__kernel_vector_009:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #9, r4
+
+__kernel_vector_010:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #10, r4
+
+__kernel_vector_011:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #11, r4
+
+__kernel_vector_012:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #12, r4
+
+__kernel_vector_013:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #13, r4
+
+__kernel_vector_014:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #14, r4
+
+__kernel_vector_015:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #15, r4
+
+__kernel_vector_016:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #16, r4
+
+__kernel_vector_017:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #17, r4
+
+__kernel_vector_018:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #18, r4
+
+__kernel_vector_019:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #19, r4
+
+__kernel_vector_020:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #20, r4
+
+__kernel_vector_021:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #21, r4
+
+__kernel_vector_022:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #22, r4
+
+__kernel_vector_023:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #23, r4
+
+__kernel_vector_024:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #24, r4
+
+__kernel_vector_025:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #25, r4
+
+__kernel_vector_026:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #26, r4
+
+__kernel_vector_027:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #27, r4
+
+__kernel_vector_028:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #28, r4
+
+__kernel_vector_029:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #29, r4
+
+__kernel_vector_030:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #30, r4
+
+__kernel_vector_031:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #31, r4
+
+__kernel_vector_032:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #32, r4
+
+__kernel_vector_033:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #33, r4
+
+__kernel_vector_034:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #34, r4
+
+__kernel_vector_035:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #35, r4
+
+__kernel_vector_036:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #36, r4
+
+__kernel_vector_037:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #37, r4
+
+__kernel_vector_038:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #38, r4
+
+__kernel_vector_039:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #39, r4
+
+__kernel_vector_040:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #40, r4
+
+__kernel_vector_041:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #41, r4
+
+__kernel_vector_042:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #42, r4
+
+__kernel_vector_043:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #43, r4
+
+__kernel_vector_044:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #44, r4
+
+__kernel_vector_045:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #45, r4
+
+__kernel_vector_046:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #46, r4
+
+__kernel_vector_047:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #47, r4
+
+__kernel_vector_048:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #48, r4
+
+__kernel_vector_049:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #49, r4
+
+__kernel_vector_050:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #50, r4
+
+__kernel_vector_051:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #51, r4
+
+__kernel_vector_052:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #52, r4
+
+__kernel_vector_053:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #53, r4
+
+__kernel_vector_054:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #54, r4
+
+__kernel_vector_055:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #55, r4
+
+__kernel_vector_056:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #56, r4
+
+__kernel_vector_057:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #57, r4
+
+__kernel_vector_058:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #58, r4
+
+__kernel_vector_059:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #59, r4
+
+__kernel_vector_060:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #60, r4
+
+__kernel_vector_061:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #61, r4
+
+__kernel_vector_062:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #62, r4
+
+__kernel_vector_063:
+                               mov.l   r4, @-r15
+                               bra             __kernel_exc_hdr
+                               mov             #63, r4
+
+               .AENDI
+
+
+;------------------------------------------------
+;  CPU例外ハンドラ
+;
+;  r4をスタックに積んだ後、r4に割り込み番号を
+;  格納してここに分岐するものとする
+;------------------------------------------------
+__kernel_exc_hdr:
+                       ; まだ未実装
+
+                               mov.l   @r15+, r4
+                               rte
+                               nop
+
+
+                               .END
+
+; end of file
+
diff --git a/kernel/source/arch/proc/sh/sh2/shc/inthdr.src b/kernel/source/arch/proc/sh/sh2/shc/inthdr.src
new file mode 100755 (executable)
index 0000000..992ecf0
--- /dev/null
@@ -0,0 +1,1346 @@
+; ---------------------------------------------------------------------------
+;  Hyper Operating System V4 Advance
+;
+;                                     Copyright (C) 1998-2006 by Project HOS
+;                                     http://sourceforge.jp/projects/hos/
+; ---------------------------------------------------------------------------
+
+
+                               .EXPORT __kernel_int_hdr
+                               .EXPORT __kernel_int_cnt
+                               .IMPORT __kernel_sh_imsk
+                               .IMPORT __kernel_int_isp
+                               .IMPORT __kernel_sta_inh
+                               .IMPORT __kernel_exe_inh
+                               .IMPORT __kernel_end_inh
+
+
+                               .SECTION        P, CODE, ALIGN=4
+
+
+
+               .AIFDEF         _KERNEL_FAST_INTVEC
+
+;------------------------------------------------
+;   高速割り込みベクタ利用時、bra で分岐可能な
+; 位置にベクタ入り口を設置。ただし未使用の
+; ベクタまでリンクされてしまう。
+;------------------------------------------------
+
+                               .EXPORT __kernel_vector_064
+                               .EXPORT __kernel_vector_065
+                               .EXPORT __kernel_vector_066
+                               .EXPORT __kernel_vector_067
+                               .EXPORT __kernel_vector_068
+                               .EXPORT __kernel_vector_069
+                               .EXPORT __kernel_vector_070
+                               .EXPORT __kernel_vector_071
+                               .EXPORT __kernel_vector_072
+                               .EXPORT __kernel_vector_073
+                               .EXPORT __kernel_vector_074
+                               .EXPORT __kernel_vector_075
+                               .EXPORT __kernel_vector_076
+                               .EXPORT __kernel_vector_077
+                               .EXPORT __kernel_vector_078
+                               .EXPORT __kernel_vector_079
+                               .EXPORT __kernel_vector_080
+                               .EXPORT __kernel_vector_081
+                               .EXPORT __kernel_vector_082
+                               .EXPORT __kernel_vector_083
+                               .EXPORT __kernel_vector_084
+                               .EXPORT __kernel_vector_085
+                               .EXPORT __kernel_vector_086
+                               .EXPORT __kernel_vector_087
+                               .EXPORT __kernel_vector_088
+                               .EXPORT __kernel_vector_089
+                               .EXPORT __kernel_vector_090
+                               .EXPORT __kernel_vector_091
+                               .EXPORT __kernel_vector_092
+                               .EXPORT __kernel_vector_093
+                               .EXPORT __kernel_vector_094
+                               .EXPORT __kernel_vector_095
+                               .EXPORT __kernel_vector_096
+                               .EXPORT __kernel_vector_097
+                               .EXPORT __kernel_vector_098
+                               .EXPORT __kernel_vector_099
+                               .EXPORT __kernel_vector_100
+                               .EXPORT __kernel_vector_101
+                               .EXPORT __kernel_vector_102
+                               .EXPORT __kernel_vector_103
+                               .EXPORT __kernel_vector_104
+                               .EXPORT __kernel_vector_105
+                               .EXPORT __kernel_vector_106
+                               .EXPORT __kernel_vector_107
+                               .EXPORT __kernel_vector_108
+                               .EXPORT __kernel_vector_109
+                               .EXPORT __kernel_vector_110
+                               .EXPORT __kernel_vector_111
+                               .EXPORT __kernel_vector_112
+                               .EXPORT __kernel_vector_113
+                               .EXPORT __kernel_vector_114
+                               .EXPORT __kernel_vector_115
+                               .EXPORT __kernel_vector_116
+                               .EXPORT __kernel_vector_117
+                               .EXPORT __kernel_vector_118
+                               .EXPORT __kernel_vector_119
+                               .EXPORT __kernel_vector_120
+                               .EXPORT __kernel_vector_121
+                               .EXPORT __kernel_vector_122
+                               .EXPORT __kernel_vector_123
+                               .EXPORT __kernel_vector_124
+                               .EXPORT __kernel_vector_125
+                               .EXPORT __kernel_vector_126
+                               .EXPORT __kernel_vector_127
+                               .EXPORT __kernel_vector_128
+                               .EXPORT __kernel_vector_129
+                               .EXPORT __kernel_vector_130
+                               .EXPORT __kernel_vector_131
+                               .EXPORT __kernel_vector_132
+                               .EXPORT __kernel_vector_133
+                               .EXPORT __kernel_vector_134
+                               .EXPORT __kernel_vector_135
+                               .EXPORT __kernel_vector_136
+                               .EXPORT __kernel_vector_137
+                               .EXPORT __kernel_vector_138
+                               .EXPORT __kernel_vector_139
+                               .EXPORT __kernel_vector_140
+                               .EXPORT __kernel_vector_141
+                               .EXPORT __kernel_vector_142
+                               .EXPORT __kernel_vector_143
+                               .EXPORT __kernel_vector_144
+                               .EXPORT __kernel_vector_145
+                               .EXPORT __kernel_vector_146
+                               .EXPORT __kernel_vector_147
+                               .EXPORT __kernel_vector_148
+                               .EXPORT __kernel_vector_149
+                               .EXPORT __kernel_vector_150
+                               .EXPORT __kernel_vector_151
+                               .EXPORT __kernel_vector_152
+                               .EXPORT __kernel_vector_153
+                               .EXPORT __kernel_vector_154
+                               .EXPORT __kernel_vector_155
+                               .EXPORT __kernel_vector_156
+                               .EXPORT __kernel_vector_157
+                               .EXPORT __kernel_vector_158
+                               .EXPORT __kernel_vector_159
+                               .EXPORT __kernel_vector_160
+                               .EXPORT __kernel_vector_161
+                               .EXPORT __kernel_vector_162
+                               .EXPORT __kernel_vector_163
+                               .EXPORT __kernel_vector_164
+                               .EXPORT __kernel_vector_165
+                               .EXPORT __kernel_vector_166
+                               .EXPORT __kernel_vector_167
+                               .EXPORT __kernel_vector_168
+                               .EXPORT __kernel_vector_169
+                               .EXPORT __kernel_vector_170
+                               .EXPORT __kernel_vector_171
+                               .EXPORT __kernel_vector_172
+                               .EXPORT __kernel_vector_173
+                               .EXPORT __kernel_vector_174
+                               .EXPORT __kernel_vector_175
+                               .EXPORT __kernel_vector_176
+                               .EXPORT __kernel_vector_177
+                               .EXPORT __kernel_vector_178
+                               .EXPORT __kernel_vector_179
+                               .EXPORT __kernel_vector_180
+                               .EXPORT __kernel_vector_181
+                               .EXPORT __kernel_vector_182
+                               .EXPORT __kernel_vector_183
+                               .EXPORT __kernel_vector_184
+                               .EXPORT __kernel_vector_185
+                               .EXPORT __kernel_vector_186
+                               .EXPORT __kernel_vector_187
+                               .EXPORT __kernel_vector_188
+                               .EXPORT __kernel_vector_189
+                               .EXPORT __kernel_vector_190
+                               .EXPORT __kernel_vector_191
+                               .EXPORT __kernel_vector_192
+                               .EXPORT __kernel_vector_193
+                               .EXPORT __kernel_vector_194
+                               .EXPORT __kernel_vector_195
+                               .EXPORT __kernel_vector_196
+                               .EXPORT __kernel_vector_197
+                               .EXPORT __kernel_vector_198
+                               .EXPORT __kernel_vector_199
+                               .EXPORT __kernel_vector_200
+                               .EXPORT __kernel_vector_201
+                               .EXPORT __kernel_vector_202
+                               .EXPORT __kernel_vector_203
+                               .EXPORT __kernel_vector_204
+                               .EXPORT __kernel_vector_205
+                               .EXPORT __kernel_vector_206
+                               .EXPORT __kernel_vector_207
+                               .EXPORT __kernel_vector_208
+                               .EXPORT __kernel_vector_209
+                               .EXPORT __kernel_vector_210
+                               .EXPORT __kernel_vector_211
+                               .EXPORT __kernel_vector_212
+                               .EXPORT __kernel_vector_213
+                               .EXPORT __kernel_vector_214
+                               .EXPORT __kernel_vector_215
+                               .EXPORT __kernel_vector_216
+                               .EXPORT __kernel_vector_217
+                               .EXPORT __kernel_vector_218
+                               .EXPORT __kernel_vector_219
+                               .EXPORT __kernel_vector_220
+                               .EXPORT __kernel_vector_221
+                               .EXPORT __kernel_vector_222
+                               .EXPORT __kernel_vector_223
+                               .EXPORT __kernel_vector_224
+                               .EXPORT __kernel_vector_225
+                               .EXPORT __kernel_vector_226
+                               .EXPORT __kernel_vector_227
+                               .EXPORT __kernel_vector_228
+                               .EXPORT __kernel_vector_229
+                               .EXPORT __kernel_vector_230
+                               .EXPORT __kernel_vector_231
+                               .EXPORT __kernel_vector_232
+                               .EXPORT __kernel_vector_233
+                               .EXPORT __kernel_vector_234
+                               .EXPORT __kernel_vector_235
+                               .EXPORT __kernel_vector_236
+                               .EXPORT __kernel_vector_237
+                               .EXPORT __kernel_vector_238
+                               .EXPORT __kernel_vector_239
+                               .EXPORT __kernel_vector_240
+                               .EXPORT __kernel_vector_241
+                               .EXPORT __kernel_vector_242
+                               .EXPORT __kernel_vector_243
+                               .EXPORT __kernel_vector_244
+                               .EXPORT __kernel_vector_245
+                               .EXPORT __kernel_vector_246
+                               .EXPORT __kernel_vector_247
+                               .EXPORT __kernel_vector_248
+                               .EXPORT __kernel_vector_249
+                               .EXPORT __kernel_vector_250
+                               .EXPORT __kernel_vector_251
+                               .EXPORT __kernel_vector_252
+                               .EXPORT __kernel_vector_253
+                               .EXPORT __kernel_vector_254
+                               .EXPORT __kernel_vector_255
+
+
+__kernel_vector_064:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #64, r4
+
+__kernel_vector_065:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #65, r4
+
+__kernel_vector_066:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #66, r4
+
+__kernel_vector_067:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #67, r4
+
+__kernel_vector_068:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #68, r4
+
+__kernel_vector_069:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #69, r4
+
+__kernel_vector_070:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #70, r4
+
+__kernel_vector_071:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #71, r4
+
+__kernel_vector_072:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #72, r4
+
+__kernel_vector_073:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #73, r4
+
+__kernel_vector_074:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #74, r4
+
+__kernel_vector_075:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #75, r4
+
+__kernel_vector_076:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #76, r4
+
+__kernel_vector_077:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #77, r4
+
+__kernel_vector_078:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #78, r4
+
+__kernel_vector_079:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #79, r4
+
+__kernel_vector_080:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #80, r4
+
+__kernel_vector_081:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #81, r4
+
+__kernel_vector_082:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #82, r4
+
+__kernel_vector_083:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #83, r4
+
+__kernel_vector_084:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #84, r4
+
+__kernel_vector_085:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #85, r4
+
+__kernel_vector_086:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #86, r4
+
+__kernel_vector_087:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #87, r4
+
+__kernel_vector_088:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #88, r4
+
+__kernel_vector_089:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #89, r4
+
+__kernel_vector_090:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #90, r4
+
+__kernel_vector_091:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #91, r4
+
+__kernel_vector_092:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #92, r4
+
+__kernel_vector_093:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #93, r4
+
+__kernel_vector_094:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #94, r4
+
+__kernel_vector_095:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #95, r4
+
+__kernel_vector_096:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #96, r4
+
+__kernel_vector_097:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #97, r4
+
+__kernel_vector_098:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #98, r4
+
+__kernel_vector_099:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #99, r4
+
+__kernel_vector_100:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #100, r4
+
+__kernel_vector_101:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #101, r4
+
+__kernel_vector_102:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #102, r4
+
+__kernel_vector_103:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #103, r4
+
+__kernel_vector_104:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #104, r4
+
+__kernel_vector_105:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #105, r4
+
+__kernel_vector_106:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #106, r4
+
+__kernel_vector_107:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #107, r4
+
+__kernel_vector_108:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #108, r4
+
+__kernel_vector_109:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #109, r4
+
+__kernel_vector_110:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #110, r4
+
+__kernel_vector_111:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #111, r4
+
+__kernel_vector_112:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #112, r4
+
+__kernel_vector_113:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #113, r4
+
+__kernel_vector_114:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #114, r4
+
+__kernel_vector_115:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #115, r4
+
+__kernel_vector_116:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #116, r4
+
+__kernel_vector_117:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #117, r4
+
+__kernel_vector_118:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #118, r4
+
+__kernel_vector_119:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #119, r4
+
+__kernel_vector_120:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #120, r4
+
+__kernel_vector_121:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #121, r4
+
+__kernel_vector_122:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #122, r4
+
+__kernel_vector_123:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #123, r4
+
+__kernel_vector_124:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #124, r4
+
+__kernel_vector_125:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #125, r4
+
+__kernel_vector_126:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #126, r4
+
+__kernel_vector_127:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #127, r4
+
+__kernel_vector_128:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #128, r4
+
+__kernel_vector_129:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #129, r4
+
+__kernel_vector_130:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #130, r4
+
+__kernel_vector_131:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #131, r4
+
+__kernel_vector_132:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #132, r4
+
+__kernel_vector_133:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #133, r4
+
+__kernel_vector_134:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #134, r4
+
+__kernel_vector_135:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #135, r4
+
+__kernel_vector_136:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #136, r4
+
+__kernel_vector_137:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #137, r4
+
+__kernel_vector_138:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #138, r4
+
+__kernel_vector_139:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #139, r4
+
+__kernel_vector_140:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #140, r4
+
+__kernel_vector_141:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #141, r4
+
+__kernel_vector_142:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #142, r4
+
+__kernel_vector_143:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #143, r4
+
+__kernel_vector_144:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #144, r4
+
+__kernel_vector_145:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #145, r4
+
+__kernel_vector_146:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #146, r4
+
+__kernel_vector_147:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #147, r4
+
+__kernel_vector_148:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #148, r4
+
+__kernel_vector_149:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #149, r4
+
+__kernel_vector_150:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #150, r4
+
+__kernel_vector_151:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #151, r4
+
+__kernel_vector_152:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #152, r4
+
+__kernel_vector_153:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #153, r4
+
+__kernel_vector_154:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #154, r4
+
+__kernel_vector_155:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #155, r4
+
+__kernel_vector_156:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #156, r4
+
+__kernel_vector_157:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #157, r4
+
+__kernel_vector_158:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #158, r4
+
+__kernel_vector_159:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #159, r4
+
+__kernel_vector_160:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #160, r4
+
+__kernel_vector_161:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #161, r4
+
+__kernel_vector_162:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #162, r4
+
+__kernel_vector_163:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #163, r4
+
+__kernel_vector_164:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #164, r4
+
+__kernel_vector_165:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #165, r4
+
+__kernel_vector_166:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #166, r4
+
+__kernel_vector_167:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #167, r4
+
+__kernel_vector_168:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #168, r4
+
+__kernel_vector_169:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #169, r4
+
+__kernel_vector_170:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #170, r4
+
+__kernel_vector_171:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #171, r4
+
+__kernel_vector_172:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #172, r4
+
+__kernel_vector_173:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #173, r4
+
+__kernel_vector_174:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #174, r4
+
+__kernel_vector_175:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #175, r4
+
+__kernel_vector_176:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #176, r4
+
+__kernel_vector_177:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #177, r4
+
+__kernel_vector_178:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #178, r4
+
+__kernel_vector_179:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #179, r4
+
+__kernel_vector_180:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #180, r4
+
+__kernel_vector_181:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #181, r4
+
+__kernel_vector_182:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #182, r4
+
+__kernel_vector_183:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #183, r4
+
+__kernel_vector_184:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #184, r4
+
+__kernel_vector_185:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #185, r4
+
+__kernel_vector_186:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #186, r4
+
+__kernel_vector_187:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #187, r4
+
+__kernel_vector_188:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #188, r4
+
+__kernel_vector_189:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #189, r4
+
+__kernel_vector_190:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #190, r4
+
+__kernel_vector_191:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #191, r4
+
+__kernel_vector_192:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #192, r4
+
+__kernel_vector_193:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #193, r4
+
+__kernel_vector_194:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #194, r4
+
+__kernel_vector_195:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #195, r4
+
+__kernel_vector_196:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #196, r4
+
+__kernel_vector_197:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #197, r4
+
+__kernel_vector_198:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #198, r4
+
+__kernel_vector_199:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #199, r4
+
+__kernel_vector_200:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #200, r4
+
+__kernel_vector_201:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #201, r4
+
+__kernel_vector_202:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #202, r4
+
+__kernel_vector_203:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #203, r4
+
+__kernel_vector_204:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #204, r4
+
+__kernel_vector_205:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #205, r4
+
+__kernel_vector_206:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #206, r4
+
+__kernel_vector_207:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #207, r4
+
+__kernel_vector_208:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #208, r4
+
+__kernel_vector_209:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #209, r4
+
+__kernel_vector_210:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #210, r4
+
+__kernel_vector_211:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #211, r4
+
+__kernel_vector_212:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #212, r4
+
+__kernel_vector_213:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #213, r4
+
+__kernel_vector_214:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #214, r4
+
+__kernel_vector_215:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #215, r4
+
+__kernel_vector_216:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #216, r4
+
+__kernel_vector_217:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #217, r4
+
+__kernel_vector_218:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #218, r4
+
+__kernel_vector_219:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #219, r4
+
+__kernel_vector_220:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #220, r4
+
+__kernel_vector_221:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #221, r4
+
+__kernel_vector_222:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #222, r4
+
+__kernel_vector_223:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #223, r4
+
+__kernel_vector_224:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #224, r4
+
+__kernel_vector_225:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #225, r4
+
+__kernel_vector_226:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #226, r4
+
+__kernel_vector_227:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #227, r4
+
+__kernel_vector_228:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #228, r4
+
+__kernel_vector_229:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #229, r4
+
+__kernel_vector_230:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #230, r4
+
+__kernel_vector_231:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #231, r4
+
+__kernel_vector_232:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #232, r4
+
+__kernel_vector_233:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #233, r4
+
+__kernel_vector_234:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #234, r4
+
+__kernel_vector_235:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #235, r4
+
+__kernel_vector_236:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #236, r4
+
+__kernel_vector_237:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #237, r4
+
+__kernel_vector_238:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #238, r4
+
+__kernel_vector_239:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #239, r4
+
+__kernel_vector_240:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #240, r4
+
+__kernel_vector_241:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #241, r4
+
+__kernel_vector_242:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #242, r4
+
+__kernel_vector_243:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #243, r4
+
+__kernel_vector_244:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #244, r4
+
+__kernel_vector_245:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #245, r4
+
+__kernel_vector_246:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #246, r4
+
+__kernel_vector_247:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #247, r4
+
+__kernel_vector_248:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #248, r4
+
+__kernel_vector_249:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #249, r4
+
+__kernel_vector_250:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #250, r4
+
+__kernel_vector_251:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #251, r4
+
+__kernel_vector_252:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #252, r4
+
+__kernel_vector_253:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #253, r4
+
+__kernel_vector_254:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #254, r4
+
+__kernel_vector_255:
+                               mov.l   r4, @-r15
+                               bra             __kernel_int_hdr
+                               mov             #255, r4
+
+               .AENDI
+
+
+
+;------------------------------------------------
+;  割込みハンドラ
+;
+;  r4をスタックに積んだ後、r4に割り込み番号を
+;  格納してここに分岐するものとする
+;------------------------------------------------
+__kernel_int_hdr:
+                               mov.l   r0, @-r15                       ; r0 退避
+                               stc             sr, r0
+                               mov.l   r1, @-r15                       ; r1 退避
+                               mov             r0, r1                          ; sr 保存
+                               or              #h'f0, r0
+                               ldc             r0, sr                          ; 全割り込みマスク
+
+               ; ---- レジスタ保存(r2-r7,pr)
+                               mov.l   r2, @-r15
+                               mov.l   r3, @-r15
+                               mov.l   r5, @-r15
+                               mov.l   r6, @-r15
+                               mov.l   r7, @-r15
+                               sts.l   pr, @-r15
+
+               ; ---- 割り込みマスク値の設定
+                               mov.l   r1, r0
+                               and             #h'f0, r0                       ; 割り込みマスクレベル取り出し
+                               mov.l   addr_sh_imsk, r1
+                               mov.l   @r1, r2                         ; 古いマスク値取り出し
+                               mov.l   r0, @r1                         ; 新しいマスク値設定
+
+               ; ---- 多重割り込み判定
+                               mov.l   addr_int_cnt, r1
+                               extu.b  r4, r4                          ; 割込み番号の符号拡張をクリア
+                               mov.l   @r1, r0
+                               cmp/eq  #0, r0
+                               add             #1, r0
+                               bf/s    multiple_int
+                               mov.l   r0, @r1                         ; 割り込みネスト値を設定(遅延スロット)
+                               
+               ; ---- スタック入れ替え
+                               mov.l   r15, r0                         ; 現在のスタックを退避
+                               mov.l   addr_int_isp, r1
+                               mov.l   @r1, r15                        ; 割込み用スタックを設定
+                               mov.l   r0, @-r15                       ; 割込み前のスタックポインタを保存
+                               
+               ; ---- 古いマスク値を保存
+                               mov.l   r2, @-r15                       ; 古いマスク値を保存
+                               
+               ; ---- 割り込み開始処理呼び出し
+                               mov.l   addr_sta_inh, r1
+                               jsr             @r1
+                               mov.l   r4, @-r15                       ; 割込み番号を退避(遅延スロット)
+                               
+               ; ---- 割り込み実行処理呼び出し
+                               mov.l   addr_exe_inh, r1
+                               jsr             @r1
+                               mov.l   @r15+, r4                       ; 割込み番号を引数とする
+               
+               ; ---- 古いマスク値を取り出し
+                               mov.l   @r15+, r2                       ; 古いマスク値を取り出し
+                               
+               ; ---- スタックの復帰
+                               mov.l   @r15, r15
+                               
+               ; ---- 割り込みカウンタのクリア
+                               mov.l   addr_int_cnt, r1
+                               xor             r0, r0
+                               mov.l   r0, @r1
+
+                               mov.l   @(40, r15), r0          ; 割込み前の sr を取り出し
+                               and             #h'f0, r0
+                               cmp/eq  r0, r2
+                               bf              return_int
+
+               ; ---- 割り込み終了処理呼び出し
+                               mov.l   addr_sh_imsk, r1
+                               mov.l   addr_end_inh, r2
+                               jsr             @r2
+                               mov.l   r0, @r1                         ; 割込み前の状態に割込みマスク値を設定(遅延スロット)
+                               
+               ; ---- 復帰時割り込みマスクの設定
+                               mov.l   @(40, r15), r0          ; 割込み前の sr を取り出し
+                               or              #h'f0, r0                       ; 割込みマスク部分クリアの前処理(一旦ビットを立てる)
+                               mov.l   addr_sh_imsk, r1
+                               xor             #h'f0, r0                       ; 割込みマスク部分クリア(立てといて反転させる)
+                               mov.l   @r1, r1                         ; マスク値取得
+                               or              r1, r0                          ; マスク値を設定
+                               mov.l   r0, @(40, r15)          ; 復帰時SRの設定
+                               
+               ; ---- レジスタ復帰
+return_int:
+                               lds.l   @r15+, pr
+                               mov.l   @r15+, r7
+                               mov.l   @r15+, r6
+                               mov.l   @r15+, r5
+                               mov.l   @r15+, r3
+                               mov.l   @r15+, r2
+                               mov.l   @r15+, r1
+                               mov.l   @r15+, r0
+                               mov.l   @r15+, r4
+                               rte
+                               nop
+
+               ; ---- 多重割り込み処理
+multiple_int:
+                               mov.l   r0, @r1                         ; 割り込みネスト値を設定
+                               
+               ; ---- 割り込み実行処理呼び出し
+                               mov.l   addr_exe_inh, r1
+                               jsr             @r1                                     ; 割り込み番号を引数とする
+                               nop
+                               
+               ; ---- 割り込みカウンタの減算
+                               mov.l   addr_int_cnt, r1
+                               mov.l   @r1, r0
+                               add             #-1, r0
+                               mov.l   r0, @r1
+                               
+               ; ---- レジスタ復帰
+                               lds.l   @r15+, pr
+                               mov.l   @r15+, r7
+                               mov.l   @r15+, r6
+                               mov.l   @r15+, r5
+                               mov.l   @r15+, r3
+                               mov.l   @r15+, r2
+                               mov.l   @r15+, r1
+                               mov.l   @r15+, r0
+                               mov.l   @r15+, r4
+                               rte
+                               nop
+
+                               .ALIGN  4
+addr_int_cnt:
+                               .DATA.L __kernel_int_cnt                ; 割り込みネスト回数
+
+addr_sh_imsk:
+                               .DATA.L __kernel_sh_imsk                ; 割り込みマスク値
+
+addr_int_isp:
+                               .DATA.L __kernel_int_isp                ; 割り込み用スタックポインタ
+
+addr_sta_inh:
+                               .DATA.L __kernel_sta_inh                ; 割り込み開始処理
+
+addr_exe_inh:
+                               .DATA.L __kernel_exe_inh                ; 割り込み実行処理
+
+addr_end_inh:
+                               .DATA.L __kernel_end_inh                ; 割り込み終了処理
+
+
+
+                               .SECTION    B,DATA,ALIGN=4
+__kernel_int_cnt:
+                               .RES.L      1
+
+
+                               .END
+
+; end of file
diff --git a/kernel/source/arch/proc/sh/sh2/shc/mk_vec/mk_vec.c b/kernel/source/arch/proc/sh/sh2/shc/mk_vec/mk_vec.c
new file mode 100755 (executable)
index 0000000..aa9dafb
--- /dev/null
@@ -0,0 +1,138 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+
+int main()
+{
+       FILE *fp;
+       char fname[64];
+       int  i;
+       
+       for ( i = 4; i <= 63; i++ )
+       {
+               sprintf(fname ,"../vect_%03d.src", i);
+               if ( (fp = fopen(fname, "w")) == NULL )
+               {
+                       return 1;
+               }
+               
+               fprintf(fp, 
+                       "; --------------------------------------------------------------------------- \n"
+                       ";  Hyper Operating System V4 Advance\n"
+                       "; \n"
+                       ";                                   Copyright (C) 1998-2006 by Project HOS\n"
+                       ";                                   http://sourceforge.jp/projects/hos/\n"
+                       "; --------------------------------------------------------------------------- \n"
+                       "\n"
+                       "\n"
+                       "                               .EXPORT __kernel_vector_%03d\n"
+                       "                               .IMPORT __kernel_exc_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .SECTION P, CODE, ALIGN=4\n"
+                       "\n"
+                       "__kernel_vector_%03d:\n"
+                       "                               mov.l   r4, @-r15\n"
+                       "                               mov.l   addr_exc_hdr, r4\n"
+                       "                               jmp             @r4\n"
+                       "                               mov             #%d, r4\n"
+                       "\n"
+                       "\n"
+                       "                               .ALIGN  4\n"
+                       "addr_exc_hdr:\n"
+                       "                               .DATA.L __kernel_exc_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .END\n"
+                       "\n"
+                       "\n"
+                       "; end of file\n",
+                       i, i, i);
+               
+               fclose(fp);
+       }
+       
+       
+       for ( i = 64; i <= 255; i++ )
+       {
+               sprintf(fname ,"../vect_%03d.src", i);
+               if ( (fp = fopen(fname, "w")) == NULL )
+               {
+                       return 1;
+               }
+               
+               fprintf(fp, 
+                       "; --------------------------------------------------------------------------- \n"
+                       ";  Hyper Operating System V4 Advance\n"
+                       "; \n"
+                       ";                                   Copyright (C) 1998-2006 by Project HOS\n"
+                       ";                                   http://sourceforge.jp/projects/hos/\n"
+                       "; --------------------------------------------------------------------------- \n"
+                       "\n"
+                       "\n"
+                       "                               .EXPORT __kernel_vector_%03d\n"
+                       "                               .IMPORT __kernel_int_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .SECTION P, CODE, ALIGN=4\n"
+                       "\n"
+                       "__kernel_vector_%03d:\n"
+                       "                               mov.l   r4, @-r15\n"
+                       "                               mov.l   addr_int_hdr, r4\n"
+                       "                               jmp             @r4\n"
+                       "                               mov             #%d, r4\n"
+                       "\n"
+                       "\n"
+                       "                               .ALIGN  4\n"
+                       "addr_int_hdr:\n"
+                       "                               .DATA.L __kernel_int_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .END\n"
+                       "\n"
+                       "\n"
+                       "; end of file\n",
+                       i, i, i);
+               
+               fclose(fp);
+       }
+       
+       {
+                       sprintf(fname ,"../vect_dmy.src", i);
+               if ( (fp = fopen(fname, "w")) == NULL )
+               {
+                       return 1;
+               }
+               
+               fprintf(fp, 
+                       "; --------------------------------------------------------------------------- \n"
+                       ";  Hyper Operating System V4 Advance\n"
+                       "; \n"
+                       ";                                   Copyright (C) 1998-2006 by Project HOS\n"
+                       ";                                   http://sourceforge.jp/projects/hos/\n"
+                       "; --------------------------------------------------------------------------- \n"
+                       "\n"
+                       "\n"
+                       "                               .EXPORT __kernel_vector_dmy\n"
+                       "                               .IMPORT __kernel_int_hdr\n"
+                       "\n"
+                       "\n"
+                       "                               .SECTION P, CODE, ALIGN=4\n"
+                       "\n"
+                       "__kernel_vector_dmy:\n"
+                       "                               rte\n"
+                       "                               nop\n"
+                       "\n"
+                       "\n"
+                       "                               .END\n"
+                       "\n"
+                       "\n"
+                       "; end of file\n",
+                       i, i, i);
+               
+               fclose(fp);
+       }
+       
+       return 0;
+}
+
diff --git a/kernel/source/arch/proc/win/win32/ctxctl.c b/kernel/source/arch/proc/win/win32/ctxctl.c
new file mode 100755 (executable)
index 0000000..8f5bf17
--- /dev/null
@@ -0,0 +1,301 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ctxctlc
+ * @brief %jp{コンテキスト制御}%en{context control}
+ *
+ * @version $Id: ctxctl.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+
+
+
+static DWORD WINAPI _kernel_ctx_ent(LPVOID param);                                     /* %jp{スレッドの開始関数} */
+static void         _kernel_run_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                /* %jp{スレッドの実行開始} */
+static void         _kernel_wai_ctx(_KERNEL_T_CTXCB *pk_ctxcb);                /* %jp{スレッドの停止待ち} */
+
+
+static _KERNEL_T_CTXCB *_kernel_win32_runctxcb        = NULL;          /**< %jp{実行中のコンテキスト} */
+static _KERNEL_T_CTXCB *_kernel_win32_oldctxcb        = NULL;          /**< %jp{直前の実行コンテキスト} */
+static HANDLE          _kernel_win32_hSemIntCtx       = NULL;          /**< %jp{割り込みの排他制御セマフォ} */
+static HANDLE          _kernel_win32_hSemDisInt       = NULL;          /**< %jp{システムの排他制御用セマフォ} */
+static volatile BOOL   _kernel_win32_blIntCtx         = FALSE;         /**< %jp{割り込み処理中フラグ} */
+static volatile BOOL   _kernel_win32_blDisInt         = TRUE;          /**< %jp{割り込み禁止フラグ} */
+static volatile BOOL   _kernel_win32_blDlyDsp         = FALSE;         /**< %jp{遅延ディスパッチフラグ} */
+static DWORD           _kernel_win32_hPrimaryThreadId = 0;                     /**< %jp{プライマリスレッドID} */
+
+
+
+/** %jp{システムの初期化} */
+void _kernel_ini_prc(void)
+{
+       /* %jp{プライマリスレッドIDの保存} */
+       _kernel_win32_hPrimaryThreadId = GetCurrentThreadId();
+
+       /* %jp{割り込み禁止に見立てるセマフォの作成} */
+       _kernel_win32_hSemDisInt = CreateSemaphore(NULL, 0, 1, NULL);
+
+       /* %jp{割り込みの排他制御セマフォの生成} */
+       _kernel_win32_hSemIntCtx = CreateSemaphore(NULL, 1, 1, NULL);
+}
+
+
+/** %jp{割り込み許可} */
+void _kernel_ena_int(void)
+{
+       if ( _kernel_win32_blIntCtx )
+       {
+               return;
+       }
+
+       if ( _kernel_win32_blDisInt )
+       {
+               _kernel_win32_blDisInt = FALSE;
+               ReleaseSemaphore(_kernel_win32_hSemDisInt, 1, NULL);
+       }
+}
+
+
+/** %jp{割り込み禁止} */
+void _kernel_dis_int(void)
+{
+       if ( _kernel_win32_blIntCtx )
+       {
+               return;
+       }
+
+       if ( !_kernel_win32_blDisInt )
+       {
+               WaitForSingleObject(_kernel_win32_hSemDisInt, INFINITE);
+               _kernel_win32_blDisInt = TRUE;
+       }
+}
+
+
+/** %jp{実行コンテキストの作成} */
+void _kernel_cre_ctx(
+               _KERNEL_T_CTXCB *pk_ctxcb,              /* コンテキストを作成するアドレス */
+               FP              entry,                  /* コンテキストの実行開始番地 */
+               VP_INT          exinf1,                 /* コンテキストの実行時パラメータ1 */
+               VP_INT          exinf2)                 /* コンテキストの実行時パラメータ2 */
+{
+       pk_ctxcb->blIntSuspend = FALSE;
+
+       /* %jp{起動情報を格納} */
+       pk_ctxcb->entry  = entry;
+       pk_ctxcb->exinf1 = exinf1;
+       pk_ctxcb->exinf2 = exinf2;
+       
+       /* %jp{コンテキストスレッド生成* */
+       pk_ctxcb->hEvent  = CreateEvent(NULL, FALSE, FALSE, NULL);
+#if 1
+       pk_ctxcb->hThread = CreateThread(NULL, 0, _kernel_ctx_ent, (LPVOID)pk_ctxcb,
+                                                                       0, &pk_ctxcb->dwThreadId);
+#else
+       pk_ctxcb->hThread = _beginthread(_kernel_ctx_ent, 0, (void *)pk_ctxcb);
+#endif
+
+       /* %jp{pk_ctxcb->hThreadの格納完了後に開始} */
+       SetEvent(pk_ctxcb->hEvent);
+
+       _kernel_wai_ctx(pk_ctxcb);
+}
+
+
+/** %jp{スレッドの開始関数} */
+DWORD WINAPI _kernel_ctx_ent(LPVOID param)
+{
+       _KERNEL_T_CTXCB *pk_ctxcb;
+
+       /* %jp{コンテキスト情報取得} */
+       pk_ctxcb = (_KERNEL_T_CTXCB *)param;
+
+       /* %jp{開始待ち} */
+       WaitForSingleObject(pk_ctxcb->hEvent, INFINITE);
+
+       /* %jp{リスタート用setjmp} */
+       setjmp(pk_ctxcb->jmpenv);
+
+       /* %jp{自分自身をサスペンドさせる} */
+       SuspendThread(pk_ctxcb->hThread);
+
+       /* %jp{直前のコンテキストスレッドが確実にサスペンドするのを待つ} */
+       _kernel_wai_ctx(_kernel_win32_oldctxcb);
+       _kernel_win32_oldctxcb = NULL;
+
+       pk_ctxcb->entry(pk_ctxcb->exinf1, pk_ctxcb->exinf2);
+       
+       return 0;
+}
+
+
+/** %jp{実行コンテキストの削除} */
+void _kernel_del_ctx(_KERNEL_T_CTXCB *pk_ctxcb)
+{
+       /* スレッド削除 */
+       CloseHandle(pk_ctxcb->hEvent);
+       TerminateThread(pk_ctxcb->hThread, 0);
+}
+
+
+/** %jp{実行コンテキストのリスタート} */
+void _kernel_rst_ctx(_KERNEL_T_CTXCB *pk_ctxcb)
+{
+       longjmp(pk_ctxcb->jmpenv, 0);
+}
+
+
+/** %jp{実行コンテキストの切替} */
+void _kernel_swi_ctx(
+               _KERNEL_T_CTXCB *ctxcb_now,             /* 現在のコンテキストの保存先 */
+               _KERNEL_T_CTXCB *ctxcb_nxt)             /* 新たに実行するコンテキスト */
+{
+       /* %jp{切り替え無しならそのまま} */
+       if ( ctxcb_now == ctxcb_nxt )
+       {
+               return;
+       }
+       
+       /* %jp{割り込みの終わりで発生した場合} */
+       if ( _kernel_win32_blIntCtx )
+       {
+               /* %jp{割り込み状態を解除} */
+               _kernel_win32_blIntCtx = FALSE;
+
+               /* 切り替え先のスレッドを起こす */
+               _kernel_run_ctx(ctxcb_nxt);
+
+               /* 遅延ディスパッチあり */
+               _kernel_win32_blDlyDsp = TRUE;
+
+               return;
+       }
+       else
+       {
+               /* %jp{切り替え先のスレッドを起こす} */
+               _kernel_run_ctx(ctxcb_nxt);
+               
+               /* %jp{自分自身をサスペンドさせる} */
+               SuspendThread(ctxcb_now->hThread);
+
+               /* %jp{直前のタスクが確実にサスペンドするのを待つ} */
+               _kernel_wai_ctx(_kernel_win32_oldctxcb);
+               _kernel_win32_oldctxcb = NULL;
+       }
+}
+
+
+/** %jp{スレッドの停止待ち} */
+void _kernel_wai_ctx(_KERNEL_T_CTXCB *pk_ctxcb)
+{
+       if ( pk_ctxcb == NULL )
+       {
+               return;
+       }
+
+       while ( SuspendThread(pk_ctxcb->hThread) != 1 )
+       {
+               ResumeThread(pk_ctxcb->hThread);
+               Sleep(1);
+       }
+       ResumeThread(pk_ctxcb->hThread);
+}
+
+
+
+/** %jp{アイドル時の処理} */
+void _kernel_wai_int(void)
+{
+       Sleep(10);
+}
+
+
+/** %jp{コンテキストの開始} */
+void _kernel_sta_ctx(_KERNEL_T_CTXCB *pk_ctxcb)
+{
+       /* %jp{スレッドの実行開始} */
+       _kernel_run_ctx(pk_ctxcb);
+
+       if ( GetCurrentThreadId() == _kernel_win32_hPrimaryThreadId )
+       {
+               /* %jp{ダイアログを表示} */
+               MessageBox(NULL, "Press OK, Exit a process", "Hyper Operationg System V4 Advance for Win32", MB_OK);
+
+               /* %jp{終了} */
+               ExitProcess(0);
+       }
+}
+
+
+/** %jp{スレッドの実行開始} */
+void _kernel_run_ctx(_KERNEL_T_CTXCB *pk_ctxcb)
+{
+       /* %jp{実行中コンテキストの登録} */
+       _kernel_win32_oldctxcb = _kernel_win32_runctxcb;
+       _kernel_win32_runctxcb = pk_ctxcb;
+       
+       /* %jp{割り込みから中断されていた場合} */
+       if ( pk_ctxcb->blIntSuspend )
+       {
+               pk_ctxcb->blIntSuspend = FALSE;
+
+               _kernel_win32_blDisInt = FALSE;
+               ReleaseSemaphore(_kernel_win32_hSemDisInt, 1, NULL);
+       }
+       
+       /* %jp{スレッドを起こす} */
+       ResumeThread(pk_ctxcb->hThread);
+}
+
+
+
+/* %jp{割り込み用処理} */
+void vsig_int(int inhno)
+{
+       WaitForSingleObject(_kernel_win32_hSemIntCtx, INFINITE);
+
+       /* %jp{割り込み用セマフォを取る} */
+       WaitForSingleObject(_kernel_win32_hSemDisInt, INFINITE);
+       _kernel_win32_blDisInt = TRUE;
+       
+       /* %jp{現在実行中のスレッドを止める} */
+       SuspendThread(_kernel_win32_runctxcb->hThread);
+       _kernel_win32_runctxcb->blIntSuspend = TRUE;
+       
+       /* %jp{割り込み状態に設定} */
+       _kernel_win32_blIntCtx = TRUE;
+       _kernel_win32_blDlyDsp = FALSE;
+       
+       /* %jp{割り込み処理} */
+       _kernel_sta_inh();
+       _kernel_exe_inh(inhno);
+       _kernel_end_inh();
+       
+       /* %jp{遅延ディスパッチが発生しなければ復帰処理} */
+       if ( !_kernel_win32_blDlyDsp )
+       {
+               /* %jp{割り込み状態を解除} */
+               _kernel_win32_blIntCtx = FALSE;
+               
+               /* %jp{割り込み用セマフォを返す} */
+               _kernel_win32_blDisInt = FALSE;
+               ReleaseSemaphore(_kernel_win32_hSemDisInt, 1, NULL);
+               
+               /* %jp{現在実行中のスレッドを再開} */
+               _kernel_win32_runctxcb->blIntSuspend = FALSE;
+               ResumeThread(_kernel_win32_runctxcb->hThread);          
+       }
+
+       ReleaseSemaphore(_kernel_win32_hSemIntCtx, 1, NULL);            
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/core/dsp/dsp_tsk.c b/kernel/source/core/dsp/dsp_tsk.c
new file mode 100755 (executable)
index 0000000..6fd8f69
--- /dev/null
@@ -0,0 +1,78 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  dsp_tsk.c
+ * @brief %en{Task dispatch}%jp{タスクディスパッチ}
+ *
+ * @version $Id: dsp_tsk.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+
+/** %jp{タスクディスパッチ}%en{Task dispatch}
+ * @return void
+ */
+void _kernel_dsp_tsk(void)
+{
+       _KERNEL_T_TSKHDL tskhdl_run;
+       _KERNEL_T_TSKHDL tskhdl_top;
+       _KERNEL_T_CTXCB  *ctxcb_run;
+       _KERNEL_T_CTXCB  *ctxcb_top;
+       
+       /* %jp{タスクディスパッチ不可なら保留して抜ける} */
+       if ( _KERNEL_SYS_SNS_DPN() )
+       {
+               _KERNEL_SYS_SET_DLY();
+               return;
+       }
+       
+       /* %jp{タスクハンドルを取得} */
+       tskhdl_run = _KERNEL_SYS_GET_RUNTSK();  /* %jp{実行中タスクを取得} */
+       tskhdl_top = _KERNEL_REF_RDQ();                 /* %jp{レディーキュー先頭タスクを取得} */
+       
+       
+       /* %jp{コンテキスト取得} */
+#if _KERNEL_SYSTSK_TCB
+
+       ctxcb_run = _KERNEL_TSK_GET_CTXCB(_KERNEL_TSK_TSKHDL2TCB(tskhdl_run));  /* %jp{実行中タスクのコンテキストを取得} */
+       ctxcb_top = _KERNEL_SYS_GET_SYSCTXCB();                 /* %jp{レディーキュー先頭タスクのコンテキストを取得} */
+
+#else
+
+       /* %jp{実行中タスクのコンテキストを取得} */
+       if ( tskhdl_run != _KERNEL_TSKHDL_NULL )
+       {
+               ctxcb_run = _KERNEL_TSK_GET_CTXCB(_KERNEL_TSK_TSKHDL2TCB(tskhdl_run));
+       }
+       else
+       {
+               ctxcb_run = _KERNEL_SYS_GET_SYSCTXCB();
+       }
+
+       /* %jp{レディーキュー先頭タスクのコンテキストを取得} */
+       if ( tskhdl_top != _KERNEL_TSKHDL_NULL )
+       {
+               ctxcb_top = _KERNEL_TSK_GET_CTXCB(_KERNEL_TSK_TSKHDL2TCB(tskhdl_top));
+       }
+       else
+       {
+               ctxcb_top = _KERNEL_SYS_GET_SYSCTXCB();
+       }
+
+#endif
+       
+       /* %jp{実行タスクの登録} */
+       _KERNEL_SYS_SET_RUNTSK(tskhdl_top);
+       
+       /* %jp{ディスパッチ実行} */
+       _KERNEL_SWI_CTX(ctxcb_run, ctxcb_top);
+}
+
+
+/* end of file */
diff --git a/kernel/source/core/dsp/ent_tsk.c b/kernel/source/core/dsp/ent_tsk.c
new file mode 100755 (executable)
index 0000000..f2397da
--- /dev/null
@@ -0,0 +1,36 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  dsp_tsk.c
+ * @brief %en{Task dispatch}%jp{タスクディスパッチ}
+ *
+ * @version $Id: ent_tsk.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{タスク起動時のエントリーポイント}%en{Task entry point}
+ * @return void
+ */
+void _kernel_ent_tsk(VP_INT exinf1, VP_INT exinf2)
+{
+       FP task;
+
+       task = (FP)exinf2;
+       
+       _KERNEL_LEAVE_SVC();
+
+       task(exinf1);
+
+       ext_tsk();
+}
+
+
+/* end of file */
diff --git a/kernel/source/core/dsp/idl_lop.c b/kernel/source/core/dsp/idl_lop.c
new file mode 100755 (executable)
index 0000000..143c01e
--- /dev/null
@@ -0,0 +1,31 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  idl_lop.c
+ * @brief %jp{アイドルループ}%en{idel loop}
+ *
+ * @version $Id: idl_lop.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{アイドルループ}%en{idel loop}
+ * @return void
+ */
+void _kernel_idl_lop(void)                             /**< %jp{アイドルループ}%en{idle loop} */
+{
+       for ( ; ; )
+       {
+               _kernel_wai_int();
+       }
+}
+
+
+/* end of file */
diff --git a/kernel/source/core/hep/alc_hep.c b/kernel/source/core/hep/alc_hep.c
new file mode 100755 (executable)
index 0000000..1ab2607
--- /dev/null
@@ -0,0 +1,67 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  alc_hep.c
+ * @brief %jp{メモリヒープのからメモリ割当て}%en{allocate memory}
+ *
+ * @version $Id: alc_hep.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/hep.h"
+
+
+/** %jp{メモリの割り当て} */
+VP _kernel_alc_hep(
+               _KERNEL_T_HEPCB *pk_hepcb,
+               SIZE           size)
+{
+       _KERNEL_T_HEPBLK *mblk;
+       _KERNEL_T_HEPBLK *mblk_next;
+       _KERNEL_T_HEPBLK *mblk_next2;
+       
+       /* %jp{ヒープの存在チェック} */
+       if ( pk_hepcb->base == NULL )
+       {
+               return NULL;
+       }
+       
+       /* %jp{サイズのアライメントを調整} */
+       size = _KERNEL_HEP_ALIGNED(size);
+       
+       /* %jp{空き領域を検索} */
+       mblk = pk_hepcb->base;
+       while ( mblk->size != 0 )
+       {
+               if ( mblk->flag == _KERNEL_HEP_FREE && mblk->size >= size )
+               {
+                       /* 十分な容量があったら */
+                       if ( mblk->size - size > _KERNEL_HEP_BLKSIZE + _KERNEL_HEP_MEMALIGN )
+                       {
+                               /* ブロックを分割する */
+                               mblk_next  = (_KERNEL_T_HEPBLK *)((UB *)mblk + _KERNEL_HEP_BLKSIZE + size);
+                               mblk_next2 = (_KERNEL_T_HEPBLK *)((UB *)mblk + _KERNEL_HEP_BLKSIZE + mblk->size);
+                               mblk_next->prev  = mblk;
+                               mblk_next->size  = mblk->size - size - _KERNEL_HEP_BLKSIZE;
+                               mblk_next->flag  = _KERNEL_HEP_FREE;
+                               mblk_next2->prev = mblk_next;
+                               mblk->size       = size;
+                       }
+                       mblk->flag = _KERNEL_HEP_USING;
+                       
+                       return (VP)((UB *)mblk + _KERNEL_HEP_BLKSIZE);
+               }
+               
+               /* 次のブロックへ進む */
+               mblk = (_KERNEL_T_HEPBLK *)((UB *)mblk + mblk->size + _KERNEL_HEP_BLKSIZE);
+       }
+
+       return NULL;    /* 空きが無い */
+}
+
+
+/* end of file */
diff --git a/kernel/source/core/hep/cre_hep.c b/kernel/source/core/hep/cre_hep.c
new file mode 100755 (executable)
index 0000000..64043dd
--- /dev/null
@@ -0,0 +1,56 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  hep.h
+ * @brief %jp{メモリヒープ生成}%en{create memory heap}
+ *
+ * @version $Id: cre_hep.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/hep.h"
+
+
+
+/** %jp{メモリヒープを生成} */
+void _kernel_cre_hep(
+               _KERNEL_T_HEPCB *pk_hepcb,
+               void           *p_base,
+               SIZE           size)
+{
+       _KERNEL_T_HEPBLK *blk_last;
+       
+       /* %jp{サイズのアライメントを調整} */
+       size &= ~(_KERNEL_HEP_MEMALIGN - 1);
+
+       /* %jp{サイズチェック} */
+       if ( size <= sizeof(_KERNEL_T_HEPBLK) )
+       {
+               pk_hepcb->base = NULL;
+               return;
+       }
+
+       /* %jp{設定保存} */
+       pk_hepcb->base   = (_KERNEL_T_HEPBLK *)p_base;
+       pk_hepcb->heapsz = size;
+       
+       /* %jp{終端位置に番人を設定} */
+       blk_last = (_KERNEL_T_HEPBLK *)((UB *)p_base + size - _KERNEL_HEP_BLKSIZE);
+       
+       /* %jp{全体を空き領域に設定} */
+       pk_hepcb->base->prev = NULL;
+       pk_hepcb->base->size = size - (_KERNEL_HEP_BLKSIZE * 2);
+       pk_hepcb->base->flag = _KERNEL_HEP_FREE;
+       
+       /* %jp{終端の番人を利用中に設定} */
+       blk_last->prev = NULL;
+       blk_last->size = 0;
+       blk_last->flag = _KERNEL_HEP_USING;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/core/hep/fre_hep.c b/kernel/source/core/hep/fre_hep.c
new file mode 100755 (executable)
index 0000000..1ad3cb3
--- /dev/null
@@ -0,0 +1,72 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  alc_hep.c
+ * @brief %jp{メモリヒープへメモリ返却}%en{memory free}
+ *
+ * @version $Id: fre_hep.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/hep.h"
+
+
+
+/** %jp{メモリの解放} */
+void _kernel_fre_hep(
+               _KERNEL_T_HEPCB *pk_hepcb,
+               VP             ptr)
+{
+       _KERNEL_T_HEPBLK *mblk;
+       _KERNEL_T_HEPBLK *mblktmp;
+       _KERNEL_T_HEPBLK *mblknext;
+
+       /* %jp{ポインタ範囲チェック */
+       if ( ptr < (VP)pk_hepcb->base || ptr >= (VP)((UB*)pk_hepcb->base + pk_hepcb->heapsz) )
+       {
+               return;
+       }
+
+       /* %jp{メモリブロック位置を取得 */
+       mblk = (_KERNEL_T_HEPBLK *)((UB *)ptr - _KERNEL_HEP_BLKSIZE);
+
+       /* %jp{パラメーターチェック */
+       if ( mblk->flag != _KERNEL_HEP_USING )  /* %jp{使用中で無ければ */
+       {
+               return;
+       }
+
+       /* %jp{フラグを未使用に設定} */
+       mblk->flag = _KERNEL_HEP_FREE;
+       
+       /* %jp{次のブロックをチェック} */
+       mblktmp = (_KERNEL_T_HEPBLK *)((UB *)ptr + mblk->size);
+       if ( mblktmp->flag == _KERNEL_HEP_FREE )
+       {
+               /* %jp{次のブロックが未使用なら結合する} */
+               mblknext = (_KERNEL_T_HEPBLK *)((UB *)mblktmp + mblktmp->size + _KERNEL_HEP_BLKSIZE);
+               mblknext->prev = mblk;
+               mblk->size += mblktmp->size + _KERNEL_HEP_BLKSIZE;
+       }
+
+       /* %jp{前のブロックをチェック} */
+       if ( mblk->prev != NULL )
+       {
+               mblktmp = mblk->prev;
+               if ( mblktmp->flag == _KERNEL_HEP_FREE )
+               {
+                       /* %jp{前のブロックが未使用なら結合する} */
+                       mblknext = (_KERNEL_T_HEPBLK *)((UB *)mblk + mblk->size + _KERNEL_HEP_BLKSIZE);
+                       mblknext->prev = mblktmp;
+                       mblktmp->size += mblk->size + _KERNEL_HEP_BLKSIZE;
+               }
+       }
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/core/que/add_que.c b/kernel/source/core/que/add_que.c
new file mode 100755 (executable)
index 0000000..247fe20
--- /dev/null
@@ -0,0 +1,41 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  add_que.c
+ * @brief %en{Add the task to the queue-tail}%jp{タスクをキュー末尾に追加}
+ *
+ * @version $Id: add_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+
+/** %jp{タスクをキュー末尾に追加}%en{Add the task to the queue-tail}
+ * @param  que   %jp{追加するキュー}%en{pointer of queue}
+ * @param  ptr   %jp{追加するタスク}%en{pointer of task}
+ * @param  atr   %jp{追加時の属性}%en{attribute}
+ * @return void
+ */
+void _kernel_add_que(
+               _KERNEL_T_QUE    *pk_que,
+               _KERNEL_T_TSKHDL tskhdl,
+               ATR              atr)
+{
+       if ( atr & TA_TPRI )
+       {
+               _kernel_adp_que(pk_que, tskhdl);        /* %jp{タスク優先度順に追加}%en{in the order of task's priority}  */
+       }
+       else
+       {
+               _kernel_adf_que(pk_que, tskhdl);        /* %jp{FIFO順に追加}%en{in the order of FIFO} */
+       }
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/core/que/adf_que.c b/kernel/source/core/que/adf_que.c
new file mode 100755 (executable)
index 0000000..32b77cf
--- /dev/null
@@ -0,0 +1,110 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  adf_que.h
+ * @brief %en{Add the task to queue in order of FIFO}%jp{FIFO順でキューにタスクを追加}
+ *
+ * @version $Id: adf_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST            /* %en{One-way list} %jp{単方向リスト} */
+
+
+/** %en{Add the task to queue in order of FIFO}%jp{FIFO順でキューにタスクを追加}
+ * @param      que   %en{pointer of queue}%jp{追加するキュー}
+ * @param      ptr   %en{pointer of task}%jp{追加するタスク}
+ * @return     void
+ */
+void _kernel_adf_que(
+               _KERNEL_T_QUE    *pk_que,
+               _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TSKHDL tskhdl_tail;
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_TCB    *tcb_tail;
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       /* %jp{タスクに所属キューを設定} */
+       _KERNEL_TSK_SET_QUE(tcb, pk_que);
+
+       /* %jp{キュー末尾のタスクを取得} */
+       tskhdl_tail = _KERNEL_QUE_GET_TAIL(pk_que);
+
+       if ( tskhdl_tail == _KERNEL_TSKHDL_NULL )       /* queue is empty */
+       {
+               _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl);
+       }
+       else    /* queue is not empty */
+       {
+               tcb_tail = _KERNEL_TSK_TSKHDL2TCB(tskhdl_tail);
+               _KERNEL_TSK_SET_QUENEXT(tcb, _KERNEL_TSK_GET_QUENEXT(tcb_tail));
+               _KERNEL_TSK_SET_QUENEXT(tcb_tail, tskhdl);
+       }
+       _KERNEL_QUE_SET_TAIL(pk_que, tskhdl);
+}
+
+
+#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST          /* %en{Two-way list} %jp{双方向リスト} */
+
+
+/** %en{Add the task to queue in order of FIFO}%jp{FIFO順でキューにタスクを追加}
+ * @param      que   %en{pointer of queue}%jp{追加するキュー}
+ * @param      ptr   %en{pointer of task}%jp{追加するタスク}
+ * @return     void
+ */
+void _kernel_adf_que(
+               _KERNEL_T_QUE    *pk_que,
+               _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TSKHDL tskhdl_head;
+       _KERNEL_T_TSKHDL tskhdl_tail;
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_TCB    *tcb_head;
+       _KERNEL_T_TCB    *tcb_tail;
+       
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       /* %jp{タスクに所属キューを設定} */
+       _KERNEL_TSK_SET_QUE(tcb, pk_que);
+
+       /* %jp{キュー先頭のタスクを取得} */
+       tskhdl_head = _KERNEL_QUE_GET_HEAD(pk_que);
+
+       if ( tskhdl_head == _KERNEL_TSKHDL_NULL )       /* queue is empty */
+       {
+               /* %jp{キューにタスクが無ければ先頭に設定} */
+               _KERNEL_QUE_SET_HEAD(pk_que, tskhdl);
+               _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl);
+               _KERNEL_TSK_SET_QUEPREV(tcb, tskhdl);
+       }
+       else    /* queue is not empty */
+       {
+               /* %jp{キュー末尾に追加} */
+               tcb_head    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_head);
+               tskhdl_tail = _KERNEL_TSK_GET_QUEPREV(tcb_head);
+               tcb_tail    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_tail);
+               _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl_head);
+               _KERNEL_TSK_SET_QUEPREV(tcb, tskhdl_tail);
+               _KERNEL_TSK_SET_QUENEXT(tcb_tail, tskhdl);
+               _KERNEL_TSK_SET_QUEPREV(tcb_head, tskhdl);
+       }
+}
+
+
+#endif
+
+
+
+/* end of file */
diff --git a/kernel/source/core/que/adp_que.c b/kernel/source/core/que/adp_que.c
new file mode 100755 (executable)
index 0000000..0c97d97
--- /dev/null
@@ -0,0 +1,178 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  adp_que.c
+ * @brief %en{Add the task to the queue in the order of the task's priority}%jp{タスクを優先度順でキューに追加}
+ *
+ * @version $Id: adp_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST            /* %en{One-way list} %jp{単方向リスト} */
+
+
+/** %en{Add the task to the queue in the order of the task's priority}%jp{タスクを優先度順でキューに追加}
+ * @param      que   %en{pointer of queue}%jp{追加するキュー}
+ * @param      ptr   %en{pointer of task}%jp{追加するタスク}
+ * @return     void
+ */
+void _kernel_adp_que(
+               _KERNEL_T_QUE    *pk_que,
+               _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TSKHDL tskhdl_tail;
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TSKHDL tskhdl_prev;
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_TCB    *tcb_next;
+       _KERNEL_T_TCB    *tcb_prev;
+       PRI              tskpri;
+       PRI              tskpri_next;
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       /* %jp{タスクに所属キューを設定} */
+       _KERNEL_TSK_SET_QUE(tcb, pk_que);
+
+       /* %jp{キュー末尾のタスクを取得} */
+       tskhdl_tail = _KERNEL_QUE_GET_TAIL(pk_que);
+
+       if ( tskhdl_tail == _KERNEL_TSKHDL_NULL )               /* %en{the queue is empty}%jp{キューにタスクが無ければ先頭に設定} */
+       {
+               _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl);
+               _KERNEL_QUE_SET_TAIL(pk_que, tskhdl);
+       }
+       else    /* %en{que is not empty}%jp{キューが空でないなら挿入位置を探索} */
+       {
+               /* %jp{タスク優先度を取得} */
+               tskpri = _KERNEL_TSK_GET_TSKPRI(tcb);
+
+               /* %jp{先頭から探索} */
+               tskhdl_prev = tskhdl_tail;
+               tcb_prev    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev);
+               tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_prev);
+               tcb_next    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next);
+               
+               for ( ; ; )
+               {
+                       /* %jp{優先度取り出し} */
+                       tskpri_next = _KERNEL_TSK_GET_TSKPRI(tcb_next);
+                       
+                       if ( tskpri_next > tskpri )
+                       {
+                               break;
+                       }
+                       
+                       /* %jp{次を探す} */
+                       tskhdl_prev = tskhdl_next;
+                       tcb_prev    = tcb_next;
+                       tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_next);
+                       tcb_next    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next);
+                       
+                       /* %jp{末尾なら抜ける} */
+                       if ( tskhdl_prev == tskhdl_tail )
+                       {
+                               _KERNEL_QUE_SET_TAIL(pk_que, tskhdl);
+                               break;
+                       }
+               }
+               
+               /* %jp{挿入} */
+               _KERNEL_TSK_SET_QUENEXT(tcb_prev, tskhdl);
+               _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl_next);
+       }
+}
+
+
+#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST          /* %en{Two-way list} %jp{双方向リスト} */
+
+
+/** %en{Add the task to the queue in the order of the task's priority}%jp{タスクを優先度順でキューに追加}
+ * @param      que   %en{pointer of queue}%jp{追加するキュー}
+ * @param      ptr   %en{pointer of task}%jp{追加するタスク}
+ * @return     void
+ */
+void _kernel_adp_que(
+               _KERNEL_T_QUE    *pk_que,
+               _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TSKHDL tskhdl_head;
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TSKHDL tskhdl_prev;
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_TCB    *tcb_next;
+       _KERNEL_T_TCB    *tcb_prev;
+       PRI              tskpri;
+       PRI              tskpri_next;
+
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       /* %jp{タスクに所属キューを設定} */
+       _KERNEL_TSK_SET_QUE(tcb, pk_que);
+
+       /* %jp{キュー末尾のタスクを取得} */
+       tskhdl_head = _KERNEL_QUE_GET_HEAD(pk_que);
+       
+       if ( tskhdl_head == _KERNEL_TSKHDL_NULL )               /* %en{the queue is empty}%jp{キューにタスクが無ければ先頭に設定} */
+       {
+               _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl);
+               _KERNEL_TSK_SET_QUEPREV(tcb, tskhdl);
+               _KERNEL_QUE_SET_HEAD(pk_que, tskhdl);
+       }
+       else    /* %en{que is not empty}%jp{キューが空でないなら挿入位置を探索} */
+       {
+               /* %jp{タスク優先度を取得} */
+               tskpri = _KERNEL_TSK_GET_TSKPRI(tcb);
+               
+               /* %jp{先頭から探索} */
+               tskhdl_next = tskhdl_head;
+               tcb_next    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next);
+               
+               do
+               {
+                       /* %jp{優先度取り出し} */
+                       tskpri_next = _KERNEL_TSK_GET_TSKPRI(tcb_next);
+                       
+                       if ( tskpri_next > tskpri )
+                       {
+                               if ( tskhdl_next == tskhdl_head )       /* %jp{挿入位置が先頭だった場合} */
+                               {
+                                       tskhdl_prev = _KERNEL_TSK_GET_QUEPREV(tcb_next);
+                                       tcb_prev    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev);
+                                       _KERNEL_QUE_SET_HEAD(pk_que, tskhdl);
+                               }
+                               break;
+                       }
+                       
+                       /* %jp{次を探す} */
+                       tskhdl_prev = tskhdl_next;
+                       tcb_prev    = tcb_next;
+                       tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_next);
+                       tcb_next    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next);
+               } while ( tskhdl_next != tskhdl_head );
+               
+               /* %jp{挿入} */
+               _KERNEL_TSK_SET_QUENEXT(tcb, tskhdl_next);
+               _KERNEL_TSK_SET_QUEPREV(tcb, tskhdl_prev);
+               _KERNEL_TSK_SET_QUENEXT(tcb_prev, tskhdl);
+               _KERNEL_TSK_SET_QUEPREV(tcb_next, tskhdl);
+       }
+}
+
+
+#endif
+
+
+
+/* end of file */
diff --git a/kernel/source/core/que/nxt_que.c b/kernel/source/core/que/nxt_que.c
new file mode 100755 (executable)
index 0000000..cb93307
--- /dev/null
@@ -0,0 +1,77 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  rmh_que.h
+ * @brief %jp{キュー先頭タスクの取り出し}%en{}
+ *
+ * @version $Id: nxt_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST            /* %en{One-way list} %jp{単方向リスト} */
+
+
+/** %jp{キューの次のタスクの取り出し}%en{}
+ * @param      pk_que  %jp{取り出すキュー}%en{queue}
+ * @return     %jp{次のタスクを返す。末尾の場合は _KERNEL_TSKHDL_NULL を返す}
+ */
+_KERNEL_T_TSKHDL _kernel_nxt_que(
+               _KERNEL_T_QUE    *pk_que,
+               _KERNEL_T_TSKHDL tskhdl)
+{
+       /** %jp{末尾ならNULLを返す} */
+       if ( tskhdl == _KERNEL_QUE_GET_TAIL(pk_que) )
+       {
+               return _KERNEL_TSKHDL_NULL;
+       }
+
+       /** %jp{次のタスクを返す} */
+       return _KERNEL_TSK_GET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl));
+}
+
+
+#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST          /* %en{Two-way list} %jp{双方向リスト} */
+
+
+
+/** %jp{キューの次のタスクの取り出し}%en{}
+ * @param      pk_que  %jp{取り出すキュー}%en{queue}
+ * @return     %jp{次のタスクを返す。末尾の場合は _KERNEL_TSKHDL_NULL を返す}
+ */
+_KERNEL_T_TSKHDL _kernel_nxt_que(
+               _KERNEL_T_QUE    *pk_que,
+               _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TCB    *tcb;
+       
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       /** %jp{次のタスクを取得} */
+       tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb);
+
+       /** %jp{末尾ならNULLを返す} */
+       if ( tskhdl_next == _KERNEL_QUE_GET_HEAD(pk_que) )
+       {
+               return _KERNEL_TSKHDL_NULL;
+       }
+
+       /** %jp{次のタスクを返す} */
+       return tskhdl_next;
+}
+
+
+#endif
+
+
+
+/* end of file */
diff --git a/kernel/source/core/que/rmh_que.c b/kernel/source/core/que/rmh_que.c
new file mode 100755 (executable)
index 0000000..3ae71bf
--- /dev/null
@@ -0,0 +1,105 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  rmh_que.h
+ * @brief %jp{キュー先頭タスクの取り出し}%en{}
+ *
+ * @version $Id: rmh_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST            /* %en{One-way list} %jp{単方向リスト} */
+
+
+/** %jp{キュー先頭タスクの取り出し}%en{}
+ * @param      pk_que  %jp{取り出すキュー}%en{queue}
+ * @return     void
+ */
+_KERNEL_T_TSKHDL _kernel_rmh_que(
+               _KERNEL_T_QUE *pk_que)
+{
+       _KERNEL_T_TSKHDL tskhdl_head;
+       _KERNEL_T_TSKHDL tskhdl_tail;
+       _KERNEL_T_TCB    *tcb_head;
+       _KERNEL_T_TCB    *tcb_tail;
+
+       tskhdl_tail = _KERNEL_QUE_GET_TAIL(pk_que);
+       if ( tskhdl_tail == _KERNEL_TSKHDL_NULL )
+       {
+               return _KERNEL_TSKHDL_NULL;
+       }
+       
+       tcb_tail    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_tail);
+       tskhdl_head = _KERNEL_TSK_GET_QUENEXT(tcb_tail);
+       tcb_head    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_head);
+
+       if ( tskhdl_head == tskhdl_tail )
+       {
+               _KERNEL_QUE_SET_TAIL(pk_que, _KERNEL_TSKHDL_NULL);
+       }
+       else
+       {
+               _KERNEL_TSK_SET_QUENEXT(tcb_tail, _KERNEL_TSK_GET_QUENEXT(tcb_head));
+       }
+       
+       _KERNEL_TSK_SET_QUE(tcb_head, NULL);
+
+       return tskhdl_head;
+}
+
+
+#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST          /* %en{Two-way list} %jp{双方向リスト} */
+
+
+
+/** %jp{キュー先頭タスクの取り出し}%en{}
+ * @param      pk_que  %jp{取り出すキュー}%en{queue}
+ * @return     void
+ */
+_KERNEL_T_TSKHDL _kernel_rmh_que(
+               _KERNEL_T_QUE *pk_que)
+{
+       _KERNEL_T_TSKHDL tskhdl_head;
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TSKHDL tskhdl_prev;
+       _KERNEL_T_TCB    *tcb_head;
+
+       tskhdl_head = _KERNEL_QUE_GET_HEAD(pk_que);
+       if ( tskhdl_head == _KERNEL_TSKHDL_NULL )
+       {
+               return _KERNEL_TSKHDL_NULL;
+       }
+
+       tcb_head    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_head);
+       tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_head);
+       if ( tskhdl_head == tskhdl_next )
+       {
+               _KERNEL_QUE_SET_HEAD(pk_que, _KERNEL_TSKHDL_NULL);
+       }
+       else
+       {
+               tskhdl_prev = _KERNEL_TSK_GET_QUEPREV(tcb_head);
+               _KERNEL_TSK_SET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl_prev), tskhdl_next);
+               _KERNEL_TSK_SET_QUEPREV(_KERNEL_TSK_TSKHDL2TCB(tskhdl_next), tskhdl_prev);
+               _KERNEL_QUE_SET_HEAD(pk_que, tskhdl_next);
+       }
+
+       _KERNEL_TSK_SET_QUE(tcb_head, NULL);
+
+       return tskhdl_head;
+}
+
+
+#endif
+
+
+
+/* end of file */
diff --git a/kernel/source/core/que/rmv_que.c b/kernel/source/core/que/rmv_que.c
new file mode 100755 (executable)
index 0000000..d6e4cbc
--- /dev/null
@@ -0,0 +1,115 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  knl_que.h
+ * @brief %en{queue object heder file}%jp{キューオブジェクトのヘッダファイル}
+ *
+ * @version $Id: rmv_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST            /* %en{One-way list} %jp{単方向リスト} */
+
+
+/** %en{Remove the task from the queuqe} %jp{タスクをから取り外す}
+ * @param      ptr   %en{pointer of task}%jp{取り外すタスク}
+ * @return     void
+ */
+void _kernel_rmv_que(
+               _KERNEL_T_QUE    *pk_que,
+               _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TSKHDL tskhdl_prev;
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_TCB    *tcb_next;
+       _KERNEL_T_TCB    *tcb_prev;
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb);
+       if ( tskhdl_next == tskhdl )    /* last one */
+       {
+               _KERNEL_QUE_SET_TAIL(pk_que, _KERNEL_TSKHDL_NULL);
+       }
+       else
+       {
+               tskhdl_prev = _KERNEL_QUE_GET_TAIL(pk_que);
+               tcb_prev    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev);
+               for ( ; ; )
+               {
+                       tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_prev);
+                       if ( tskhdl_next == tskhdl )
+                       {
+                               break;
+                       }
+                       tskhdl_prev = tskhdl_next;
+                       tcb_prev    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev);
+               }
+               tcb_next    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next);
+               tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb_next);
+
+               _KERNEL_TSK_SET_QUENEXT(tcb_prev, tskhdl_next);
+               if ( tskhdl == _KERNEL_QUE_GET_TAIL(pk_que) )
+               {
+                       _KERNEL_QUE_SET_TAIL(pk_que, tskhdl_prev);
+               }
+       }
+       
+       _KERNEL_TSK_SET_QUE(tcb, NULL);
+}
+
+
+#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST          /* %en{Two-way list} %jp{双方向リスト} */
+
+
+/** %en{Remove the task from the queuqe} %jp{タスクをから取り外す}
+ * @param      ptr   %en{pointer of task}%jp{取り外すタスク}
+ * @return     void
+ */
+void _kernel_rmv_que(
+               _KERNEL_T_QUE    *pk_que,
+               _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TSKHDL tskhdl_prev;
+       _KERNEL_T_TCB    *tcb;
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       tskhdl_next = _KERNEL_TSK_GET_QUENEXT(tcb);
+       if ( tskhdl_next == tskhdl )    /* last one */
+       {
+               _KERNEL_QUE_SET_HEAD(pk_que, _KERNEL_TSKHDL_NULL);
+       }
+       else
+       {
+               tskhdl_prev = _KERNEL_TSK_GET_QUEPREV(tcb);
+               
+               _KERNEL_TSK_SET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl_prev), tskhdl_next);
+               _KERNEL_TSK_SET_QUEPREV(_KERNEL_TSK_TSKHDL2TCB(tskhdl_next), tskhdl_prev);
+               if ( tskhdl == _KERNEL_QUE_GET_HEAD(pk_que) )
+               {
+                       _KERNEL_QUE_SET_HEAD(pk_que, tskhdl_next);
+               }
+       }
+       
+       _KERNEL_TSK_SET_QUE(tcb, NULL);
+}
+
+
+#endif
+
+
+
+/* end of file */
diff --git a/kernel/source/core/que/rot_que.c b/kernel/source/core/que/rot_que.c
new file mode 100755 (executable)
index 0000000..7f25a09
--- /dev/null
@@ -0,0 +1,68 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  rot_que.c
+ * @brief %en{Rotate queue}%jp{キューの回転}
+ *
+ * @version $Id: rot_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+
+#if _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_ONEWAYLIST            /* %en{One-way list}%jp{単方向リスト} */
+
+
+/** %en{Rotate Queue}%jp{キューの回転}
+ * @param  que   %en{pointer of queue}%jp{回転させるキュー}
+ * @return void
+ */
+void _kernel_rot_que(
+               _KERNEL_T_QUE *pk_que)
+{
+       _KERNEL_T_TSKHDL tskhdl_tail;
+       
+       tskhdl_tail = _KERNEL_QUE_GET_TAIL(pk_que);
+       
+       if ( tskhdl_tail != _KERNEL_TSKHDL_NULL )
+       {
+               tskhdl_tail = _KERNEL_TSK_GET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl_tail));
+               _KERNEL_QUE_SET_TAIL(pk_que, tskhdl_tail);
+       }
+}
+
+
+#elif _KERNEL_CFG_QUE_ALGORITHM == _KERNEL_QUE_ALG_TWOWAYLIST          /* %en{Two-way list}%jp{双方向リスト} */
+
+
+/** %en{Rotate Queue}%jp{キューの回転}
+ * @param  que   %en{pointer of queue}%jp{回転させるキュー}
+ * @return void
+ */
+void _kernel_rot_que(
+               _KERNEL_T_QUE *pk_que)
+{
+       _KERNEL_T_TSKHDL tskhdl_head;
+       
+       tskhdl_head = _KERNEL_QUE_GET_HEAD(pk_que);
+
+       if ( tskhdl_head != _KERNEL_TSKHDL_NULL )
+       {
+               tskhdl_head = _KERNEL_TSK_GET_QUENEXT(_KERNEL_TSK_TSKHDL2TCB(tskhdl_head));
+               _KERNEL_QUE_SET_HEAD(pk_que, tskhdl_head);
+       }
+}
+
+
+#endif
+
+
+
+/* end of file */
diff --git a/kernel/source/core/que/trm_que.c b/kernel/source/core/que/trm_que.c
new file mode 100755 (executable)
index 0000000..460e670
--- /dev/null
@@ -0,0 +1,31 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  knl_que.h
+ * @brief %en{queue object heder file}%jp{キューオブジェクトのヘッダファイル}
+ *
+ * @version $Id: trm_que.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+void _kernel_trm_que(
+               _KERNEL_T_TSKHDL tskhdl)
+{
+       _KERNEL_T_QUE *pk_que;
+
+       pk_que = _KERNEL_TSK_GET_QUE(_KERNEL_TSK_TSKHDL2TCB(tskhdl));
+       if ( pk_que != NULL )
+       {
+               _kernel_rmv_que(pk_que, tskhdl);
+       }
+}
+
+
+/* end of file */
diff --git a/kernel/source/core/tmq/add_tmq.c b/kernel/source/core/tmq/add_tmq.c
new file mode 100755 (executable)
index 0000000..305f3da
--- /dev/null
@@ -0,0 +1,51 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  add_tmq.c
+ * @brief %jp{タイマキューにオブジェクトを追加}
+ *
+ * @version $Id: add_tmq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "core/tmq.h"
+
+
+
+/* タイマオブジェクトをリストに追加 */
+void _kernel_add_tmq(
+               _KERNEL_T_TMQ    *pk_tmq,
+               _KERNEL_T_TIMOBJ *pk_timobj)
+{
+       /* 既に登録されていたら何もしない */
+       if ( pk_timobj->next != NULL )
+       {
+               return;
+       }
+       
+       /* リストに登録 */
+       if ( pk_tmq->head == NULL )
+       {
+               /* リストが空の場合の追加 */
+               pk_timobj->next = pk_timobj;
+               pk_timobj->prev = pk_timobj;
+               pk_tmq->head    = pk_timobj;
+       }
+       else
+       {
+               /* リストの末尾に追加 */
+               pk_timobj->next       = pk_tmq->head;
+               pk_timobj->prev       = pk_tmq->head->prev;
+               pk_timobj->next->prev = pk_timobj;
+               pk_timobj->prev->next = pk_timobj;
+       }
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/core/tmq/rmv_tmq.c b/kernel/source/core/tmq/rmv_tmq.c
new file mode 100755 (executable)
index 0000000..7fc7e86
--- /dev/null
@@ -0,0 +1,62 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  add_tmq.c
+ * @brief %jp{タイマキューにオブジェクトを追加}
+ *
+ * @version $Id: rmv_tmq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "core/tmq.h"
+
+
+
+/* タイマオブジェクトをリストから削除 */
+void _kernel_rmv_tmq(
+               _KERNEL_T_TMQ    *pk_tmq,
+               _KERNEL_T_TIMOBJ *pk_timobj)
+{
+       /* 未登録なら何もしない */
+       if ( pk_timobj->next == NULL )
+       {
+               return;
+       }
+       
+       /* 検索中のタイマならポインタをずらす(再入対策) */
+       if ( pk_timobj == pk_tmq->next )
+       {
+               pk_tmq->next = pk_timobj->next;         /* 次のオブジェクトに移動 */
+       }
+       
+       /* リストから削除 */
+       if ( pk_timobj == pk_timobj->next )
+       {
+               /* リストが空になる場合 */
+               pk_tmq->head = NULL;
+               pk_tmq->next = NULL;
+       }
+       else
+       {
+               /* 先頭なら先頭位置をずらす */
+               if ( pk_timobj == pk_tmq->head )
+               {
+                       pk_tmq->head = pk_timobj->next;
+               }
+               
+               /* リストから削除 */
+               pk_timobj->next->prev = pk_timobj->prev;
+               pk_timobj->prev->next = pk_timobj->next;
+       }
+
+       /* 未登録に設定 */
+       pk_timobj->next = NULL;
+}
+
+
+/* end of file */
diff --git a/kernel/source/core/tmq/sig_tmq.c b/kernel/source/core/tmq/sig_tmq.c
new file mode 100755 (executable)
index 0000000..f2367b0
--- /dev/null
@@ -0,0 +1,62 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  add_tmq.c
+ * @brief %jp{タイマキューにオブジェクトを追加}
+ *
+ * @version $Id: sig_tmq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "core/tmq.h"
+
+
+
+/* タイマオブジェクトをリストから削除 */
+void _kernel_sig_tmq(
+               _KERNEL_T_TMQ *pk_tmq,
+               RELTIM        tictim)
+{
+       _KERNEL_T_TIMOBJ *timobj;
+       
+       /* タイマオブジェクトのハンドラ呼び出し */
+       if ( pk_tmq->head != NULL )
+       {
+               /* 検索ポインタ設定 */
+               pk_tmq->next = pk_tmq->head;
+               
+               do /* リスト末尾まで繰り返し */
+               {
+                       /* 次のポインタを事前に設定 */
+                       timobj       = pk_tmq->next;
+                       pk_tmq->next = timobj->next;
+                       
+                       while ( timobj->lefttim <= tictim )
+                       {
+                               /* タイマハンドラ呼び出し */
+                               timobj->timhdr(timobj);
+                               
+                               /* ハンドラ内で削除された場合 */
+                               if ( timobj->next == NULL )
+                               {
+                                       goto loop_continue;
+                               }
+                       }
+                       timobj->lefttim -= tictim;
+
+loop_continue:
+                       ;
+               } while ( pk_tmq->next != pk_tmq->head );
+               
+               /* 検索ポインタのクリア */
+               pk_tmq->next = NULL;
+       }
+}
+
+
+/* end of file */
diff --git a/kernel/source/core/toq/add_toq.c b/kernel/source/core/toq/add_toq.c
new file mode 100755 (executable)
index 0000000..8e5f6ba
--- /dev/null
@@ -0,0 +1,104 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  add_toq.c
+ * @brief %jp{タスクをタイムアウトキューに追加}
+ *
+ * @version $Id: add_toq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_SPT_TOQ
+
+/** %jp{タイムアウト待ち行列にタスクを追加} */
+void _kernel_add_toq(
+               _KERNEL_T_TSKHDL tskhdl,
+               RELTIM           tmout)
+{
+       _KERNEL_T_TSKHDL tskhdl_head;
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TSKHDL tskhdl_prev;
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_TCB    *tcb_next;
+       _KERNEL_T_TCB    *tcb_prev;
+       RELTIM           tmout_next;
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       /* %jp{先頭タスク取得} */
+       tskhdl_head = _KERNEL_TOQ_GET_HED_TSK();
+
+       if ( tskhdl_head == _KERNEL_TSKHDL_NULL )
+       {
+               /* %jp{最初の1つをキューに登録} */
+               _KERNEL_TSK_SET_TOQNEXT(tcb, tskhdl);
+               _KERNEL_TSK_SET_TOQPREV(tcb, tskhdl);
+               _KERNEL_TOQ_SET_HED_TSK(tskhdl);
+
+               /* %jp{タイムアウト時刻を設定} */
+               _KERNEL_TSK_SET_TOQDIFTIM(tcb, tmout);
+
+               return;
+       }
+       
+       /* %jp{挿入場所を検索} */
+       tskhdl_next = tskhdl_head;
+       tcb_next     = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next);
+       do
+       {
+               tmout_next = _KERNEL_TSK_GET_TOQDIFTIM(tcb_next);
+               
+               /* %jp{時間比較} */
+               if ( tmout < tmout_next )
+               {
+                       /* %jp{先頭なら */
+                       if ( tskhdl_next == tskhdl_head )
+                       {
+                               _KERNEL_TOQ_SET_HED_TSK(tskhdl);        /* %jp{先頭ポインタ更新} */
+                               tskhdl_prev = _KERNEL_TSK_GET_TOQPREV(tcb_next);
+                               tcb_prev    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev);
+                       }
+
+                       /* %jp{時間の差分を設定} */
+                       _KERNEL_TSK_SET_TOQDIFTIM(tcb_next, tmout_next - tmout);
+                       _KERNEL_TSK_SET_TOQDIFTIM(tcb, tmout);
+
+                       /* %jp{リストに挿入} */
+                       _KERNEL_TSK_SET_TOQNEXT(tcb, tskhdl_next);
+                       _KERNEL_TSK_SET_TOQPREV(tcb, tskhdl_prev);
+                       _KERNEL_TSK_SET_TOQNEXT(tcb_prev, tskhdl);
+                       _KERNEL_TSK_SET_TOQPREV(tcb_next, tskhdl);
+                                               
+                       return;
+               }
+               
+               tmout -= tmout_next;            /* %jp{差分を減算} */
+               
+               tskhdl_prev = tskhdl_next;
+               tcb_prev    = tcb_next;
+               tskhdl_next = _KERNEL_TSK_GET_TOQNEXT(tcb_next);                /* %jp{次のタスクへ進む} */
+               tcb_next    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next);
+       } while ( tskhdl_next != tskhdl_head ); /* %jp{リストを一周するまでループ} */
+
+       /* 残った差分を設定 */
+       _KERNEL_TSK_SET_TOQDIFTIM(tcb, tmout);
+
+       /* %jp{末尾に追加} */
+       _KERNEL_TSK_SET_TOQNEXT(tcb, tskhdl_next);
+       _KERNEL_TSK_SET_TOQPREV(tcb, tskhdl_prev);
+       _KERNEL_TSK_SET_TOQNEXT(tcb_prev, tskhdl);
+       _KERNEL_TSK_SET_TOQPREV(tcb_next, tskhdl);
+}
+
+#endif /* _KERNEL_SPT_TMOUT */
+
+
+/* end of file */
diff --git a/kernel/source/core/toq/rmv_toq.c b/kernel/source/core/toq/rmv_toq.c
new file mode 100755 (executable)
index 0000000..03b169e
--- /dev/null
@@ -0,0 +1,78 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  rmv_toq.c
+ * @brief %jp{タスクをタイムアウトキューから削除}
+ *
+ * @version $Id: rmv_toq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_SPT_TOQ
+
+/* タイムアウト待ち行列からタスクを取り除く */
+void _kernel_rmv_toq(
+               _KERNEL_T_TSKHDL tskhdl)        /* 待ち行列から削除するタスク */
+{
+       _KERNEL_T_TSKHDL tskhdl_prev;
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_TCB    *tcb_prev;
+       _KERNEL_T_TCB    *tcb_next;
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       tskhdl_prev = _KERNEL_TSK_GET_TOQPREV(tcb);
+
+       /* タイムアウトキューに未接続なら無視 */
+       if ( tskhdl_prev == _KERNEL_TSKHDL_NULL )
+       {
+               return;
+       }
+       
+       /* キューの最後の1つタスクなら */
+       if ( tskhdl_prev == tskhdl )
+       {
+               _KERNEL_TOQ_SET_HED_TSK(_KERNEL_TSKHDL_NULL);           /* タイムアウトキューを空にする */
+       }
+       else
+       {
+               tskhdl_next = _KERNEL_TSK_GET_TOQNEXT(tcb);
+               tcb_next    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next);
+               tskhdl_prev = _KERNEL_TSK_GET_TOQPREV(tcb);
+               tcb_prev    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev);
+
+               /* 末尾でなければ */
+               if ( tskhdl_next != _KERNEL_TOQ_GET_HED_TSK() )
+               {
+                       /* 時間差分を清算 */
+                       _KERNEL_TSK_SET_TOQDIFTIM(tcb_next, _KERNEL_TSK_GET_TOQDIFTIM(tcb_next) + _KERNEL_TSK_GET_TOQDIFTIM(tcb));
+               }
+               
+               /* 先頭なら */
+               if ( tskhdl == _KERNEL_TOQ_GET_HED_TSK() )
+               {
+                       _KERNEL_TOQ_SET_HED_TSK(tskhdl_next);   /* 先頭位置更新 */
+               }
+               
+               /* キューから外す */
+               _KERNEL_TSK_SET_TOQNEXT(tcb_prev, tskhdl_next);
+               _KERNEL_TSK_SET_TOQPREV(tcb_next, tskhdl_prev);
+       }
+       
+       /* 未接続に設定 */
+       _KERNEL_TSK_SET_TOQPREV(tcb, _KERNEL_TSKHDL_NULL);
+}
+
+#endif /* _KERNEL_SPT_TMOUT    */
+
+
+/* end of file */
diff --git a/kernel/source/core/toq/sig_toq.c b/kernel/source/core/toq/sig_toq.c
new file mode 100755 (executable)
index 0000000..d2a0cec
--- /dev/null
@@ -0,0 +1,97 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  _tic_toq.c
+ * @brief %jp{タスクをタイムアウトキューに追加}
+ *
+ * @version $Id: sig_toq.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+#if _KERNEL_SPT_TOQ
+
+/* タイムアウトにタイムティック供給 */
+void _kernel_sig_toq(
+               RELTIM tictim)          /* 追加するタイムティック */
+{
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TSKHDL tskhdl_prev;
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_TCB    *tcb_next;
+       _KERNEL_T_TCB    *tcb_prev;
+       _KERNEL_TSK_T_RELTIM diftim;
+
+       /* %jp{先頭タスク取得} */
+       tskhdl = _KERNEL_TOQ_GET_HED_TSK();
+
+       /* %jp{タイムアウトキューが空ならリターン} */
+       if ( tskhdl == _KERNEL_TSKHDL_NULL )
+       {
+               return;
+       }
+
+       /* %jp{タイムアウトキューの処理} */
+       for ( ; ; )
+       {
+               tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+               diftim = _KERNEL_TSK_GET_TOQDIFTIM(tcb);
+               
+               /* %jp{タイムアウトに達しないなら} */
+               if ( diftim > tictim )
+               {
+                       _KERNEL_TSK_SET_TOQDIFTIM(tcb, diftim - tictim);                /* %jp{タイムアウト時間を減算} */
+                       break;
+               }
+               
+               tictim -= diftim;                               /* %jp{タイムティックを減算} */
+               
+               _KERNEL_TSK_SET_ERCD(tcb, E_TMOUT);
+               _KERNEL_DSP_WUP_TSK(tskhdl);
+
+               _KERNEL_DSP_TSK();                              /* %jp{遅延ディスパッチ予約を行う} */
+               
+               /* %jp{キューから外す} */
+               tskhdl_next = _KERNEL_TSK_GET_TOQNEXT(tcb);
+               tcb_next    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_next);
+               tskhdl_prev = _KERNEL_TSK_GET_TOQPREV(tcb);
+               tcb_prev    = _KERNEL_TSK_TSKHDL2TCB(tskhdl_prev);
+               if ( tskhdl_next == tskhdl )    /* %jp{最後の1つなら} */
+               {
+                       /* %jp{キューを空にする} */
+                       _KERNEL_TSK_SET_TOQPREV(tcb, _KERNEL_TSKHDL_NULL);
+                       tskhdl = _KERNEL_TSKHDL_NULL;
+                       break;
+               }
+
+               /* %jp{キューから取り外す} */
+               _KERNEL_TSK_SET_TOQNEXT(tcb_prev, tskhdl_next);
+               _KERNEL_TSK_SET_TOQPREV(tcb_next, tskhdl_prev);
+               _KERNEL_TSK_SET_TOQPREV(tcb, _KERNEL_TSKHDL_NULL);
+               
+               tskhdl = tskhdl_next;
+               tcb    = tcb_next;
+               
+               /* %jp{ここで一度、多重割り込みの機会を与える} */
+#if 0
+               _kernel_unl_sys();
+               _kernel_loc_sys();
+#endif
+       }
+       
+       /* %jp{メモリに書き戻す} */
+       _KERNEL_TOQ_SET_HED_TSK(tskhdl);
+}
+
+#endif /* _KERNEL_SPT_TMOUT    */
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/acre_flg.c b/kernel/source/object/flg/acre_flg.c
new file mode 100755 (executable)
index 0000000..db16d4d
--- /dev/null
@@ -0,0 +1,100 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  acre_flg.c
+ * @brief %jp{イベントフラグの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)}
+ *
+ * @version $Id: acre_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+#if _KERNEL_SPT_ACRE_FLG
+
+
+/** %jp{イベントフラグの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)}
+ * @param  pk_cflg           %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information}
+ * @retval %jp{正の値}%en{positiv-value} %jp{生成したイベントフラグのID番号}%en{ID number of the created eventflag}
+ * @retval E_NOID  %jp{ID番号不足(割付可能なイベントフラグIDが無い)}%en{No ID number available(there id no eventflag ID assignable)}
+ * @retval E_RSATR %jp{予約属性(flgatrが不正あるいは使用できない)}%en{Reserved attribute(flgatr is invalid or unusable)}
+ */
+ER_ID acre_flg(const T_CFLG *pk_cflg)
+{
+       ID    flgid;
+       ER_ID erid;
+       
+       /* %jp{属性チェック}%en{check attribute} */
+#if _KERNEL_SPT_ACRE_FLG_E_RSATR
+       if ( ((pk_cflg->flgatr & TA_TPRI) == 0 && !_KERNEL_SPT_FLG_TA_TFIFO)
+               || ((pk_cflg->flgatr & TA_TPRI) != 0 && !_KERNEL_SPT_FLG_TA_TPRI)
+               || ((pk_cflg->flgatr & TA_WMUL) == 0 && !_KERNEL_SPT_FLG_TA_WSGL)
+               || ((pk_cflg->flgatr & TA_WMUL) != 0 && !_KERNEL_SPT_FLG_TA_WMUL)
+               || ((pk_cflg->flgatr & TA_CLR)  != 0 && !_KERNEL_SPT_FLG_TA_CLR) )
+       {
+               return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */
+       }
+#endif
+
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{空きID探索} */
+       for ( flgid = _KERNEL_TMAX_FLG_ID; flgid >= _KERNEL_TMIN_FLG_ID; flgid-- )
+       {
+               if ( !_KERNEL_FLG_CHECK_EXS(flgid) )
+               {
+                       break;
+               }
+       }
+
+       /* %jp{空きID探索チェック} */
+#if _KERNEL_SPT_ACRE_SEM_E_NOID
+       if ( flgid <= _KERNEL_TMIN_FLG_ID )
+       {
+               _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOID;                          /* %jp{ID番号不足}%en{No ID number available} */
+       }
+#endif
+       
+       /* %jp{イベントフラグ生成} */
+       erid = (ER_ID)_kernel_cre_flg(flgid, pk_cflg);
+       if ( erid == E_OK )
+       {
+               erid = (ER_ID)flgid;
+       }
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return erid;
+}
+
+
+#else  /* _KERNEL_SPT_ACRE_FLG */
+
+
+#if _KERNEL_SPT_ACRE_FLG_E_NOSPT
+
+/** %jp{イベントフラグの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)}
+ * @param  pk_cflg           %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER_ID acre_flg(const T_CFLG *pk_cflg)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_ACRE_FLG */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/clr_flg.c b/kernel/source/object/flg/clr_flg.c
new file mode 100755 (executable)
index 0000000..a117636
--- /dev/null
@@ -0,0 +1,87 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  clr_flg.c
+ * @brief %jp{イベントフラグのクリア}%en{Clear Eventflag}
+ *
+ * @version $Id: clr_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+#if _KERNEL_SPT_CLR_FLG
+
+
+/** %jp{イベントフラグのクリア}%en{Clear Eventflag}
+ * @param  flgid    %jp{クリア対象のイベントフラグのID番号}%en{ID number of the eventflag to be cleared}
+ * @param  clrptn   %jp{クリアするビットパターン(ビットごとの反転値)}%en{Bit pattern to clear(bit-wise negated)}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)}
+ * @retval E_PAR    %jp{パラメータエラー(setptnが不正)}%en{Parameter error(setptn is invalid)}
+ */
+ER clr_flg(ID flgid, FLGPTN clrptn)
+{
+       _KERNEL_T_FLGHDL flghdl;
+       
+       /* %jp{ID のチェック} */
+#ifdef _KERNEL_SPT_CLR_FLG_E_ID
+       if ( !_KERNEL_FLG_CHECK_FLGID(flgid) )
+       {
+               return E_ID;    /* %jp{ID不正} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();    /* %jp{サービスコール開始} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_CLR_FLG_E_NOEXS
+       if ( !_KERNEL_FLG_CHECK_EXS(flgid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+       }
+#endif
+       
+       flghdl = _KERNEL_FLG_ID2FLGHDL(flgid);
+       
+       /* フラグクリア */
+       _KERNEL_FLG_SET_FLGPTN(flghdl, _KERNEL_FLG_GET_FLGPTN(flghdl) & clrptn);
+
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+       
+       return E_OK;    /* 成功 */
+}
+
+
+#else  /* _KERNEL_SPT_CLR_FLG */
+
+
+#if _KERNEL_SPT_CLR_FLG_E_NOSPT
+
+/** %jp{イベントフラグのクリア}%en{Clear Eventflag}
+ * @param  flgid    %jp{クリア対象のイベントフラグのID番号}%en{ID number of the eventflag to be cleared}
+ * @param  clrptn   %jp{クリアするビットパターン(ビットごとの反転値)}%en{Bit pattern to clear(bit-wise negated)}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER clr_flg(ID flgid, FLGPTN clrptn)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_CLR_FLG */
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/cre_flg.c b/kernel/source/object/flg/cre_flg.c
new file mode 100755 (executable)
index 0000000..b117e1e
--- /dev/null
@@ -0,0 +1,97 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  cre_flg.c
+ * @brief %jp{イベントフラグの生成}%en{Create Eventflag}
+ *
+ * @version $Id: cre_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+#if _KERNEL_SPT_CRE_FLG
+
+
+/** %jp{イベントフラグの生成}%en{Create Eventflag}
+ * @param  flgid    %jp{生成対象のイベントフラグのID番号}%en{ID number of the eventflag to be created}
+ * @param  pk_cflg     %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_RSATR  %jp{予約属性(flgatrが不正あるいは使用できない)}%en{Reserved attribute(flgatr is invalid or unusable)}
+ * @retval E_OBJ    %jp{オブジェクト状態エラー(対象イベントフラグが登録済み)}%en{Object state error(specified eventflag is already registerd)}
+ */
+ER cre_flg(ID flgid, const T_CFLG *pk_cflg)
+{
+       ER ercd;
+
+       /* %jp{IDチェック}%en{check ID} */
+#if _KERNEL_SPT_CRE_FLG_E_ID
+       if ( !_KERNEL_FLG_CHECK_FLGID(flgid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }       
+#endif
+
+       /* %jp{属性チェック}%en{check attribute} */
+#if _KERNEL_SPT_ACRE_FLG_E_RSATR
+       if ( ((pk_cflg->flgatr & TA_TPRI) == 0 && !_KERNEL_SPT_FLG_TA_TFIFO)
+               || ((pk_cflg->flgatr & TA_TPRI) != 0 && !_KERNEL_SPT_FLG_TA_TPRI)
+               || ((pk_cflg->flgatr & TA_WMUL) == 0 && !_KERNEL_SPT_FLG_TA_WSGL)
+               || ((pk_cflg->flgatr & TA_WMUL) != 0 && !_KERNEL_SPT_FLG_TA_WMUL)
+               || ((pk_cflg->flgatr & TA_CLR)  != 0 && !_KERNEL_SPT_FLG_TA_CLR) )
+       {
+               return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */
+       }
+#endif
+
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{存在チェック}%en{check object} */
+#if _KERNEL_SPT_CRE_FLG_E_OBJ
+       if ( _KERNEL_FLG_CHECK_EXS(flgid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_OBJ;                   /* %jp{オブジェクト状態エラー}%en{Object state error} */
+       }
+#endif
+       
+       /* %jp{イベントフラグ生成} */
+       ercd = _kernel_cre_flg(flgid, pk_cflg);
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return ercd;
+}
+
+
+#else  /* _KERNEL_SPT_CRE_FLG */
+
+
+#if _KERNEL_SPT_CRE_FLG_E_NOSPT
+
+/** %jp{イベントフラグの生成}%en{Create Eventflag}
+ * @param  flgid    %jp{生成対象のイベントフラグのID番号}%en{ID number of the eventflag to be created}
+ * @param  pk_cflg     %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER cre_flg(const T_CFLG *pk_cflg)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_CRE_FLG */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/del_flg.c b/kernel/source/object/flg/del_flg.c
new file mode 100755 (executable)
index 0000000..92f6b54
--- /dev/null
@@ -0,0 +1,105 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  del_flg.c
+ * @brief %jp{イベントフラグの削除}%en{Delete Eventflag}
+ *
+ * @version $Id: del_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+#if _KERNEL_SPT_DEL_FLG
+
+
+/** %jp{イベントフラグの削除}%en{Delete Eventflag}
+ * @param  flgid    %jp{削除対象のイベントフラグのID番号}%en{ID number of the eventflag to be deleted}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)}
+ */
+ER del_flg(ID flgid)
+{
+       _KERNEL_T_FLGHDL flghdl;
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_QUE    *pk_que;;
+
+       /* %jp{IDチェック}%en{check ID} */
+#if _KERNEL_SPT_DEL_FLG_E_ID
+       if ( !_KERNEL_FLG_CHECK_FLGID(flgid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }       
+#endif
+       
+       _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{存在チェック}%en{check object} */
+#if _KERNEL_SPT_DEL_FLG_E_NOEXS
+       if ( _KERNEL_FLG_CHECK_EXS(flgid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_OBJ;                   /* %jp{オブジェクト状態エラー}%en{Object state error} */
+       }
+#endif
+       
+       /* %jp{イベントフラグハンドル取得} */
+       flghdl = _KERNEL_FLG_ID2FLGHDL(flgid);
+       
+       /* %jp{待ち行列取得} */
+       pk_que = _KERNEL_FLG_GET_QUE(flghdl);
+       
+       /* %jp{待ち行列のタスクを全て起床} */
+       while ( (tskhdl = _KERNEL_RMH_QUE(pk_que)) != _KERNEL_TSKHDL_NULL )
+       {
+               /* %jp{待ちタスクがあれば待ち解除} */
+               tcb    = _KERNEL_TSK_TSKHDL2TCB(tskhdl);        /* %jp{TCB取得} */
+               _KERNEL_TSK_SET_ERCD(tcb, E_DLT);                       /* %jp{エラーコード設定} */
+               _KERNEL_FLG_RMV_TOQ(tskhdl);                            /* %jp{タイムアウトキューから外す} */
+               _KERNEL_DSP_WUP_TSK(tskhdl);                            /* %jp{タスクの待ち解除} */     
+       }
+       
+       /* %jp{オブジェクト削除} */
+#if _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_PTRARRAY
+       _KERNEL_SYS_FRE_MEM(_KERNEL_TSK_ID2FLGCB(flgid));       /* %jp{メモリ開放} */
+       _KERNEL_TSK_ID2FLGCB(flgid) = NULL;
+#elif _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_BLKARRAY
+       _KERNEL_FLG_SET_FLGATR(flghdl, 0);                                      /* %jp{削除をマーク} */
+#endif
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return E_OK;
+}
+
+
+#else  /* _KERNEL_SPT_DEL_FLG */
+
+
+#if _KERNEL_SPT_DEL_FLG_E_NOSPT
+
+/** %jp{イベントフラグの削除}%en{Delete Eventflag}
+ * @param  flgid    %jp{削除対象のイベントフラグのID番号}%en{ID number of the eventflag to be deleted}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER del_flg(ID flgid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_DEL_FLG */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/kchk_flg.c b/kernel/source/object/flg/kchk_flg.c
new file mode 100755 (executable)
index 0000000..a47fba4
--- /dev/null
@@ -0,0 +1,38 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sig_sem.c
+ * @brief %jp{セマフォ資源の返却}
+ *
+ * @version $Id: kchk_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+/* %jp{フラグが起床条件を満たしているかチェック} */
+BOOL _kernel_chk_flg(
+               _KERNEL_T_FLGHDL flghdl,                /* %jp{コントロールブロック} */
+               _KERNEL_T_FLGINF *pk_flginf)    /* %jp{待ちフラグ情報パケットの先頭番地} */
+{
+       if ( pk_flginf->wfmode == TWF_ANDW )
+       {
+               /* %jp{AND待ち判定} */
+               return ((_KERNEL_FLG_GET_FLGPTN(flghdl) & pk_flginf->waiptn) == pk_flginf->waiptn);
+       }
+       else
+       {
+               /* %jp{OR待ち判定} */
+               return ((_KERNEL_FLG_GET_FLGPTN(flghdl) & pk_flginf->waiptn) != 0);
+       }
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/kcre_flg.c b/kernel/source/object/flg/kcre_flg.c
new file mode 100755 (executable)
index 0000000..1705aea
--- /dev/null
@@ -0,0 +1,95 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  kcre_flg.c
+ * @brief %jp{イベントフラグの生成}%en{Create Eventflag}
+ *
+ * @version $Id: kcre_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+/* %jp{メモリ不足エラーチェックサポートの判定} */
+#if (_KERNEL_SPT_CRE_FLG && _KERNEL_SPT_CRE_FLG_E_NOMEM) || (_KERNEL_SPT_AFLG_SEM && _KERNEL_SPT_ACRE_FLG_E_NOMEM)
+#define _KERNEL_SPT_KCRE_FLG_E_NOMEM   TRUE
+#else
+#define _KERNEL_SPT_KCRE_FLG_E_NOMEM   FALSE
+#endif
+
+
+
+/** %jp{イベントフラグの生成}%en{Create Eventflag}
+ * @param  flgid    %jp{生成対象のイベントフラグのID番号}%en{ID number of the eventflag to be created}
+ * @param  pk_cflg     %jp{イベントフラグ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_NOMEM  %jp{メモリ不足}%en{Insufficient memory}
+ */
+ER _kernel_cre_flg(ID flgid, const T_CFLG *pk_cflg)
+{
+       _KERNEL_T_FLGHDL flghdl;
+       
+       /* %jp{メモリ確保}%en{get memory} */
+#if _KERNEL_FLGCB_ALGORITHM == _KERNEL_FLGCB_ALG_PTRARRAY
+#if _KERNEL_FLGCB_ROM
+       {
+               /* %jp{TCB領域がポインタ管理で、ROM/RAM分離の場合} */
+               VP   mem;
+               SIZE memsz;
+
+               /* %jp{メモリサイズ決定} */
+               memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_FLGCB))
+                                       + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_FLGCB_ROM));
+
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(memsz);
+
+#if _KERNEL_SPT_KCRE_FLG_E_NOMEM
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+#endif
+
+               /* %jp{メモリ割り当て} */
+               _KERNEL_TSK_ID2FLGCB(flgid)           = (_KERNEL_T_FLGCB *)mem;
+               _KERNEL_TSK_ID2FLGCB(flgid)->flgcbrom = (_KERNEL_T_FLGCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_FLGCB)));
+       }
+#else
+       {
+               VP   mem;
+               
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(sizeof(_KERNEL_T_FLGCB));
+
+#if _KERNEL_SPT_KCRE_FLG_E_NOMEM
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+#endif
+
+               /* %jp{メモリ割り当て} */
+               _KERNEL_SEM_ID2FLGCB(flgid) = (_KERNEL_T_FLGCB *)mem;
+       }
+#endif
+#endif
+
+       /* %jp{オブジェクト生成} */
+       flghdl = _KERNEL_FLG_ID2FLGHDL(flgid);
+       _KERNEL_FLG_SET_FLGATR(flghdl, pk_cflg->flgatr | _KERNEL_FLG_TA_CRE);
+       _KERNEL_CRE_QUE(_KERNEL_FLG_GET_QUE(flghdl));
+       _KERNEL_FLG_SET_FLGPTN(flghdl, pk_cflg->iflgptn);
+
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/pol_flg.c b/kernel/source/object/flg/pol_flg.c
new file mode 100755 (executable)
index 0000000..00b3989
--- /dev/null
@@ -0,0 +1,139 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  pol_flg.c
+ * @brief %jp{イベントフラグ待ち(ポーリング)}%en{Wait for Eventflag(Polling)}
+ *
+ * @version $Id: pol_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+#if _KERNEL_SPT_POL_FLG
+
+
+#if _KERNEL_SPT_TWAI_FLG && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED)       /* %jp{twai_flgありで、コードサイズ優先なら} */
+
+/** %jp{イベントフラグ待ち(ポーリング)}%en{Wait for Eventflag(Polling)}
+ * @param  flgid    %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{待ちビットパターン}%en{Wait bit pattern}
+ * @param  wfmode   %jp{待ちモード}%en{Wait mode}
+ * @param  p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)}
+ * @retval E_PAR    %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)}
+ * @retval E_TMOUT  %jp{ポーリング失敗}%en{Polling failure}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)}
+ */
+ER pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)
+{
+       /* %jp{twai_flg で代用し、コードサイズを削減する} */
+       return twai_flg(flgid, waiptn, wfmode, p_flgptn, TMO_POL);
+}
+
+#else
+
+/** %jp{イベントフラグ待ち}%en{Wait for Eventflag}
+ * @param  flgid    %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{待ちビットパターン}%en{Wait bit pattern}
+ * @param  wfmode   %jp{待ちモード}%en{Wait mode}
+ * @param  p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)}
+ * @retval E_PAR    %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)}
+ * @retval E_TMOUT  %jp{ポーリング失敗}%en{Polling failure}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)}
+ */
+ER pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)
+{
+       _KERNEL_T_FLGINF flginf;
+       _KERNEL_T_FLGHDL flghdl;
+       ER               ercd;
+
+       /* %jp{ID のチェック} */
+#ifdef _KERNEL_SPT_POL_FLG_E_ID
+       if ( !_KERNEL_FLG_CHECK_FLGID(flgid) )
+       {
+               return E_ID;    /* %jp{ID不正} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコール開始} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_POL_FLG_E_NOEXS
+       if ( !_KERNEL_FLG_CHECK_EXS(flgid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+       }
+#endif
+       
+       /* %jp{イベントフラグハンドル取得} */
+       flghdl = _KERNEL_FLG_ID2FLGHDL(flgid);
+
+       /* %jp{待ち条件設定} */
+       flginf.waiptn = waiptn;
+       flginf.wfmode = wfmode;
+       
+       /* %jp{フラグチェック} */
+       if ( _kernel_chk_flg(flghdl, &flginf) )
+       {
+               /* %jp{既に条件を満たしているなら} */
+               *p_flgptn = _KERNEL_FLG_GET_FLGPTN(flghdl);             /* %jp{解除時のフラグパターンを格納} */
+
+#if _KERNEL_SPT_FLG_TA_CLR
+               if ( _KERNEL_FLG_GET_FLGATR(flghdl) & TA_CLR )
+               {
+                       _KERNEL_FLG_SET_FLGPTN(flghdl, 0);                      /* %jp{クリア属性があればクリア} */
+               }
+#endif
+               
+               ercd = E_OK;
+       }
+       else
+       {
+               ercd = E_TMOUT;
+       }
+               
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+       
+       return ercd;    /* 成功 */
+}
+
+#endif
+
+
+#else  /* _KERNEL_SPT_POL_FLG */
+
+
+#if _KERNEL_SPT_POL_FLG_E_NOSPT
+
+/** %jp{イベントフラグ待ち}%en{Wait for Eventflag}
+ * @param  flgid    %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{待ちビットパターン}%en{Wait bit pattern}
+ * @param  wfmode   %jp{待ちモード}%en{Wait mode}
+ * @param  p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER pol_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+#endif /* _KERNEL_SPT_POL_FLG */
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/ref_flg.c b/kernel/source/object/flg/ref_flg.c
new file mode 100755 (executable)
index 0000000..37b6d16
--- /dev/null
@@ -0,0 +1,95 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ref_flg.c
+ * @brief %jp{イベントフラグの状態参照}%en{Reference Semaphore State}
+ *
+ * @version $Id: ref_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+#if _KERNEL_SPT_REF_FLG
+
+
+/** %jp{イベントフラグの状態参照}%en{Reference Semaphore State}
+ * @param  flgid    %jp{資源獲得対象のイベントフラグID番号}%en{ID number of the flgaphore from which resource is acquired}
+ * @param  pk_rflg  %jp{イベントフラグ状態を返すパケットへのポインタ}%en{Pointer to the packet returning the flgaphore state}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified flgaphore is not registerd)}
+ * @retval E_PAR    %jp{パラメータエラー(pk_rflgが不正)}%en{Parameter error(pk_rflg is invalid)}
+ */
+ER ref_flg(ID flgid, T_RFLG *pk_rflg)
+{
+       _KERNEL_T_FLGHDL flghdl;
+       
+       /* %jp{ID のチェック} */
+#if _KERNEL_SPT_REF_FLG_E_ID
+       if ( !_KERNEL_FLG_CHECK_FLGID(flgid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+#if _KERNEL_SPT_REF_FLG_E_PAR
+       if ( pk_rflg == NULL )
+       {
+               return E_PAR;   /* %jp{パラメータエラー}%en{Parameter error} */
+       }
+#endif
+               
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#if _KERNEL_SPT_REF_FLG_E_NOEXS
+       if ( !_KERNEL_FLG_CHECK_EXS(flgid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       }
+#endif
+
+       /* %jp{イベントフラグハンドル取得} */
+       flghdl = _KERNEL_FLG_ID2FLGHDL(flgid);
+       
+       /* %jp{情報取得} */
+       pk_rflg->wtskid = _KERNEL_TSK_GET_TSKID(_KERNEL_REF_QUE(_KERNEL_FLG_GET_QUE(flghdl)));
+       pk_rflg->flgptn = _KERNEL_FLG_GET_FLGPTN(flghdl);
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       
+       return E_OK;
+}
+
+
+#else  /* _KERNEL_SPT_REF_FLG */
+
+
+#if _KERNEL_SPT_REF_FLG_E_NOSPT
+
+/** %jp{イベントフラグ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)}
+ * @param  flgid    %jp{資源獲得対象のイベントフラグID番号}%en{ID number of the flgaphore from which resource is acquired}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER ref_flg(ID flgid, T_RFLG *pk_rflg)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_REF_FLG */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/set_flg.c b/kernel/source/object/flg/set_flg.c
new file mode 100755 (executable)
index 0000000..cd3f315
--- /dev/null
@@ -0,0 +1,135 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  set_flg.c
+ * @brief %jp{イベントフラグのセット}%en{Set Eventflag}
+ *
+ * @version $Id: set_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+#if _KERNEL_SPT_SET_FLG
+
+
+/** %jp{イベントフラグのセット}%en{Set Eventflag}
+ * @param  flgid    %jp{セット対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{セットするビットパターン}%en{Bit pattern to set}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)}
+ * @retval E_PAR    %jp{パラメータエラー(setptnが不正)}%en{Parameter error(setptn is invalid)}
+ */
+ER set_flg(ID flgid, FLGPTN setptn)
+{
+       _KERNEL_T_QUE    *pk_que;
+       _KERNEL_T_FLGINF *pk_flginf;
+       _KERNEL_T_FLGHDL flghdl;
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TSKHDL tskhdl_next;
+       _KERNEL_T_TCB    *tcb;
+       BOOL             wupflg = FALSE;
+       
+       /* %jp{ID のチェック} */
+#ifdef _KERNEL_SPT_SET_FLG_E_ID
+       if ( !_KERNEL_FLG_CHECK_FLGID(flgid) )
+       {
+               return E_ID;    /* %jp{ID不正} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコール開始} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_SET_FLG_E_NOEXS
+       if ( !_KERNEL_FLG_CHECK_EXS(flgid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+       }
+#endif
+       
+       /* %jp{ハンドル取得} */
+       flghdl = _KERNEL_FLG_ID2FLGHDL(flgid);
+       pk_que = _KERNEL_FLG_GET_QUE(flghdl);
+       
+       /* %jp{フラグセット} */
+       _KERNEL_FLG_SET_FLGPTN(flghdl, _KERNEL_FLG_GET_FLGPTN(flghdl) | setptn);
+
+       /* %jp{待ちタスクがあれば起床チェック} */
+       tskhdl = _KERNEL_REF_QUE(pk_que);
+       while ( tskhdl != _KERNEL_TSKHDL_NULL )
+       {
+               tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);                           /* %jp{TCB取得} */
+
+               tskhdl_next = _KERNEL_NXT_QUE(pk_que, tskhdl);          /* %jp{次の待ちタスクを取得} */
+
+               /* %jp{フラグチェック} */
+               pk_flginf = (_KERNEL_T_FLGINF *)_KERNEL_TSK_GET_DATA(tcb);
+               if ( _kernel_chk_flg(flghdl, pk_flginf) )
+               {
+                       /* %jp{起床条件を満たしているなら} */
+                       pk_flginf->waiptn = _KERNEL_FLG_GET_FLGPTN(flghdl);             /* %jp{現在のフラグパターンを格納} */
+                       
+                       /* %jp{待ち解除} */
+                       _KERNEL_TSK_SET_ERCD(tcb, E_OK);                /* %jp{エラーコード設定} */
+                       _KERNEL_RMV_QUE(pk_que, tskhdl);                /* %jp{待ち行列から取り外す} */
+                       _KERNEL_FLG_RMV_TOQ(tskhdl);                    
+                       _KERNEL_DSP_WUP_TSK(tskhdl);                    /* %jp{タスクの待ち解除} */
+                       
+                       /* %jp{待ち解除発生をマーク} */
+                       wupflg = TRUE;
+
+#if _KERNEL_SPT_FLG_TA_CLR
+                       if ( _KERNEL_FLG_GET_FLGATR(flghdl) & TA_CLR )
+                       {
+                               _KERNEL_FLG_SET_FLGPTN(flghdl, 0);                      /* %jp{クリア属性があればクリア} */
+                               break;
+                       }
+#endif
+               }
+               tskhdl = tskhdl_next;   /* 次のタスクに進める */
+       }
+       
+       /* タスクディスパッチの実行 */
+       if ( wupflg )
+       {
+               _KERNEL_DSP_TSK();
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+       
+       return E_OK;    /* 成功 */
+}
+
+
+#else  /* _KERNEL_SPT_SET_FLG */
+
+
+#if _KERNEL_SPT_SET_FLG_E_NOSPT
+
+/** %jp{イベントフラグのセット}%en{Set Eventflag}
+ * @param  flgid    %jp{セット対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{セットするビットパターン}%en{Bit pattern to set}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER set_flg(ID flgid, FLGPTN setptn)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_SET_FLG */
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/twai_flg.c b/kernel/source/object/flg/twai_flg.c
new file mode 100755 (executable)
index 0000000..56d5ab6
--- /dev/null
@@ -0,0 +1,166 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  twai_flg.c
+ * @brief %jp{イベントフラグ待ち(タイムアウトあり)}%en{Wait for Eventflag(with Timeout)}
+ *
+ * @version $Id: twai_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+#if _KERNEL_SPT_TWAI_FLG
+
+
+/** %jp{イベントフラグ待ち(タイムアウトあり)}%en{Wait for Eventflag(with Timeout)}
+ * @param  flgid    %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{待ちビットパターン}%en{Wait bit pattern}
+ * @param  wfmode   %jp{待ちモード}%en{Wait mode}
+ * @param  p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_CTX    %jp{コンテキストエラー}%en{Context error}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)}
+ * @retval E_PAR    %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)}
+ * @retval E_ILUSE  %jp{サービスコール不正使用(TA_WSGL属性が指定されたイベントフラグで待ちタスクあり}%en{Illegal service call use(there is already a task waiting for an eventflag with tahe TA_WSGL attribute)}
+ * @retval E_RLWAI  %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)}
+ */
+ER twai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn, TMO tmout)
+{
+       _KERNEL_T_FLGINF flginf;
+       _KERNEL_T_FLGHDL flghdl;
+       _KERNEL_T_TSKHDL tskhdl;
+       ER               ercd;
+
+       /* %jp{コンテキストチェック} */
+#if _KERNEL_SPT_WAI_FLG_E_CTX
+       if ( _KERNEL_SYS_SNS_DPN() && tmout != TMO_POL )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_CTX;                   /* %jp{コンテキストエラー}%en{Context error} */
+       }
+#endif
+
+       /* %jp{ID のチェック} */
+#ifdef _KERNEL_SPT_TWAI_FLG_E_ID
+       if ( !_KERNEL_FLG_CHECK_FLGID(flgid) )
+       {
+               return E_ID;    /* %jp{ID不正} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコール開始} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_TWAI_FLG_E_NOEXS
+       if ( !_KERNEL_FLG_CHECK_EXS(flgid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+       }
+#endif
+       
+       /* %jp{イベントフラグハンドル取得} */
+       flghdl = _KERNEL_FLG_ID2FLGHDL(flgid);
+
+#if _KERNEL_SPT_TWAI_FLG_E_ILUSE
+       if ( !(_KERNEL_FLG_GET_FLGATR(flghdl) & TA_WMUL) && _kernel_ref_que(pk_que) != _KERNEL_TSKHDL_NULL && tmout != TMO_POL )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_ILUSE;
+       }
+#endif
+
+       /* %jp{待ち条件設定} */
+       flginf.waiptn = waiptn;
+       flginf.wfmode = wfmode;
+       
+       /* %jp{フラグチェック} */
+       if ( _kernel_chk_flg(flghdl, &flginf) )
+       {
+               /* %jp{既に条件を満たしているなら} */
+               *p_flgptn = _KERNEL_FLG_GET_FLGPTN(flghdl);             /* %jp{解除時のフラグパターンを格納} */
+
+#if _KERNEL_SPT_FLG_TA_CLR
+               if ( _KERNEL_FLG_GET_FLGATR(flghdl) & TA_CLR )
+               {
+                       _KERNEL_FLG_SET_FLGPTN(flghdl, 0);                      /* %jp{クリア属性があればクリア} */
+               }
+#endif
+               
+               ercd = E_OK;
+       }
+       else
+       {
+               if ( tmout != TMO_POL )
+               {
+                       /* %jp{タスクを待ち状態にする} */
+                       tskhdl = _KERNEL_SYS_GET_RUNTSK();
+                       _KERNEL_DSP_WAI_TSK(tskhdl);
+                       _KERNEL_TSK_SET_TSKSTAT(tskhdl, _KERNEL_TTS_WAI);
+                       _KERNEL_TSK_SET_TSKWAIT(tskhdl, _KERNEL_TTW_SEM);
+                       _KERNEL_TSK_SET_WOBJID(tskhdl, flgid);
+                       _KERNEL_TSK_SET_DATA(tskhdl, (VP_INT)&flginf);
+                       _KERNEL_FLG_ADD_QUE(flghdl, tskhdl);                            /* %jp{待ち行列に追加} */
+
+                       if ( tmout != TMO_FEVR )
+                       {
+                               _KERNEL_ADD_TOQ(tskhdl, tmout);                                 /* %jp{タイムアウトキューに追加} */
+                       }
+       
+                       /* %jp{タスクディスパッチの実行} */
+                       _KERNEL_DSP_TSK();
+
+                       /* %jp{エラーコードの取得} */
+                       ercd = _KERNEL_TSK_GET_ERCD(tskhdl);
+
+                       /* %jp{条件を満たして解除されたのなら} */
+                       if ( ercd == E_OK )
+                       {
+                               *p_flgptn = flginf.waiptn;                      /* %jp{解除時のフラグパターンを格納} */
+                       }
+               }
+               else
+               {
+                       ercd = E_TMOUT;  /* %jp{タイムアウト}%en{Timeout} */
+               }
+       }
+               
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+       
+       return ercd;    /* 成功 */
+}
+
+
+#else  /* _KERNEL_SPT_TWAI_FLG */
+
+
+#if _KERNEL_SPT_TWAI_FLG_E_NOSPT
+
+/** %jp{イベントフラグ待ち}%en{Wait for Eventflag}
+ * @param  flgid    %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{待ちビットパターン}%en{Wait bit pattern}
+ * @param  wfmode   %jp{待ちモード}%en{Wait mode}
+ * @param  p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER twai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn, TMO tmout)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+#endif /* _KERNEL_SPT_TWAI_FLG */
+
+
+/* end of file */
diff --git a/kernel/source/object/flg/wai_flg.c b/kernel/source/object/flg/wai_flg.c
new file mode 100755 (executable)
index 0000000..d747c25
--- /dev/null
@@ -0,0 +1,181 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  wai_flg.c
+ * @brief %jp{イベントフラグ待ち}%en{Wait for Eventflag}
+ *
+ * @version $Id: wai_flg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/flgobj.h"
+
+
+
+#if _KERNEL_SPT_WAI_FLG
+
+
+#if _KERNEL_SPT_TWAI_FLG && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED)       /* %jp{twai_flgありで、サイズ優先なら} */
+
+/** %jp{イベントフラグ待ち}%en{Wait for Eventflag}
+ * @param  flgid    %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{待ちビットパターン}%en{Wait bit pattern}
+ * @param  wfmode   %jp{待ちモード}%en{Wait mode}
+ * @param  p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)}
+ * @retval E_PAR    %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)}
+ * @retval E_ILUSE  %jp{サービスコール不正使用(TA_WSGL属性が指定されたイベントフラグで待ちタスクあり}%en{Illegal service call use(there is already a task waiting for an eventflag with tahe TA_WSGL attribute)}
+ * @retval E_RLWAI  %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)}
+ */
+ER wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)
+{
+       return twai_flg(flgid, waiptn, wfmode, p_flgptn, TMO_FEVR);
+}
+
+#else
+
+/** %jp{イベントフラグ待ち}%en{Wait for Eventflag}
+ * @param  flgid    %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{待ちビットパターン}%en{Wait bit pattern}
+ * @param  wfmode   %jp{待ちモード}%en{Wait mode}
+ * @param  p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(flgidが不正あるいは使用できない)}%en{Invalid ID number(flgid is invalid or unusable)}
+ * @retval E_CTX    %jp{コンテキストエラー}%en{Context error}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象イベントフラグが未登録)}%en{Non-existant object(specified eventflag is not registerd)}
+ * @retval E_PAR    %jp{パラメータエラー(waiptn, wfmode, p_flgptnが不正)}%en{Parameter error(waiptn, wfmode, or p_flgptn is invalid)}
+ * @retval E_ILUSE  %jp{サービスコール不正使用(TA_WSGL属性が指定されたイベントフラグで待ちタスクあり}%en{Illegal service call use(there is already a task waiting for an eventflag with tahe TA_WSGL attribute)}
+ * @retval E_RLWAI  %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象イベントフラグが削除)}%en{Waiting object deleted(eventflag is deleted waiting)}
+ */
+ER wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)
+{
+       _KERNEL_T_FLGINF flginf;
+       _KERNEL_T_FLGHDL flghdl;
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+       ER               ercd;
+
+       /* %jp{コンテキストチェック} */
+#if _KERNEL_SPT_WAI_FLG_E_CTX
+       if ( _KERNEL_SYS_SNS_DPN() )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_CTX;                   /* %jp{コンテキストエラー}%en{Context error} */
+       }
+#endif
+
+       /* %jp{ID のチェック} */
+#ifdef _KERNEL_SPT_WAI_FLG_E_ID
+       if ( !_KERNEL_FLG_CHECK_FLGID(flgid) )
+       {
+               return E_ID;    /* %jp{ID不正} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコール開始} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_WAI_FLG_E_NOEXS
+       if ( !_KERNEL_FLG_CHECK_EXS(flgid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+       }
+#endif
+       
+       /* %jp{イベントフラグハンドル取得} */
+       flghdl = _KERNEL_FLG_ID2FLGHDL(flgid);
+
+#if _KERNEL_SPT_WAI_FLG_E_ILUSE
+       if ( !(_KERNEL_FLG_GET_FLGATR(flghdl) & TA_WMUL) && _KERNEL_REF_QUE(_KERNEL_FLG_GET_QUE(flghdl)) != _KERNEL_TSKHDL_NULL )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_ILUSE;
+       }
+#endif
+
+       /* %jp{待ち条件設定} */
+       flginf.waiptn = waiptn;
+       flginf.wfmode = wfmode;
+       
+       /* %jp{フラグチェック} */
+       if ( _kernel_chk_flg(flghdl, &flginf) )
+       {
+               /* %jp{既に条件を満たしているなら} */
+               *p_flgptn = _KERNEL_FLG_GET_FLGPTN(flghdl);             /* %jp{解除時のフラグパターンを格納} */
+
+#if _KERNEL_SPT_FLG_TA_CLR
+               if ( _KERNEL_FLG_GET_FLGATR(flghdl) & TA_CLR )
+               {
+                       _KERNEL_FLG_SET_FLGPTN(flghdl, 0);                      /* %jp{クリア属性があればクリア} */
+               }
+#endif
+               
+               ercd = E_OK;
+       }
+       else
+       {
+               /* %jp{タスクを待ち状態にする} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+               tcb    = _KERNEL_TSK_TSKHDL2TCB(tskhdl);                        /* %jp{TCB取得} */
+               _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_WAI);
+               _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_SEM);
+               _KERNEL_TSK_SET_WOBJID(tcb, flgid);
+               _KERNEL_TSK_SET_DATA(tcb, (VP_INT)&flginf);
+               
+               _KERNEL_DSP_WAI_TSK(tskhdl);
+               _KERNEL_FLG_ADD_QUE(flghdl, tskhdl);                            /* %jp{待ち行列に追加} */
+               
+               /* %jp{タスクディスパッチの実行} */
+               _KERNEL_DSP_TSK();
+
+               /* %jp{エラーコードの取得} */
+               ercd = _KERNEL_TSK_GET_ERCD(tcb);
+
+               /* %jp{条件を満たして解除されたのなら} */
+               if ( ercd == E_OK )
+               {
+                       *p_flgptn = flginf.waiptn;                      /* %jp{解除時のフラグパターンを格納} */
+               }
+       }
+               
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+       
+       return ercd;    /* 成功 */
+}
+
+#endif
+
+
+#else  /* _KERNEL_SPT_WAI_FLG */
+
+
+#if _KERNEL_SPT_WAI_FLG_E_NOSPT
+
+/** %jp{イベントフラグ待ち}%en{Wait for Eventflag}
+ * @param  flgid    %jp{待ち対象のイベントフラグのID番号}%en{ID number of the eventflag to be set}
+ * @param  flgptn   %jp{待ちビットパターン}%en{Wait bit pattern}
+ * @param  wfmode   %jp{待ちモード}%en{Wait mode}
+ * @param  p_flgptn %jp{待ち解除時のビットパターンの返却アドレス}%en{Bit pattern causing a task to be released from waiting}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER wai_flg(ID flgid, FLGPTN waiptn, MODE wfmode, FLGPTN *p_flgptn)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+#endif /* _KERNEL_SPT_WAI_FLG */
+
+
+/* end of file */
diff --git a/kernel/source/object/inh/def_inh.c b/kernel/source/object/inh/def_inh.c
new file mode 100755 (executable)
index 0000000..ca6a258
--- /dev/null
@@ -0,0 +1,27 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sta_inte.c
+ * @brief %jp{割り込み処理開始}
+ *
+ * @version $Id: def_inh.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+
+
+ER def_inh(INHNO inhno, const T_DINH *pk_dinh)
+{
+       _KERNEL_INH_SET_INTHDR(inhno, pk_dinh->inthdr);
+
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/inh/end_inh.c b/kernel/source/object/inh/end_inh.c
new file mode 100755 (executable)
index 0000000..465d1d1
--- /dev/null
@@ -0,0 +1,36 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sta_inte.c
+ * @brief %jp{割り込み処理開始}
+ *
+ * @version $Id: end_inh.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+
+
+
+/** %jp{割り込み処理開始}
+ * @return void
+ */
+void _kernel_end_inh(void)
+{
+       _KERNEL_SYS_CLR_CTX();
+       
+       /* %jp{遅延しているディスパッチがあれば実施} */
+       if ( _KERNEL_SYS_SNS_DLY() )
+       {
+               _KERNEL_SYS_CLR_DLY();
+               _KERNEL_DSP_TSK();
+       }
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/inh/exe_inh.c b/kernel/source/object/inh/exe_inh.c
new file mode 100755 (executable)
index 0000000..f05e01e
--- /dev/null
@@ -0,0 +1,35 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  exe_inh.c
+ * @brief %jp{割り込みハンドラの処理}
+ *
+ * @version $Id: exe_inh.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+
+
+
+/* %jp{割り込みハンドラの処理} */
+void _kernel_exe_inh(INHNO inhno)
+{
+       const _KERNEL_T_INHINF *pk_inhinf;
+       
+       pk_inhinf = _KERNEL_INT_GET_INHINF(inhno);
+       
+       if ( pk_inhinf->inthdr != NULL )
+       {
+               pk_inhinf->inthdr(inhno);
+       }
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/inh/sta_inh.c b/kernel/source/object/inh/sta_inh.c
new file mode 100755 (executable)
index 0000000..d0f5533
--- /dev/null
@@ -0,0 +1,30 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sta_inte.c
+ * @brief %jp{割り込み処理開始}
+ *
+ * @version $Id: sta_inh.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/inhobj.h"
+
+
+
+/** %jp{割り込み処理開始}
+ * @return void
+ */
+void _kernel_sta_inh(void)
+{
+       _KERNEL_SYS_SET_CTX();
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/isr/acre_isr.c b/kernel/source/object/isr/acre_isr.c
new file mode 100755 (executable)
index 0000000..4058ed3
--- /dev/null
@@ -0,0 +1,59 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  acre_sem.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * @version $Id: acre_isr.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/isrobj.h"
+
+
+
+/** %jp{セマフォの生成}%en{Create Semaphore}
+ * @param  pk_ctsk     %jp{セマフォ生成情報}%en{}
+ * @return Error code or task ID
+ */
+ER_ID acre_isr(const T_CISR *pk_cisr)
+{
+       ID    isrid;
+       ER_ID erid;
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{空きID探索} */
+       for ( isrid = _KERNEL_TMAX_ISR_ISRID; isrid >= _KERNEL_TMIN_ISR_ISRID; isrid-- )
+       {
+               if ( !_KERNEL_ISR_CHECK_EXS(isrid) )
+               {
+                       break;
+               }
+       }
+       if ( isrid <= _KERNEL_TMIN_ISR_ISRID )
+       {
+               _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOID;                          /* %jp{ID番号不足} */
+       }
+       
+       /* %jp{セマフォ生成} */
+       erid = (ER_ID)_kernel_cre_isr(isrid, pk_cisr);
+       if ( erid == E_OK )
+       {
+               erid = (ER_ID)isrid;
+       }
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return erid;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/isr/exe_isr.c b/kernel/source/object/isr/exe_isr.c
new file mode 100755 (executable)
index 0000000..d367d50
--- /dev/null
@@ -0,0 +1,39 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  exe_int.c
+ * @brief %jp{割込みの処理}
+ *
+ * @version $Id: exe_isr.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/isrobj.h"
+
+
+#if _KERNEL_SPT_ISR
+
+/* %jp{割り込みの処理} */
+void _kernel_exe_isr(INTNO intno)
+{
+       _KERNEL_T_ISRHDL isrhdl;
+       
+       isrhdl = _KERNEL_INT_GET_HEAD(intno);
+       while ( isrhdl != NULL )
+       {
+               _KERNEL_ISR_GET_ISR(isrhdl)(_KERNEL_ISR_GET_EXINF(isrhdl));
+               
+               isrhdl = _KERNEL_ISR_GET_NEXT(isrhdl);
+       }
+       
+       _kernel_dis_int();
+}
+
+#endif
+
+
+/* end of file */
diff --git a/kernel/source/object/isr/kcre_isr.c b/kernel/source/object/isr/kcre_isr.c
new file mode 100755 (executable)
index 0000000..9b9a62f
--- /dev/null
@@ -0,0 +1,56 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  acre_sem.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * @version $Id: kcre_isr.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/isrobj.h"
+
+
+
+/** %jp{セマフォの生成}%en{Create Semaphore}
+ * @param  pk_ctsk     %jp{セマフォ生成情報}%en{}
+ * @return Error code or task ID
+ */
+ER _kernel_cre_isr(ID isrid, const T_CISR *pk_cisr)
+{
+       _KERNEL_T_ISRHDL isrhdl;
+
+       {
+               VP mem;
+
+               mem = _KERNEL_SYS_ALC_MEM(sizeof(_KERNEL_T_ISRCB));
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+
+               _KERNEL_ISR_ID2ISRCB(isrid) = (_KERNEL_T_ISRCB *)mem;
+       }
+
+       isrhdl = _KERNEL_ISR_ID2ISRHDL(isrid);
+       
+       /* %jp{メンバの設定} */
+       _KERNEL_ISR_SET_EXINF(isrhdl, pk_cisr->exinf);
+       _KERNEL_ISR_SET_ISR(isrhdl, pk_cisr->isr);
+       
+       /* %jp{割り込みリストの先頭に繋ぐ} */
+       _KERNEL_ISR_SET_NEXT(isrhdl, _KERNEL_INT_GET_HEAD(pk_cisr->intno));
+       _KERNEL_INT_SET_HEAD(pk_cisr->intno, isrhdl);
+
+               
+       return E_OK;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/mbx/acre_mbx.c b/kernel/source/object/mbx/acre_mbx.c
new file mode 100755 (executable)
index 0000000..f3077a1
--- /dev/null
@@ -0,0 +1,99 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  acre_mbx.c
+ * @brief %jp{メールボックスの生成(ID番号自動割付)}%en{Create Mailbox(ID Number Automatic Assignment)}
+ *
+ * @version $Id: acre_mbx.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mbxobj.h"
+
+
+
+#if _KERNEL_SPT_ACRE_MBX
+
+
+/** %jp{メールボックスの生成(ID番号自動割付)}%en{Create Mailbox(ID Number Automatic Assignment)}
+ * @param  pk_cmbx           %jp{メールボックス生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the mailbox creation information}
+ * @retval %jp{正の値}%en{positiv-value} %jp{生成したメールボックスのID番号}%en{ID number of the created mailbox}
+ * @retval E_NOID  %jp{ID番号不足(割付可能なメールボックスIDが無い)}%en{No ID number available(there id no mailbox ID assignable)}
+ * @retval E_RSATR %jp{予約属性(mbxatrが不正あるいは使用できない)}%en{Reserved attribute(mbxatr is invalid or unusable)}
+ */
+ER_ID acre_mbx(const T_CMBX *pk_cmbx)
+{
+       ID    mbxid;
+       ER_ID erid;
+       
+       /* %jp{属性チェック}%en{check attribute} */
+#if _KERNEL_SPT_ACRE_MBX_E_RSATR
+       if ( ((pk_cmbx->mbxatr & TA_TPRI) == 0 && !_KERNEL_SPT_MBX_TA_TFIFO)
+               || ((pk_cmbx->mbxatr & TA_TPRI) != 0 && !_KERNEL_SPT_MBX_TA_TPRI)
+               || ((pk_cmbx->mbxatr & TA_MPRI) == 0 && !_KERNEL_SPT_MBX_TA_MFIFO)
+               || ((pk_cmbx->mbxatr & TA_MPRI) != 0 && !_KERNEL_SPT_MBX_TA_MPRI) )
+       {
+               return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */
+       }
+#endif
+
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{空きID探索} */
+       for ( mbxid = _KERNEL_TMAX_MBX_ID; mbxid >= _KERNEL_TMIN_MBX_ID; mbxid-- )
+       {
+               if ( !_KERNEL_MBX_CHECK_EXS(mbxid) )
+               {
+                       break;
+               }
+       }
+
+       /* %jp{空きID探索チェック} */
+#if _KERNEL_SPT_ACRE_SEM_E_NOID
+       if ( mbxid <= _KERNEL_TMIN_MBX_ID )
+       {
+               _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOID;                          /* %jp{ID番号不足}%en{No ID number available} */
+       }
+#endif
+       
+       /* %jp{メールボックス生成} */
+       erid = (ER_ID)_kernel_cre_mbx(mbxid, pk_cmbx);
+       if ( erid == E_OK )
+       {
+               erid = (ER_ID)mbxid;
+       }
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return erid;
+}
+
+
+#else  /* _KERNEL_SPT_ACRE_MBX */
+
+
+#if _KERNEL_SPT_ACRE_MBX_E_NOSPT
+
+/** %jp{メールボックスの生成(ID番号自動割付)}%en{Create Eventflag(ID Number Automatic Assignment)}
+ * @param  pk_cmbx     %jp{メールボックス生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER_ID acre_mbx(const T_CMBX *pk_cmbx)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_ACRE_MBX */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/mbx/kadd_msg.c b/kernel/source/object/mbx/kadd_msg.c
new file mode 100755 (executable)
index 0000000..fa54c04
--- /dev/null
@@ -0,0 +1,91 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sig_mbx.c
+ * @brief %jp{メールボックス資源の返却}%en{Release Semaphore Resource}
+ *
+ * @version $Id: kadd_msg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mbxobj.h"
+
+
+static void _kernel_add_mque(T_MSG **ppk_msgque, T_MSG *pk_msg);               /**< %jp{メッセージキューへのメッセージ追加} */
+static void _kernel_adp_mque(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg);  /**< %jp{優先度キューに追加} */
+static void _kernel_adf_mque(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg);  /**< %jp{FIFOキューに追加} */
+
+
+
+void _kernel_add_msg(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg)
+{
+       /* %jp{メールボックに追加} */
+       if ( _KERNEL_MBX_GET_MBXATR(mbxhdl) & TA_MPRI )
+       {
+               _kernel_adp_mque(mbxhdl, pk_msg);
+       }
+       else
+       {
+               _kernel_adf_mque(mbxhdl, pk_msg);
+       }
+}
+
+
+/** %jp{FIFOキューに追加} */
+void _kernel_adf_mque(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg)
+{
+       T_MSG **ppk_msgque;
+
+       /* %jp{メッセージキューを取得} */
+       ppk_msgque = (T_MSG **)_KERNEL_MBX_GET_MSGQUE(mbxhdl);
+       _kernel_add_mque(ppk_msgque, pk_msg);
+}
+
+
+
+/** %jp{優先度キューに追加} */
+void _kernel_adp_mque(_KERNEL_T_MBXHDL mbxhdl, T_MSG *pk_msg)
+{
+       _KERNEL_MBX_T_MPRI mpri;
+/*     T_MSG              *(*pppk_msgque)[];   */
+       T_MSG              ***pppk_msgque;
+
+       /* %jp{メッセージキューの配列として取得} */
+/*     pppk_msgque = (T_MSG *(*)[])_KERNEL_MBX_GET_MSGQUE(mbxhdl);     */
+       pppk_msgque = (T_MSG ***)_KERNEL_MBX_GET_MSGQUE(mbxhdl);
+
+       /* %jp{メッセージ優先度取得} */
+       mpri = ((T_MSG_PRI *)pk_msg)->msgpri;
+
+       /* %jp{メッセージ追加} */
+       _kernel_add_mque(&(*pppk_msgque)[mpri - TMIN_MPRI], pk_msg);
+}
+
+
+
+/** %jp{メッセージキューへのメッセージ追加} */
+void _kernel_add_mque(T_MSG **ppk_msgque, T_MSG *pk_msg)
+{
+       T_MSG *msg_tail;
+
+       msg_tail = *ppk_msgque;
+       if ( msg_tail == NULL )
+       {
+               pk_msg->pk_next = pk_msg;
+       }
+       else
+       {
+               pk_msg->pk_next   = msg_tail->pk_next;
+               msg_tail->pk_next = pk_msg;
+       }
+
+       *ppk_msgque = pk_msg;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/mbx/kcre_mbx.c b/kernel/source/object/mbx/kcre_mbx.c
new file mode 100755 (executable)
index 0000000..90376ae
--- /dev/null
@@ -0,0 +1,101 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  kcre_mbx.c
+ * @brief %jp{メールボックスの生成}%en{Create Eventflag}
+ *
+ * @version $Id: kcre_mbx.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mbxobj.h"
+
+
+
+/* %jp{メモリ不足エラーチェックサポートの判定} */
+#if (_KERNEL_SPT_CRE_MBX && _KERNEL_SPT_CRE_MBX_E_NOMEM) || (_KERNEL_SPT_AMBX_SEM && _KERNEL_SPT_ACRE_MBX_E_NOMEM)
+#define _KERNEL_SPT_KCRE_MBX_E_NOMEM   TRUE
+#else
+#define _KERNEL_SPT_KCRE_MBX_E_NOMEM   FALSE
+#endif
+
+
+
+/** %jp{メールボックスの生成}%en{Create Eventflag}
+ * @param  mbxid    %jp{生成対象のメールボックスのID番号}%en{ID number of the eventflag to be created}
+ * @param  pk_cmbx     %jp{メールボックス生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the eventflag creation information}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_NOMEM  %jp{メモリ不足}%en{Insufficient memory}
+ */
+ER _kernel_cre_mbx(ID mbxid, const T_CMBX *pk_cmbx)
+{
+       _KERNEL_T_MBXHDL mbxhdl;
+       
+       /* %jp{メモリ確保}%en{get memory} */
+#if _KERNEL_MBXCB_ALGORITHM == _KERNEL_MBXCB_ALG_PTRARRAY
+#if _KERNEL_MBXCB_ROM
+       {
+               /* %jp{TCB領域がポインタ管理で、ROM/RAM分離の場合} */
+               VP   mem;
+               SIZE memsz;
+
+               /* %jp{メモリサイズ決定} */
+               memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MBXCB))
+                                       + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MBXCB_ROM));
+
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(memsz);
+
+#if _KERNEL_SPT_KCRE_MBX_E_NOMEM
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+#endif
+
+               /* %jp{メモリ割り当て} */
+               _KERNEL_TSK_ID2MBXCB(mbxid)           = (_KERNEL_T_MBXCB *)mem;
+               _KERNEL_TSK_ID2MBXCB(mbxid)->mbxcbrom = (_KERNEL_T_MBXCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MBXCB)));
+       }
+#else
+       {
+               VP   mem;
+               
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(sizeof(_KERNEL_T_MBXCB));
+
+#if _KERNEL_SPT_KCRE_MBX_E_NOMEM
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+#endif
+
+               /* %jp{メモリ割り当て} */
+               _KERNEL_SEM_ID2MBXCB(mbxid) = (_KERNEL_T_MBXCB *)mem;
+       }
+#endif
+#endif
+
+       /* %jp{オブジェクト生成} */
+       mbxhdl = _KERNEL_MBX_ID2MBXHDL(mbxid);
+       _KERNEL_MBX_SET_MBXATR(mbxhdl, pk_cmbx->mbxatr | _KERNEL_MBX_TA_CRE);
+       _KERNEL_CRE_QUE(_KERNEL_MBX_GET_QUE(mbxhdl));
+       if ( pk_cmbx->mbxatr & TA_MPRI)
+       {
+       }
+       else
+       {
+               _KERNEL_MBX_SET_MSGQUE(mbxhdl, NULL);
+       }
+
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/mbx/krmv_msg.c b/kernel/source/object/mbx/krmv_msg.c
new file mode 100755 (executable)
index 0000000..0a85dd4
--- /dev/null
@@ -0,0 +1,98 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sig_mbx.c
+ * @brief %jp{メールボックス資源の返却}%en{Release Semaphore Resource}
+ *
+ * @version $Id: krmv_msg.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mbxobj.h"
+
+
+static T_MSG *_kernel_rmp_mque(_KERNEL_T_MBXHDL mbxhdl);       
+static T_MSG *_kernel_rmf_mque(_KERNEL_T_MBXHDL mbxhdl);       
+static T_MSG *_kernel_rmv_mque(T_MSG **ppk_msgque);            
+
+
+
+T_MSG *_kernel_rmv_msg(_KERNEL_T_MBXHDL mbxhdl)
+{
+       /* %jp{メールボックから取り出し} */
+       if ( _KERNEL_MBX_GET_MBXATR(mbxhdl) & TA_MPRI )
+       {
+               return _kernel_rmp_mque(mbxhdl);
+       }
+       else
+       {
+               return _kernel_rmf_mque(mbxhdl);
+       }
+}
+
+
+T_MSG *_kernel_rmf_mque(_KERNEL_T_MBXHDL mbxhdl)
+{
+       T_MSG **ppk_msgque;
+
+       /* %jp{メッセージキューを取得} */
+       ppk_msgque = (T_MSG **)_KERNEL_MBX_GET_MSGQUE(mbxhdl);
+
+       if ( *ppk_msgque != NULL )
+       {
+               return _kernel_rmv_mque(ppk_msgque);
+       }
+
+       return NULL;
+}
+
+
+T_MSG *_kernel_rmp_mque(_KERNEL_T_MBXHDL mbxhdl)
+{
+#if 0
+       _KERNEL_MBX_T_MPRI mpri;
+       T_MSG              *(*pppk_msgque)[];
+
+       /* %jp{メッセージキューの配列として取得} */
+       pppk_msgque = (T_MSG *(*)[])_KERNEL_MBX_GET_MSGQUE(mbxhdl);
+
+       for ( mpri = TMIN_MPRI; mpri < _KERNEL_MBX_GET_MAXMPRI(mbxhdl); mpri++ )
+       {
+               if ( (*pppk_msgque)[mpri] != NULL )
+               {
+                       return _kernel_rmv_mque(&(*pppk_msgque)[mpri]);
+               }
+       }
+#endif
+
+       return NULL;
+}
+
+
+/** %jp{メッセージキューからメッセージ取り出し} */
+T_MSG *_kernel_rmv_mque(T_MSG **ppk_msgque)
+{
+       T_MSG *msg_tail;
+       T_MSG *msg_head;
+
+       msg_tail = *ppk_msgque;
+       msg_head = msg_tail->pk_next;
+
+       if ( msg_head == msg_tail )
+       {
+               *ppk_msgque = NULL;
+       }
+       else
+       {
+               msg_tail->pk_next = msg_head->pk_next;
+       }
+
+       return msg_head;
+}
+
+/* end of file */
diff --git a/kernel/source/object/mbx/rcv_mbx.c b/kernel/source/object/mbx/rcv_mbx.c
new file mode 100755 (executable)
index 0000000..7417619
--- /dev/null
@@ -0,0 +1,106 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sig_mbx.c
+ * @brief %jp{メールボックス資源の返却}%en{Release Semaphore Resource}
+ *
+ * @version $Id: rcv_mbx.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mbxobj.h"
+
+
+
+#if _KERNEL_SPT_RCV_MBX
+
+
+/**< %jp{メールボックスへの送信} */
+ER rcv_mbx(ID mbxid, T_MSG **ppk_msg)
+{
+       _KERNEL_T_MBXHDL mbxhdl;
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+       T_MSG            *pk_msg;
+       ER               ercd;
+
+       /* %jp{ID のチェック} */
+#ifdef _KERNEL_SPT_SIG_MBX_E_ID
+       if ( !_KERNEL_MBX_CHECK_MBXID(mbxid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_SIG_MBX_E_NOEXS
+       if ( !_KERNEL_MBX_CHECK_EXS(mbxid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+       }
+#endif
+       
+       /* %jp{メールボックスハンドル取得} */
+       mbxhdl = _KERNEL_MBX_ID2MBXHDL(mbxid);
+       
+       /* %jp{メッセージキューから取り出し} */
+       pk_msg = _kernel_rmv_msg(mbxhdl);
+
+       if ( pk_msg != NULL )
+       {
+               *ppk_msg = pk_msg;
+               ercd     = E_OK;
+       }
+       else
+       {
+               /* %jp{タスクを待ち状態にする} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+               tcb    = _KERNEL_TSK_TSKHDL2TCB(tskhdl);                        /* %jp{TCB取得} */
+
+               _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_SEM);
+               _KERNEL_TSK_SET_WOBJID(tcb, mbxid);
+               _KERNEL_TSK_SET_DATA(tcb, (VP_INT)ppk_msg);
+               
+               _KERNEL_DSP_WAI_TSK(tskhdl);
+               _KERNEL_MBX_ADD_QUE(mbxhdl, tskhdl);                            /* %jp{待ち行列に追加} */
+               
+               /* %jp{タスクディスパッチの実行} */
+               _KERNEL_DSP_TSK();
+
+               /* %jp{エラーコードの取得} */
+               ercd = _KERNEL_TSK_GET_ERCD(tcb);
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return E_OK;    /* %jp{正常終了}%en{Normal completion} */
+}
+
+
+#else  /* _KERNEL_SPT_RCV_MBX */
+
+
+#if _KERNEL_SPT_RCV_MBX_E_NOSPT
+
+
+ER snd_mbx(ID mbxid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_RCV_MBX */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/mbx/snd_mbx.c b/kernel/source/object/mbx/snd_mbx.c
new file mode 100755 (executable)
index 0000000..63abdc5
--- /dev/null
@@ -0,0 +1,99 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sig_mbx.c
+ * @brief %jp{メールボックス資源の返却}%en{Release Semaphore Resource}
+ *
+ * @version $Id: snd_mbx.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mbxobj.h"
+
+
+
+#if _KERNEL_SPT_SND_MBX
+
+
+/**< %jp{メールボックスへの送信} */
+ER snd_mbx(ID mbxid, T_MSG *pk_msg)
+{
+       _KERNEL_T_MBXHDL mbxhdl;
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+       
+       /* %jp{ID のチェック} */
+#ifdef _KERNEL_SPT_SND_MBX_E_ID
+       if ( !_KERNEL_MBX_CHECK_MBXID(mbxid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_SND_MBX_E_NOEXS
+       if ( !_KERNEL_MBX_CHECK_EXS(mbxid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+       }
+#endif
+       
+       /* %jp{メールボックスハンドル取得} */
+       mbxhdl = _KERNEL_MBX_ID2MBXHDL(mbxid);
+       
+       /* %jp{待ち行列先頭からタスク取り出し} */
+       tskhdl = _kernel_rmh_que(_KERNEL_MBX_GET_QUE(mbxhdl));
+       if ( tskhdl != _KERNEL_TSKHDL_NULL )
+       {
+               T_MSG **ppk_msg;
+
+               /* %jp{待ちタスクがあれば待ち解除} */
+               tcb     = _KERNEL_TSK_TSKHDL2TCB(tskhdl);                       /* %jp{TCB取得} */
+               ppk_msg = (T_MSG **)_KERNEL_TSK_GET_DATA(tcb);
+               *ppk_msg = pk_msg;
+               _KERNEL_TSK_SET_ERCD(tcb, E_OK);                                /* %jp{エラーコード設定} */
+               _KERNEL_DSP_WUP_TSK(tskhdl);                                    /* %jp{タスクの待ち解除} */
+               _KERNEL_MBX_RMV_TOQ(tskhdl);                                    /* %jp{タイムアウトの解除} */
+               
+               /* %jp{タスクディスパッチの実行} */
+               _KERNEL_DSP_TSK();
+       }
+       else
+       {
+               /* %jp{メールボックに追加} */
+               _kernel_add_msg(mbxhdl, pk_msg);
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return E_OK;    /* %jp{正常終了}%en{Normal completion} */
+}
+
+
+#else  /* _KERNEL_SPT_SND_MBX */
+
+
+#if _KERNEL_SPT_SND_MBX_E_NOSPT
+
+
+ER snd_mbx(ID mbxid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_SND_MBX */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/mpf/acre_mpf.c b/kernel/source/object/mpf/acre_mpf.c
new file mode 100755 (executable)
index 0000000..c1e3eb8
--- /dev/null
@@ -0,0 +1,102 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  acre_mpf.c
+ * @brief %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)}
+ *
+ * @version $Id: acre_mpf.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mpfobj.h"
+
+
+
+#if _KERNEL_SPT_ACRE_MPF
+
+/** %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)}
+ * @param  pk_cmpf           %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the mpfaphore creation information}
+ * @retval %jp{正の値}%en{positiv-value} %jp{生成した固定長メモリプールのID番号}%en{ID number of the created mpfaphore}
+ * @retval E_NOID  %jp{ID番号不足(割付可能な固定長メモリプールIDが無い)}%en{No ID number available(there id no mpfaphore ID assignable)}
+ * @retval E_RSATR %jp{予約属性(mpfatrが不正あるいは使用できない)}%en{Reserved attribute(mpfatr is invalid or unusable)}
+ */
+ER_ID acre_mpf(const T_CMPF *pk_cmpf)
+{
+       ID    mpfid;
+       ER_ID erid;
+
+       /* %jp{属性チェック}%en{check attribute} */
+#if _KERNEL_SPT_ACRE_MPF_E_RSATR
+       if ( ((pk_cmpf->mpfatr & TA_TPRI) == 0 && !_KERNEL_SPT_MPF_TA_TFIFO)
+               || ((pk_cmpf->mpfatr & TA_TPRI) != 0 && !_KERNEL_SPT_MPF_TA_TPRI) )
+       {
+               return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */
+       }
+#endif
+
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{空きID探索} */
+       for ( mpfid = _KERNEL_MPF_TMAX_ID; mpfid >= _KERNEL_MPF_TMIN_ID; mpfid-- )
+       {
+               if ( !_KERNEL_MPF_CHECK_EXS(mpfid) )
+               {
+                       break;
+               }
+       }
+
+       /* %jp{空きID探索チェック} */
+#if _KERNEL_SPT_ACRE_MPF_E_NOID
+       if ( mpfid < _KERNEL_MPF_TMIN_ID )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOID;                  /* %jp{ID番号不足} */
+       }
+#endif
+       
+       /* %jp{オブジェクト生成} */
+#if (_KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_PTRARRAY) && _KERNEL_SPT_ACRE_MPF_E_NOMEM
+       erid = (ER_ID)_kernel_cre_mpf(mpfid, pk_cmpf);
+       if ( erid == E_OK )
+       {
+               erid = (ER_ID)mpfid;    /* %jp{エラーでなければ固定長メモリプールIDを格納} */
+       }
+#else
+       _kernel_cre_mpf(mpfid, pk_cmpf);
+       erid = (ER_ID)mpfid;            /* %jp{固定長メモリプールIDを格納} */
+#endif
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return erid;
+}
+
+
+#else  /* _KERNEL_SPT_ACRE_MPF */
+
+
+#if _KERNEL_SPT_ACRE_MPF_E_NOSPT
+
+
+/** %jp{固定長メモリプールの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)}
+ * @param  pk_cmpf  %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the mpfaphore creation information}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER_ID acre_mpf(const T_CMPF *pk_cmpf)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_ACRE_MPF */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/mpf/get_mpf.c b/kernel/source/object/mpf/get_mpf.c
new file mode 100755 (executable)
index 0000000..a0297ab
--- /dev/null
@@ -0,0 +1,132 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  get_mpf.c
+ * @brief %jp{固定長メモリプール資源の獲得}%en{Acquire Semaphore Resource}
+ *
+ * @version $Id: get_mpf.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mpfobj.h"
+
+
+
+#if _KERNEL_SPT_GET_MPF
+
+
+#if _KERNEL_SPT_TGET_MPF && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED)       /* %jp{tget_mpfありで、サイズ優先なら} */
+
+
+ER get_mpf(ID mpfid, VP *p_blk)
+{
+       /* %jp{tget_mpfで代替する} */
+       return tget_mpf(mpfid, p_blk, TMO_FEVR);
+}
+
+#else
+
+
+ER get_mpf(ID mpfid, VP *p_blk)
+{
+       _KERNEL_T_MPFHDL     mpfhdl;
+       _KERNEL_T_TSKHDL     tskhdl;
+       _KERNEL_T_TCB        *tcb;
+       _KERNEL_MPF_T_BLKHDL blkhdl;
+       VP                   blkptr;
+       ER                   ercd;
+       
+       /* %jp{コンテキストチェック} */
+#if _KERNEL_SPT_GET_MPF_E_CTX
+       if ( _KERNEL_SYS_SNS_DPN() )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_CTX;                   /* %jp{コンテキストエラー}%en{Context error} */
+       }
+#endif
+       
+       /* %jp{ID のチェック} */
+#if _KERNEL_SPT_GET_MPF_E_ID
+       if ( !_KERNEL_MPF_CHECK_MPFID(mpfid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#if _KERNEL_SPT_GET_MPF_E_NOEXS
+       if ( !_KERNEL_MPF_CHECK_EXS(mpfid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       }
+#endif
+
+       /* %jp{固定長メモリプールハンドル取得} */
+       mpfhdl = _KERNEL_MPF_ID2MPFHDL(mpfid);
+       
+       /* %jp{固定長メモリプールカウンタ取得} */
+       blkhdl = _KERNEL_MPF_GET_FREBLK(mpfhdl);
+       
+       if ( blkhdl != _KERNEL_MPF_BLKHDL_NULL )
+       {
+               /* %jp{固定長メモリプール資源が獲得できれば成功} */
+               blkptr = _KERNEL_MPF_BLKHDL2PTR(mpfhdl, blkhdl);
+               *p_blk = blkptr;
+               _KERNEL_MPF_SET_FREBLK(mpfhdl, *(_KERNEL_MPF_T_BLKHDL *)blkptr);
+               _KERNEL_MPF_SET_FBLKCNT(mpfhdl, _KERNEL_MPF_GET_FBLKCNT(mpfhdl) - 1);
+               ercd = E_OK;
+       }
+       else
+       {
+               /* %jp{タスクを待ち状態にする} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+               tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);                           /* %jp{TCB取得} */
+               _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_MPF);
+               _KERNEL_TSK_SET_WOBJID(tcb, mpfid);
+               _KERNEL_TSK_SET_DATA(tcb, (VP_INT)p_blk);
+
+               _KERNEL_DSP_WAI_TSK(tskhdl);
+               _KERNEL_MPF_ADD_QUE(mpfhdl, tskhdl);                            /* %jp{待ち行列に追加} */
+
+               /* %jp{タスクディスパッチの実行} */
+               _KERNEL_DSP_TSK();
+
+               /* %jp{エラーコードの取得} */
+               ercd = _KERNEL_TSK_GET_ERCD(tcb);
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       
+       return ercd;
+}
+
+#endif
+
+
+#else  /* _KERNEL_SPT_GET_MPF */
+
+
+#if _KERNEL_SPT_GET_MPF_E_NOSPT
+
+
+ER get_mpf(ID mpfid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_GET_MPF */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/mpf/kcre_mpf.c b/kernel/source/object/mpf/kcre_mpf.c
new file mode 100755 (executable)
index 0000000..a57ab5b
--- /dev/null
@@ -0,0 +1,189 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  acre_mpf.c
+ * @brief %jp{固定長メモリプールの生成}%en{}
+ *
+ * @version $Id: kcre_mpf.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mpfobj.h"
+
+
+/* %jp{メモリ不足エラーチェックサポートの判定} */
+#if (_KERNEL_SPT_CRE_MPF && _KERNEL_SPT_CRE_MPF_E_NOMEM) || (_KERNEL_SPT_ACRE_MPF && _KERNEL_SPT_ACRE_MPF_E_NOMEM)
+#define _KERNEL_SPT_KCRE_MPF_E_NOMEM   TRUE
+#else
+#define _KERNEL_SPT_KCRE_MPF_E_NOMEM   FALSE
+#endif
+
+
+void _kernel_set_mpf(_KERNEL_T_MPFHDL mpfhdl);
+
+
+/** %jp{固定長メモリプールの生成}%en{Create mpfaphore}
+ * @param  mpfid       %jp{生成対象の固定長メモリプールのID番号}%en{ID number of the mpfaphore to be created}
+ * @param  pk_ctsk     %jp{固定長メモリプール生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the mpfaphore creation information}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_NOMEM  %jp{メモリ不足}%en{Insufficient memory}
+ */
+ER _kernel_cre_mpf(ID mpfid, const T_CMPF *pk_cmpf)
+{
+       _KERNEL_T_MPFHDL mpfhdl;
+       VP               mpf;
+       
+       /* %jp{メモリ確保}%en{get memory} */
+#if _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_BLKARRAY
+       {       /*  %jp{MPFCB領域がブロック管理の場合} */
+
+               /* メモリ確保 */
+               if ( pk_cmpf->mpf == NULL )
+               {
+                       mpf = _KERNEL_SYS_ALC_MEM(TSZ_MPF(pk_cmpf->blkcnt, pk_cmpf->blksz));
+               /* %jp{メモリ不足チェック} */
+#if _KERNEL_SPT_KCRE_MPF_E_NOMEM
+                       if ( mpf == NULL )
+                       {
+                               return E_NOMEM;
+                       }
+#endif
+               }
+               else
+               {
+                       mpf = pk_cmpf->mpf;
+               }
+       }
+#elif _KERNEL_MPFCB_ALGORITHM == _KERNEL_MPFCB_ALG_PTRARRAY
+#if _KERNEL_MPFCB_ROM
+       {       /* %jp{MPFCB領域がポインタ管理で、ROM/RAM分離の場合} */
+               VP   mem;
+               SIZE memsz;
+
+               /* %jp{メモリサイズ決定} */
+               memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB))
+                                       + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB_ROM));
+               if ( pk_cmpf->mpf == NULL )
+               {
+                       memsz += TSZ_MPF(pk_cmpf->blkcnt, pk_cmpf->blksz);
+               }
+
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(memsz);
+
+               /* %jp{メモリ不足チェック} */
+#if _KERNEL_SPT_KCRE_MPF_E_NOMEM
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+#endif
+               
+               /* %jp{メモリ割り当て} */
+               _KERNEL_TSK_ID2MPFCB(mpfid)           = (_KERNEL_T_MPFCB *)mem;
+               _KERNEL_TSK_ID2MPFCB(mpfid)->mpfcbrom = (_KERNEL_T_MPFCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB)));
+               if ( pk_cmpf->mpf == NULL )
+               {
+                       mpf = (_KERNEL_T_MPFCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB)) + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB_ROM)));
+               }
+               else
+               {
+                       mpf = pk_cmpf->mpf;
+               }
+       }
+#else
+       {       /* %jp{MPFCB領域がポインタ管理で、ROM/RAM統合の場合} */
+               VP   mem;
+               SIZE memsz;
+
+               /* %jp{メモリサイズ決定} */
+               memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB));
+               if ( pk_cmpf->mpf == NULL )
+               {
+                       memsz += TSZ_MPF(pk_cmpf->blkcnt, pk_cmpf->blksz)
+               }
+
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(memsz);
+
+               /* %jp{メモリ不足チェック} */
+#if _KERNEL_SPT_KCRE_MPF_E_NOMEM
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+#endif
+
+               /* %jp{メモリ割り当て} */
+               _KERNEL_MPF_ID2MPFCB(mpfid) = (_KERNEL_T_MPFCB *)mem;
+               if ( pk_cmpf->mpf == NULL )
+               {
+                       mpf = (_KERNEL_T_MPFCB_ROM *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_MPFCB)));
+               }
+               else
+               {
+                       mpf = pk_cmpf->mpf;
+               }
+       }
+#endif
+#endif
+       
+       /* %jp{固定長メモリプール生成} */
+       mpfhdl = _KERNEL_MPF_ID2MPFHDL(mpfid);
+       
+       /* %jp{メンバ初期化} */
+       _KERNEL_MPF_SET_MPFATR(mpfhdl, pk_cmpf->mpfatr);
+       _KERNEL_MPF_SET_BLKCNT(mpfhdl, pk_cmpf->blkcnt);
+       _KERNEL_MPF_SET_BLKSZ(mpfhdl,  _KERNEL_TSZ_ALIGNED(pk_cmpf->blksz));
+       _KERNEL_MPF_SET_MPF(mpfhdl,  mpf);
+       _KERNEL_CRE_QUE(_KERNEL_MPF_GET_QUE(mpfhdl));
+       
+       _kernel_set_mpf(mpfhdl);
+
+       return E_OK;
+}
+
+
+void _kernel_set_mpf(_KERNEL_T_MPFHDL mpfhdl)
+{
+       UINT i;
+
+#if _KERNEL_MPF_ALGORITHM == _KERNEL_MPF_ALG_CHAIN_PTR         /* %jp{ポインタ管理} */
+       {
+               VB *ptr, *next;
+
+               ptr = (VB *)_KERNEL_MPF_GET_MPF(mpfhdl);
+               _KERNEL_MPF_SET_FREBLK(mpfhdl, ptr);
+               for ( i = 0; i < _KERNEL_MPF_GET_BLKCNT(mpfhdl) - 1; i++ )
+               {
+                       next = ptr + _KERNEL_MPF_GET_BLKSZ(mpfhdl);
+                       *(_KERNEL_MPFCB_T_BLKHDL *)ptr = next;
+                       ptr = next;
+               }
+               *(_KERNEL_MPFCB_T_BLKHDL *)ptr = NULL;
+       }
+#elif  _KERNEL_MPF_ALGORITHM == _KERNEL_MPF_ALG_CHAIN_NUM      /* %jp{ブロック番号管理} */
+       {
+               VB *ptr;
+
+               ptr = (VB *)_KERNEL_MPF_GET_MPF(mpfhdl);
+               _KERNEL_MPF_SET_FREBLK(mpfhdl, 1);
+               for ( i = 1; i < _KERNEL_MPF_GET_BLKCNT(mpfhdl) - 1; i++ )
+               {
+                       *(_KERNEL_MPFCB_T_BLKHDL *)ptr = (i + 1);
+                       ptr += _KERNEL_MPF_GET_BLKSZ(mpfhdl);
+               }
+               *(_KERNEL_MPFCB_T_BLKHDL *)ptr = 0;
+       }
+#endif
+}
+
+
+
+
+/* end of file */
diff --git a/kernel/source/object/mpf/pget_mpf.c b/kernel/source/object/mpf/pget_mpf.c
new file mode 100755 (executable)
index 0000000..237aedf
--- /dev/null
@@ -0,0 +1,108 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  get_mpf.c
+ * @brief %jp{固定長メモリプール資源の獲得}%en{Acquire Semaphore Resource}
+ *
+ * @version $Id: pget_mpf.c,v 1.1 2006-08-16 16:27:03 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mpfobj.h"
+
+
+
+#if _KERNEL_SPT_PGET_MPF
+
+
+#if _KERNEL_SPT_TGET_MPF && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED)       /* %jp{tget_mpfありで、サイズ優先なら} */
+
+
+ER pget_mpf(ID mpfid, VP *p_blk)
+{
+       /* %jp{tget_mpfで代替する} */
+       return tget_mpf(mpfid, p_blk, TMO_POL);
+}
+
+#else
+
+
+ER pget_mpf(ID mpfid, VP *p_blk)
+{
+       _KERNEL_T_MPFHDL     mpfhdl;
+       _KERNEL_MPF_T_BLKHDL blkhdl;
+       VP                   blkptr;
+       ER                   ercd;
+       
+       
+       /* %jp{ID のチェック} */
+#if _KERNEL_SPT_PGET_MPF_E_ID
+       if ( !_KERNEL_MPF_CHECK_MPFID(mpfid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#if _KERNEL_SPT_PGET_MPF_E_NOEXS
+       if ( !_KERNEL_MPF_CHECK_EXS(mpfid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       }
+#endif
+
+       /* %jp{固定長メモリプールハンドル取得} */
+       mpfhdl = _KERNEL_MPF_ID2MPFHDL(mpfid);
+       
+       /* %jp{固定長メモリプールカウンタ取得} */
+       blkhdl = _KERNEL_MPF_GET_FREBLK(mpfhdl);
+       
+       if ( blkhdl != _KERNEL_MPF_BLKHDL_NULL )
+       {
+               /* %jp{固定長メモリプール資源が獲得できれば成功} */
+               blkptr = _KERNEL_MPF_BLKHDL2PTR(mpfhdl, blkhdl);
+               *p_blk = blkptr;
+               _KERNEL_MPF_SET_FREBLK(mpfhdl, *(_KERNEL_MPF_T_BLKHDL *)blkptr);
+               _KERNEL_MPF_SET_FBLKCNT(mpfhdl, _KERNEL_MPF_GET_FBLKCNT(mpfhdl) - 1);
+               ercd = E_OK;
+       }
+       else
+       {
+               ercd = E_TMOUT;
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       
+       return ercd;
+}
+
+#endif
+
+
+#else  /* _KERNEL_SPT_GET_MPF */
+
+
+#if _KERNEL_SPT_GET_MPF_E_NOSPT
+
+
+ER pget_mpf(ID mpfid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_GET_MPF */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/mpf/rel_mpf.c b/kernel/source/object/mpf/rel_mpf.c
new file mode 100755 (executable)
index 0000000..63ff23b
--- /dev/null
@@ -0,0 +1,122 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  get_mpf.c
+ * @brief %jp{固定長メモリプール資源の獲得}%en{Acquire Semaphore Resource}
+ *
+ * @version $Id: rel_mpf.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/mpfobj.h"
+
+
+
+#if _KERNEL_SPT_GET_MPF
+
+
+#if _KERNEL_SPT_TGET_MPF && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED)       /* %jp{tget_mpfありで、サイズ優先なら} */
+
+
+ER get_mpf(ID mpfid, VP *p_blk)
+{
+       /* %jp{tget_mpfで代替する} */
+       return tget_mpf(mpfid, p_blk, TMO_FEVR);
+}
+
+#else
+
+
+ER rel_mpf(ID mpfid, VP blk)
+{
+       _KERNEL_T_MPFHDL mpfhdl;
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+
+       /* %jp{コンテキストチェック} */
+#if _KERNEL_SPT_GET_MPF_E_CTX
+       if ( _KERNEL_SYS_SNS_DPN() )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_CTX;                   /* %jp{コンテキストエラー}%en{Context error} */
+       }
+#endif
+       
+       /* %jp{ID のチェック} */
+#if _KERNEL_SPT_GET_MPF_E_ID
+       if ( !_KERNEL_MPF_CHECK_MPFID(mpfid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#if _KERNEL_SPT_GET_MPF_E_NOEXS
+       if ( !_KERNEL_MPF_CHECK_EXS(mpfid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       }
+#endif
+
+       /* %jp{固定長メモリプールハンドル取得} */
+       mpfhdl = _KERNEL_MPF_ID2MPFHDL(mpfid);
+
+       /* %jp{待ち行列先頭からタスク取り出し} */
+       tskhdl = _KERNEL_MPF_RMH_QUE(_KERNEL_MPF_GET_QUE(mpfhdl));
+       if ( tskhdl != _KERNEL_TSKHDL_NULL )
+       {
+               VP *p_blk;
+
+               /* %jp{待ちタスクがあれば待ち解除} */
+               tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);           /* %jp{TCB取得} */
+               p_blk = (VP *)_KERNEL_TSK_GET_DATA(tcb);
+               *p_blk = blk;
+               _KERNEL_TSK_SET_ERCD(tcb, E_OK);                        /* %jp{エラーコード設定} */
+               _KERNEL_DSP_WUP_TSK(tskhdl);                            /* %jp{タスクの待ち解除} */
+               _KERNEL_MPF_RMV_TOQ(tskhdl);
+               
+               /* %jp{タスクディスパッチの実行} */
+               _KERNEL_DSP_TSK();
+       }
+       else
+       {
+               /* %jp{プールに返却} */
+               *(_KERNEL_MPF_T_BLKHDL *)blk = _KERNEL_MPF_GET_FREBLK(mpfhdl);
+               _KERNEL_MPF_SET_FREBLK(mpfhdl, _KERNEL_MPF_PTR2BLKHDL(mpfhdl, blk));
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return E_OK;
+}
+
+#endif
+
+
+#else  /* _KERNEL_SPT_GET_MPF */
+
+
+#if _KERNEL_SPT_GET_MPF_E_NOSPT
+
+
+ER get_mpf(ID mpfid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_GET_MPF */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/acre_sem.c b/kernel/source/object/sem/acre_sem.c
new file mode 100755 (executable)
index 0000000..23c7690
--- /dev/null
@@ -0,0 +1,102 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  acre_sem.c
+ * @brief %jp{セマフォの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)}
+ *
+ * @version $Id: acre_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+
+#if _KERNEL_SPT_ACRE_SEM
+
+/** %jp{セマフォの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)}
+ * @param  pk_csem           %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information}
+ * @retval %jp{正の値}%en{positiv-value} %jp{生成したセマフォのID番号}%en{ID number of the created semaphore}
+ * @retval E_NOID  %jp{ID番号不足(割付可能なセマフォIDが無い)}%en{No ID number available(there id no semaphore ID assignable)}
+ * @retval E_RSATR %jp{予約属性(sematrが不正あるいは使用できない)}%en{Reserved attribute(sematr is invalid or unusable)}
+ */
+ER_ID acre_sem(const T_CSEM *pk_csem)
+{
+       ID    semid;
+       ER_ID erid;
+
+       /* %jp{属性チェック}%en{check attribute} */
+#if _KERNEL_SPT_ACRE_SEM_E_RSATR
+       if ( ((pk_csem->sematr & TA_TPRI) == 0 && !_KERNEL_SPT_SEM_TA_TFIFO)
+               || ((pk_csem->sematr & TA_TPRI) != 0 && !_KERNEL_SPT_SEM_TA_TPRI) )
+       {
+               return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */
+       }
+#endif
+
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{空きID探索} */
+       for ( semid = _KERNEL_SEM_TMAX_ID; semid >= _KERNEL_SEM_TMIN_ID; semid-- )
+       {
+               if ( !_KERNEL_SEM_CHECK_EXS(semid) )
+               {
+                       break;
+               }
+       }
+
+       /* %jp{空きID探索チェック} */
+#if _KERNEL_SPT_ACRE_SEM_E_NOID
+       if ( semid < _KERNEL_SEM_TMIN_ID )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOID;                  /* %jp{ID番号不足} */
+       }
+#endif
+       
+       /* %jp{オブジェクト生成} */
+#if (_KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY) && _KERNEL_SPT_ACRE_SEM_E_NOMEM
+       erid = (ER_ID)_kernel_cre_sem(semid, pk_csem);
+       if ( erid == E_OK )
+       {
+               erid = (ER_ID)semid;    /* %jp{エラーでなければセマフォIDを格納} */
+       }
+#else
+       _kernel_cre_sem(semid, pk_csem);
+       erid = (ER_ID)semid;            /* %jp{セマフォIDを格納} */
+#endif
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return erid;
+}
+
+
+#else  /* _KERNEL_SPT_ACRE_SEM */
+
+
+#if _KERNEL_SPT_ACRE_SEM_E_NOSPT
+
+
+/** %jp{セマフォの生成(ID番号自動割付け)}%en{Create Semaphore(ID Number Automatic Assignment)}
+ * @param  pk_csem  %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER_ID acre_sem(const T_CSEM *pk_csem)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_ACRE_SEM */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/cre_sem.c b/kernel/source/object/sem/cre_sem.c
new file mode 100755 (executable)
index 0000000..08cc8e6
--- /dev/null
@@ -0,0 +1,93 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  cre_sem.c
+ * @brief %jp{セマフォの生成}%en{Create Semaphore}
+ *
+ * @version $Id: cre_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+
+#if _KERNEL_SPT_CRE_SEM
+
+
+/** %jp{セマフォの生成}%en{Create Semaphore}
+ * @param  semid    %jp{生成対象のセマフォのID番号}%en{ID number of the semaphore to be created}
+ * @param  pk_ctsk     %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_RSATR  %jp{予約属性(sematrが不正あるいは使用できない)}%en{Reserved attribute(sematr is invalid or unusable)}
+ * @retval E_OBJ    %jp{オブジェクト状態エラー(対象セマフォが登録済み)}%en{Object state error(specified semaphore is already registerd)}
+ */
+ER cre_sem(ID semid, const T_CSEM *pk_csem)
+{
+       ER ercd;
+
+       /* %jp{IDチェック}%en{check ID} */
+#if _KERNEL_SPT_CRE_SEM_E_ID
+       if ( !_KERNEL_SEM_CHECK_SEMID(semid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }       
+#endif
+
+       /* %jp{属性チェック}%en{check attribute} */
+#if _KERNEL_SPT_CRE_SEM_E_RSATR
+       if ( ((pk_csem->sematr & TA_TPRI) == 0 && !_KERNEL_SPT_SEM_TA_TFIFO)
+               || ((pk_csem->sematr & TA_TPRI) != 0 && !_KERNEL_SPT_SEM_TA_TPRI) )
+       {
+               return E_RSATR; /* %jp{予約属性}%en{Reserved attribute} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{存在チェック}%en{check object} */
+#if _KERNEL_SPT_CRE_SEM_E_OBJ
+       if ( _KERNEL_SEM_CHECK_EXS(semid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_OBJ;                   /* %jp{オブジェクト状態エラー}%en{Object state error} */
+       }
+#endif
+       
+       /* %jp{オブジェクト生成}%en{create object} */
+       ercd = _kernel_cre_sem(semid, pk_csem);
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return ercd;
+}
+
+
+#else  /* _KERNEL_SPT_CRE_SEM */
+
+
+#if _KERNEL_SPT_CRE_SEM_E_NOSPT
+
+/** %jp{セマフォの生成}%en{Create Semaphore}
+ * @param  semid    %jp{生成対象のセマフォのID番号}%en{ID number of the semaphore to be created}
+ * @param  pk_ctsk     %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER cre_sem(ID semid, const T_CSEM *pk_csem)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_CRE_SEM */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/del_sem.c b/kernel/source/object/sem/del_sem.c
new file mode 100755 (executable)
index 0000000..cad1368
--- /dev/null
@@ -0,0 +1,105 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  del_sem.c
+ * @brief %jp{セマフォの削除}%en{Delete Semaphore}
+ *
+ * @version $Id: del_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+
+#if _KERNEL_SPT_DEL_SEM
+
+
+/** %jp{セマフォの削除}%en{Delete Semaphore}
+ * @param  semid    %jp{削除対象のセマフォのID番号}%en{ID number of the semaphore to be deleted}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ */
+ER del_sem(ID semid)
+{
+       _KERNEL_T_SEMCB  *semcb;
+       _KERNEL_T_QUE    *pk_que;
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+
+       /* %jp{IDチェック}%en{check ID} */
+#if _KERNEL_SPT_DEL_SEM_E_ID
+       if ( !_KERNEL_SEM_CHECK_SEMID(semid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }       
+#endif
+       
+       _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{存在チェック}%en{check object} */
+#if _KERNEL_SPT_DEL_SEM_E_NOEXS
+       if ( _KERNEL_SEM_CHECK_EXS(semid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_OBJ;                   /* %jp{オブジェクト状態エラー}%en{Object state error} */
+       }
+#endif
+       
+       /* %jp{セマフォコントロールブロック取得} */
+       semcb = _KERNEL_SEM_ID2SEMCB(semid);
+       
+       /* %jp{待ち行列取得} */
+       pk_que = _KERNEL_SEM_GET_QUE(semcb);
+       
+       /* %jp{待ち行列のタスクを全て起床} */
+       while ( (tskhdl = _KERNEL_RMH_QUE(pk_que)) != _KERNEL_TSKHDL_NULL )
+       {
+               /* %jp{待ちタスクがあれば待ち解除} */
+               tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);           /* %jp{TCB取得} */
+               _KERNEL_TSK_SET_ERCD(tcb, E_DLT);                       /* %jp{エラーコード設定} */
+               _KERNEL_SEM_RMV_TOQ(tskhdl);                            /* %jp{タイムアウトキューから外す} */
+               _KERNEL_DSP_WUP_TSK(tskhdl);                            /* %jp{タスクの待ち解除} */     
+       }
+       
+       /* %jp{オブジェクト削除} */
+#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY
+       _KERNEL_SYS_FRE_MEM(semcb);                                             /* %jp{メモリ開放} */
+       _KERNEL_SEM_ID2SEMCB(semid) = NULL;
+#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY
+       _KERNEL_SEM_SET_MAXSEM(semcb, 0);
+#endif
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return E_OK;
+}
+
+
+#else  /* _KERNEL_SPT_DEL_SEM */
+
+
+#if _KERNEL_SPT_DEL_SEM_E_NOSPT
+
+/** %jp{セマフォの削除}%en{Delete Semaphore}
+ * @param  semid    %jp{削除対象のセマフォのID番号}%en{ID number of the semaphore to be deleted}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER del_sem(ID semid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_DEL_SEM */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/kcre_sem.c b/kernel/source/object/sem/kcre_sem.c
new file mode 100755 (executable)
index 0000000..e658e2e
--- /dev/null
@@ -0,0 +1,106 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  acre_sem.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * @version $Id: kcre_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+/* %jp{メモリ不足エラーチェックサポートの判定} */
+#if (_KERNEL_SPT_CRE_SEM && _KERNEL_SPT_CRE_SEM_E_NOMEM) || (_KERNEL_SPT_ACRE_SEM && _KERNEL_SPT_ACRE_SEM_E_NOMEM)
+#define _KERNEL_SPT_KCRE_SEM_E_NOMEM   TRUE
+#else
+#define _KERNEL_SPT_KCRE_SEM_E_NOMEM   FALSE
+#endif
+
+
+
+/** %jp{セマフォの生成}%en{Create semaphore}
+ * @param  semid       %jp{生成対象のセマフォのID番号}%en{ID number of the semaphore to be created}
+ * @param  pk_ctsk     %jp{セマフォ生成情報を入れたパケットへのポインタ}%en{Pointer to the packet containing the semaphore creation information}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_NOMEM  %jp{メモリ不足}%en{Insufficient memory}
+ */
+ER _kernel_cre_sem(ID semid, const T_CSEM *pk_csem)
+{
+       _KERNEL_T_SEMCB    *semcb;
+       _KERNEL_T_SEMCB_RO *semcb_ro;
+       
+       /* %jp{メモリ確保}%en{get memory} */
+#if _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_BLKARRAY
+       {
+               semcb    = _KERNEL_SEM_ID2SEMCB(semid);
+               semcb_ro = semcb;
+       }
+#elif _KERNEL_SEMCB_ALGORITHM == _KERNEL_SEMCB_ALG_PTRARRAY
+#if _KERNEL_SEMCB_SPLIT_RO
+       {
+               /* %jp{SEMCB領域がポインタ管理で、ROM/RAM分離の場合} */
+               VP   mem;
+               SIZE memsz;
+
+               /* %jp{メモリサイズ決定} */
+               memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_SEMCB))
+                                       + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_SEMCB_RO));
+
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(memsz);
+
+               /* %jp{メモリ不足チェック} */
+#if _KERNEL_SPT_KCRE_SEM_E_NOMEM
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+#endif
+               
+               /* %jp{メモリ割り当て} */
+               semcb    = (_KERNEL_T_SEMCB *)mem;
+               semcb_ro = (_KERNEL_T_SEMCB_RO *)((VB *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_SEMCB)));
+               _KERNEL_SEM_ID2SEMCB(semid)           = semcb;
+               _KERNEL_SEM_ID2SEMCB(semid)->semcb_ro = (const _KERNEL_T_SEMCB_RO *)semcb_ro;
+       }
+#else
+       {
+               VP   mem;
+               
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(sizeof(_KERNEL_T_SEMCB));
+
+               /* %jp{メモリ不足チェック} */
+#if _KERNEL_SPT_KCRE_SEM_E_NOMEM
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+#endif
+
+               /* %jp{メモリ割り当て} */
+               semcb    = (_KERNEL_T_SEMCB *)mem;
+               semcb_ro = (_KERNEL_T_SEMCB_RO *)mem;
+               _KERNEL_SEM_ID2SEMCB(semid) = semcb;
+       }
+#endif
+#endif
+
+       /* %jp{メンバ初期化} */
+       _KERNEL_CRE_QUE(_KERNEL_SEM_GET_QUE(semcb));
+       _KERNEL_SEM_SET_SEMCNT(semcb, pk_csem->isemcnt);
+       _KERNEL_SEM_SET_SEMATR(semcb_ro, pk_csem->sematr);
+       _KERNEL_SEM_SET_MAXSEM(semcb_ro, pk_csem->maxsem);
+       
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/kwai_sem.c b/kernel/source/object/sem/kwai_sem.c
new file mode 100755 (executable)
index 0000000..9324da6
--- /dev/null
@@ -0,0 +1,117 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  twai_sem.c
+ * @brief %jp{セマフォ資源の獲得(統合版)}%en{Acquire Semaphore Resource}
+ *
+ * @version $Id: kwai_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+
+
+/** %jp{セマフォ資源の獲得(統合版)}%en{Acquire Semaphore Resource}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @param  tmout    %jp{タイムアウト指定}%en{Specified timeout}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_CTX    %jp{コンテキストエラー}%en{Context error}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ * @retval E_RLWAI  %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)}
+ * @retval E_TMOUT  %jp{タイムアウト}%en{Timeout}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)}
+ */
+ER _kernel_wai_sem(ID semid, TMO tmout)
+{
+       _KERNEL_T_SEMHDL     semhdl;
+       _KERNEL_T_TSKHDL     tskhdl;
+       _KERNEL_SEM_T_SEMCNT semcnt;
+       ER                   ercd;
+       
+       /* %jp{ID のチェック} */
+#if _KERNEL_SPT_KWAI_SEM_E_ID
+       if ( !_KERNEL_SEM_CHECK_SEMID(semid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       /* %jp{コンテキストチェック} */
+#if _KERNEL_SPT_KWAI_SEM_E_CTX
+       if ( tmout != TMO_POL && _KERNEL_SYS_SNS_DPN() )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_CTX;                   /* %jp{コンテキストエラー}%en{Context error} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#if _KERNEL_SPT_KWAI_SEM_E_NOEXS
+       if ( !_KERNEL_SEM_CHECK_EXS(semid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       }
+#endif
+
+       /* %jp{セマフォハンドル取得} */
+       semhdl = _KERNEL_SEM_ID2SEMHDL(semid);
+       
+       /* %jp{セマフォカウンタ取得} */
+       semcnt = _KERNEL_SEM_GET_SEMCNT(semhdl);
+       
+       if ( semcnt > 0 )
+       {
+               /* %jp{セマフォ資源が獲得できれば成功} */
+               _KERNEL_SEM_SET_SEMCNT(semhdl, semcnt - 1);             /* %jp{セマフォ資源の獲得} */
+               ercd = E_OK;
+       }
+       else
+       {
+#if _KERNEL_SPT_TWAI_SEM || _KERNEL_SPT_POL_SEM
+               if ( tmout == TMO_POL )
+               {
+                       ercd = E_TMOUT;  /* %jp{タイムアウト}%en{Timeout} */
+               }
+               else
+#endif
+               {
+                       /* %jp{タスクを待ち状態にする} */
+                       tskhdl = _KERNEL_SYS_GET_RUNTSK();
+                       _KERNEL_DSP_WAI_TSK(tskhdl);
+                       _KERNEL_TSK_SET_TSKWAIT(tskhdl, _KERNEL_TTW_SEM);
+                       _KERNEL_TSK_SET_WOBJID(tskhdl, semid);
+                       _KERNEL_SEM_ADD_QUE(semhdl, tskhdl);                            /* %jp{待ち行列に追加} */
+                       
+#if _KERNEL_SPT_TWAI_SEM
+                       if ( tmout != TMO_FEVR )
+                       {
+                               _KERNEL_SEM_ADD_TOQ(tskhdl, tmout);                             /* %jp{タイムアウトキューに追加} */
+                       }
+#endif
+
+                       /* %jp{タスクディスパッチの実行} */
+                       _KERNEL_DSP_TSK();
+
+                       /* %jp{エラーコードの取得} */
+                       ercd = _KERNEL_TSK_GET_ERCD(tskhdl);
+               }
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       
+       return ercd;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/pol_sem.c b/kernel/source/object/sem/pol_sem.c
new file mode 100755 (executable)
index 0000000..c5f8dae
--- /dev/null
@@ -0,0 +1,120 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  pol_sem.c
+ * @brief %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)}
+ *
+ * @version $Id: pol_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+
+#if _KERNEL_SPT_POL_SEM
+
+
+#if _KERNEL_SPT_TWAI_SEM && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED)       /* %jp{twai_semありで、サイズ優先なら} */
+
+/** %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ * @retval E_TMOUT  %jp{ポーリング失敗}%en{Polling failure}
+ */
+ER pol_sem(ID semid)
+{
+       /* %jp{pol_semやtwai_semと共通処理とする} */
+       return _kernel_wai_sem(semid, TMO_POL);
+}
+
+#else
+
+/** %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ * @retval E_TMOUT  %jp{ポーリング失敗}%en{Polling failure}
+ */
+ER pol_sem(ID semid)
+{
+       _KERNEL_T_SEMCB      *semcb;
+       _KERNEL_SEM_T_SEMCNT semcnt;
+       ER                   ercd;
+       
+       /* %jp{ID のチェック} */
+#if _KERNEL_SPT_POL_SEM_E_ID
+       if ( !_KERNEL_SEM_CHECK_SEMID(semid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#if _KERNEL_SPT_POL_SEM_E_NOEXS
+       if ( !_KERNEL_SEM_CHECK_EXS(semid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       }
+#endif
+
+       /* %jp{セマフォコントロールブロック取得} */
+       semcb = _KERNEL_SEM_ID2SEMCB(semid);
+       
+       /* %jp{セマフォカウンタ取得} */
+       semcnt = _KERNEL_SEM_GET_SEMCNT(semcb);
+
+       /* %jp{資源数チェック} */
+       if ( semcnt > 0 ) 
+       {
+               /* %jp{セマフォ資源が獲得} */
+               _KERNEL_SEM_SET_SEMCNT(semcb, semcnt - 1);              /* %jp{セマフォ資源の獲得} */
+               ercd = E_OK;
+       }
+       else
+       {
+               ercd = E_TMOUT;
+       }
+       
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return ercd;
+}
+
+#endif
+
+
+#else  /* _KERNEL_SPT_POL_SEM */
+
+
+#if _KERNEL_SPT_POL_SEM_E_NOSPT
+
+/** %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER wai_sem(ID semid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_POL_SEM */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/ref_sem.c b/kernel/source/object/sem/ref_sem.c
new file mode 100755 (executable)
index 0000000..705da96
--- /dev/null
@@ -0,0 +1,95 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ref_sem.c
+ * @brief %jp{セマフォの状態参照}%en{Reference Semaphore State}
+ *
+ * @version $Id: ref_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+
+#if _KERNEL_SPT_REF_SEM
+
+
+/** %jp{セマフォの状態参照}%en{Reference Semaphore State}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @param  pk_rsem  %jp{セマフォ状態を返すパケットへのポインタ}%en{Pointer to the packet returning the semaphore state}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ * @retval E_PAR    %jp{パラメータエラー(pk_rsemが不正)}%en{Parameter error(pk_rsem is invalid)}
+ */
+ER ref_sem(ID semid, T_RSEM *pk_rsem)
+{
+       _KERNEL_T_SEMCB *semcb;
+       
+       /* %jp{ID のチェック} */
+#if _KERNEL_SPT_REF_SEM_E_ID
+       if ( !_KERNEL_SEM_CHECK_SEMID(semid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+#if _KERNEL_SPT_REF_SEM_E_PAR
+       if ( pk_rsem == NULL )
+       {
+               return E_PAR;   /* %jp{パラメータエラー}%en{Parameter error} */
+       }
+#endif
+               
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#if _KERNEL_SPT_REF_SEM_E_NOEXS
+       if ( !_KERNEL_SEM_CHECK_EXS(semid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       }
+#endif
+
+       /* %jp{セマフォコントロールブロック取得} */
+       semcb = _KERNEL_SEM_ID2SEMCB(semid);
+       
+       /* %jp{情報取得} */
+       pk_rsem->wtskid = _KERNEL_TSK_GET_TSKID(_KERNEL_REF_QUE(_KERNEL_SEM_GET_QUE(semcb)));
+       pk_rsem->semcnt = _KERNEL_SEM_GET_SEMCNT(semcb);
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       
+       return E_OK;
+}
+
+
+#else  /* _KERNEL_SPT_REF_SEM */
+
+
+#if _KERNEL_SPT_REF_SEM_E_NOSPT
+
+/** %jp{セマフォ資源の獲得(ポーリング)}%en{Acquire Semaphore Resource(Polling)}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER ref_sem(ID semid, T_RSEM *pk_rsem)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_REF_SEM */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/sig_sem.c b/kernel/source/object/sem/sig_sem.c
new file mode 100755 (executable)
index 0000000..fa3e1c7
--- /dev/null
@@ -0,0 +1,122 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sig_sem.c
+ * @brief %jp{セマフォ資源の返却}%en{Release Semaphore Resource}
+ *
+ * @version $Id: sig_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+
+#if _KERNEL_SPT_SIG_SEM
+
+
+/** %jp{セマフォ資源の返却}%en{Release Semaphore Resource}
+ * @param  semid    %jp{セマフォ資源返却対象のセマフォのID番号}%en{ID number of the semaphore to which resource is released}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ * @retval E_QOVR   %jp{キューイングオーバーフロー(最大資源数を越える返却)}%en{Queue overflow(release will exceed maximum resource count)}
+ */
+ER sig_sem(ID semid)
+{
+       _KERNEL_T_SEMCB      *semcb;
+       _KERNEL_T_TSKHDL     tskhdl;
+       _KERNEL_T_TCB        *tcb;
+       _KERNEL_SEM_T_SEMCNT semcnt;
+       
+       /* %jp{ID のチェック} */
+#ifdef _KERNEL_SPT_SIG_SEM_E_ID
+       if ( !_KERNEL_SEM_CHECK_SEMID(semid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();    /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_SIG_SEM_E_NOEXS
+       if ( !_KERNEL_SEM_CHECK_EXS(semid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+       }
+#endif
+       
+       /* %jp{セマフォコントロールブロック取得} */
+       semcb = _KERNEL_SEM_ID2SEMCB(semid);
+       
+       /* %jp{待ち行列先頭からタスク取り出し} */
+       tskhdl = _KERNEL_SEM_RMH_QUE(_KERNEL_SEM_GET_QUE(semcb));
+       if ( tskhdl != _KERNEL_TSKHDL_NULL )
+       {
+               /* %jp{待ちタスクがあれば待ち解除} */
+               tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);           /* %jp{TCB取得} */
+               _KERNEL_TSK_SET_ERCD(tcb, E_OK);                        /* %jp{エラーコード設定} */
+               _KERNEL_DSP_WUP_TSK(tskhdl);                            /* %jp{タスクの待ち解除} */
+               _KERNEL_SEM_RMV_TOQ(tskhdl);
+               
+               /* %jp{タスクディスパッチの実行} */
+               _KERNEL_DSP_TSK();
+       }
+       else
+       {
+               /* %jp{セマフォカウンタ取得} */
+               semcnt = _KERNEL_SEM_GET_SEMCNT(semcb);
+
+               /* %jp{キューイングオーバーフローチェック} */
+#ifdef _KERNEL_SPT_SIG_SEM_E_QOVR
+               {
+                       const _KERNEL_T_SEMCB_RO *semcb_ro;
+
+                       semcb_ro = _KERNEL_SEM_GET_SEMCB_RO(semid, semcb);
+                       if ( semcnt >= _KERNEL_SEM_GET_MAXSEM(semcb_ro) )
+                       {
+                               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+                               return E_QOVR;                  /* %jp{キューイングオーバーフロー}%en{Queue overflow} */
+                       }
+               }
+#endif
+               
+               /* %jp{セマフォ資源返却} */
+               _KERNEL_SEM_SET_SEMCNT(semcb, semcnt + 1);
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return E_OK;    /* %jp{正常終了}%en{Normal completion} */
+}
+
+
+#else  /* _KERNEL_SPT_SIG_SEM */
+
+
+#if _KERNEL_SPT_SIG_SEM_E_NOSPT
+
+/** %jp{セマフォ資源の返却}%en{Release Semaphore Resource}
+ * @param  semid    %jp{セマフォ資源返却対象のセマフォのID番号}%en{ID number of the semaphore to which resource is released}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER sig_sem(ID semid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_SIG_SEM */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/twai_sem.c b/kernel/source/object/sem/twai_sem.c
new file mode 100755 (executable)
index 0000000..d952605
--- /dev/null
@@ -0,0 +1,166 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  twai_sem.c
+ * @brief %jp{セマフォ資源の獲得(タイムアウトあり)}%en{Acquire Semaphore Resource(with Timeout)}
+ *
+ * @version $Id: twai_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+
+#if _KERNEL_SPT_TWAI_SEM
+
+
+/** %jp{セマフォ資源の獲得(タイムアウトあり)}%en{Acquire Semaphore Resource(with Timeout)}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @param  tmout    %jp{タイムアウト指定}%en{Specified timeout}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_CTX    %jp{コンテキストエラー}%en{Context error}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ * @retval E_RLWAI  %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)}
+ * @retval E_TMOUT  %jp{タイムアウト}%en{Timeout}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)}
+ */
+ER twai_sem(ID semid, TMO tmout)
+{
+       return _kernel_wai_sem(semid, tmout);
+}
+
+
+#else  /* _KERNEL_SPT_TWAI_SEM */
+
+
+#if _KERNEL_SPT_TWAI_SEM_E_NOSPT
+
+/** %jp{セマフォ資源の獲得(タイムアウトあり)}%en{Acquire Semaphore Resource(with Timeout)}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER twai_sem(ID semid, TMO tmout)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_TWAI_SEM */
+
+
+
+#if _KERNEL_SPT_KWAI_SEM
+
+
+/** %jp{セマフォ資源の獲得(統合版)}%en{Acquire Semaphore Resource}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @param  tmout    %jp{タイムアウト指定}%en{Specified timeout}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_CTX    %jp{コンテキストエラー}%en{Context error}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ * @retval E_RLWAI  %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)}
+ * @retval E_TMOUT  %jp{タイムアウト}%en{Timeout}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)}
+ */
+ER _kernel_wai_sem(ID semid, TMO tmout)
+{
+       _KERNEL_T_SEMCB      *semcb;
+       _KERNEL_T_TSKHDL     tskhdl;
+       _KERNEL_T_TCB        *tcb;
+       _KERNEL_SEM_T_SEMCNT semcnt;
+       ER                   ercd;
+       
+       /* %jp{ID のチェック} */
+#if _KERNEL_SPT_KWAI_SEM_E_ID
+       if ( !_KERNEL_SEM_CHECK_SEMID(semid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       /* %jp{コンテキストチェック} */
+#if _KERNEL_SPT_KWAI_SEM_E_CTX
+       if ( tmout != TMO_POL && _KERNEL_SYS_SNS_DPN() )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_CTX;                   /* %jp{コンテキストエラー}%en{Context error} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#if _KERNEL_SPT_KWAI_SEM_E_NOEXS
+       if ( !_KERNEL_SEM_CHECK_EXS(semid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       }
+#endif
+
+       /* %jp{セマフォコントロールブロック取得} */
+       semcb = _KERNEL_SEM_ID2SEMCB(semid);
+       
+       /* %jp{セマフォカウンタ取得} */
+       semcnt = _KERNEL_SEM_GET_SEMCNT(semcb);
+       
+       if ( semcnt > 0 )
+       {
+               /* %jp{セマフォ資源が獲得できれば成功} */
+               _KERNEL_SEM_SET_SEMCNT(semcb, semcnt - 1);              /* %jp{セマフォ資源の獲得} */
+               ercd = E_OK;
+       }
+       else
+       {
+#if _KERNEL_SPT_TWAI_SEM || _KERNEL_SPT_POL_SEM
+               if ( tmout == TMO_POL )
+               {
+                       ercd = E_TMOUT;  /* %jp{タイムアウト}%en{Timeout} */
+               }
+               else
+#endif
+               {
+                       /* %jp{タスクを待ち状態にする} */
+                       tskhdl = _KERNEL_SYS_GET_RUNTSK();
+                       tcb    = _KERNEL_TSK_TSKHDL2TCB(tskhdl);                /* %jp{TCB取得} */
+                       _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_SEM);
+                       _KERNEL_TSK_SET_WOBJID(tcb, semid);
+                       _KERNEL_DSP_WAI_TSK(tskhdl);
+                       _KERNEL_SEM_ADD_QUE(semcb, _KERNEL_SEM_GET_SEMCB_RO(semid, semcb), tskhdl);                     /* %jp{待ち行列に追加} */
+                       
+#if _KERNEL_SPT_TWAI_SEM
+                       if ( tmout != TMO_FEVR )
+                       {
+                               _KERNEL_SEM_ADD_TOQ(tskhdl, tmout);                             /* %jp{タイムアウトキューに追加} */
+                       }
+#endif
+
+                       /* %jp{タスクディスパッチの実行} */
+                       _KERNEL_DSP_TSK();
+
+                       /* %jp{エラーコードの取得} */
+                       ercd = _KERNEL_TSK_GET_ERCD(tcb);
+               }
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       
+       return ercd;
+}
+
+
+#endif /* _KERNEL_SPT_KWAI_SEM */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sem/wai_sem.c b/kernel/source/object/sem/wai_sem.c
new file mode 100755 (executable)
index 0000000..2753457
--- /dev/null
@@ -0,0 +1,142 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  wai_sem.c
+ * @brief %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource}
+ *
+ * @version $Id: wai_sem.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+
+
+
+#if _KERNEL_SPT_WAI_SEM
+
+
+#if _KERNEL_SPT_KWAI_SEM && (_KERNEL_OPT_CODE_SIZE <= _KERNEL_OPT_SPEED)       /* %jp{コードサイズ優先で統合ありなら} */
+
+/** %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ * @retval E_RLWAI  %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)}
+ */
+ER wai_sem(ID semid)
+{
+       /* %jp{pol_semやtwai_semと共通処理とする} */
+       return _kernel_wai_sem(semid, TMO_FEVR);
+}
+
+#else
+
+/** %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ * @retval E_ID     %jp{不正ID番号(semidが不正あるいは使用できない)}%en{Invalid ID number(semid is invalid or unusable)}
+ * @retval E_CTX    %jp{コンテキストエラー}%en{Context error}
+ * @retval E_NOEXS  %jp{オブジェクト未生成(対象セマフォが未登録)}%en{Non-existant object(specified semaphore is not registerd)}
+ * @retval E_RLWAI  %jp{待ち状態の強制解除(待ち状態の間にrel_waiを受付)}%en{Forced release from waiting(accept rel_wai while waiting)}
+ * @retval E_DLT    %jp{待ちオブジェクトの削除(待ち状態の間に対象セマフォが削除)}%en{Waiting object deleted(semaphore is deleted waiting)}
+ */
+ER wai_sem(ID semid)
+{
+       _KERNEL_T_SEMHDL     semhdl;
+       _KERNEL_T_TSKHDL     tskhdl;
+       _KERNEL_SEM_T_SEMCNT semcnt;
+       ER                   ercd;
+               
+       /* %jp{コンテキストチェック} */
+#if _KERNEL_SPT_WAI_SEM_E_CTX
+       if ( _KERNEL_SYS_SNS_DPN() )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_CTX;                   /* %jp{コンテキストエラー}%en{Context error} */
+       }
+#endif
+
+       /* %jp{ID のチェック} */
+#if _KERNEL_SPT_WAI_SEM_E_ID
+       if ( !_KERNEL_SEM_CHECK_SEMID(semid) )
+       {
+               return E_ID;    /* %jp{不正ID番号}%en{Invalid ID number} */
+       }
+#endif
+       
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{オブジェクト存在チェック} */
+#if _KERNEL_SPT_WAI_SEM_E_NOEXS
+       if ( !_KERNEL_SEM_CHECK_EXS(semid) )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOEXS;                 /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       }
+#endif
+
+       /* %jp{セマフォハンドル取得} */
+       semhdl = _KERNEL_SEM_ID2SEMHDL(semid);
+       
+       /* %jp{セマフォカウンタ取得} */
+       semcnt = _KERNEL_SEM_GET_SEMCNT(semhdl);
+       
+       if ( semcnt > 0 )
+       {
+               /* %jp{セマフォ資源が獲得できれば成功} */
+               _KERNEL_SEM_SET_SEMCNT(semhdl, semcnt - 1);             /* %jp{セマフォ資源の獲得} */
+               ercd = E_OK;
+       }
+       else
+       {
+               /* %jp{タスクを待ち状態にする} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+               _KERNEL_DSP_WAI_TSK(tskhdl);
+               _KERNEL_TSK_SET_TSKWAIT(tskhdl, _KERNEL_TTW_SEM);
+               _KERNEL_TSK_SET_WOBJID(tskhdl, semid);
+               _KERNEL_SEM_ADD_QUE(semhdl, tskhdl);                            /* %jp{待ち行列に追加} */
+               
+               /* %jp{タスクディスパッチの実行} */
+               _KERNEL_DSP_TSK();
+
+               /* %jp{エラーコードの取得} */
+               ercd = _KERNEL_TSK_GET_ERCD(tskhdl);
+       }
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{オブジェクト未生成}%en{Non-existant object} */
+       
+       return ercd;
+}
+
+#endif
+
+
+#else  /* _KERNEL_SPT_WAI_SEM */
+
+
+#if _KERNEL_SPT_WAI_SEM_E_NOSPT
+
+/** %jp{セマフォ資源の獲得}%en{Acquire Semaphore Resource}
+ * @param  semid    %jp{資源獲得対象のセマフォID番号}%en{ID number of the semaphore from which resource is acquired}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER wai_sem(ID semid)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_WAI_SEM */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sys/dis_dsp.c b/kernel/source/object/sys/dis_dsp.c
new file mode 100755 (executable)
index 0000000..d5adf83
--- /dev/null
@@ -0,0 +1,36 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  unl_cpu.c
+ * @brief %en{Start Kernel}%jp{OSの起動}
+ *
+ * @version $Id: dis_dsp.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{ディスパッチの禁止}
+ * @return void
+ */
+ER dis_dsp(void)
+{
+       _KERNEL_ENTER_SVC();
+       
+       /* %jp{ディスパッチの禁止} */
+       _KERNEL_SYS_SET_DSP();
+
+       _KERNEL_LEAVE_SVC();
+
+       return E_OK;    /* %jp{成功} */
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sys/ena_dsp.c b/kernel/source/object/sys/ena_dsp.c
new file mode 100755 (executable)
index 0000000..f6ad61b
--- /dev/null
@@ -0,0 +1,43 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  unl_cpu.c
+ * @brief %en{Start Kernel}%jp{OSの起動}
+ *
+ * @version $Id: ena_dsp.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{ディスパッチの許可}
+ * @return void
+ */
+ER ena_dsp(void)
+{
+       _KERNEL_ENTER_SVC();
+       
+       /* %jp{ディスパッチの禁止} */
+       _KERNEL_SYS_CLR_DSP();
+
+       /* %jp{遅延しているディスパッチがあれば実施} */
+       if ( _KERNEL_SYS_SNS_DLY() )
+       {
+               _KERNEL_SYS_CLR_DLY();
+               _KERNEL_DSP_TSK();
+       }
+
+       _KERNEL_LEAVE_SVC();
+
+       return E_OK;    /* %jp{成功} */
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sys/get_tid.c b/kernel/source/object/sys/get_tid.c
new file mode 100755 (executable)
index 0000000..645c0a6
--- /dev/null
@@ -0,0 +1,39 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  unl_cpu.c
+ * @brief %en{Start Kernel}%jp{OSの起動}
+ *
+ * @version $Id: get_tid.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{実行状態タスクIDの参照}
+ * @return void
+ */
+ER get_tid(ID *p_tskid)
+{
+       _KERNEL_T_TSKHDL tskhdl;
+
+       _KERNEL_ENTER_SVC();
+
+       tskhdl = _KERNEL_SYS_GET_RUNTSK();
+       
+       *p_tskid = _KERNEL_TSK_TSKHDL2ID(tskhdl);
+
+       _KERNEL_LEAVE_SVC();
+
+       return E_OK;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sys/loc_cpu.c b/kernel/source/object/sys/loc_cpu.c
new file mode 100755 (executable)
index 0000000..1d4d7e0
--- /dev/null
@@ -0,0 +1,35 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sta_knl.c
+ * @brief %en{Start Kernel}%jp{OSの起動}
+ *
+ * @version $Id: loc_cpu.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{CPUのロック}
+ * @return void
+ */
+ER loc_cpu(void)
+{
+       _KERNEL_ENTER_SVC();
+       
+       _KERNEL_SYS_SET_LOC();
+
+       _KERNEL_LEAVE_SVC();
+
+       return E_OK;    /* %jp{成功} */
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sys/sns_ctx.c b/kernel/source/object/sys/sns_ctx.c
new file mode 100755 (executable)
index 0000000..e3da550
--- /dev/null
@@ -0,0 +1,37 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  unl_cpu.c
+ * @brief %en{Start Kernel}%jp{OSの起動}
+ *
+ * @version $Id: sns_ctx.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{コンテキストの参照}
+ * @return void
+ */
+BOOL sns_ctx(void)
+{
+       BOOL stat;
+
+       _KERNEL_ENTER_SVC();
+       
+       stat = _KERNEL_SYS_SNS_CTX();
+
+       _KERNEL_LEAVE_SVC();
+
+       return stat;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sys/sns_dsp.c b/kernel/source/object/sys/sns_dsp.c
new file mode 100755 (executable)
index 0000000..ec595aa
--- /dev/null
@@ -0,0 +1,37 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  unl_cpu.c
+ * @brief %en{Start Kernel}%jp{OSの起動}
+ *
+ * @version $Id: sns_dsp.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{}
+ * @return void
+ */
+BOOL sns_dsp(void)
+{
+       BOOL stat;
+
+       _KERNEL_ENTER_SVC();
+       
+       stat = _KERNEL_SYS_SNS_DSP();
+
+       _KERNEL_LEAVE_SVC();
+
+       return stat;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sys/sns_loc.c b/kernel/source/object/sys/sns_loc.c
new file mode 100755 (executable)
index 0000000..fb0448a
--- /dev/null
@@ -0,0 +1,37 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  unl_cpu.c
+ * @brief %en{Start Kernel}%jp{OSの起動}
+ *
+ * @version $Id: sns_loc.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{CPUロック状態の参照}
+ * @return void
+ */
+BOOL sns_loc(void)
+{
+       BOOL stat;
+
+       _KERNEL_ENTER_SVC();
+       
+       stat = _KERNEL_SYS_SNS_LOC();
+
+       _KERNEL_LEAVE_SVC();
+
+       return stat;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/sys/sta_knl.c b/kernel/source/object/sys/sta_knl.c
new file mode 100755 (executable)
index 0000000..f313798
--- /dev/null
@@ -0,0 +1,98 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  sta_knl.c
+ * @brief %en{Start Kernel}%jp{OSの起動}
+ *
+ * @version $Id: sta_knl.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+#include "object/isrobj.h"
+
+
+
+_KERNEL_T_SYSCB _kernel_syscb;
+
+extern VP   _kernel_idl_stk;
+extern SIZE _kernel_idl_stksz;
+
+
+static void _kernel_sys_sta(void);
+
+
+/** %jp{カーネルの開始(独自サービスコール)}%en{Start Kernel}
+ * @return void
+ */
+ER vsta_knl(void)
+{
+       /* %jp{システムの初期化} */
+       _KERNEL_SYS_INI_SYS();
+       
+       /* %jp{プロセッサ固有の初期化} */
+       _KERNEL_INI_PRC();
+
+       
+       _KERNEL_ENTER_SVC();
+       
+       /* %jp{初期化ルーチンは非タスク部扱い} */
+       _KERNEL_SYS_SET_CTX();
+       _KERNEL_SYS_SET_LOC();
+       
+       /* %jp{IRC固有の初期化} */
+       _KERNEL_INI_IRC();
+       
+       
+       _kernel_syscb.proccb[0].sysstk   = _kernel_idl_stk;
+       _kernel_syscb.proccb[0].sysstksz = _kernel_idl_stksz;
+       
+       
+       /* %jp{システムコンテキストの生成} */
+       _KERNEL_CRE_CTX(
+                       _KERNEL_SYS_GET_SYSCTXCB(),
+                       _KERNEL_SYS_GET_SYSSTKSZ(),
+                       _KERNEL_SYS_GET_SYSSTK(),
+                       _KERNEL_SYS_GET_SYSISP(),
+                       (FP)_kernel_sys_sta,
+                       (VP_INT)0,
+                       (VP_INT)0
+               );
+       
+       /* %jp{初期化ハンドラ実行} */
+       _kernel_cfg_ini();
+
+       _KERNEL_LEAVE_SVC();
+
+       /* %jp{初期化ハンドラ実行} */
+       _kernel_cfg_sta();
+
+       _KERNEL_ENTER_SVC();
+
+       
+       /* %jp{初期コンテキストの開始} */
+       _kernel_sta_ctx(_KERNEL_SYS_GET_SYSCTXCB());
+       
+       return E_OK;    /* %jp{成功} */
+}
+
+
+void _kernel_sys_sta(void)
+{
+       _KERNEL_SYS_CLR_CTX();
+       _KERNEL_SYS_CLR_LOC();
+       _KERNEL_SYS_CLR_DLY();
+
+       _KERNEL_DSP_TSK();
+       
+       _KERNEL_LEAVE_SVC();
+       
+       _kernel_idl_lop();
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/sys/unl_cpu.c b/kernel/source/object/sys/unl_cpu.c
new file mode 100755 (executable)
index 0000000..71976da
--- /dev/null
@@ -0,0 +1,43 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  unl_cpu.c
+ * @brief %en{Start Kernel}%jp{OSの起動}
+ *
+ * @version $Id: unl_cpu.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{CPUのアンロック}
+ * @return void
+ */
+ER unl_cpu(void)
+{
+       _KERNEL_ENTER_SVC();
+       
+       /* %jp{CPUロック解除} */
+       _KERNEL_SYS_CLR_LOC();
+
+       /* %jp{遅延しているディスパッチがあれば実施} */
+       if ( _KERNEL_SYS_SNS_DLY() )
+       {
+               _KERNEL_SYS_CLR_DLY();
+               _KERNEL_DSP_TSK();
+       }
+
+       _KERNEL_LEAVE_SVC();
+
+       return E_OK;    /* %jp{成功} */
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/tim/isig_tim.c b/kernel/source/object/tim/isig_tim.c
new file mode 100755 (executable)
index 0000000..946955c
--- /dev/null
@@ -0,0 +1,58 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  isig_tim.c
+ * @brief %jp{タイムティックの供給}%en{Supply Time Tick}
+ *
+ * @version $Id: isig_tim.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+#if _KERNEL_SPT_ISIG_TIM
+
+/** %jp{タイムティックの供給}%en{Supply Time Tick}
+ * @retval E_OK     %jp{正常終了}%en{Normal completion}
+ */
+ER isig_tim(void)
+{
+       RELTIM tictim;
+
+       tictim = 1;
+       
+/*     _kernel_sig_tmq(tictim);        */
+
+       _kernel_sig_toq(tictim);
+       
+       return E_OK;
+}
+
+
+#else  /* _KERNEL_SPT_ISIG_TIM */
+
+
+#if _KERNEL_SPT_ISIG_TIM_E_NOSPT
+
+/** %jp{タイムティックの供給}%en{Supply Time Tick}
+ * @retval E_NOSPT  %jp{未サポート機能}%en{Unsupported function}
+ */
+ER isig_tim(void)
+{
+       return E_NOSPT;
+}
+
+#endif
+
+
+#endif /* _KERNEL_SPT_ISIG_TIM */
+
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/acre_tsk.c b/kernel/source/object/tsk/acre_tsk.c
new file mode 100755 (executable)
index 0000000..752e162
--- /dev/null
@@ -0,0 +1,58 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  act_tsk.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * @version $Id: acre_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %en{Create Task}%jp{タスクの起動}
+ * @param  tskid   pk_ctsk     %jp{タスク生成情報}%en{}
+ * @return Error code or task ID
+ */
+ER_ID acre_tsk(const T_CTSK *pk_ctsk)
+{
+       ID    tskid;
+       ER_ID erid;
+
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{空きID探索} */
+       for ( tskid = _KERNEL_TMIN_TSKID; tskid <= _KERNEL_TMAX_TSKID; tskid++ )
+       {
+               if ( !_KERNEL_TSK_CHECK_EXS(tskid) )
+               {
+                       break;
+               }
+       }
+       if ( tskid > _KERNEL_TMAX_TSKID )
+       {
+               _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_NOID;                          /* %jp{ID番号不足} */
+       }
+       
+       /* %jp{タスク生成} */
+       erid = (ER_ID)_kernel_cre_tsk(tskid, pk_ctsk);
+       if ( erid == E_OK )
+       {
+               erid = (ER_ID)tskid;
+       }
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return erid;
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/act_tsk.c b/kernel/source/object/tsk/act_tsk.c
new file mode 100755 (executable)
index 0000000..c004531
--- /dev/null
@@ -0,0 +1,133 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  act_tsk.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * @version $Id: act_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %en{Activate Task}%jp{タスクの起動}
+ * @param  tskid   %en{ID number of the task to be activated}%jp{タスクID}
+ * @return void
+ */
+ER act_tsk(
+               ID tskid)
+{
+       _KERNEL_T_TSKHDL       tskhdl;
+       _KERNEL_T_TCB          *tcb;
+       const _KERNEL_T_TCB_RO *tcb_ro;
+
+       if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
+       {
+#ifdef _KERNEL_SPT_ACT_TSK_E_ID
+               if ( _KERNEL_SYS_SNS_CTX() )
+               {
+                       return E_ID;            /* %jp{不正ID番号} */
+               }
+#endif 
+               /* %jp{実行中タスクを取得} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+
+               _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
+       }
+       else
+       {
+#if _KERNEL_SPT_ACT_TSK_E_ID
+               if ( !_KERNEL_TSK_CHECK_TSKID(tskid) )
+               {
+                       return E_ID;    /* %jp{不正ID番号} */
+               }
+#endif
+               
+               _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
+               
+               /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_CFG_ACT_TSK_E_NOEXS
+               if ( _KERNEL_TSK_CHECK_EXS(tskid) )
+               {
+                       _KERNEL_LEAVE_SVC();            /* %jp{leave service-call}%jp{サービスコールを出る} */
+                       return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+               }
+#endif
+               /* ID番号指定時の変換 */
+               tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid);
+       }
+       
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       if ( _KERNEL_TSK_GET_TSKSTAT(tcb) != _KERNEL_TTS_DMT )          /* %jp{オブジェクト状態判定} */
+       {
+#if _KERNEL_TCB_ACTCNT
+               {
+                       _KERNEL_TSK_T_ACTCNT actcnt;
+
+                       /* %jp{既に実行状態なら起動要求をキューイング} */
+                       actcnt = _KERNEL_TSK_GET_ACTCNT(tcb);
+               
+                       /* %jp{既に実行状態なら起動要求をキューイング} */
+               #ifdef _KERNEL_CFG_ACT_TSK_E_QOVR
+                       if ( actcnt >= _KERNEL_TMAX_ACTCNT )
+                       {
+                               _KERNEL_LEAVE_SVC();
+                               return E_QOVR;          /* %jp{キューイングオーバーフロー} */
+                       }
+               #endif
+
+                       /* %jp{起動要求をキューイング} */
+                       _KERNEL_TSK_SET_ACTCNT(tcb, actcnt + 1);
+               }
+#else
+               {
+                       _KERNEL_LEAVE_SVC();
+                       return E_QOVR;          /* %jp{キューイングオーバーフロー} */
+               }
+#endif
+       }
+       else
+       {
+               /* %jp{タスク状態初期化} */
+               tcb_ro = _KERNEL_TSK_GET_TCB_RO(tskid, tcb);
+               _KERNEL_TSK_SET_TSKPRI(tcb, _KERNEL_TSK_GET_ITSKPRI(tcb_ro));
+               _KERNEL_TSK_SET_TSKBPRI(tcb, _KERNEL_TSK_GET_ITSKPRI(tcb_ro));
+               _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_RDY);
+               _KERNEL_TSK_SET_ACTCNT(tcb, 0);
+               _KERNEL_TSK_SET_WUPCNT(tcb, 0);
+               _KERNEL_TSK_SET_SUSCNT(tcb, 0);
+               
+               /* %jp{コンテキスト生成} */
+               _KERNEL_CRE_CTX(
+                               _KERNEL_TSK_GET_CTXCB(tcb),                                     /* %jp{コンテキスト制御ブロック} */
+                               _KERNEL_TSK_GET_STKSZ(tcb_ro),                          /* %jp{タスクのスタック領域サイズ} */
+                               _KERNEL_TSK_GET_STK(tcb_ro),                            /* %jp{タスクのスタック領域の先頭番地} */
+                               (VP)_KERNEL_TSK_GET_ISP(tcb_ro),                        /* %jp{スタックポインタの初期値} */
+                               (FP)_kernel_ent_tsk,                                            /* %jp{コンテキストの開始アドレス} */
+                               (VP_INT)_KERNEL_TSK_GET_EXINF(tcb_ro),          /* %jp{タスクの拡張情報} */
+                               (VP_INT)_KERNEL_TSK_GET_TASK(tcb_ro)            /* %jp{タスクの起動番地} */
+                       );
+               
+               /* %jp{タスク実行可能状態に設定} */
+               _KERNEL_DSP_STA_TSK(tskhdl);
+               
+               /* %jp{タスクディスパッチの実行}%en{task dispatch} */
+               _KERNEL_DSP_TSK();
+       }
+       
+       _KERNEL_LEAVE_SVC();
+       
+       return E_OK;    /* 成功 */
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/can_wup.c b/kernel/source/object/tsk/can_wup.c
new file mode 100755 (executable)
index 0000000..d290d67
--- /dev/null
@@ -0,0 +1,74 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  wup_tsk.c
+ * @brief %jp{タスクの起床}%en{Wakeup Task}
+ *
+ * @version $Id: can_wup.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+ER can_wup(
+               ID tskid)
+{
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+
+       if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
+       {
+#if _KERNEL_SPT_CAN_WUP_E_ID
+               if ( _KERNEL_SYS_SNS_CTX() )
+               {
+                       return E_ID;            /* %jp{不正ID番号} */
+               }
+#endif 
+               /* %jp{実行中タスクを取得} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+
+               _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
+       }
+       else
+       {
+#if _KERNEL_SPT_CAN_WUP_E_ID
+               if ( !_KERNEL_TSK_CHECK_TSKID(tskid) )
+               {
+                       return E_ID;    /* %jp{不正ID番号} */
+               }
+#endif
+               
+               _KERNEL_ENTER_SVC();                    /* %jp{enter service-call}%jp{サービスコールに入る} */
+               
+               /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_CAN_WUP_E_NOEXS
+               if ( _KERNEL_TSK_CHECK_EXS(tskid) )
+               {
+                       _KERNEL_LEAVE_SVC();            /* %jp{leave service-call}%jp{サービスコールを出る} */
+                       return E_NOEXS;                 /* %jp{オブジェクト未生成} */
+               }
+#endif
+               /* ID番号指定時の変換 */
+               tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid);
+       }
+       
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       /* %jp{待ちカウンタクリア} */
+       _KERNEL_TSK_SET_WUPCNT(tcb, 0);
+
+
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/cre_tsk.c b/kernel/source/object/tsk/cre_tsk.c
new file mode 100755 (executable)
index 0000000..f803c64
--- /dev/null
@@ -0,0 +1,48 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  act_tsk.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * @version $Id: cre_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %en{Create Task}%jp{タスクの生成}
+ * @param  tskid       %jp{タスクID}%en{ID number of the task to be created}
+ * @param  pk_ctsk     %jp{タスク生成情報}%en{}
+ * @retval E_OK
+ * @retval E_NOMEM
+ */
+ER cre_tsk(ID tskid, const T_CTSK *pk_ctsk)
+{
+       ER ercd;
+
+       _KERNEL_ENTER_SVC();            /* %jp{サービスコールに入る}%en{enter service-call} */
+       
+       /* %jp{空きID探索} */
+       if ( _KERNEL_TSK_CHECK_EXS(tskid) )
+       {
+               _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_OBJ;                           /* %jp{ID番号不足} */
+       }
+       
+       /* %jp{タスク生成} */
+       ercd = _kernel_cre_tsk(tskid, pk_ctsk);
+
+       _KERNEL_LEAVE_SVC();            /* %jp{サービスコールから出る}%en{leave service-call} */
+       
+       return ercd;    /* 成功 */
+}
+
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/dly_tsk.c b/kernel/source/object/tsk/dly_tsk.c
new file mode 100755 (executable)
index 0000000..d3c5cef
--- /dev/null
@@ -0,0 +1,68 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  dly_tsk.c
+ * @brief %jp{自タスクの遅延}%en{Delay Task}
+ *
+ * @version $Id: dly_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+
+/** %jp{自タスクの遅延}%en{Delay Task}
+ * @retval E_OK  %jp{成功}
+ */
+ER dly_tsk(RELTIM dlytim)
+{
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+       ER               ercd;
+       
+       /* %jp{実行中タスクを取得} */
+       tskhdl = _KERNEL_SYS_GET_RUNTSK();
+       
+       _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
+               
+       /* %jp{コンテキストチェック} */
+#if _KERNEL_SPT_DLY_TSK_E_CTX
+       if ( _KERNEL_SYS_SNS_DPN() )
+       {
+               _KERNEL_LEAVE_SVC();    /* %jp{サービスコールから出る}%en{leave service-call} */
+               return E_CTX;                   /* %jp{コンテキストエラー}%en{Context error} */
+       }
+#endif
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+       
+       /* %jp{タスクを待ち状態にする} */
+       _KERNEL_DSP_WAI_TSK(tskhdl);
+       _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_WAI);
+       _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_DLY);
+
+       /* %jp{タイムアウトキューに繋ぐ} */
+       _KERNEL_ADD_TOQ(tskhdl, dlytim);
+       
+       /* %jp{タスクディスパッチの実行} */
+       _KERNEL_DSP_TSK();
+       
+       /* %jp{エラーコードの取得} */
+       ercd = _KERNEL_TSK_GET_ERCD(tcb);
+       if ( ercd == E_TMOUT )
+       {
+               ercd = E_OK;
+       }
+
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+       
+       return ercd;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/ext_tsk.c b/kernel/source/object/tsk/ext_tsk.c
new file mode 100755 (executable)
index 0000000..0f1a598
--- /dev/null
@@ -0,0 +1,77 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  ext_tsk.c
+ * @brief %jp{タスクの終了}%en{Exit Task}
+ *
+ * @version $Id: ext_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{タスクの終了}%en{Exit Task}
+ * @return void
+ */
+void ext_tsk(void)
+{
+       _KERNEL_T_TSKHDL     tskhdl;
+       _KERNEL_T_TCB        *tcb;
+       _KERNEL_T_TCB_RO     *tcb_ro;
+       _KERNEL_TSK_T_ACTCNT actcnt;
+
+       /* %jp{実行中タスクを取得} */
+       tskhdl = _KERNEL_SYS_GET_RUNTSK();
+
+       _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
+       
+       /* %jp{レディーキューから削除} */
+       _KERNEL_DSP_EXT_TSK(tskhdl);
+
+       /* %jp{TCB取得} */
+       tcb    = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+       tcb_ro = _KERNEL_TSK_GET_TCB_RO(tskid, tcb);
+       
+       actcnt = _KERNEL_TSK_GET_ACTCNT(tcb);
+       
+       /* %jp{起動要求ネストのチェック} */
+       if ( actcnt > 0 )       /* %jp{起動要求ネストがあるなら再生成} */
+       {
+               _KERNEL_TSK_T_TPRI   itskpri;
+               
+               _KERNEL_TSK_SET_ACTCNT(tcb, actcnt - 1);
+               itskpri = _KERNEL_TSK_GET_ITSKPRI(tcb_ro);
+               _KERNEL_TSK_SET_TSKPRI(tcb, itskpri);
+               _KERNEL_TSK_SET_TSKBPRI(tcb, itskpri);
+               
+               /* %jp{レディーキュー再接続} */
+               _KERNEL_DSP_STA_TSK(tskhdl);                                            
+       }
+       else                            /* %jp{起動要求ネストがなければ終了} */
+       {
+               _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_DMT);
+       }
+       
+       /* %jp{タスクディスパッチの実行}%en{task dispatch} */
+       _KERNEL_DSP_TSK();
+       
+       /* %jp{リスタート} */
+       _KERNEL_RST_CTX(
+                               _KERNEL_TSK_GET_CTXCB(tcb),                             /* %jp{コンテキスト制御ブロック} */
+                               _KERNEL_TSK_GET_STKSZ(tcb_ro),                          /* %jp{タスクのスタック領域サイズ} */
+                               _KERNEL_TSK_GET_STK(tcb_ro),                            /* %jp{タスクのスタック領域の先頭番地} */
+                               _KERNEL_TSK_GET_ISP(tcb_ro),                            /* %jp{スタックポインタの初期値} */
+                               (FP)_kernel_ent_tsk,                                            /* %jp{コンテキストの開始アドレス} */
+                               (VP_INT)_KERNEL_TSK_GET_EXINF(tcb_ro),          /* %jp{タスクの拡張情報} */
+                               (VP_INT)_KERNEL_TSK_GET_TASK(tcb_ro)            /* %jp{タスクの起動番地} */
+                       );
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/kcre_tsk.c b/kernel/source/object/tsk/kcre_tsk.c
new file mode 100755 (executable)
index 0000000..3d590ed
--- /dev/null
@@ -0,0 +1,173 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  kact_tsk.c
+ * @brief %en{Activate Task}%jp{タスクの起動}
+ *
+ * @version $Id: kcre_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %en{Activate Task}%jp{タスクの起動}
+ * @param  tskid       %jp{タスクID}%en{ID number of the task to be activated}
+ * @param  pk_ctsk     %jp{タスク生成情報}%en{}
+ * @retval E_OK
+ * @retval E_NOMEM
+ */
+ER _kernel_cre_tsk(ID tskid, const T_CTSK *pk_ctsk)
+{
+/*     _KERNEL_T_TSKHDL tskhdl;        */
+       _KERNEL_T_TCB    *tcb;
+       _KERNEL_T_TCB_RO *tcb_ro;
+       VP               stk;
+       
+       /* %jp{メモリ確保}%en{get memory} */
+#if    _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY
+       {
+               /* %jp{TCB領域がブロック配列の場合、スタックのみ確保} */
+
+               /* %jp{スタックの確保} */
+               if ( pk_ctsk->stk == NULL )
+               {
+                       stk = _KERNEL_SYS_ALC_MEM(pk_ctsk->stksz);
+                       if ( stk == NULL )
+                       {
+                               return E_NOMEM;
+                       }
+               }
+               else
+               {
+                       stk = pk_ctsk->stk;
+               }
+               
+/*             tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid);  */
+               tcb    = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+               tcb_ro = _KERNEL_TSK_GET_TCB_RO(tskid, tcb);
+       }
+#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY
+#if _KERNEL_TCB_SPLIT_RO
+       {
+               /* %jp{TCB領域がポインタ管理で、ROM/RAM分離の場合} */
+
+               VP   mem;
+               SIZE memsz;
+
+               /* %jp{メモリサイズ決定} */
+               memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB))
+                                       + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB_RO));
+               if ( pk_ctsk->stk == NULL )
+               {
+                       memsz += pk_ctsk->stksz;
+               }
+
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(pk_ctsk->stksz);
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+
+               /* %jp{メモリ割り当て} */
+               _KERNEL_TSK_ID2TCB(tskid) = tcb    = (_KERNEL_T_TCB *)mem;
+               tcb->tcb_ro               = tcb_ro = (_KERNEL_T_TCB_RO *)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB)));
+               if ( pk_ctsk->stk == NULL )
+               {
+                       stk = (VP)((B *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB)) + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB)));
+               }
+               else
+               {
+                       stk = pk_ctsk->stk;
+               }
+/*             tskhdl = tcb;   */
+       }
+#else
+       {
+               VP   mem;
+               SIZE memsz;
+               
+               /* %jp{メモリサイズ決定} */
+               memsz = _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB));
+               if ( pk_ctsk->stk == NULL )
+               {
+                       memsz += pk_ctsk->stksz;
+               }
+
+               /* %jp{メモリ確保} */
+               mem = _KERNEL_SYS_ALC_MEM(pk_ctsk->stksz);
+               if ( mem == NULL )
+               {
+                       return E_NOMEM;
+               }
+
+               /* %jp{メモリ割り当て} */
+               _KERNEL_TSK_ID2TCB(tskid) = tcb_ro = tcb = (_KERNEL_T_TCB *)mem;
+               if ( pk_ctsk->stk == NULL )
+               {
+                       stk = (VP)((VB *)mem + _KERNEL_SYS_ALG_MEM(sizeof(_KERNEL_T_TCB)));
+               }
+               else
+               {
+                       stk = pk_ctsk->stk;
+               }
+
+/*             tskhdl = tcb;   */
+       }
+#endif
+#endif
+       
+       /* %jp{基本メンバ設定} */
+       _KERNEL_TSK_SET_TSKATR(tcb_ro, pk_ctsk->tskatr);                        /* %jp{タスク属性} */
+       _KERNEL_TSK_SET_EXINF(tcb_ro, pk_ctsk->exinf);                          /* %jp{タスクの拡張情報} */
+       _KERNEL_TSK_SET_TASK(tcb_ro, pk_ctsk->task);                            /* %jp{タスクの起動番地} */
+       _KERNEL_TSK_SET_ITSKPRI(tcb_ro, pk_ctsk->itskpri);                      /* %jp{タスクの起動時優先度} */
+       _KERNEL_TSK_SET_STKSZ(tcb_ro, pk_ctsk->stksz);                          /* %jp{スタック領域のサイズ(バイト数)} */
+       _KERNEL_TSK_SET_STK(tcb_ro, stk);                                                       /* %jp{スタック領域の先頭番地} */
+       _KERNEL_TSK_SET_ISP(tcb_ro, (VB *)stk + pk_ctsk->stksz);        /* %jp{スタックポインタ初期値の先頭番地} */
+       _KERNEL_TSK_SET_TSKID(tcb_ro, tskid);
+       _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_DMT);
+
+
+       /* %jp{TA_ACT属性があればタスク実行} */
+#if _KERNEL_SPT_TSK_TA_ACT
+       if ( pk_ctsk->tskatr & TA_ACT )
+       {
+               /* %jp{タスク状態初期化} */
+               _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_RDY);
+               _KERNEL_TSK_SET_TSKPRI(tcb, pk_ctsk->itskpri);
+               _KERNEL_TSK_SET_TSKBPRI(tcb, pk_ctsk->itskpri);
+               _KERNEL_TSK_SET_ACTCNT(tcb, 0);
+               _KERNEL_TSK_SET_WUPCNT(tcb, 0);
+               _KERNEL_TSK_SET_SUSCNT(tcb, 0);
+               
+               /* %jp{コンテキスト生成} */
+               _KERNEL_CRE_CTX(
+                               _KERNEL_TSK_GET_CTXCB(tcb),                     /* %jp{コンテキスト制御ブロック} */
+                               pk_ctsk->tsksz,                                         /* %jp{タスクのスタック領域サイズ} */
+                               stk,                                                            /* %jp{タスクのスタック領域の先頭番地} */
+                               (VP)((VB *)stk + pk_ctsk->stksz),       /* %jp{スタックポインタの初期値} */
+                               (FP)_kernel_ent_tsk,                            /* %jp{コンテキストの開始アドレス} */
+                               (VP_INT)pk_ctsk->exinf,                         /* %jp{タスクの拡張情報} */
+                               (VP_INT)pk_ctsk->task                           /* %jp{タスクの起動番地} */
+                       );
+               
+               /* %jp{タスク実行可能状態に設定} */
+               _KERNEL_DSP_STA_TSK(_KERNEL_TSK_GET_TSKHDL(tskid, tcb));
+               
+               /* %jp{タスクディスパッチの実行}%en{task dispatch} */
+               _KERNEL_DSP_TSK();
+       }
+#endif
+
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/ref_tsk.c b/kernel/source/object/tsk/ref_tsk.c
new file mode 100755 (executable)
index 0000000..368f373
--- /dev/null
@@ -0,0 +1,80 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  wup_tsk.c
+ * @brief %jp{タスクの起床}%en{Wakeup Task}
+ *
+ * @version $Id: ref_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/* タスクの状態参照 */
+ER ref_tsk(ID tskid, T_RTSK *p_rtsk)
+{
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+
+       if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
+       {
+#if _KERNEL_SPT_REF_TSK_E_ID
+               if ( _KERNEL_SYS_SNS_CTX() )
+               {
+                       return E_ID;            /* %jp{不正ID番号} */
+               }
+#endif 
+               /* %jp{実行中タスクを取得} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+
+               _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
+       }
+       else
+       {
+#if _KERNEL_SPT_REF_TSK_E_ID
+               if ( !_KERNEL_TSK_CHECK_TSKID(tskid) )
+               {
+                       return E_ID;    /* %jp{不正ID番号} */
+               }
+#endif
+               
+               _KERNEL_ENTER_SVC();                    /* %jp{enter service-call}%jp{サービスコールに入る} */
+               
+               /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_REF_TSK_E_NOEXS
+               if ( _KERNEL_TSK_CHECK_EXS(tskid) )
+               {
+                       _KERNEL_LEAVE_SVC();            /* %jp{leave service-call}%jp{サービスコールを出る} */
+                       return E_NOEXS;                         /* %jp{オブジェクト未生成} */
+               }
+#endif
+               /* ID番号指定時の変換 */
+               tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid);
+       }
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+       
+       p_rtsk->tskstat = _KERNEL_DEC_TTS(_KERNEL_TSK_GET_TSKSTAT(tcb));        /*%jp{タスク状態} */
+       p_rtsk->tskpri  = _KERNEL_TSK_GET_TSKPRI(tcb);                                          /*%jp{タスクの現在優先度} */
+       p_rtsk->tskbpri = _KERNEL_TSK_GET_TSKBPRI(tcb);                                         /*%jp{タスクのベース優先度} */
+       p_rtsk->tskwait = _KERNEL_DEC_TTW(_KERNEL_TSK_GET_TSKWAIT(tcb));        /*%jp{待ち要因} */
+       p_rtsk->wobjid  = _KERNEL_TSK_GET_WOBJID(tcb);                                          /*%jp{待ち対象のオブジェクトのID番号} */
+/*     p_rtsk->lefttmo = _KERNEL_TSK_GET_LEFTTMO(tskhdl);      */                              /*%jp{タイムアウトするまでの時間} */
+       p_rtsk->actcnt  = _KERNEL_TSK_GET_ACTCNT(tcb);                                          /*%jp{起動要求キューイング回数} */
+       p_rtsk->wupcnt  = _KERNEL_TSK_GET_WUPCNT(tcb);                                          /*%jp{起床要求キューイング回数} */
+       p_rtsk->suscnt  = _KERNEL_TSK_GET_SUSCNT(tcb);                                          /*%jp{強制待ち要求ネスト回数} */
+
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/rel_wai.c b/kernel/source/object/tsk/rel_wai.c
new file mode 100755 (executable)
index 0000000..2bf10ec
--- /dev/null
@@ -0,0 +1,81 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  wup_tsk.c
+ * @brief %jp{タスクの起床}%en{Wakeup Task}
+ *
+ * @version $Id: rel_wai.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+ER rel_wai(
+               ID tskid)
+{
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+
+       if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
+       {
+#if _KERNEL_SPT_REL_WAI_E_ID
+               if ( _KERNEL_SYS_SNS_CTX() )
+               {
+                       return E_ID;            /* %jp{不正ID番号} */
+               }
+#endif 
+               /* %jp{実行中タスクを取得} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+
+               _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
+       }
+       else
+       {
+#if _KERNEL_SPT_REL_WAI_E_ID
+               if ( !_KERNEL_TSK_CHECK_TSKID(tskid) )
+               {
+                       return E_ID;    /* %jp{不正ID番号} */
+               }
+#endif
+               
+               _KERNEL_ENTER_SVC();                    /* %jp{enter service-call}%jp{サービスコールに入る} */
+               
+               /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_REL_WAI_E_NOEXS
+               if ( _KERNEL_TSK_CHECK_EXS(tskid) )
+               {
+                       _KERNEL_LEAVE_SVC();            /* %jp{leave service-call}%jp{サービスコールを出る} */
+                       return E_NOEXS;                         /* %jp{オブジェクト未生成} */
+               }
+#endif
+               /* ID番号指定時の変換 */
+               tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid);
+       }
+       
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+       
+       if ( _KERNEL_TSK_GET_TSKSTAT(tcb) == _KERNEL_TTS_WAI )
+       {
+               /* %jp{待ち解除} */
+               _KERNEL_TRM_QUE(tskhdl);
+               _KERNEL_TSK_SET_ERCD(tcb, E_RLWAI);             /* %jp{エラーコード設定} */
+               _KERNEL_DSP_WUP_TSK(tskhdl);                            /* %jp{タスクの待ち解除} */
+               
+               /* タスクディスパッチの実行 */
+               _KERNEL_DSP_TSK();
+       }
+
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/slp_tsk.c b/kernel/source/object/tsk/slp_tsk.c
new file mode 100755 (executable)
index 0000000..1bd7ae3
--- /dev/null
@@ -0,0 +1,68 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  slp_tsk.c
+ * @brief %jp{タスクの起床待ち}%en{Sleep Task}
+ *
+ * @version $Id: slp_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+
+/** %jp{タスクの起床待ち}%en{Sleep Task}
+ * @retval E_OK  %jp{成功}
+ */
+ER slp_tsk(void)
+{
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+       ER               ercd;
+
+       
+       /* %jp{実行中タスクを取得} */
+       tskhdl = _KERNEL_SYS_GET_RUNTSK();
+       
+       _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+       
+#if _KERNEL_TCB_WUPCNT
+       {
+               _KERNEL_TSK_T_WUPCNT wupcnt;
+
+               /* %jp{起床要求のキューイングをチェック} */
+               wupcnt = _KERNEL_TSK_GET_WUPCNT(tcb);
+               if ( wupcnt > 0 )
+               {
+                       _KERNEL_TSK_SET_WUPCNT(tcb, wupcnt - 1);
+                       _KERNEL_LEAVE_SVC();
+                       return E_OK;            /* %jp{キューイングオーバーフロー} */
+               }
+       }
+#endif
+       
+       /* %jp{タスクを待ち状態にする} */
+       _KERNEL_TSK_SET_TSKSTAT(tcb, _KERNEL_TTS_WAI);
+       _KERNEL_TSK_SET_TSKWAIT(tcb, _KERNEL_TTW_SLP);
+       _KERNEL_DSP_WAI_TSK(tskhdl);
+       
+       /* %jp{タスクディスパッチの実行} */
+       _KERNEL_DSP_TSK();
+       
+       /* %jp{エラーコードの取得} */
+       ercd = _KERNEL_TSK_GET_ERCD(tcb);
+       
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+       
+       return ercd;
+}
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/tcb2id.c b/kernel/source/object/tsk/tcb2id.c
new file mode 100755 (executable)
index 0000000..59fc44c
--- /dev/null
@@ -0,0 +1,42 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  tcb2id.c
+ * @brief %jp{TCBアドレスをIDに変換}%en{TCB-address to ID}
+ *
+ * @version $Id: tcb2id.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+
+
+
+#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY                  /* pointer array */
+
+
+/**  %jp{TCBアドレスをIDに変換}%en{TCB-address to ID} */
+ID _kernel_tsk_tcb2id(_KERNEL_T_TCB *pk_tcb)
+{
+       ID tskid;
+       
+       /* %jp{テーブルを検索} */
+       for ( tskid = _KERNEL_TMIN_TSK_ID; tskid <= _KERNEL_TMAX_TSK_ID; tskid++ )
+       {
+               if ( _KERNEL_TSK_ID2TCB(tskid) == pk_tcb )
+               {
+                       break;
+               }
+       }
+       
+       return tskid;
+}
+
+#endif
+
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/tget_que.c b/kernel/source/object/tsk/tget_que.c
new file mode 100755 (executable)
index 0000000..58a9288
--- /dev/null
@@ -0,0 +1,86 @@
+/**
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  tget_que.c
+ * @brief %jp{TCBアドレスをIDに変換}%en{TCB-address to ID}
+ *
+ * @version $Id: tget_que.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "core/core.h"
+#include "object/semobj.h"
+#include "object/flgobj.h"
+
+
+
+#if !_KERNEL_TCB_QUE && _KERNEL_TCB_TSKWAIT && _KERNEL_TCB_WOBJID
+
+_KERNEL_T_QUE *_kernel_tsk_get_que(_KERNEL_T_TSKHDL tskhdl)
+{
+       switch ( _KERNEL_TSK_GET_TSKWAIT(tskhdl) )
+       {
+#if _KERNEL_SPT_SEM
+       case _KERNEL_TTW_SEM:
+               return _KERNEL_SEM_GET_QUE(_KERNEL_SEM_ID2SEMHDL(_KERNEL_TSK_GET_WOBJID(tskhdl)));
+#endif
+
+#if _KERNEL_SPT_FLG
+       case _KERNEL_TTW_FLG:
+               return _KERNEL_FLG_GET_QUE(_KERNEL_FLG_ID2FLGHDL(_KERNEL_TSK_GET_WOBJID(tskhdl)));
+#endif
+
+#if _KERNEL_SPT_DTQ
+       case _KERNEL_TTW_SDTQ:
+               return _KERNEL_DTQ_GET_SQUE(_KERNEL_DTQ_ID2DTQHDL(_KERNEL_TSK_GET_WOBJID(tskhdl)));
+
+       case _KERNEL_TTW_RDTQ:
+               return _KERNEL_DTQ_GET_RQUE(_KERNEL_DTQ_ID2DTQHDL(_KERNEL_TSK_GET_WOBJID(tskhdl)));
+#endif
+
+#if _KERNEL_SPT_MBX
+       case _KERNEL_TTW_MBX:
+               return _KERNEL_MBX_GET_QUE(_KERNEL_MBX_ID2MBXHDL(_KERNEL_TSK_GET_WOBJID(tskhdl)));
+#endif
+
+#if _KERNEL_SPT_MTX
+       case _KERNEL_TTW_MTX:
+               return _KERNEL_MTX_GET_RQUE(_KERNEL_MTX_ID2MTXHDL(_KERNEL_TSK_GET_WOBJID(tskhdl)));
+#endif
+
+#if _KERNEL_SPT_MBF
+       case _KERNEL_TTW_SMBF:
+               break;
+
+       case _KERNEL_TTW_RMBF:
+               break;
+#endif
+
+#if 0
+       case _KERNEL_TTW_CAL:   
+               break;
+
+       case _KERNEL_TTW_ACP:   
+               break;
+
+       case _KERNEL_TTW_RDV:   
+               break;
+
+       case _KERNEL_TTW_MPF:   
+               break;
+
+       case _KERNEL_TTW_MPL:   
+               break;
+#endif
+       }
+       
+       return NULL;
+}
+
+#endif
+
+
+/* end of file */
diff --git a/kernel/source/object/tsk/wup_tsk.c b/kernel/source/object/tsk/wup_tsk.c
new file mode 100755 (executable)
index 0000000..bbe5f93
--- /dev/null
@@ -0,0 +1,103 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  wup_tsk.c
+ * @brief %jp{タスクの起床}%en{Wakeup Task}
+ *
+ * @version $Id: wup_tsk.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#include "core/core.h"
+
+
+
+/** %jp{タスクの起床}%en{Wakeup Task}
+ * @retval E_OK  %jp{成功}
+ */
+ER wup_tsk(
+               ID tskid)
+{
+       _KERNEL_T_TSKHDL tskhdl;
+       _KERNEL_T_TCB    *tcb;
+
+       if ( tskid == TSK_SELF )                /* %jp{自タスク指定時の変換} */
+       {
+#if _KERNEL_SPT_WUP_TSK_E_ID
+               if ( _KERNEL_SYS_SNS_CTX() )
+               {
+                       return E_ID;            /* %jp{不正ID番号} */
+               }
+#endif 
+               /* %jp{実行中タスクを取得} */
+               tskhdl = _KERNEL_SYS_GET_RUNTSK();
+               
+               _KERNEL_ENTER_SVC();            /* %jp{enter service-call}%jp{サービスコールに入る} */
+       }
+       else
+       {
+#if _KERNEL_SPT_WUP_TSK_E_ID
+               if ( !_KERNEL_TSK_CHECK_TSKID(tskid) )
+               {
+                       return E_ID;    /* %jp{不正ID番号} */
+               }
+#endif
+               
+               _KERNEL_ENTER_SVC();                    /* %jp{enter service-call}%jp{サービスコールに入る} */
+               
+               /* %jp{オブジェクト存在チェック} */
+#ifdef _KERNEL_SPT_WUP_TSK_E_NOEXS
+               if ( !_KERNEL_TSK_CHECK_EXS(tskid) )
+               {
+                       _KERNEL_LEAVE_SVC();            /* %jp{leave service-call}%jp{サービスコールを出る} */
+                       return E_NOEXS;                         /* %jp{オブジェクト未生成} */
+               }
+#endif
+               /* ID番号指定時の変換 */
+               tskhdl = _KERNEL_TSK_ID2TSKHDL(tskid);
+       }
+
+       /* %jp{TCB取得} */
+       tcb = _KERNEL_TSK_TSKHDL2TCB(tskhdl);
+
+       if ( (_KERNEL_TSK_GET_TSKSTAT(tcb) == _KERNEL_TTS_WAI) && _KERNEL_TSK_GET_TSKWAIT(tcb) == _KERNEL_TTW_SLP )
+       {
+               /* %jp{待ち解除} */
+               _KERNEL_TSK_SET_ERCD(tcb, E_OK);                /* %jp{エラーコード設定} */
+               _KERNEL_DSP_WUP_TSK(tskhdl);                    /* %jp{タスクの待ち解除} */
+               
+               /* タスクディスパッチの実行 */
+               _KERNEL_DSP_TSK();
+       }
+       else
+       {
+#if _KERNEL_TCB_WUPCNT
+               {
+                       _KERNEL_TSK_T_WUPCNT wupcnt;
+                       
+                       wupcnt = _KERNEL_TSK_GET_WUPCNT(tcb);
+
+               #ifdef _KERNEL_SPT_WUP_TSK_E_QOVR
+                       if ( wupcnt >= _KERNEL_TMAX_WUPCNT )
+                       {
+                               _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+                               return E_QOVR;
+                       }
+               #endif
+                       
+                       _KERNEL_TSK_SET_WUPCNT(tcb, wupcnt + 1);
+               }
+#endif
+       }
+
+       _KERNEL_LEAVE_SVC();    /* %jp{サービスコール終了} */
+
+       return E_OK;
+}
+
+
+/* end of file */
diff --git a/sample/h8/h83069/ch38/dbsct.c b/sample/h8/h83069/ch38/dbsct.c
new file mode 100755 (executable)
index 0000000..aa5eb6b
--- /dev/null
@@ -0,0 +1,30 @@
+/***********************************************************************/
+/*                                                                     */
+/*  FILE        :dbsct.c                                               */
+/*  DATE        :Wed, Aug 02, 2006                                     */
+/*  DESCRIPTION :Setting of B,R Section                                */
+/*  CPU TYPE    :SH7040                                                */
+/*                                                                     */
+/*  This file is generated by Renesas Project Generator (Ver.4.5).     */
+/*                                                                     */
+/***********************************************************************/
+                  
+
+
+
+#pragma section $DSEC
+static const struct {
+    unsigned char *rom_s;       /* 初期化データセクションのROM 上の先頭アドレス */
+    unsigned char *rom_e;       /* 初期化データセクションのROM 上の最終アドレス */
+    unsigned char *ram_s;       /* 初期化データセクションのRAM 上の先頭アドレス */
+}   DTBL[] = {
+    { __sectop("D"), __secend("D"), __sectop("R") }
+};
+
+#pragma section $BSEC
+static const struct {
+    unsigned char *b_s;         /* 未初期化データセクションの先頭アドレス */
+    unsigned char *b_e;         /* 未初期化データセクションの最終アドレス */
+}   BTBL[] = {
+    { __sectop("B"), __secend("B") }
+};
diff --git a/sample/h8/h83069/ch38/gmake.mak b/sample/h8/h83069/ch38/gmake.mak
new file mode 100755 (executable)
index 0000000..2caccea
--- /dev/null
@@ -0,0 +1,84 @@
+
+
+TARGET ?= sample.abs
+
+INC_DIR = ../../../../kernel/include
+
+# Tools
+CC     = ch38
+ASM    = asm38
+LINK   = optlnk
+DEPEND = depend
+LINT   = splint
+AWK    = gawk
+
+CFLAGS = -CP=300HA -DEBug -I=$(INC_DIR)
+AFLAGS = -CP=300HA -DEBug
+LFLAGS = 
+
+OBJS_DIR = objs
+
+OBJS = $(OBJS_DIR)/main.obj                    \
+       $(OBJS_DIR)/sample.obj          \
+       $(OBJS_DIR)/ostimer.obj         \
+       $(OBJS_DIR)/kernel_cfg.obj      \
+       $(OBJS_DIR)/dbsct.obj           \
+       $(OBJS_DIR)/startup.obj         \
+       $(OBJS_DIR)/vcttbl.obj          \
+       $(OBJS_DIR)/lowlvl.obj          \
+       $(OBJS_DIR)/lowsrc.obj          \
+       $(OBJS_DIR)/sbrk.obj                    \
+
+
+
+OS_LIBS = ../../../../kernel/build/h8/h8300ha/ch38/libhosv4a.lib
+OS_CFG  = ../../../../cfgrtr/build/gcc/h4acfg-h8300ha.exe
+
+STD_LIBS = stdlib.lib
+
+VPATH = ..
+
+all: mkdir_objs mk_kernel $(TARGET)
+
+
+$(TARGET): $(OBJS) $(STD_LIBS) $(OS_LIBS)
+       echo rom D=R                         > $(OBJS_DIR)/subcmd.txt
+       echo list smp.map                   >> $(OBJS_DIR)/subcmd.txt
+       echo -Input=$(OBJS) | sed "s/ /,/g" >> $(OBJS_DIR)/subcmd.txt
+       echo -LIB=$(OS_LIBS),$(STD_LIBS)    >> $(OBJS_DIR)/subcmd.txt
+       echo "-start=VECTTBL,P,C,C\$$BSEC,C\$$DSEC,D/00,B,R/0200000,S/000FFBF20" >> $(OBJS_DIR)/subcmd.txt
+       echo -output=$(TARGET)              >> $(OBJS_DIR)/subcmd.txt
+       echo end                            >> $(OBJS_DIR)/subcmd.txt
+       echo -input=$(TARGET)               >> $(OBJS_DIR)/subcmd.txt
+       echo form stype                     >> $(OBJS_DIR)/subcmd.txt
+       echo output smp.mot                 >> $(OBJS_DIR)/subcmd.txt
+       echo -exit                          >> $(OBJS_DIR)/subcmd.txt
+       $(LINK) -SU=$(OBJS_DIR)/subcmd.txt
+
+$(STD_LIBS):
+       lbg38 -OUTPut=$(STD_LIBS) $(CFLAGS) -REent 
+
+mk_kernel:
+       make -C ../../../../kernel/build/h8/h8300ha/ch38 -f gmake.mak
+
+mkdir_objs:
+       @mkdir -p $(OBJS_DIR)
+
+clean:
+       rm -f $(OBJS) $(TARGET) ../kernel_cfg.c ../kernel_id.h
+
+$(OBJS_DIR)/sample.obj: sample.c ../kernel_id.h
+
+../kernel_cfg.c ../kernel_id.h: ../system.cfg
+       cpp -E ../system.cfg ../system.i
+       $(OS_CFG) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h
+
+
+
+$(OBJS_DIR)/%.obj :: %.c
+       $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst)
+
+$(OBJS_DIR)/%.obj :: %.src
+       $(ASM) $(AFLAGS) $< -OB=$@
+
+
diff --git a/sample/h8/h83069/ch38/lowlvl.src b/sample/h8/h83069/ch38/lowlvl.src
new file mode 100755 (executable)
index 0000000..61f9a7b
--- /dev/null
@@ -0,0 +1,52 @@
+;------------------------------------------------------------------------
+;                                                                       |
+;   FILE        :lowlvl.src                                             |
+;   DATE        :Mon, Aug 07, 2006                                      |
+;   DESCRIPTION :Program of Low level                                   |
+;   CPU TYPE    :H8/                                                    |
+;                                                                       |
+;   This file is generated by Renesas Project Generator (Ver.4.5).      |
+;                                                                       |
+;------------------------------------------------------------------------
+                  
+
+
+
+         .EXPORT    _charput
+         .EXPORT    _charget
+
+SIM_IO:  .EQU       H'0000
+         
+         .SECTION   P,CODE,ALIGN=2
+;-----------------------------------------------------------------------
+;  _charput:
+;-----------------------------------------------------------------------
+_charput:
+         MOV.B      R0L,@IO_BUF
+         MOV.W      #H'0112,R0
+         MOV.L      #IO_BUF,ER1
+         MOV.L      ER1,@PARM
+;         MOV.W      #H'0000,E1
+;         MOV.W      #LWORD PARM,R1
+               mov.l           #PARM, er1
+         JSR        @SIM_IO
+         RTS
+;-----------------------------------------------------------------------
+;  _charget:
+;-----------------------------------------------------------------------
+_charget:
+         MOV.W      #H'0101,R0
+         MOV.W      #LWORD IO_BUF,R1
+         MOV.W      R1,@PARM
+         MOV.W      #H'0000,E1
+         MOV.W      #LWORD PARM,R1
+         JSR        @SIM_IO
+         MOV.B      @IO_BUF,R0L
+         RTS
+;-----------------------------------------------------------------------
+;  I/O Buffer
+;-----------------------------------------------------------------------
+         .SECTION   B,DATA,ALIGN=2
+PARM:    .RES.L     1
+IO_BUF:  .RES.B     1
+         .END
diff --git a/sample/h8/h83069/ch38/lowsrc.c b/sample/h8/h83069/ch38/lowsrc.c
new file mode 100755 (executable)
index 0000000..b18a428
--- /dev/null
@@ -0,0 +1,481 @@
+/***********************************************************************/
+/*                                                                     */
+/*  FILE        :lowsrc.c                                              */
+/*  DATE        :Tue, Mar 04, 2003                                     */
+/*  DESCRIPTION :Program of I/O Stream                                 */
+/*  CPU TYPE    :H8/SH                                                 */
+/*                                                                     */
+/***********************************************************************/
+                  
+// SH・H8共用ファイル
+
+
+#include <string.h>
+#include <stdio.h>
+#include <stddef.h>
+#include "lowsrc.h"
+
+/* H8のみno_float.hをインクルード */
+#if   defined( __2000N__ ) || defined( __2600N__ ) || defined( __300HN__ ) || defined( __2000A__ ) || defined( __2600A__ ) || defined( __300HA__ ) || defined( __300__ ) || defined( __300L__ )
+#include <no_float.h>
+#endif
+
+/* ファイル番号 */
+#define STDIN  0                                       /* 標準入力           (コンソール) */
+#define STDOUT 1                                       /* 標準出力           (コンソール) */
+#define STDERR 2                                       /* 標準エラー出力     (コンソール) */
+
+#define FLMIN  0                                       /* 最小のファイル番号              */
+
+/* ファイルフラグ       */
+#define O_RDONLY 0x0001                /* 読み込み専用にオープン。                                         */
+#define O_WRONLY 0x0002                /* 書き出し専用にオープン。                                         */
+#define O_RDWR   0x0004                /* 読み書き、両用にオープン。                                      */
+#define O_CREAT  0x0008                /* ファイルが存在しない場合、新規作成。                       */
+#define O_TRUNC  0x0010                /* ファイルが存在する場合、ファイルサイズを0に。*/
+#define O_APPEND 0x0020                /* 次に読み書きを行うファイル内の位置を設定。      */
+                                                       /* 0:ファイルの先頭。 1:ファイルの最後。            */
+
+
+/* 特殊文字コード */
+#define CR 0x0d                                                /* 復帰                            */
+#define LF 0x0a                                                /* 改行                            */
+
+const int _nfiles = IOSTREAM;          /* 入出力ファイル数を指定。        */
+struct _iobuf _iob[IOSTREAM];
+unsigned char sml_buf[IOSTREAM];
+
+
+/* H8ノーマルモード・SH */
+#if   defined( __2000N__ ) || defined( __2600N__ ) || defined( __300HN__ ) || defined( _SH1 ) || defined( _SH2 ) || defined( _SH2E ) || defined( _SH3 ) || defined( _SH4 )
+/* 標準入力からの1文字入力処理  */
+extern void charput(char);
+/* 標準出力への1文字出力処理    */
+extern char charget(void);
+/* ファイルへの1文字出力処理       */
+extern char fcharput(char, unsigned char);
+/* ファイルからの1文字入力処理    */
+extern char fcharget(char*, unsigned char);
+/* ファイルのオープン                 */
+extern char fileopen(char*, unsigned char, unsigned char*);
+/* ファイルのクローズ                 */
+extern char fileclose(unsigned char);
+/* ファイルポインタの移動           */
+extern char fpseek(unsigned char, long, unsigned char);
+/* ファイルポインタの取得           */
+extern char fptell(unsigned char, long*);
+
+/* H8アドバンストモード */
+#elif defined( __2000A__ ) || defined( __2600A__ ) || defined( __300HA__ )
+/* 標準入力からの1文字入力処理  */
+extern void charput(char);
+/* 標準出力への1文字出力処理    */
+extern char charget(void);
+/* ファイルへの1文字出力処理       */
+extern char fcharput(char, unsigned char);
+/* ファイルからの1文字入力処理    */
+extern char fcharget(char*, unsigned char);
+/* ファイルのオープン                 */
+/* 引数格納レジスタ3指定。          */
+extern char __regparam3 fileopen(char*, unsigned char, unsigned char*);
+/* ファイルのクローズ                 */
+extern char fileclose(unsigned char);
+/* ファイルポインタの移動           */
+extern char fpseek(unsigned char, long, unsigned char);
+/* ファイルポインタの取得           */
+extern char fptell(unsigned char, long*);
+
+/* H8300・H8300L */
+#elif defined( __300__ ) || defined( __300L__ )
+/* 標準入力からの1文字入力処理  */
+extern void charput(char);
+/* 標準出力への1文字出力処理    */
+extern char charget(void);
+/* ファイルへの1文字出力処理       */
+extern char fcharput(char, unsigned char);
+/* ファイルからの1文字入力処理    */
+extern char fcharget(char*, unsigned char);
+/* ファイルのオープン                 */
+/* 引数格納レジスタ3指定。          */
+extern char __regparam3 fileopen(char*, unsigned char, unsigned char*);
+/* ファイルのクローズ                 */
+extern char fileclose(unsigned char);
+/* ファイルポインタの移動           */
+/* 引数格納レジスタ3指定。          */
+extern char __regparam3 fpseek(unsigned char, long, unsigned char);
+/* ファイルポインタの取得           */
+extern char fptell(unsigned char, long*);
+#endif
+
+char flmod[IOSTREAM];                    /* オープンしたファイルのモード設定場所 */     
+
+
+/**************************************************************************/
+/*       open:file open                                                   */
+/*          Return value:File number (Pass)                               */
+/*                       -1          (Failure)                            */
+/**************************************************************************/
+open(char *name,                                               /* ファイル名                                        */
+     int  mode,                                                        /* オープンモード                                  */
+     int  flg)                                                 /* オープンフラグ                                  */
+{
+    char                       rcode    = 0;           /* fileopen()の戻り値             */
+       unsigned char   fileno   = 0;           /* ファイル番号                   */
+       unsigned char   openmode = 0;           /* シミュレータ用オープンモード     */
+
+
+    if(strcmp(name,"stdin")==0){          /* 標準入力ファイル   */
+             if((mode&O_RDONLY)==0){
+                      return -1;
+             }
+             flmod[STDIN] = mode;
+             return STDIN;
+       }
+
+       else if(strcmp(name,"stdout")==0){   /* 標準出力ファイル */
+             if((mode&O_WRONLY)==0){
+                      return -1;
+             }
+             flmod[STDOUT] = mode;
+             return STDOUT;
+       }
+
+       else if(strcmp(name,"stderr")==0){   /* 標準エラー出力ファイル */
+             if((mode&O_WRONLY)==0){
+                      return -1;
+             }
+             flmod[STDERR] = mode;
+             return STDERR;
+       }
+
+
+       flg = 0777;                                                     /* フラグの設定                                     */
+
+    /* ファイル名に従ってモードをチェックし、ファイル番号を返す。       */
+       /* fileopen()でオープン処理を行い、得られたファイル番号を返す。                  */
+
+       /*  引数で与えられたオープンモードをシミュレータ用に変換。                     */
+
+       if( mode == O_RDONLY )                                                          /*  "r"   */ 
+       {
+               openmode = 0x00;
+       }
+       else if( mode == (O_WRONLY | O_CREAT | O_TRUNC) )       /*  "w"   */
+       {
+               openmode = 0x01;
+       }
+       else if( mode == (O_WRONLY | O_CREAT | O_APPEND) )      /*  "a"   */
+       {
+               openmode = 0x02;
+       }
+       else if( mode == O_RDWR )                                                       /*  "r+"  */
+       {
+               openmode = 0x03;
+       }
+       else if( mode == (O_RDWR | O_CREAT | O_TRUNC) )         /*  "w+"  */
+       {
+               openmode = 0x04;
+       }
+       else if( mode == (O_RDWR | O_CREAT | O_APPEND) )        /*  "a+"  */
+       {
+               openmode = 0x05;
+       }
+       else                                                                                            /* 対象外 */
+       {       
+               return -1;
+       }
+
+    rcode=fileopen( name, openmode, &fileno );
+    if( rcode==0 )                                             /* オープン処理成功。             */
+    {
+        flmod[fileno] = mode;          /* モードを設定。                  */
+               if( fileno == 0 )
+               {
+                       flmod[fileno] = O_RDONLY;
+               }
+        return fileno;                 /* ファイル番号を返却。                 */
+    }
+    else                                       /* オープン処理失敗。                    */
+    {
+        return -1;                                     /* エラー。                                           */
+    }
+}
+
+/**************************************************************************/
+/*   close:File close                                                     */
+/*     Return value: 0 (pass)                                             */
+/*                  -1 (Failure)                                          */
+/**************************************************************************/
+close(int fileno)                                              /* ファイル番号                                     */
+{
+    char rcode = 0;                    /* fclose()の戻り値               */
+
+       /* ファイル番号をチェックし、fileclose()でファイルをクローズする。      */
+
+       /* 最小ファイル番号、最大ファイル番号チェック。                                             */
+       if( (fileno < FLMIN) || (IOSTREAM <= fileno) )                          
+       {
+               return -1;                                              /* エラー。                                           */
+       }
+       else
+       {
+               if( flmod[fileno] != 0 )                /* ファイルのオープンチェック。     */
+               {
+                       rcode = fileclose( fileno );
+               if( rcode == 0 )                /* クローズ処理成功。            */
+               {   
+                   flmod[fileno] = 0;          /* ファイルモードのリセット。        */
+                   return 0;
+               }
+               else                            /* クローズ処理失敗。            */
+               {
+                   return -1;                          /* エラー。                                           */
+               }               
+               }
+               else                                                    /* オープンされていない。              */
+               {
+                       return -1;                                      /* エラー。                                           */
+
+               }
+       }
+}
+
+/**************************************************************************/
+/* read:Data read                                                         */
+/*  Return value:Number of read characters (Pass)                         */
+/*               -1                        (Failure)                      */
+/**************************************************************************/
+read(int  fileno,                                              /* ファイル番号                             */
+     char *buf,                                                        /* 転送先バッファアドレス              */
+     int  count)                                               /* 読み込む文字数                          */
+{
+      unsigned int i;                                  /* カウント用変数                                  */
+      char         rcode   = 0;        /* fcharget()の戻り値                 */
+         char*            tmppt   = NULL;              /* 先頭アドレスの保持                    */
+         int              datanum = 0;                 /* 読み込んだデータ数                    */
+
+    /* ファイルのモードをチェックし、一文字づつ読み込みバッファに格納。          */
+
+    /* 読み込み専用 or 読み込み書き出し両用にオープンされているか判定。   */
+    if(flmod[fileno]&O_RDONLY||flmod[fileno]&O_RDWR)
+    {
+        /* ファイル番号を比較。                                                        */
+        /* 標準入力(stdin)の時           ⇒ charget()をコール。                      */
+               /* 標準出力(stdout・stderr)        ⇒ エラーを返却。                                         */
+        /* それ以外                        ⇒ fcharget()をコール。                             */
+
+        if( fileno == STDIN )                  /* 標準入力                       */
+        {
+            for(i=count; i>0; --i)
+            {
+                *buf = charget();
+                  if( *buf == CR )      /* 改行文字の置き換え。           */
+                    *buf=LF;
+                  buf++;
+            }
+                       return count;                           /* 読み込んだ文字数返却。              */
+        } 
+        else if( (fileno == STDOUT) ||
+                                (fileno == STDERR) )   /* 標準出力                                           */
+               {
+                       return -1;
+        }
+        else                            /* ファイル入力                   */
+        {
+                       tmppt = buf;                            /* 先頭アドレスの保持。                         */
+                   for( i=count; i>0; --i )
+            {
+                rcode = fcharget( buf, fileno );
+                if( rcode == 0 )        /* 処理成功                       */
+                {
+                    if( *buf == CR )    /* 改行文字の置き換え。           */
+                    {
+                                               *buf = LF;
+                                       }
+                                       datanum++;                      /* 取得文字数のインクリメント。     */
+                                       buf++;                          /* 出力先ポインタのインクリメント。*/
+                }
+                else                    /* EOF検出(-1)                    */
+                {
+                                       break;                          /* 処理終了                                           */
+                }
+            }
+                       buf = tmppt;                            /* 先頭アドレスの設定。                         */
+        }
+               return datanum;                                 /* 読み込んだ文字数返却。              */
+    }
+    else
+    {
+        return -1;                      /* エラー。                       */
+    }
+}
+
+/**************************************************************************/
+/* write:Data write                                                       */
+/*  Return value:Number of write characters (Pass)                        */
+/*               -1                         (Failure)                     */
+/**************************************************************************/
+write(int  fileno,                                             /* ファイル番号                                     */
+      char *buf,                                               /* 転送先バッファアドレス              */
+      int  count)                                              /* 書き出し文字数                          */
+{
+    unsigned int       i;                                      /* カウント用変数                                  */ 
+    char                       c;                                      /* 出力文字                                           */
+    char                       rcode   = 0;            /* fcaharget()戻り値                   */
+       int                             datanum = 0;            /* 書き出したデータ数                    */
+
+    /* ファイルのモードをチェックし、一文字づつ出力。                                     */
+
+    /* 書き出し専用 or 読み込み書き出し両用にオープンされているか判定。    */
+    if(flmod[fileno]&O_WRONLY || flmod[fileno]&O_RDWR)
+    {
+        /* ファイル番号を比較。                                                */
+        /* 標準出力(stdout・stderr)の時 ⇒ charput()をコール。              */
+               /* 標準入力(stdin)の時                    ⇒ エラーを返却。                                 */
+               /* それ以外                         ⇒ fcharput()をコール。             */
+
+               if( fileno == STDIN )                   /* 標準入力                       */
+               {
+                       return -1;
+               }
+        else if( (fileno == STDOUT) ||
+                                (fileno == STDERR) )   /* 標準出力                                   */
+        {
+            for( i = count; i > 0; --i )
+            {
+                c = *buf++;
+                charput(c);
+            }
+               return count;                           /* 書き出した文字数返却。              */
+        }
+        else                            /* ファイル出力                            */
+        {
+            for( i = count; i > 0; --i )
+            {
+                c = *buf++;
+                rcode = fcharput( c, fileno );
+                if( rcode != 0 )        /* 処理失敗                                  */
+                {
+                    return -1;
+                }
+                               datanum++;                              /* 出力文字数のインクリメント。     */
+            }
+                       return datanum;                         /* 書き出した文字数返却。              */
+        }
+    }
+    else
+       {
+        return -1;                      /* エラー                         */
+       }
+}
+
+/**************************************************************************/
+/* lseek:Definition of file read/write position                           */
+/*  Return value:Offset from the top of file read/whrte position(Pass)    */
+/*               -1              (Failure)                                */
+/*  (lseek is not supported in the console input/output)                  */
+/**************************************************************************/
+long lseek(int  fileno,                                        /* ファイル番号                                     */
+           long offset,                                        /* 読み込み/書き出し位置                */
+           int  base)                                  /* オフセットの起点                               */
+{
+       char    rcode      = 0;                         /* fpseek()の戻り値                           */
+       long    new_offset = 0;                         /* 新しいオフセット値                    */                            
+
+    /* ファイル番号を比較。                                                            */
+    /* 標準入出力(stdin・stdout・stderr)の時  ⇒ エラーを返却。                 */
+       /* ファイルの時                                                   ⇒ fpseek()をコール。               */
+       /*              fpseek() 成功 ⇒ fptell()により、新しいオフセット値の取得。   */
+       /*                      取得したオフセット値 < 0      ⇒ エラーを返却。                         */
+       /*                      それ以外                                    ⇒ オフセット値返却。           */
+       /*              fpseek() 失敗 ⇒ エラーを返却。                                                                 */
+
+       if( (fileno == STDIN)  ||
+           (fileno == STDOUT) ||
+               (fileno == STDERR) )                    /* 標準入出力の場合                       */ 
+       {
+       return -1;                                              /* エラー。                                           */
+       }
+       else                                                            /* 標準入出力以外                                  */
+       {
+               rcode = fpseek( fileno, offset, base );
+               if( rcode == 0 )                                /* ポインタ移動処理成功                 */
+               {
+                       /* fptell()で新しいオフセット値の取得。                                             */
+                       rcode = fptell( fileno, &new_offset );  
+                       if( rcode == 0 )                        /* オフセット取得成功                    */
+                       {
+                               if( new_offset < 0 )    /* オフセット値判定。                    */
+                               {
+                                       return -1;                      /* エラー。                                           */
+                               }
+                               else
+                               {
+                                       return new_offset;      /* 新しいオフセットの返却。           */
+                               }
+                       }
+                       else
+                       {
+                               return -1;                              /* エラー。                                           */
+                       }
+               }
+               else                                                    /* ポインタ移動処理失敗。              */
+               {
+                       return -1;                                      /* エラー。                                   */
+               }
+       }
+}
+
+/****************************************************************************/
+/* _INIT_IOLIB                                                              */
+/*  Initialize C library Functions, if necessary.                           */
+/*  Define USES_SIMIO on Assembler Option.                                  */
+/****************************************************************************/
+void _INIT_IOLIB(void)
+{
+FILE *fp;
+
+    for( fp = _iob; fp < _iob + _nfiles; fp++ )        /* ファイル型データの初期設定           */
+     {
+        fp->_bufptr = NULL;                     /* バッファへのポインタ                 */
+        fp->_bufcnt = 0;                        /* バッファカウント                     */
+        fp->_buflen = 0;                        /* バッファ長                                     */
+        fp->_bufbase = NULL;                    /* バッファへのベースポインタ           */
+        fp->_ioflag1 = 0;                       /* I/Oフラグ                            */
+        fp->_ioflag2 = 0;                       /* I/Oフラグ                            */
+        fp->_iofd = 0;                          /* ファイル番号                         */
+     }
+
+       // 標準入出力用ファイルをオープン。
+       // "stdin"・"stdout"・"stderr"は、ファイルが存在しなくても自動生成されます。
+       // "stdin"は、実際は"r"でオープンしなくてはならないが、
+       // 自動生成するために"w"でオープンした後I/Oフラグに"r"を設定しています。
+   if(freopen( "stdin",  "r", stdin )==NULL)   /* 標準入力ファイルをオープン。         */
+        stdin->_ioflag1 = 0xff;                                                /* オープン失敗時のアクセス禁止。       */
+       stdin->_ioflag1  = _IOREAD;                                                                     /* "r"でオープンしたことにします。                */
+    stdin->_ioflag1 |= _IOUNBUF;                                               /* データのバッファリングなしに設定。   */
+    if(freopen( "stdout", "w", stdout )==NULL) /* 標準出力ファイルをオープン。         */
+        stdout->_ioflag1 = 0xff;                                               /* オープン失敗時のアクセス禁止。       */
+    stdout->_ioflag1 |= _IOUNBUF;                                              /* オープンのバッファリングなしに設定。 */
+    if(freopen( "stderr", "w", stderr )==NULL) /* 標準エラーファイルをオープン。       */
+        stderr->_ioflag1 = 0xff;                                               /* オープン失敗時のアクセス禁止。       */
+    stderr->_ioflag1 |= _IOUNBUF;         
+}
+
+/****************************************************************************/
+/* _CLOSEALL                                                                */
+/****************************************************************************/
+
+void _CLOSEALL(void)
+{
+int i;
+
+    for( i=0; i < _nfiles; i++ )
+       {
+               /* ファイルがオープンしているかチェック。    */
+        if( _iob[i]._ioflag1 & (_IOREAD | _IOWRITE | _IORW ) )
+                       /* ファイルをクローズする。                         */ 
+            fclose( & _iob[i] );
+       }
+}
+
diff --git a/sample/h8/h83069/ch38/lowsrc.h b/sample/h8/h83069/ch38/lowsrc.h
new file mode 100755 (executable)
index 0000000..2b9167c
--- /dev/null
@@ -0,0 +1,12 @@
+/***********************************************************************/
+/*                                                                     */
+/*  FILE        :lowsrc.h                                              */
+/*  DATE        :Mon, Aug 07, 2006                                     */
+/*  DESCRIPTION :Header file of I/O Stream file                        */
+/*  CPU TYPE    :H8/                                                   */
+/*                                                                     */
+/*  This file is generated by Renesas Project Generator (Ver.4.5).     */
+/*                                                                     */
+/***********************************************************************/
+/*Number of I/O Stream*/
+#define IOSTREAM 3
diff --git a/sample/h8/h83069/ch38/sbrk.c b/sample/h8/h83069/ch38/sbrk.c
new file mode 100755 (executable)
index 0000000..1617eb3
--- /dev/null
@@ -0,0 +1,49 @@
+/***********************************************************************/
+/*                                                                     */
+/*  FILE        :sbrk.c                                                */
+/*  DATE        :Mon, Aug 07, 2006                                     */
+/*  DESCRIPTION :Program of sbrk                                       */
+/*  CPU TYPE    :H8/                                                   */
+/*                                                                     */
+/*  This file is generated by Renesas Project Generator (Ver.4.5).     */
+/*                                                                     */
+/***********************************************************************/
+                  
+
+
+#include <no_float.h>
+#include <stdio.h>
+#include "typedefine.h"
+#include "sbrk.h"
+_SBYTE *sbrk(size_t);
+
+//const size_t _sbrk_size=              /* Specifies the minimum unit of */
+                                        /* the defined heap area         */
+
+#pragma pack 2
+static union {
+    _SWORD  dummy;                      /* 2バイト境界にするためのダミー */
+    _SBYTE  heap[HEAPSIZE];             /* sbrkで管理する領域の宣言      */
+} heap_area;
+#pragma unpack
+
+static _SBYTE *brk=(_SBYTE *)&heap_area;  /* sbrkで割り付けた領域の最終アドレス */
+
+/*****************************************************************************/
+/*  sbrk:データの書き出し                                                    */
+/*       リターン値:割り付けた領域の先頭アドレス(成功)                    */
+/*                   -1                          (失敗)                    */
+/*****************************************************************************/
+extern _SBYTE *sbrk(size_t size)              /* 割り付ける領域のサイズ */
+{
+    _SBYTE  *p;
+    if(brk+size > heap_area.heap+HEAPSIZE){   /* 空き領域のチェック */
+        p = (_SBYTE *)-1;
+    }
+    else {
+        p = brk;                              /* 領域の割り付け     */
+        brk += size;                          /* 最終アドレスの更新 */
+    }
+
+    return p;
+}
diff --git a/sample/h8/h83069/ch38/sbrk.h b/sample/h8/h83069/ch38/sbrk.h
new file mode 100755 (executable)
index 0000000..aa298c5
--- /dev/null
@@ -0,0 +1,12 @@
+/***********************************************************************/
+/*                                                                     */
+/*  FILE        :sbrk.h                                                */
+/*  DATE        :Mon, Aug 07, 2006                                     */
+/*  DESCRIPTION :Header file of sbrk file                              */
+/*  CPU TYPE    :H8/                                                   */
+/*                                                                     */
+/*  This file is generated by Renesas Project Generator (Ver.4.5).     */
+/*                                                                     */
+/***********************************************************************/
+/* size of area managed by sbrk */
+#define HEAPSIZE 0x420
diff --git a/sample/h8/h83069/ch38/startup.src b/sample/h8/h83069/ch38/startup.src
new file mode 100755 (executable)
index 0000000..27aff7e
--- /dev/null
@@ -0,0 +1,22 @@
+
+                               .EXPORT         _ResetHandler
+                               .IMPORT     __INITSCT
+                               .IMPORT         __INIT_IOLIB
+                               .IMPORT     _main
+
+                               .SECTION        P, CODE, ALIGN=2
+_ResetHandler:
+                               mov.l   #H'00FFFF00, er7
+                               jsr             @__INITSCT
+                               jsr             @__INIT_IOLIB
+                               jsr             @_main
+                               sleep
+
+
+
+                               .SECTION        S, STACK, ALIGN=2
+                               .RES.B          1024
+
+
+                               .END            _ResetHandler
+
diff --git a/sample/h8/h83069/ch38/typedefine.h b/sample/h8/h83069/ch38/typedefine.h
new file mode 100755 (executable)
index 0000000..d007711
--- /dev/null
@@ -0,0 +1,21 @@
+/***********************************************************************/
+/*                                                                     */
+/*  FILE        :typedefine.h                                          */
+/*  DATE        :Mon, Aug 07, 2006                                     */
+/*  DESCRIPTION :Aliases of Integer Type                               */
+/*  CPU TYPE    :H8/                                                   */
+/*                                                                     */
+/*  This file is generated by Renesas Project Generator (Ver.4.5).     */
+/*                                                                     */
+/***********************************************************************/
+                  
+
+
+typedef signed char _SBYTE;
+typedef unsigned char _UBYTE;
+typedef signed short _SWORD;
+typedef unsigned short _UWORD;
+typedef signed int _SINT;
+typedef unsigned int _UINT;
+typedef signed long _SDWORD;
+typedef unsigned long _UDWORD;
diff --git a/sample/h8/h83069/ch38/vcttbl.src b/sample/h8/h83069/ch38/vcttbl.src
new file mode 100755 (executable)
index 0000000..4b3675a
--- /dev/null
@@ -0,0 +1,76 @@
+
+                               .IMPORT     _ResetHandler
+                               .IMPORT         __kernel_vector_012
+                               .IMPORT         __kernel_vector_dmy
+
+
+                               .SECTION    VECTTBL, DATA, ALIGN=4 
+
+_Vectors:
+                               .DATA.L         _ResetHandler                   ; ベクタ0   リセット
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ1
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ2
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ3
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ4
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ5
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ6
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ7   NMI
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ8   TRAP0
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ9   TRAP1
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ10  TRAP2
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ11  TRAP3
+                               .DATA.L         __kernel_vector_012             ; ベクタ12  IRQ0
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ13
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ14
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ15
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ16
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ17
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ18
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ19
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ20
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ21
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ22
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ23
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ24
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ25
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ26
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ27
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ28
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ29
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ30
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ31
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ32
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ33
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ34
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ35
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ36
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ37
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ38
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ39
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ40
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ41
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ42
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ43
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ44
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ45
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ46
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ47
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ48
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ49
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ50
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ51
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ52
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ53
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ54
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ55
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ56
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ57
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ58
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ59
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ60
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ61
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ62
+                               .DATA.L         __kernel_vector_dmy             ; ベクタ63
+
+
+                               .END
diff --git a/sample/h8/h83069/main.c b/sample/h8/h83069/main.c
new file mode 100755 (executable)
index 0000000..c4591df
--- /dev/null
@@ -0,0 +1,29 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  main.c
+ * @brief %jp{メイン関数}%en{main}
+ *
+ * @version $Id: main.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "kernel.h"
+
+
+/** %jp{メイン関数} */
+int main()
+{
+       /** %jp{カーネルの動作開始} */
+       vsta_knl();
+       
+       return 0;
+}
+
+
+void *_kernel_int_isp = (void *)0x00ffff00;
+
+/* end of file */
diff --git a/sample/h8/h83069/ostimer.c b/sample/h8/h83069/ostimer.c
new file mode 100755 (executable)
index 0000000..ee6dbcd
--- /dev/null
@@ -0,0 +1,44 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  ostimer.c
+ * @brief %jp{OSタイマ}%en{OS timer}
+ *
+ * @version $Id: ostimer.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "kernel.h"
+#include "ostimer.h"
+
+
+#define OSTIMER_TIMER_INHNO            12                      /**< %jp{割り込みハンドラ番号} */
+
+
+static void OsTimer_IrqHandler(void);          /**< %jp{タイマ割り込みハンドラ} */
+
+
+/** %jp{OS用タイマ初期化ルーチン} */
+void OsTimer_Initialize(VP_INT exinf)
+{
+       T_DINH dfinh;
+       
+       /* %jp{割り込みハンドラ定義} */
+       dfinh.inthdr = (FP)OsTimer_IrqHandler;
+       def_inh(OSTIMER_TIMER_INHNO, &dfinh);
+       
+       /* %jp{タイマ動作開始} */
+}
+
+
+/** %jp{タイマ割り込みハンドラ} */
+void OsTimer_IrqHandler(void)
+{
+       isig_tim();
+}
+
+
+/* end of file */
diff --git a/sample/h8/h83069/ostimer.h b/sample/h8/h83069/ostimer.h
new file mode 100755 (executable)
index 0000000..26cc6aa
--- /dev/null
@@ -0,0 +1,33 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  ostimer.c
+ * @brief %jp{OSタイマ}%en{OS timer}
+ *
+ * @version $Id: ostimer.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __ostimer_h__
+#define __ostimer_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** %jp{OS用タイマ初期化ルーチン} */
+void OsTimer_Initialize(VP_INT exinf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __ostimer_h__ */
+
+
+/* end of file */
diff --git a/sample/h8/h83069/sample.c b/sample/h8/h83069/sample.c
new file mode 100755 (executable)
index 0000000..cadfd46
--- /dev/null
@@ -0,0 +1,159 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  sample.c
+ * @brief %jp{サンプルプログラム}%en{Sample program}
+ *
+ * @version $Id: sample.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include <stdio.h>
+#include "kernel.h"
+#include "kernel_id.h"
+
+
+#define LEFT(num)      ((num) <= 1 ? 5 : (num) - 1)
+#define RIGHT(num)     ((num) >= 5 ? 1 : (num) + 1)
+
+
+ID mbxid;
+ID mpfid;
+
+
+/** %jp{メッセージ構造体} */
+typedef struct t_print_msg
+{
+       T_MSG msg;
+       char  text[32];
+} T_PRINT_MSG;
+
+
+/** %jp{初期化ハンドラ} */
+void Sample_Initialize(VP_INT exinf)
+{
+       T_CMPF cmpf;
+       T_CMBX cmbx;
+       
+       /* %jp{固定長メモリプール生成} */
+       cmpf.mpfatr = TA_TFIFO;                                 
+       cmpf.blkcnt = 3;                                                
+       cmpf.blksz  = sizeof(T_PRINT_MSG);              
+       cmpf.mpf    = NULL;                                             
+       mpfid = acre_mpf(&cmpf);
+
+       /* %jp{メールボックス生成} */
+       cmbx.mbxatr  = TA_TFIFO | TA_TFIFO;             
+       cmbx.maxmpri = 1;                                               
+       cmbx.mprihd  = NULL;                                    
+       mbxid = acre_mbx(&cmbx);
+
+       /* %jp{タスク起動} */
+       act_tsk(TSKID_PRINT);
+       act_tsk(TSKID_SAMPLE1);
+       act_tsk(TSKID_SAMPLE2);
+       act_tsk(TSKID_SAMPLE3);
+       act_tsk(TSKID_SAMPLE4);
+       act_tsk(TSKID_SAMPLE5);
+}
+
+
+/** %jp{適当な時間待つ} */
+void rand_wait(void)
+{
+       dly_tsk(10000 /*rand()*/ % 1000 + 1);   
+}
+
+
+/** %jp{状態表示} */
+void print_state(int num, char *text)
+{
+       T_PRINT_MSG *msg;
+       VP  mem;
+       
+       /* %jp{メモリ取得} */
+       get_mpf(mpfid, &mem);
+       msg = (T_PRINT_MSG *)mem;
+
+       /* %jp{文字列生成} */
+/*     sprintf(msg->text, "%d : %s", num, text);       */
+
+       /* %jp{表示タスクに送信} */
+       snd_mbx(mbxid, (T_MSG *)msg);
+}
+
+
+/** %jp{サンプルタスク} */
+void Sample_Task(VP_INT exinf)
+{
+       int num;
+
+       num = (int)exinf;
+
+       putchar('a');
+
+       /* %jp{いわゆる哲学者の食事の問題} */
+       for ( ; ; )
+       {
+               /* %jp{適当な時間考える} */
+               print_state(num, "thinking");
+               rand_wait();
+
+               /* %jp{左右のフォークを取るまでループ} */
+               for ( ; ; )
+               {
+                       /* %jp{左から順に取る} */
+                       wai_sem(LEFT(num));
+                       if ( pol_sem(RIGHT(num)) == E_OK )
+                       {
+                               break;  /* %jp{両方取れた} */
+                       }
+                       sig_sem(LEFT(num));     /* %jp{取れなければ離す} */
+                       
+                       /* %jp{適当な時間待つ} */
+                       print_state(num, "hungry");
+                       rand_wait();
+
+                       /* %jp{右から順に取る} */
+                       wai_sem(RIGHT(num));
+                       if ( pol_sem(LEFT(num)) == E_OK )
+                       {
+                               break;  /* %jp{両方取れた} */
+                       }
+                       sig_sem(RIGHT(num));    /* %jp{取れなければ離す} */
+
+                       /* %jp{適当な時間待つ} */
+                       print_state(num, "hungry");
+                       rand_wait();
+               }
+               
+               /* %jp{適当な時間、食べる} */
+               print_state(num, "eating");
+               rand_wait();
+               
+               /* %jp{フォークを置く} */
+               sig_sem(LEFT(num));
+               sig_sem(RIGHT(num));
+       }
+}
+
+
+/** %jp{表示タスク} */
+void Sample_Print(VP_INT exinf)
+{
+       T_PRINT_MSG *msg;
+
+       for ( ; ; )
+       {
+               rcv_mbx(mbxid, (T_MSG **)&msg);
+       /*      printf("%s\n", msg->text);      */
+               rel_mpf(mpfid, msg);
+       }
+}
+
+
+
+/* end of file */
diff --git a/sample/h8/h83069/sample.h b/sample/h8/h83069/sample.h
new file mode 100755 (executable)
index 0000000..aa5a5cc
--- /dev/null
@@ -0,0 +1,35 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  sample.c
+ * @brief %jp{サンプルプログラム}%en{Sample program}
+ *
+ * @version $Id: sample.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef __sample_h__
+#define __sample_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void Sample_Initialize(VP_INT exinf);
+void Sample_Task(VP_INT exinf);
+void Sample_Print(VP_INT exinf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __sample_h__ */
+
+
+/* end of file */
diff --git a/sample/h8/h83069/system.cfg b/sample/h8/h83069/system.cfg
new file mode 100755 (executable)
index 0000000..2619bb4
--- /dev/null
@@ -0,0 +1,40 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  system.cfg
+ * @brief %jp{サンプルのコンフィギュレーション}
+ *
+ * @version $Id: system.cfg,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+/* %jp{カーネル独自の設定}%en{kernel} */
+KERNEL_HEP_MEM(65536, NULL);
+KERNEL_MAX_TSKID(16);
+KERNEL_MAX_SEMID(16);
+
+
+/* %jp{OSタイマの設定}%en{OS timer} */
+INCLUDE("\"ostimer.h\"");
+ATT_INI({TA_HLNG, 0, OsTimer_Initialize});
+
+/* %jp{サンプル}%en{Sample program} */
+INCLUDE("\"sample.h\"");
+ATT_INI({TA_HLNG, 0, Sample_Initialize});
+CRE_TSK(TSKID_PRINT,   {TA_HLNG, 1, Sample_Print, 1, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE4, {TA_HLNG, 4, Sample_Task, 2, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE5, {TA_HLNG, 5, Sample_Task, 2, 1024, NULL});
+CRE_SEM(1, {TA_TFIFO, 1, 1});
+CRE_SEM(2, {TA_TFIFO, 1, 1});
+CRE_SEM(3, {TA_TFIFO, 1, 1});
+CRE_SEM(4, {TA_TFIFO, 1, 1});
+CRE_SEM(5, {TA_TFIFO, 1, 1});
+
+
+/* end of file */
diff --git a/sample/sh/sh7045/gcc/crt0.S b/sample/sh/sh7045/gcc/crt0.S
new file mode 100755 (executable)
index 0000000..4425529
--- /dev/null
@@ -0,0 +1,113 @@
+/* ------------------------------------------------------------------------ */
+/*  Hyper Operating System V4  サンプルプログラム                           */
+/*    スタートアップモジュール (日立 SH2 gcc 用)                            */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2002 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+                               .extern         _main
+                               .extern         _DATA_ROM
+                               .extern         _DATA_START
+                               .extern         _DATA_END
+                               .extern         _BSS_START
+                               .extern         _BSS_END
+
+                               .global         _pwr_reset
+                               .global         _man_reset
+                               .global         ___main
+
+
+
+/************************************************
+  リセットハンドラ
+************************************************/
+                               .section        .text
+                               .align          4
+_pwr_reset:
+_man_reset:
+                               /* DATA領域のコピー */
+                               mov.l   l_data_rom, r0
+                               mov.l   l_data_start, r1
+                               mov.l   l_data_end, r2
+                               cmp/hs  r2, r1
+                               bt              data_end
+data_loop:             
+                               mov.l   @r0+, r3
+                               mov.l   r3, @r1
+                               add             #4, r1
+                               cmp/hs  r2, r1
+                               bf              data_loop
+data_end:              
+                               
+                               /* BSS領域の初期化 */
+                               mov.l   l_bss_start, r0
+                               mov.l   l_bss_end, r1
+                               cmp/hs  r1, r0
+                               bt              bss_end
+                               mov             #0, r2
+bss_loop:              
+                               mov.l   r2, @r0
+                               add             #4, r0
+                               cmp/hs  r1, r0
+                               bf              bss_loop
+bss_end:               
+                               
+                               /* main関数の呼び出し */
+                               mov.l   l_main, r8
+                               jsr             @r8
+                               nop
+end_loop:
+                               bra             end_loop
+                               nop
+
+                               /* __main */
+___main:
+                               rts             /* 何もしない */
+                               nop
+
+                               .align  4
+l_data_rom:            
+                               .long   _DATA_ROM
+l_data_start:  
+                               .long   _DATA_START
+l_data_end:            
+                               .long   _DATA_END
+l_bss_start:
+                               .long   _BSS_START
+l_bss_end:
+                               .long   _BSS_END
+l_main:                        
+                               .long   _main
+
+
+
+/************************************************
+  カーネル用スタックポインタ定義
+************************************************/
+                               .global         _kernel_int_sp
+                               .section        .rodata
+                               .align          4
+_kernel_int_sp:
+                               .long   _stack          /* 割り込み時の er7 保存用 */
+
+
+
+/************************************************
+  スタック領域
+************************************************/
+                               .section        .stack
+                               .global         _stack
+
+                               .align          4
+_stack:                        .long           1
+
+
+
+                               .end
+
+
+/* ------------------------------------------------------------------------ */
+/*  Copyright (C) 1998-2002 by Project HOS                                  */
+/* ------------------------------------------------------------------------ */
diff --git a/sample/sh/sh7045/gcc/gmake.mak b/sample/sh/sh7045/gcc/gmake.mak
new file mode 100755 (executable)
index 0000000..9aed81c
--- /dev/null
@@ -0,0 +1,43 @@
+
+
+TARGET ?= sample.out
+
+# Tools
+CC     = sh-elf-gcc
+ASM    = sh-elf-gcc
+LINK   = sh-elf-gcc
+DEPEND = sh-elf-gcc -M
+LINT   = splint
+AWK    = gawk
+
+
+INC_DIR = ../../../../kernel/include
+
+
+CFLAGS = -c -g -O0 -Wall -std=c89 -I$(INC_DIR)
+AFLAGS = -c -g
+LFLAGS = -m2 -nostartfiles -Wl,-v,-t,-Map,sample.map,-Tsample.x
+
+OBJS = vector.o crt0.o kernel_cfg.o sample.o ../../../../kernel/build/sh/sh2/gcc/libhosv4a.a
+
+all: $(OBJS)
+       $(LINK) $(LFLAGS) $(OBJS) -o sample.elf
+
+
+vector.o: vector.S
+       $(CC) $(AFLAGS) vector.S -o vector.o
+
+crt0.o: crt0.S
+       $(CC) $(AFLAGS) crt0.S -o crt0.o
+
+sample.o: sample.c
+       $(CC) $(CFLAGS) sample.c -o sample.o
+
+kernel_cfg.o: kernel_cfg.c
+       $(CC) $(CFLAGS) kernel_cfg.c -o kernel_cfg.o
+
+kernel_cfg.c: system.cfg
+       cpp -E system.cfg > system.i
+       ../../../../cfgrtr/build/gcc/h4acfg-sh2
+
+
diff --git a/sample/sh/sh7045/gcc/sample.c b/sample/sh/sh7045/gcc/sample.c
new file mode 100755 (executable)
index 0000000..7a9a66c
--- /dev/null
@@ -0,0 +1,31 @@
+#include <stdio.h>
+
+
+#include "kernel.h"
+
+
+
+int main()
+{
+
+/*     _kernel_sta_knl(); */
+       
+       return 0;
+}
+
+
+void Sample_Initialize(VP_INT exinf)
+{
+}
+
+void Sample_Task1(VP_INT exinf)
+{
+}
+
+void Sample_Task2(VP_INT exinf)
+{
+}
+
+void Sample_Task3(VP_INT exinf)
+{
+}
diff --git a/sample/sh/sh7045/gcc/sample.h b/sample/sh/sh7045/gcc/sample.h
new file mode 100755 (executable)
index 0000000..8ec9001
--- /dev/null
@@ -0,0 +1,6 @@
+
+
+void Sample_Initialize(VP_INT exinf);
+void Sample_Task1(VP_INT exinf);
+void Sample_Task2(VP_INT exinf);
+void Sample_Task3(VP_INT exinf);
diff --git a/sample/sh/sh7045/gcc/sample.x b/sample/sh/sh7045/gcc/sample.x
new file mode 100755 (executable)
index 0000000..e5cea14
--- /dev/null
@@ -0,0 +1,47 @@
+OUTPUT_FORMAT("coff-sh")
+OUTPUT_ARCH(sh)
+MEMORY
+{
+  vector : o = 0xfffff200, l = 0x00000300
+  rom    : o = 0x00c00000, l = 0x00020000
+  ram    : o = 0x00c20000, l = 0x0001fff0
+  stack  : o = 0x00c3fff0, l = 0x00000010
+}
+SECTIONS
+{
+  .vector :
+  {
+    _VECTOR_START = . ;
+    *(.vector)
+  } > vector
+  
+  .text :
+  {
+    _TEXT_START = . ;
+    *(.vector)
+    *(.text)
+    *(.strings)
+    *(.rodata)
+    _TEXT_END = . ;
+  } > rom
+  .data : AT (ADDR(.text) + SIZEOF(.text))
+  {
+    _DATA_ROM = ADDR(.text) + SIZEOF(.text) ;
+    _DATA_START = . ;
+    *(.data)
+    _DATA_END = . ;
+  } > ram
+  .bss :
+  {
+    _BSS_START = . ;
+    *(.bss)
+    *(COMMON)
+    _BSS_END = . ;
+  } > ram
+  .stack :
+  {
+    _STACK_START = . ;
+    *(.stack);
+    _STACK_END = . ;
+  } > stack
+}
diff --git a/sample/sh/sh7045/gcc/system.cfg b/sample/sh/sh7045/gcc/system.cfg
new file mode 100755 (executable)
index 0000000..6cee763
--- /dev/null
@@ -0,0 +1,9 @@
+
+INCLUDE("\"sample.h\"");
+
+ATT_INI({TA_HLNG, 0, Sample_Initialize});
+CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task1, 1, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task2, 2, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task3, 3, 1024, NULL});
+
+
diff --git a/sample/sh/sh7045/gcc/vector.S b/sample/sh/sh7045/gcc/vector.S
new file mode 100755 (executable)
index 0000000..d98cc74
--- /dev/null
@@ -0,0 +1,333 @@
+/* ------------------------------------------------------------------------ */
+/*  Hyper Operating System V4  サンプルプログラム                           */
+/*    割り込みベクタテーブル (日立 SH2 gcc 用)                              */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2002 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+                               .global _kernel_vecter004
+                               .global _kernel_vecter005
+                               .global _kernel_vecter006
+                               .global _kernel_vecter007
+                               .global _kernel_vecter008
+                               .global _kernel_vecter009
+                               .global _kernel_vecter010
+                               .global _kernel_vecter011
+                               .global _kernel_vecter012
+                               .global _kernel_vecter013
+                               .global _kernel_vecter014
+                               .global _kernel_vecter015
+                               .global _kernel_vecter016
+                               .global _kernel_vecter017
+                               .global _kernel_vecter018
+                               .global _kernel_vecter019
+                               .global _kernel_vecter020
+                               .global _kernel_vecter021
+                               .global _kernel_vecter022
+                               .global _kernel_vecter023
+                               .global _kernel_vecter024
+                               .global _kernel_vecter025
+                               .global _kernel_vecter026
+                               .global _kernel_vecter027
+                               .global _kernel_vecter028
+                               .global _kernel_vecter029
+                               .global _kernel_vecter030
+                               .global _kernel_vecter031
+                               .global _kernel_vecter032
+                               .global _kernel_vecter033
+                               .global _kernel_vecter034
+                               .global _kernel_vecter035
+                               .global _kernel_vecter036
+                               .global _kernel_vecter037
+                               .global _kernel_vecter038
+                               .global _kernel_vecter039
+                               .global _kernel_vecter040
+                               .global _kernel_vecter041
+                               .global _kernel_vecter042
+                               .global _kernel_vecter043
+                               .global _kernel_vecter044
+                               .global _kernel_vecter045
+                               .global _kernel_vecter046
+                               .global _kernel_vecter047
+                               .global _kernel_vecter048
+                               .global _kernel_vecter049
+                               .global _kernel_vecter050
+                               .global _kernel_vecter051
+                               .global _kernel_vecter052
+                               .global _kernel_vecter053
+                               .global _kernel_vecter054
+                               .global _kernel_vecter055
+                               .global _kernel_vecter056
+                               .global _kernel_vecter057
+                               .global _kernel_vecter058
+                               .global _kernel_vecter059
+                               .global _kernel_vecter060
+                               .global _kernel_vecter061
+                               .global _kernel_vecter062
+                               .global _kernel_vecter063
+                               .global _kernel_vecter064
+                               .global _kernel_vecter065
+                               .global _kernel_vecter066
+                               .global _kernel_vecter067
+                               .global _kernel_vecter068
+                               .global _kernel_vecter069
+                               .global _kernel_vecter070
+                               .global _kernel_vecter071
+                               .global _kernel_vecter072
+                               .global _kernel_vecter073
+                               .global _kernel_vecter074
+                               .global _kernel_vecter075
+                               .global _kernel_vecter076
+                               .global _kernel_vecter077
+                               .global _kernel_vecter078
+                               .global _kernel_vecter079
+                               .global _kernel_vecter080
+                               .global _kernel_vecter081
+                               .global _kernel_vecter082
+                               .global _kernel_vecter083
+                               .global _kernel_vecter084
+                               .global _kernel_vecter085
+                               .global _kernel_vecter086
+                               .global _kernel_vecter087
+                               .global _kernel_vecter088
+                               .global _kernel_vecter089
+                               .global _kernel_vecter090
+                               .global _kernel_vecter091
+                               .global _kernel_vecter092
+                               .global _kernel_vecter093
+                               .global _kernel_vecter094
+                               .global _kernel_vecter095
+                               .global _kernel_vecter096
+                               .global _kernel_vecter097
+                               .global _kernel_vecter098
+                               .global _kernel_vecter099
+                               .global _kernel_vecter100
+                               .global _kernel_vecter101
+                               .global _kernel_vecter102
+                               .global _kernel_vecter103
+                               .global _kernel_vecter104
+                               .global _kernel_vecter105
+                               .global _kernel_vecter106
+                               .global _kernel_vecter107
+                               .global _kernel_vecter108
+                               .global _kernel_vecter109
+                               .global _kernel_vecter110
+                               .global _kernel_vecter111
+                               .global _kernel_vecter112
+                               .global _kernel_vecter113
+                               .global _kernel_vecter114
+                               .global _kernel_vecter115
+                               .global _kernel_vecter116
+                               .global _kernel_vecter117
+                               .global _kernel_vecter118
+                               .global _kernel_vecter119
+                               .global _kernel_vecter120
+                               .global _kernel_vecter121
+                               .global _kernel_vecter122
+                               .global _kernel_vecter123
+                               .global _kernel_vecter124
+                               .global _kernel_vecter125
+                               .global _kernel_vecter126
+                               .global _kernel_vecter127
+                               .global _kernel_vecter128
+                               .global _kernel_vecter129
+                               .global _kernel_vecter130
+                               .global _kernel_vecter131
+                               .global _kernel_vecter132
+                               .global _kernel_vecter133
+                               .global _kernel_vecter134
+                               .global _kernel_vecter135
+                               .global _kernel_vecter136
+                               .global _kernel_vecter137
+                               .global _kernel_vecter138
+                               .global _kernel_vecter139
+                               .global _kernel_vecter140
+                               .global _kernel_vecter141
+                               .global _kernel_vecter142
+                               .global _kernel_vecter143
+                               .global _kernel_vecter144
+                               .global _kernel_vecter145
+                               .global _kernel_vecter146
+                               .global _kernel_vecter147
+                               .global _kernel_vecter148
+                               .global _kernel_vecter149
+                               .global _kernel_vecter150
+                               .global _kernel_vecter151
+                               .global _kernel_vecter152
+                               .global _kernel_vecter153
+                               .global _kernel_vecter154
+                               .global _kernel_vecter155
+                               .global _kernel_vecter156
+
+
+
+                               .section        .vector
+
+                               .long   _pwr_reset                      /* パワーオンリセット */
+                               .long   _STACK_END
+                               .long   _man_reset                      /* マニュアルリセット */
+                               .long   _STACK_END
+                               .long   _kernel_vecter004
+                               .long   _kernel_vecter005
+                               .long   _kernel_vecter006
+                               .long   _kernel_vecter007
+                               .long   _kernel_vecter008
+                               .long   _kernel_vecter009
+                               .long   _kernel_vecter010
+                               .long   _kernel_vecter011
+                               .long   _kernel_vecter012
+                               .long   _kernel_vecter013
+                               .long   _kernel_vecter014
+                               .long   _kernel_vecter015
+                               .long   _kernel_vecter016
+                               .long   _kernel_vecter017
+                               .long   _kernel_vecter018
+                               .long   _kernel_vecter019
+                               .long   _kernel_vecter020
+                               .long   _kernel_vecter021
+                               .long   _kernel_vecter022
+                               .long   _kernel_vecter023
+                               .long   _kernel_vecter024
+                               .long   _kernel_vecter025
+                               .long   _kernel_vecter026
+                               .long   _kernel_vecter027
+                               .long   _kernel_vecter028
+                               .long   _kernel_vecter029
+                               .long   _kernel_vecter030
+                               .long   _kernel_vecter031
+                               .long   _kernel_vecter032
+                               .long   _kernel_vecter033
+                               .long   _kernel_vecter034
+                               .long   _kernel_vecter035
+                               .long   _kernel_vecter036
+                               .long   _kernel_vecter037
+                               .long   _kernel_vecter038
+                               .long   _kernel_vecter039
+                               .long   _kernel_vecter040
+                               .long   _kernel_vecter041
+                               .long   _kernel_vecter042
+                               .long   _kernel_vecter043
+                               .long   _kernel_vecter044
+                               .long   _kernel_vecter045
+                               .long   _kernel_vecter046
+                               .long   _kernel_vecter047
+                               .long   _kernel_vecter048
+                               .long   _kernel_vecter049
+                               .long   _kernel_vecter050
+                               .long   _kernel_vecter051
+                               .long   _kernel_vecter052
+                               .long   _kernel_vecter053
+                               .long   _kernel_vecter054
+                               .long   _kernel_vecter055
+                               .long   _kernel_vecter056
+                               .long   _kernel_vecter057
+                               .long   _kernel_vecter058
+                               .long   _kernel_vecter059
+                               .long   _kernel_vecter060
+                               .long   _kernel_vecter061
+                               .long   _kernel_vecter062
+                               .long   _kernel_vecter063
+                               .long   _kernel_vecter064
+                               .long   _kernel_vecter065
+                               .long   _kernel_vecter066
+                               .long   _kernel_vecter067
+                               .long   _kernel_vecter068
+                               .long   _kernel_vecter069
+                               .long   _kernel_vecter070
+                               .long   _kernel_vecter071
+                               .long   _kernel_vecter072
+                               .long   _kernel_vecter073
+                               .long   _kernel_vecter074
+                               .long   _kernel_vecter075
+                               .long   _kernel_vecter076
+                               .long   _kernel_vecter077
+                               .long   _kernel_vecter078
+                               .long   _kernel_vecter079
+                               .long   _kernel_vecter080
+                               .long   _kernel_vecter081
+                               .long   _kernel_vecter082
+                               .long   _kernel_vecter083
+                               .long   _kernel_vecter084
+                               .long   _kernel_vecter085
+                               .long   _kernel_vecter086
+                               .long   _kernel_vecter087
+                               .long   _kernel_vecter088
+                               .long   _kernel_vecter089
+                               .long   _kernel_vecter090
+                               .long   _kernel_vecter091
+                               .long   _kernel_vecter092
+                               .long   _kernel_vecter093
+                               .long   _kernel_vecter094
+                               .long   _kernel_vecter095
+                               .long   _kernel_vecter096
+                               .long   _kernel_vecter097
+                               .long   _kernel_vecter098
+                               .long   _kernel_vecter099
+                               .long   _kernel_vecter100
+                               .long   _kernel_vecter101
+                               .long   _kernel_vecter102
+                               .long   _kernel_vecter103
+                               .long   _kernel_vecter104
+                               .long   _kernel_vecter105
+                               .long   _kernel_vecter106
+                               .long   _kernel_vecter107
+                               .long   _kernel_vecter108
+                               .long   _kernel_vecter109
+                               .long   _kernel_vecter110
+                               .long   _kernel_vecter111
+                               .long   _kernel_vecter112
+                               .long   _kernel_vecter113
+                               .long   _kernel_vecter114
+                               .long   _kernel_vecter115
+                               .long   _kernel_vecter116
+                               .long   _kernel_vecter117
+                               .long   _kernel_vecter118
+                               .long   _kernel_vecter119
+                               .long   _kernel_vecter120
+                               .long   _kernel_vecter121
+                               .long   _kernel_vecter122
+                               .long   _kernel_vecter123
+                               .long   _kernel_vecter124
+                               .long   _kernel_vecter125
+                               .long   _kernel_vecter126
+                               .long   _kernel_vecter127
+                               .long   _kernel_vecter128
+                               .long   _kernel_vecter129
+                               .long   _kernel_vecter130
+                               .long   _kernel_vecter131
+                               .long   _kernel_vecter132
+                               .long   _kernel_vecter133
+                               .long   _kernel_vecter134
+                               .long   _kernel_vecter135
+                               .long   _kernel_vecter136
+                               .long   _kernel_vecter137
+                               .long   _kernel_vecter138
+                               .long   _kernel_vecter139
+                               .long   _kernel_vecter140
+                               .long   _kernel_vecter141
+                               .long   _kernel_vecter142
+                               .long   _kernel_vecter143
+                               .long   _kernel_vecter144
+                               .long   _kernel_vecter145
+                               .long   _kernel_vecter146
+                               .long   _kernel_vecter147
+                               .long   _kernel_vecter148
+                               .long   _kernel_vecter149
+                               .long   _kernel_vecter150
+                               .long   _kernel_vecter151
+                               .long   _kernel_vecter152
+                               .long   _kernel_vecter153
+                               .long   _kernel_vecter154
+                               .long   _kernel_vecter155
+                               .long   _kernel_vecter156
+
+
+
+                               .end
+
+
+/* ------------------------------------------------------------------------ */
+/*  Copyright (C) 1998-2002 by Project HOS                                  */
+/* ------------------------------------------------------------------------ */
diff --git a/sample/sh/sh7144/main.c b/sample/sh/sh7144/main.c
new file mode 100755 (executable)
index 0000000..a05b33c
--- /dev/null
@@ -0,0 +1,27 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  main.c
+ * @brief %jp{メイン関数}%en{main}
+ *
+ * @version $Id: main.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "kernel.h"
+
+
+/** %jp{メイン関数} */
+int main()
+{
+       /** %jp{カーネルの動作開始} */
+       vsta_knl();
+       
+       return 0;
+}
+
+
+/* end of file */
diff --git a/sample/sh/sh7144/ostimer.c b/sample/sh/sh7144/ostimer.c
new file mode 100755 (executable)
index 0000000..e53e761
--- /dev/null
@@ -0,0 +1,57 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  ostimer.c
+ * @brief %jp{OSタイマ}%en{OS timer}
+ *
+ * @version $Id: ostimer.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "kernel.h"
+#include "ostimer.h"
+#include "regs_sh7144.h"
+
+
+#define INHNO_OSTIMER                  144                                                     /**< %jp{割り込みハンドラ番号} */
+#define PERIPHERAL_CLOCK               (24000000UL)                            /**< %jp{ペリフェラルクロック(24MHz)} */
+
+
+static void OsTimer_IrqHandler(void);                                          /**< %jp{タイマ割り込みハンドラ} */
+
+
+/** %jp{OS用タイマ初期化ルーチン} */
+void OsTimer_Initialize(VP_INT exinf)
+{
+       T_DINH dfinh;
+       
+       /* %jp{割り込みハンドラ定義} */
+       dfinh.inthdr = (FP)OsTimer_IrqHandler;
+       def_inh(INHNO_OSTIMER, &dfinh);
+       
+       /* %jp{タイマ動作開始} */
+       *REG_STANDBY_MSTCR2 &= 0xefff;
+       *REG_CMT_CMSTR  &= 0xfffe;                                                              /* %jp{動作停止} */
+       *REG_CMT0_CMCNT  = 0x0000;                                                              /* %jp{カウンタクリア} */
+       *REG_CMT0_CMCOR  = (PERIPHERAL_CLOCK / 128) / 1000;             /* %jp{1msに設定} */
+       *REG_CMT0_CMCSR  = 0x0042;                                                              /* %jp{128分周に設定} */
+       *REG_CMT_CMSTR  |= 0x0001;                                                              /* %jp{動作開始} */
+       
+       /* %jp{割り込み許可} */
+       *REG_INTC_IPRG = ((*REG_INTC_IPRG & 0xff0f) | 0x0010);
+}
+
+
+/** %jp{タイマ割り込みハンドラ} */
+void OsTimer_IrqHandler(void)
+{
+       *REG_CMT0_CMCSR &= 0xff7f;
+       
+       isig_tim();
+}
+
+
+/* end of file */
diff --git a/sample/sh/sh7144/ostimer.h b/sample/sh/sh7144/ostimer.h
new file mode 100755 (executable)
index 0000000..26cc6aa
--- /dev/null
@@ -0,0 +1,33 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  ostimer.c
+ * @brief %jp{OSタイマ}%en{OS timer}
+ *
+ * @version $Id: ostimer.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __ostimer_h__
+#define __ostimer_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** %jp{OS用タイマ初期化ルーチン} */
+void OsTimer_Initialize(VP_INT exinf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __ostimer_h__ */
+
+
+/* end of file */
diff --git a/sample/sh/sh7144/regs_sh7144.h b/sample/sh/sh7144/regs_sh7144.h
new file mode 100755 (executable)
index 0000000..e7c9771
--- /dev/null
@@ -0,0 +1,284 @@
+/* SH7144 レジスタ定義ファイル */
+
+
+
+#ifndef __sh7144_regs_h__
+#define __sh7144_regs_h__
+
+
+/* SCI0 */
+#define        REG_SCI0_SMR            ((volatile UB*)0xffff81a0)              /* シリアルモードレジスタ_0 */
+#define        REG_SCI0_BRR            ((volatile UB*)0xffff81a1)              /* ビットレートレジスタ_0 */
+#define        REG_SCI0_SCR            ((volatile UB*)0xffff81a2)              /* シリアルコントロールレジスタ_0 */
+#define        REG_SCI0_TDR            ((volatile UB*)0xffff81a3)              /* トランスミットデータレジスタ_0 */
+#define        REG_SCI0_SSR            ((volatile UB*)0xffff81a4)              /* シリアルステータスレジスタ_0 */
+#define        REG_SCI0_RDR            ((volatile UB*)0xffff81a5)              /* レシーブデータレジスタ_0 */
+#define        REG_SCI0_SDCR           ((volatile UB*)0xffff81a6)              /* シリアルディレクションコントロールレジスタ_0 */
+
+/* SCI1 */
+#define        REG_SCI1_SMR            ((volatile UB*)0xffff81b0)              /* シリアルモードレジスタ_1 */
+#define        REG_SCI1_BRR            ((volatile UB*)0xffff81b1)              /* ビットレートレジスタ_1 */
+#define        REG_SCI1_SCR            ((volatile UB*)0xffff81b2)              /* シリアルコントロールレジスタ_1 */
+#define        REG_SCI1_TDR            ((volatile UB*)0xffff81b3)              /* トランスミットデータレジスタ_1 */
+#define        REG_SCI1_SSR            ((volatile UB*)0xffff81b4)              /* シリアルステータスレジスタ_1 */
+#define        REG_SCI1_RDR            ((volatile UB*)0xffff81b5)              /* レシーブデータレジスタ_1 */
+#define        REG_SCI1_SDCR           ((volatile UB*)0xffff81b6)              /* シリアルディレクションコントロールレジスタ_1 */
+
+/* SCI2 */
+#define        REG_SCI2_SMR            ((volatile UB*)0xffff81c0)              /* シリアルモードレジスタ_2 */
+#define        REG_SCI2_BRR            ((volatile UB*)0xffff81c1)              /* ビットレートレジスタ_2 */
+#define        REG_SCI2_SCR            ((volatile UB*)0xffff81c2)              /* シリアルコントロールレジスタ_2 */
+#define        REG_SCI2_TDR            ((volatile UB*)0xffff81c3)              /* トランスミットデータレジスタ_2 */
+#define        REG_SCI2_SSR            ((volatile UB*)0xffff81c4)              /* シリアルステータスレジスタ_2 */
+#define        REG_SCI2_RDR            ((volatile UB*)0xffff81c5)              /* レシーブデータレジスタ_2 */
+#define        REG_SCI2_SDCR           ((volatile UB*)0xffff81c6)              /* シリアルディレクションコントロールレジスタ_2 */
+
+/* SCI3 */
+#define        REG_SCI3_SMR            ((volatile UB*)0xffff81d0)              /* シリアルモードレジスタ_3 */
+#define        REG_SCI3_BRR            ((volatile UB*)0xffff81d1)              /* ビットレートレジスタ_3 */
+#define        REG_SCI3_SCR            ((volatile UB*)0xffff81d2)              /* シリアルコントロールレジスタ_3 */
+#define        REG_SCI3_TDR            ((volatile UB*)0xffff81d3)              /* トランスミットデータレジスタ_3 */
+#define        REG_SCI3_SSR            ((volatile UB*)0xffff81d4)              /* シリアルステータスレジスタ_3 */
+#define        REG_SCI3_RDR            ((volatile UB*)0xffff81d5)              /* レシーブデータレジスタ_3 */
+#define        REG_SCI3_SDCR           ((volatile UB*)0xffff81d6)              /* シリアルディレクションコントロールレジスタ_3 */
+
+/* MTU 3,4 */
+#define        REG_MTU3_TCR            ((volatile UB*)0xffff8200)              /* タイマコントロールレジスタ_3 */
+#define        REG_MTU4_TCR            ((volatile UB*)0xffff8201)              /* タイマコントロールレジスタ_4 */
+#define        REG_MTU3_TMDR           ((volatile UB*)0xffff8202)              /* タイマモードレジスタ_3 */
+#define        REG_MTU4_TMDR           ((volatile UB*)0xffff8203)              /* タイマモードレジスタ_4 */
+#define        REG_MTU3_TIORH          ((volatile UB*)0xffff8204)              /* タイマI/O コントロールレジスタH_3 */
+#define        REG_MTU3_TIORL          ((volatile UB*)0xffff8205)              /* タイマI/O コントロールレジスタL_3 */
+#define        REG_MTU4_TIORH          ((volatile UB*)0xffff8206)              /* タイマI/O コントロールレジスタH_4 */
+#define        REG_MTU4_TIORL          ((volatile UB*)0xffff8207)              /* タイマI/O コントロールレジスタL_4 */
+#define        REG_MTU3_TIER           ((volatile UB*)0xffff8208)              /* タイマインタラプトイネーブルレジスタ_3 */
+#define        REG_MTU4_TIER           ((volatile UB*)0xffff8209)              /* タイマインタラプトイネーブルレジスタ_4 */
+#define        REG_MTU_TOER            ((volatile UB*)0xffff820a)              /* タイマアウトプットマスタイネーブルレジスタ */
+#define        REG_MTU_TOCR            ((volatile UB*)0xffff820b)              /* タイマアウトプットコントロールレジスタ */
+#define        REG_MTU_TGCR            ((volatile UB*)0xffff820d)              /* タイマゲートコントロールレジスタ */
+#define        REG_MTU3_TCNT           ((volatile UH*)0xffff8210)              /* タイマカウンタ_3 */
+#define        REG_MTU4_TCNT           ((volatile UH*)0xffff8212)              /* タイマカウンタ_4 */
+#define        REG_MTU_TCDR            ((volatile UH*)0xffff8214)              /* タイマ周期データレジスタ */
+#define        REG_MTU_TDDR            ((volatile UH*)0xffff8216)              /* タイマデッドタイムデータレジスタ */
+#define        REG_MTU3_TGRA           ((volatile UH*)0xffff8218)              /* タイマジェネラルレジスタA_3 */
+#define        REG_MTU3_TGRB           ((volatile UH*)0xffff821a)              /* タイマジェネラルレジスタB_3 */
+#define        REG_MTU4_TGRA           ((volatile UH*)0xffff821c)              /* タイマジェネラルレジスタA_4 */
+#define        REG_MTU4_TGRB           ((volatile UH*)0xffff821e)              /* タイマジェネラルレジスタB_4 */
+#define        REG_MTU_TCNTS           ((volatile UH*)0xffff8220)              /* タイマサブカウンタ */
+#define        REG_MTU_TCBR            ((volatile UH*)0xffff8222)              /* タイマ周期バッファレジスタ */
+#define        REG_MTU3_TGRC           ((volatile UH*)0xffff8224)              /* タイマジェネラルレジスタC_3 */
+#define        REG_MTU3_TGRD           ((volatile UH*)0xffff8226)              /* タイマジェネラルレジスタD_3 */
+#define        REG_MTU4_TGRC           ((volatile UH*)0xffff8228)              /* タイマジェネラルレジスタC_4 */
+#define        REG_MTU4_TGRD           ((volatile UH*)0xffff822a)              /* タイマジェネラルレジスタD_4 */
+#define        REG_MTU3_TSR            ((volatile UB*)0xffff822c)              /* タイマステータスレジスタ_3 */
+#define        REG_MTU4_TSR            ((volatile UB*)0xffff822d)              /* タイマステータスレジスタ_4 */
+
+/* MTU(common) */
+#define        REG_MTU_TSTR            ((volatile UB*)0xffff8240)              /* タイマスタートレジスタ */
+#define        REG_MTU_TSYR            ((volatile UB*)0xffff8241)              /* タイマシンクロレジスタ */
+
+/* MTU0 */
+#define        REG_MTU0_TCR            ((volatile UB*)0xffff8260)              /* タイマコントロールレジスタ_0 */
+#define        REG_MTU0_TMDR           ((volatile UB*)0xffff8261)              /* タイマモードレジスタ_0 */
+#define        REG_MTU0_TIORH          ((volatile UB*)0xffff8262)              /* タイマI/OコントロールレジスタH_0 */
+#define        REG_MTU0_TIORL          ((volatile UB*)0xffff8263)              /* タイマI/OコントロールレジスタL_0 */
+#define        REG_MTU0_TIER           ((volatile UB*)0xffff8264)              /* タイマインタラプトイネーブルレジスタ_0 */
+#define        REG_MTU0_TSR            ((volatile UB*)0xffff8265)              /* タイマステータスレジスタ_0 */
+#define        REG_MTU0_TCNT           ((volatile UH*)0xffff8266)              /* タイマカウンタ_0 */
+#define        REG_MTU0_TGRA           ((volatile UH*)0xffff8268)              /* タイマジェネラルレジスタA_0 */
+#define        REG_MTU0_TGRB           ((volatile UH*)0xffff826a)              /* タイマジェネラルレジスタB_0 */
+#define        REG_MTU0_TGRC           ((volatile UH*)0xffff826c)              /* タイマジェネラルレジスタC_0 */
+#define        REG_MTU0_TGRD           ((volatile UH*)0xffff826e)              /* タイマジェネラルレジスタD_0 */
+
+/* MTU1 */
+#define        REG_MTU1_TCR            ((volatile UB*)0xffff8280)              /* タイマコントロールレジスタ_1 */
+#define        REG_MTU1_TMDR           ((volatile UB*)0xffff8281)              /* タイマモードレジスタ_1 */
+#define        REG_MTU1_TIOR           ((volatile UB*)0xffff8282)              /* タイマI/Oコントロールレジスタ_1 */
+#define        REG_MTU1_TIER           ((volatile UB*)0xffff8284)              /* タイマインタラプトイネーブルレジスタ_1 */
+#define        REG_MTU1_TSR            ((volatile UB*)0xffff8285)              /* タイマステータスレジスタ_1 */
+#define        REG_MTU1_TCNT           ((volatile UH*)0xffff8286)              /* タイマカウンタ_1 */
+#define        REG_MTU1_TGRA           ((volatile UH*)0xffff8288)              /* タイマジェネラルレジスタA_1 */
+#define        REG_MTU1_TGRB           ((volatile UH*)0xffff828a)              /* タイマジェネラルレジスタB_1 */
+
+/* MTU2 */
+#define        REG_MTU2_TCR            ((volatile UB*)0xffff82a0)              /* タイマコントロールレジスタ_2 */
+#define        REG_MTU2_TMDR           ((volatile UB*)0xffff82a1)              /* タイマモードレジスタ_2 */
+#define        REG_MTU2_TIOR           ((volatile UB*)0xffff82a2)              /* タイマI/O コントロールレジスタ_2 */
+#define        REG_MTU2_TIER           ((volatile UB*)0xffff82a4)              /* タイマインタラプトイネーブルレジスタ_2 */
+#define        REG_MTU2_TSR            ((volatile UB*)0xffff82a5)              /* タイマステータスレジスタ_2 */
+#define        REG_MTU2_TCNT           ((volatile UH*)0xffff82a6)              /* タイマカウンタ_2 */
+#define        REG_MTU2_TGRA           ((volatile UH*)0xffff82a8)              /* タイマジェネラルレジスタA_2 */
+#define        REG_MTU2_TGRB           ((volatile UH*)0xffff82aa)              /* タイマジェネラルレジスタB_2 */
+
+/* INTC */
+#define        REG_INTC_IPRA           ((volatile UH*)0xffff8348)              /* インタラプトプライオリティレジスタA */
+#define        REG_INTC_IPRB           ((volatile UH*)0xffff834a)              /* インタラプトプライオリティレジスタB */
+#define        REG_INTC_IPRC           ((volatile UH*)0xffff834c)              /* インタラプトプライオリティレジスタC */
+#define        REG_INTC_IPRD           ((volatile UH*)0xffff834e)              /* インタラプトプライオリティレジスタD */
+#define        REG_INTC_IPRE           ((volatile UH*)0xffff8350)              /* インタラプトプライオリティレジスタE */
+#define        REG_INTC_IPRF           ((volatile UH*)0xffff8352)              /* インタラプトプライオリティレジスタF */
+#define        REG_INTC_IPRG           ((volatile UH*)0xffff8354)              /* インタラプトプライオリティレジスタG */
+#define        REG_INTC_IPRH           ((volatile UH*)0xffff8356)              /* インタラプトプライオリティレジスタH */
+#define        REG_INTC_ICR1           ((volatile UH*)0xffff8358)              /* 割り込みコントロールレジスタ1 */
+#define        REG_INTC_ISR            ((volatile UH*)0xffff835a)              /* IRQステータスレジスタ */
+#define        REG_INTC_IPRI           ((volatile UH*)0xffff835c)              /* インタラプトプライオリティレジスタI */
+#define        REG_INTC_IPRJ           ((volatile UH*)0xffff835e)              /* インタラプトプライオリティレジスタJ */
+#define        REG_INTC_ICR2           ((volatile UH*)0xffff8366)              /* 割り込みコントロールレジスタ2 */
+
+/* I/O, PFC (port-A) */
+#define        REG_PA_DR                       ((volatile UW*)0xffff8380)              /* ポートA データレジスタ(H/L) */
+#define        REG_PA_DRH                      ((volatile UH*)0xffff8380)              /* ポートA データレジスタH */
+#define        REG_PA_DRL                      ((volatile UH*)0xffff8382)              /* ポートA データレジスタL */
+#define        REG_PFC_PAIORH          ((volatile UH*)0xffff8384)              /* ポートA IOレジスタH */
+#define        REG_PFC_PAIORL          ((volatile UH*)0xffff8386)              /* ポートA IOレジスタL */
+#define        REG_PFC_PACRH           ((volatile UH*)0xffff8388)              /* ポートAコントロールレジスタH */
+#define        REG_PFC_PACRL1          ((volatile UH*)0xffff8388)              /* ポートAコントロールレジスタL1 */
+#define        REG_PFC_PACRL2          ((volatile UH*)0xffff8388)              /* ポートAコントロールレジスタL2 */
+
+/* I/O, PFC (port-B, C) */
+#define        REG_PB_DR                       ((volatile UH*)0xffff8388)              /* ポートB データレジスタ */
+#define        REG_PC_DR                       ((volatile UH*)0xffff8388)              /* ポートC データレジスタ */
+#define        REG_PFC_PBIOR           ((volatile UH*)0xffff8394)              /* ポートB IOレジスタ */
+#define        REG_PFC_PCIOR           ((volatile UH*)0xffff8396)              /* ポートC IOレジスタ */
+#define        REG_PFC_PBCR1           ((volatile UH*)0xffff8398)              /* ポートBコントロールレジスタ1 */
+#define        REG_PFC_PBCR2           ((volatile UH*)0xffff839a)              /* ポートBコントロールレジスタ2 */
+#define        REG_PFC_PCCR            ((volatile UH*)0xffff839c)              /* ポートCコントロールレジスタ2 */
+
+/* I/O, PFC (port-D) */
+#define        REG_PD_DR                       ((volatile UW*)0xffff83a0)              /* ポートD・データレジスタ(H/L) */
+#define        REG_PD_DRH                      ((volatile UH*)0xffff83a0)              /* ポートD・データレジスタH */
+#define        REG_PD_DRL                      ((volatile UH*)0xffff83a2)              /* ポートD・データレジスタL */
+#define        REG_PFC_PDIORH          ((volatile UH*)0xffff83a4)              /* ポートD・IOレジスタH */
+#define        REG_PFC_PDIORL          ((volatile UH*)0xffff83a6)              /* ポートD・IOレジスタL */
+#define        REG_PFC_PDCRH1          ((volatile UH*)0xffff83a8)              /* ポートDコントロールレジスタH1 */
+#define        REG_PFC_PDCRH2          ((volatile UH*)0xffff83aa)              /* ポートDコントロールレジスタH2 */
+#define        REG_PFC_PDCRL1          ((volatile UH*)0xffff83ac)              /* ポートDコントロールレジスタL1 */
+#define        REG_PFC_PDCRL2          ((volatile UH*)0xffff83ae)              /* ポートDコントロールレジスタL2 */
+
+/* I/O, PFC (port-E, F) */
+#define        REG_PE_DRL                      ((volatile UH*)0xffff83b0)              /* ポートE データレジスタL */
+#define        REG_PF_DR                       ((volatile UB*)0xffff83b3)              /* ポートF データレジスタ */
+#define        REG_PFC_PEIORL          ((volatile UH*)0xffff83b4)              /* ポートE IO レジスタL */
+#define        REG_PFC_PECRL1          ((volatile UH*)0xffff83b8)              /* ポートE コントロールレジスタL1 */
+#define        REG_PFC_PECRL2          ((volatile UH*)0xffff83ba)              /* ポートE コントロールレジスタL2 */
+
+/* POE */
+#define        REG_POE_ICSR1           ((volatile UH*)0xffff83c0)              /* 入力レベルコントロール/ステータスレジスタ1 */
+#define        REG_POE_OCSR            ((volatile UH*)0xffff83c2)              /* 出力レベルコントロール/ステータスレジスタ */
+
+/* CMT */
+#define        REG_CMT_CMSTR           ((volatile UH*)0xffff83d0)              /* コンペアマッチタイマスタートレジスタ */
+#define        REG_CMT0_CMCSR          ((volatile UH*)0xffff83d2)              /* コンペアマッチタイマコントロール/ステータスレジスタ_0 */
+#define        REG_CMT0_CMCNT          ((volatile UH*)0xffff83d4)              /* コンペアマッチタイマカウンタ_0 */
+#define        REG_CMT0_CMCOR          ((volatile UH*)0xffff83d6)              /* コンペアマッチタイマコンスタントレジスタ_0 */
+#define        REG_CMT1_CMCSR          ((volatile UH*)0xffff83d8)              /* コンペアマッチタイマコントロール/ステータスレジスタ_1 */
+#define        REG_CMT1_CMCNT          ((volatile UH*)0xffff83da)              /* コンペアマッチタイマカウンタ_1 */
+#define        REG_CMT1_CMCOR          ((volatile UH*)0xffff83dc)              /* コンペアマッチタイマコンスタントレジスタ_1 */
+
+/* AD */
+#define        REG_AD0_ADDR0           ((volatile UH*)0xffff8420)              /* A/Dデータレジスタ0 */
+#define        REG_AD0_ADDR1           ((volatile UH*)0xffff8422)              /* A/Dデータレジスタ1 */
+#define        REG_AD0_ADDR2           ((volatile UH*)0xffff8424)              /* A/Dデータレジスタ2 */
+#define        REG_AD0_ADDR3           ((volatile UH*)0xffff8426)              /* A/Dデータレジスタ3 */
+#define        REG_AD1_ADDR4           ((volatile UH*)0xffff8428)              /* A/Dデータレジスタ4 */
+#define        REG_AD1_ADDR5           ((volatile UH*)0xffff842a)              /* A/Dデータレジスタ5 */
+#define        REG_AD1_ADDR6           ((volatile UH*)0xffff842c)              /* A/Dデータレジスタ6 */
+#define        REG_AD1_ADDR7           ((volatile UH*)0xffff842e)              /* A/Dデータレジスタ7 */
+#define        REG_AD0_ADCSR           ((volatile UB*)0xffff8480)              /* A/Dコントロール/ステータスレジスタ_0 */
+#define        REG_AD1_ADCSR           ((volatile UB*)0xffff8481)              /* A/Dコントロール/ステータスレジスタ_1 */
+#define        REG_AD0_ADCR            ((volatile UB*)0xffff8488)              /* A/Dコントロールレジスタ_0 */
+#define        REG_AD1_ADCR            ((volatile UB*)0xffff8489)              /* A/Dコントロールレジスタ_1 */
+
+/* FLASH */
+#define        REG_FLASH_FLMCR1        ((volatile UB*)0xffff8580)              /* フラッシュメモリコントロールレジスタ1 */
+#define        REG_FLASH_FLMCR2        ((volatile UB*)0xffff8581)              /* フラッシュメモリコントロールレジスタ2 */
+#define        REG_FLASH_EBR1          ((volatile UB*)0xffff8582)              /* 消去ブロック指定レジスタ1 */
+#define        REG_FLASH_EBR2          ((volatile UB*)0xffff8583)              /* 消去ブロック指定レジスタ2 */
+
+/* UBC */
+#define        REG_UBC_UBARH           ((volatile UH*)0xffff8600)              /* ユーザブレークアドレスレジスタH */
+#define        REG_UBC_UBARL           ((volatile UH*)0xffff8602)              /* ユーザブレークアドレスレジスタL */
+#define        REG_UBC_UBAMRH          ((volatile UH*)0xffff8604)              /* ユーザブレークアドレスマスクレジスタH */
+#define        REG_UBC_UBAMRL          ((volatile UH*)0xffff8606)              /* ユーザブレークアドレスマスクレジスタL */
+#define        REG_UBC_UBBR            ((volatile UH*)0xffff8608)              /* ユーザブレークバスサイクルレジスタ */
+#define        REG_UBC_UBCR            ((volatile UH*)0xffff860a)              /* ユーザブレークコントロールレジスタ */
+
+/* WDT */
+#define        REG_WDT_TCSR            ((volatile UB*)0xffff8610)              /* タイマコントロール/ステータスレジスタ */
+#define        REG_WDT_TCNT_W          ((volatile UB*)0xffff8610)              /* タイマカウンタ(Read) */
+#define        REG_WDT_TCNT_R          ((volatile UB*)0xffff8611)              /* タイマカウンタ(Write) */
+#define        REG_WDT_RSTCSR_1        ((volatile UB*)0xffff8612)              /* リセットコントロール/ステータスレジスタ */
+#define        REG_WDT_RSTCSR_2        ((volatile UB*)0xffff8613)              /* リセットコントロール/ステータスレジスタ */
+
+/* Standby*/
+#define        REG_STANDBY_SBYCR       ((volatile UB*)0xffff8614)              /* スタンバイコントロールレジスタ */
+#define        REG_STANDBY_SYSCR       ((volatile UB*)0xffff8618)              /* システムコントロールレジスタ */
+#define        REG_STANDBY_MSTCR1      ((volatile UH*)0xffff861c)              /* モジュールスタンバイコントロールレジスタ1 */
+#define        REG_STANDBY_MSTCR2      ((volatile UH*)0xffff861e)              /* モジュールスタンバイコントロールレジスタ2 */
+
+/* BSC */
+#define        REG_BSC_BCR1            ((volatile UH*)0xffff8620)              /* バスコントロールレジスタ1 */
+#define        REG_BSC_BCR2            ((volatile UH*)0xffff8622)              /* バスコントロールレジスタ2 */
+#define        REG_BSC_WCR1            ((volatile UH*)0xffff8624)              /* ウェイトコントロールレジスタ1 */
+#define        REG_BSC_WCR2            ((volatile UH*)0xffff8626)              /* ウェイトコントロールレジスタ2 */
+
+/* FLASH */
+#define        REG_FLASH_RAMER         ((volatile UH*)0xffff8628)              /* RAMエミュレーションレジスタ */
+
+/* DMA */
+#define        REG_DMA_DMAOR           ((volatile UH*)0xffff86b0)              /* DMAオペレーションレジスタ */
+#define        REG_DMA0_SAR            ((volatile UW*)0xffff86c0)              /* DMAソースアドレスレジスタ_0 */
+#define        REG_DMA0_DAR            ((volatile UW*)0xffff86c4)              /* DMAデスティネーションアドレスレジスタ_0 */
+#define        REG_DMA0_DMATCR         ((volatile UW*)0xffff86c8)              /* DMAトランスファカウントレジスタ_0 */
+#define        REG_DMA0_CHCR           ((volatile UW*)0xffff86cc)              /* DMAチャネルコントロールレジスタ_0 */
+#define        REG_DMA1_SAR            ((volatile UW*)0xffff86d0)              /* DMAソースアドレスレジスタ_1 */
+#define        REG_DMA1_DAR            ((volatile UW*)0xffff86d4)              /* DMAデスティネーションアドレスレジスタ_1 */
+#define        REG_DMA1_DMATCR         ((volatile UW*)0xffff86d8)              /* DMAトランスファカウントレジスタ_1 */
+#define        REG_DMA1_CHCR           ((volatile UW*)0xffff86dc)              /* DMAチャネルコントロールレジスタ_1 */
+#define        REG_DMA2_SAR            ((volatile UW*)0xffff86e0)              /* DMAソースアドレスレジスタ_2 */
+#define        REG_DMA2_DAR            ((volatile UW*)0xffff86e4)              /* DMAデスティネーションアドレスレジスタ_2 */
+#define        REG_DMA2_DMATCR         ((volatile UW*)0xffff86e8)              /* DMAトランスファカウントレジスタ_2 */
+#define        REG_DMA2_CHCR           ((volatile UW*)0xffff86ec)              /* DMAチャネルコントロールレジスタ_2 */
+#define        REG_DMA3_SAR            ((volatile UW*)0xffff86f0)              /* DMAソースアドレスレジスタ_3 */
+#define        REG_DMA3_DAR            ((volatile UW*)0xffff86f4)              /* DMAデスティネーションアドレスレジスタ_3 */
+#define        REG_DMA3_DMATCR         ((volatile UW*)0xffff86f8)              /* DMAトランスファカウントレジスタ_3 */
+#define        REG_DMA3_CHCR           ((volatile UW*)0xffff86fc)              /* DMAチャネルコントロールレジスタ_3 */
+
+/* DTC */
+#define        REG_DTC_DTEA            ((volatile UB*)0xffff8700)              /* DTCイネーブルレジスタA */
+#define        REG_DTC_DTEB            ((volatile UB*)0xffff8701)              /* DTCイネーブルレジスタB */
+#define        REG_DTC_DTEC            ((volatile UB*)0xffff8702)              /* DTCイネーブルレジスタC */
+#define        REG_DTC_DTED            ((volatile UB*)0xffff8703)              /* DTCイネーブルレジスタD */
+#define        REG_DTC_DTCSR           ((volatile UH*)0xffff8706)              /* DTCコントロール/ステータスレジスタ */
+#define        REG_DTC_DTBR            ((volatile UH*)0xffff8708)              /* DTC情報ベースレジスタ */
+#define        REG_DTC_DTEE            ((volatile UB*)0xffff8710)              /* DTCイネーブルレジスタE */
+#define        REG_DTC_DTEG            ((volatile UB*)0xffff8712)              /* DTCイネーブルレジスタG */
+
+/* IIC */
+#define        REG_IIC_SCRX            ((volatile UB*)0xffff87f0)              /* シリアルコントロールレジスタX */
+
+/* AD */
+#define        REG_AD_ADTSR            ((volatile UB*)0xffff87f4)              /* ADトリガセレクトレジスタ */
+
+/* Port-E */
+#define        REG_PE_PPCR                     ((volatile UB*)0xffff87f8)              /* 大電流ポートコントロールレジスタ */
+
+/* IIC */
+#define        REG_IIC_ICCR            ((volatile UB*)0xffff87f8)              /* IICバスコントロールレジスタ */
+#define        REG_IIC_ICSR            ((volatile UB*)0xffff87f8)              /* IICバスステータスレジスタ */
+#define        REG_IIC_ICDR            ((volatile UB*)0xffff87f8)              /* IICバスデータレジスタ */
+#define        REG_IIC_SARX            ((volatile UB*)0xffff87f8)              /* 第2スレーブアドレスレジスタ */
+#define        REG_IIC_ICMR            ((volatile UB*)0xffff87f8)              /* IICバスモードレジスタ */
+#define        REG_IIC_SAR             ((volatile UB*)0xffff87f8)              /* スレーブアドレスレジスタ */
+
+/* H-UDI */
+#define        REG_HUDI_SDIR           ((volatile UH*)0xffff8a50)              /* インストラクションレジスタ */
+#define        REG_HUDI_SDSR           ((volatile UH*)0xffff8a52)              /* ステータスレジスタ */
+#define        REG_HUDI_SDDRH          ((volatile UH*)0xffff8a54)              /* データレジスタH */
+#define        REG_HUDI_SDDRL          ((volatile UH*)0xffff8a56)              /* データレジスタL */
+
+
+#endif /* __sh7144_regs_h__ */
+
+
+/* end of file */
diff --git a/sample/sh/sh7144/sample.c b/sample/sh/sh7144/sample.c
new file mode 100755 (executable)
index 0000000..60ec222
--- /dev/null
@@ -0,0 +1,178 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  sample.c
+ * @brief %jp{サンプルプログラム}%en{Sample program}
+ *
+ * @version $Id: sample.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "kernel.h"
+#include "kernel_id.h"
+#include "sci1.h"
+
+
+#define LEFT(num)      ((num) <= 1 ? 5 : (num) - 1)
+#define RIGHT(num)     ((num) >= 5 ? 1 : (num) + 1)
+
+
+ID mbxid;
+ID mpfid;
+
+
+/*const VP _kernel_int_isp = (VP)0xfffffff0;*/
+
+
+/* void sim_puts(void *addr); */
+
+
+
+/** %jp{メッセージ構造体} */
+typedef struct t_print_msg
+{
+       T_MSG msg;
+       char  text[32];
+} T_PRINT_MSG;
+
+
+/** %jp{初期化ハンドラ} */
+void Sample_Initialize(VP_INT exinf)
+{
+       T_CMPF cmpf;
+       T_CMBX cmbx;
+       
+       /* %jp{固定長メモリプール生成} */
+       cmpf.mpfatr = TA_TFIFO;                                 
+       cmpf.blkcnt = 3;                                                
+       cmpf.blksz  = sizeof(T_PRINT_MSG);              
+       cmpf.mpf    = NULL;                                             
+       mpfid = acre_mpf(&cmpf);
+
+       /* %jp{メールボックス生成} */
+       cmbx.mbxatr  = TA_TFIFO | TA_TFIFO;             
+       cmbx.maxmpri = 1;                                               
+       cmbx.mprihd  = NULL;                                    
+       mbxid = acre_mbx(&cmbx);
+
+       /* %jp{タスク起動} */
+       act_tsk(TSKID_PRINT);
+       act_tsk(TSKID_SAMPLE1);
+       act_tsk(TSKID_SAMPLE2);
+       act_tsk(TSKID_SAMPLE3);
+       act_tsk(TSKID_SAMPLE4);
+       act_tsk(TSKID_SAMPLE5);
+}
+
+
+/** %jp{適当な時間待つ} */
+void rand_wait(void)
+{
+       dly_tsk(rand() % 1000 + 100);   
+}
+
+
+/** %jp{状態表示} */
+void print_state(int num, char *text)
+{
+       T_PRINT_MSG *msg;
+       VP  mem;
+       
+       /* %jp{メモリ取得} */
+       get_mpf(mpfid, &mem);
+       msg = (T_PRINT_MSG *)mem;
+
+       /* %jp{文字列生成} */
+       msg->text[0] = '0' + num;
+       msg->text[1] = ' ';
+       msg->text[2] = ':';
+       msg->text[3] = ' ';
+       strcpy(&msg->text[4], text);
+       strcat(msg->text, "\n");
+       
+       /* %jp{表示タスクに送信} */
+       snd_mbx(mbxid, (T_MSG *)msg);
+}
+
+
+/** %jp{サンプルタスク} */
+void Sample_Task(VP_INT exinf)
+{
+       char buf[16];
+       int  num;
+
+       num = (int)exinf;
+       
+       print_state(num, "start");
+
+       /* %jp{いわゆる哲学者の食事の問題} */
+       for ( ; ; )
+       {
+               /* %jp{適当な時間考える} */
+               print_state(num, "thinking");
+               rand_wait();
+
+               /* %jp{左右のフォークを取るまでループ} */
+               for ( ; ; )
+               {
+                       /* %jp{左から順に取る} */
+                       wai_sem(LEFT(num));
+                       if ( pol_sem(RIGHT(num)) == E_OK )
+                       {
+                               break;  /* %jp{両方取れた} */
+                       }
+                       sig_sem(LEFT(num));     /* %jp{取れなければ離す} */
+                       
+                       /* %jp{適当な時間待つ} */
+                       print_state(num, "hungry");
+                       rand_wait();
+
+                       /* %jp{右から順に取る} */
+                       wai_sem(RIGHT(num));
+                       if ( pol_sem(LEFT(num)) == E_OK )
+                       {
+                               break;  /* %jp{両方取れた} */
+                       }
+                       sig_sem(RIGHT(num));    /* %jp{取れなければ離す} */
+
+                       /* %jp{適当な時間待つ} */
+                       print_state(num, "hungry");
+                       rand_wait();
+               }
+               
+               /* %jp{適当な時間、食べる} */
+               print_state(num, "eating");
+               rand_wait();
+               
+               /* %jp{フォークを置く} */
+               sig_sem(LEFT(num));
+               sig_sem(RIGHT(num));
+       }
+}
+
+
+/** %jp{表示タスク} */
+void Sample_Print(VP_INT exinf)
+{
+       T_PRINT_MSG *msg;
+       
+       Sci1_Initialize();
+       
+       for ( ; ; )
+       {
+               rcv_mbx(mbxid, (T_MSG **)&msg);
+/*             sim_puts(msg->text);    */
+               Sci1_PutString(msg->text);
+               rel_mpf(mpfid, msg);
+       }
+}
+
+
+
+
+
+
+/* end of file */
diff --git a/sample/sh/sh7144/sample.h b/sample/sh/sh7144/sample.h
new file mode 100755 (executable)
index 0000000..aa5a5cc
--- /dev/null
@@ -0,0 +1,35 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  sample.c
+ * @brief %jp{サンプルプログラム}%en{Sample program}
+ *
+ * @version $Id: sample.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef __sample_h__
+#define __sample_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void Sample_Initialize(VP_INT exinf);
+void Sample_Task(VP_INT exinf);
+void Sample_Print(VP_INT exinf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __sample_h__ */
+
+
+/* end of file */
diff --git a/sample/sh/sh7144/sci1.c b/sample/sh/sh7144/sci1.c
new file mode 100755 (executable)
index 0000000..74ad484
--- /dev/null
@@ -0,0 +1,60 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  sci1.c
+ * @brief %jp{SCI1への出力}%en{SCI1 device driver}
+ *
+ * @version $Id: sci1.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "kernel.h"
+#include "regs_sh7144.h"
+
+
+/* %jp{SCI1 の初期化} */
+void Sci1_Initialize(void)
+{
+       *REG_STANDBY_MSTCR1 &= ~0x0002; /* %jp{SCI1のスタンバイモードを解除} */
+       *REG_SCI1_SCR    = 0;
+       *REG_SCI1_SMR    = 0;
+       *REG_SCI1_BRR    = 19;                  /* %jp{ボーレート設定(38400bps)} */
+       *REG_PFC_PACRL2 |= 0x0100;              /* %jp{端子設定} */
+       *REG_SCI1_SCR   |= 0x20;                /* %jp{送信許可} */
+}
+
+/* %jp{1文字出力} */
+void Sci1_PutChar(int c)
+{
+       while ( ((*REG_SCI1_SSR) & 0x80) != 0x80 )
+               ;
+       
+       *REG_SCI1_TDR = (UB)c;
+       
+       *REG_SCI1_SSR &= 0x7f;
+}
+
+/* %jp{文字列出力} */
+void Sci1_PutString(const char *text)
+{
+       while ( *text != '\0' )
+       {
+               if ( *text == '\n' )
+               {
+                       Sci1_PutChar('\r');
+                       Sci1_PutChar('\n');
+               }
+               else
+               {
+                       Sci1_PutChar(*text);
+               }
+               
+               text++;
+       }
+}
+
+
+/* end of file */
diff --git a/sample/sh/sh7144/sci1.h b/sample/sh/sh7144/sci1.h
new file mode 100755 (executable)
index 0000000..51cdcac
--- /dev/null
@@ -0,0 +1,34 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  sci1.h
+ * @brief %jp{SCI1への出力}%en{SCI1 device driver}
+ *
+ * @version $Id: sci1.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __ostimer_h__
+#define __ostimer_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void Sci1_Initialize(void);                                    /* %jp{SCI1 の初期化} */
+void Sci1_PutChar(int c);                                      /* %jp{1文字出力} */
+void Sci1_PutString(const char *text);         /* %jp{文字列出力} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __ostimer_h__ */
+
+
+/* end of file */
diff --git a/sample/sh/sh7144/shc/dbsct.c b/sample/sh/sh7144/shc/dbsct.c
new file mode 100755 (executable)
index 0000000..64b463b
--- /dev/null
@@ -0,0 +1,21 @@
+/* _INITSCT でセクション初期化をする為のテーブル */
+
+#pragma section $DSEC
+static const struct {
+    unsigned char *rom_s;
+    unsigned char *rom_e;
+    unsigned char *ram_s;
+}   DTBL[] = {
+    { __sectop("D"), __secend("D"), __sectop("R") }
+};
+
+#pragma section $BSEC
+static const struct {
+    unsigned char *b_s;
+    unsigned char *b_e;
+}   BTBL[] = {
+    { __sectop("B"), __secend("B") }
+};
+
+
+/* end of file */
diff --git a/sample/sh/sh7144/shc/gmake.mak b/sample/sh/sh7144/shc/gmake.mak
new file mode 100755 (executable)
index 0000000..e6642ee
--- /dev/null
@@ -0,0 +1,111 @@
+
+
+TARGET ?= sample.abs
+
+INC_DIR = ../../../../kernel/include
+
+# Tools
+CC     = shc
+ASM    = asmsh
+LINK   = optlnk
+DEPEND = depend
+LINT   = splint
+AWK    = gawk
+
+CFLAGS = -CPu=sh2 -I=$(INC_DIR)
+AFLAGS = -CPu=sh2 
+LFLAGS = 
+
+ifeq ($DEBUG),Yes)
+OS_LIBS = ../../../../kernel/build/sh/sh2/shc/libhosv4adbg.lib
+AFLAGS += -DEBug
+CFLAGS += -DEBug -OP=0
+else
+OS_LIBS = ../../../../kernel/build/sh/sh2/shc/libhosv4a.lib
+AFLAGS += 
+CFLAGS += -OP=1
+endif
+
+OS_CFG  = ../../../../cfgrtr/build/gcc/h4acfg-sh2.exe
+
+
+OBJS_DIR = objs
+
+OBJS  = $(OBJS_DIR)/vcttbl.obj         \
+        $(OBJS_DIR)/dbsct.obj          \
+        $(OBJS_DIR)/startup.obj                \
+        $(OBJS_DIR)/kernel_cfg.obj     \
+        $(OBJS_DIR)/main.obj           \
+        $(OBJS_DIR)/sample.obj         \
+        $(OBJS_DIR)/ostimer.obj
+
+# シミュレータ有効時、SCI出力を入れ替える
+ifeq ($(SIM),Yes)
+OBJS += $(OBJS_DIR)/sim_io.obj
+else
+OBJS += $(OBJS_DIR)/sci1.obj
+endif
+
+
+STD_LIBS = stdlib.lib
+
+VPATH = ..
+
+all: mkdir_objs mk_kernel $(TARGET)
+
+
+# メモリ配置
+ifeq ($(ROM),Yes)
+SECTION_VECT ?= 000000000
+SECTION_ROM  ?= 000000400
+SECTION_RAM  ?= 0FFFFE000
+else
+SECTION_VECT ?= 000400000
+SECTION_ROM  ?= 000400400
+SECTION_RAM  ?= 000410000
+endif
+
+
+$(TARGET): $(OBJS) $(STD_LIBS) $(OS_LIBS)
+       echo rom D=R                         > $(OBJS_DIR)/subcmd.txt
+       echo list sample.map                >> $(OBJS_DIR)/subcmd.txt
+       echo SHow SY,R,X                    >> $(OBJS_DIR)/subcmd.txt
+       echo -Input=$(OBJS) | sed "s/ /,/g" >> $(OBJS_DIR)/subcmd.txt
+       echo -LIB=$(OS_LIBS),$(STD_LIBS)    >> $(OBJS_DIR)/subcmd.txt
+       echo "-start=VECTTBL/$(SECTION_VECT),P,C,C\$$BSEC,C\$$DSEC,D/$(SECTION_ROM),B,R/$(SECTION_RAM),S/0FFFFFBF0" >> $(OBJS_DIR)/subcmd.txt
+       echo -output=$(TARGET)              >> $(OBJS_DIR)/subcmd.txt
+       echo end                            >> $(OBJS_DIR)/subcmd.txt
+       echo -input=$(TARGET)               >> $(OBJS_DIR)/subcmd.txt
+       echo form stype                     >> $(OBJS_DIR)/subcmd.txt
+       echo output sample.mot              >> $(OBJS_DIR)/subcmd.txt
+       echo -exit                          >> $(OBJS_DIR)/subcmd.txt
+       $(RM) -f $(TARGET)
+       $(LINK) -SU=$(OBJS_DIR)/subcmd.txt
+
+$(STD_LIBS):
+       lbgsh -OUTPut=$(STD_LIBS) $(CFLAGS)
+#      lbgsh -OUTPut=$(STD_LIBS) $(CFLAGS) -REent
+
+mk_kernel:
+       make -C ../../../../kernel/build/sh/sh2/shc -f gmake.mak
+
+mkdir_objs:
+       @mkdir -p $(OBJS_DIR)
+
+clean:
+       rm -f $(OBJS) $(TARGET) ../kernel_cfg.c ../kernel_id.h
+
+../kernel_cfg.c ../kernel_id.h: ../system.cfg
+       cpp -E ../system.cfg ../system.i
+       $(OS_CFG) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h
+
+
+$(OBJS_DIR)/sample.obj: ../kernel_id.h
+
+$(OBJS_DIR)/%.obj :: %.c
+       $(CC) $(CFLAGS) $< -OB=$@ -List=$(@:%.obj=%.lst)
+
+$(OBJS_DIR)/%.obj :: %.src
+       $(ASM) $(AFLAGS) $< -OB=$@
+
+
diff --git a/sample/sh/sh7144/shc/readme.txt b/sample/sh/sh7144/shc/readme.txt
new file mode 100755 (executable)
index 0000000..3f69dd9
--- /dev/null
@@ -0,0 +1,35 @@
+sh7144用サンプル
+
+
+<概要>
+  お題は例によって、「哲学者の食事の問題」 (^^;
+
+
+<環境>
+  ボード:Interface 2006年6月号付録基板+メモリ増設環境
+  ソフト:当方ルネサスのモニタプログラムをROMに焼いてます。
+          (つまりは 外部SRAM(0x00400000)からベクタを配置です)
+
+  コンパイラ:ルネサスの評価版コンパイラ
+          (現時点で SH SERIES C/C++ Compiler V.9.00.02.001)
+
+  メイク:cygwinからGNU makeを使用
+          (すいません、そのうち nmake とかの対応も考えます...)
+  シリアル:38400bps 8bit ノンパリ ストップビット1bit でよいかと。
+
+
+<使い方>
+  cygwin で
+
+    hos-v4a/sample/sh/sh7144/shc
+
+  に移動して、gmake -f gmake.mak
+
+  とうつ
+
+  出来上がった、sample.abs なり、sample.mot なりをメモリにロードして
+実行開始。
+  5人の哲学者がそれぞれ、考えたり、腹減ったり、飯くったりする様子が
+シリアルに表示されれば成功です。
+
+
diff --git a/sample/sh/sh7144/shc/sim_io.src b/sample/sh/sh7144/shc/sim_io.src
new file mode 100755 (executable)
index 0000000..b5b3ca3
--- /dev/null
@@ -0,0 +1,41 @@
+; SCI出力をルネサスのシミュレータ用のIO出力に切り替えるファイル
+
+
+                               .EXPORT         _Sci1_Initialize
+                               .EXPORT         _Sci1_PutString
+
+
+                               .SECTION        P, CODE, ALIGN=4
+_Sci1_Initialize:
+                               rts
+                               nop
+
+
+_Sci1_PutString:
+                               mov.l   addr_fno_fputs, r0
+                               xor.l   r2, r2
+                               mov.l   addr_sim_param, r1
+                               mov.l   r4, @r1
+                               jsr             @r2
+                               nop
+                               rts
+                               nop
+
+
+                               .ALIGN          4
+addr_fno_fputs:
+                               .DATA.L         h'01240000
+
+addr_sim_param:
+                               .DATA.L         sim_param
+
+
+                               .SECTION        B, DATA, ALIGN=4
+sim_param:
+                               .RES.L          1
+
+
+                               .END
+
+
+; end of file
diff --git a/sample/sh/sh7144/shc/startup.src b/sample/sh/sh7144/shc/startup.src
new file mode 100755 (executable)
index 0000000..6686945
--- /dev/null
@@ -0,0 +1,35 @@
+
+                               .EXPORT         _ResetHandler
+                               .IMPORT     __INITSCT
+                               .IMPORT     _main
+
+                               .SECTION    VECTTBL, DATA, ALIGN=4 
+
+                               .SECTION        P, CODE, ALIGN=4
+_ResetHandler: 
+                               mov.l   addr_VECTTBL, r1
+                               mov.l   addr_INITSCT, r0
+                               jsr             @r0
+                               ldc             r1, VBR
+                               
+                               mov.l   addr_main, r0
+                               jsr             @r0
+                               nop
+                               sleep
+                               
+                               
+                               .ALIGN          4
+addr_VECTTBL:
+                               .DATA.L         STARTOF VECTTBL
+addr_INITSCT:
+                               .DATA.L         __INITSCT
+addr_main:
+                               .DATA.L         _main
+                               
+
+                               .SECTION        S, STACK, ALIGN=4
+                               .RES.B          1024
+
+
+                               .END            _ResetHandler
+
diff --git a/sample/sh/sh7144/shc/vcttbl.src b/sample/sh/sh7144/shc/vcttbl.src
new file mode 100755 (executable)
index 0000000..1caa984
--- /dev/null
@@ -0,0 +1,274 @@
+
+
+
+                               .IMPORT     _ResetHandler                               ; リセットベクタ
+                               .IMPORT         __kernel_vector_dmy                     ; ダミーベクタ
+                               .IMPORT         __kernel_vector_144                     ; ベクタ255
+
+
+
+                               .SECTION    VECTTBL, DATA, ALIGN=4 
+
+_Vectors:
+                               .DATA.L         _ResetHandler                           ; ベクタ0
+                               .DATA.L         STARTOF S + SIZEOF S            ; ベクタ1
+                               .DATA.L         _ResetHandler                           ; ベクタ2
+                               .DATA.L         STARTOF S + SIZEOF S            ; ベクタ3
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ4
+                               .DATA.L         0                                                       ; ベクタ5
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ6
+                               .DATA.L         0                                                       ; ベクタ7
+                               .DATA.L         h'c91f0606                                      ; ベクタ8
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ9
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ10
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ11
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ12
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ13
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ14
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ15
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ16
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ17
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ18
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ19
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ20
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ21
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ22
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ23
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ24
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ25
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ26
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ27
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ28
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ29
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ30
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ31
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ32
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ33
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ34
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ35
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ36
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ37
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ38
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ39
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ40
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ41
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ42
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ43
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ44
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ45
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ46
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ47
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ48
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ49
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ50
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ51
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ52
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ53
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ54
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ55
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ56
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ57
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ58
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ59
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ60
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ61
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ62
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ63
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ64
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ65
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ66
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ67
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ68
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ69
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ70
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ71
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ72
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ73
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ74
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ75
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ76
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ77
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ78
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ79
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ80
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ81
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ82
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ83
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ84
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ85
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ86
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ87
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ88
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ89
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ90
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ91
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ92
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ93
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ94
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ95
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ96
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ97
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ98
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ99
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ100
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ101
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ102
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ103
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ104
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ105
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ106
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ107
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ108
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ109
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ110
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ111
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ112
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ113
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ114
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ115
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ116
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ117
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ118
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ119
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ120
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ121
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ122
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ123
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ124
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ125
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ126
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ127
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ128
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ129
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ130
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ131
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ132
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ133
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ134
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ135
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ136
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ137
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ138
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ139
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ140
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ141
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ142
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ143
+                               .DATA.L         __kernel_vector_144                     ; ベクタ144 (CMT0)
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ145
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ146
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ147
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ148
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ149
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ150
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ151
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ152
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ153
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ154
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ155
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ156
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ157
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ158
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ159
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ160
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ161
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ162
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ163
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ164
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ165
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ166
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ167
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ168
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ169
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ170
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ171
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ172
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ173
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ174
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ175
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ176
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ177
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ178
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ179
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ180
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ181
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ182
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ183
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ184
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ185
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ186
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ187
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ188
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ189
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ190
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ191
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ192
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ193
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ194
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ195
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ196
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ197
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ198
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ199
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ200
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ201
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ202
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ203
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ204
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ205
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ206
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ207
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ208
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ209
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ210
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ211
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ212
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ213
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ214
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ215
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ216
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ217
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ218
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ219
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ220
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ221
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ222
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ223
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ224
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ225
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ226
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ227
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ228
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ229
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ230
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ231
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ232
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ233
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ234
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ235
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ236
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ237
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ238
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ239
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ240
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ241
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ242
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ243
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ244
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ245
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ246
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ247
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ248
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ249
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ250
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ251
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ252
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ253
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ254
+                               .DATA.L         __kernel_vector_dmy                     ; ベクタ255
+
+
+                               .SECTION    S, STACK, ALIGN=4 
+
+
+                               .END
diff --git a/sample/sh/sh7144/system.cfg b/sample/sh/sh7144/system.cfg
new file mode 100755 (executable)
index 0000000..8673096
--- /dev/null
@@ -0,0 +1,41 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  system.cfg
+ * @brief %jp{サンプルのコンフィギュレーション}
+ *
+ * @version $Id: system.cfg,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+/* %jp{カーネル独自の設定}%en{kernel} */
+KERNEL_HEP_MEM(1024, NULL);
+KERNEL_INT_STK(512, NULL);
+KERNEL_MAX_TSKID(16);
+KERNEL_MAX_SEMID(16);
+
+
+/* %jp{OSタイマの設定}%en{OS timer} */
+INCLUDE("\"ostimer.h\"");
+ATT_INI({TA_HLNG, 0, OsTimer_Initialize});
+
+/* %jp{サンプル}%en{Sample program} */
+INCLUDE("\"sample.h\"");
+ATT_INI({TA_HLNG, 0, Sample_Initialize});
+CRE_TSK(TSKID_PRINT,   {TA_HLNG, 1, Sample_Print, 1, 256, NULL});
+CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 256, NULL});
+CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 256, NULL});
+CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 256, NULL});
+CRE_TSK(TSKID_SAMPLE4, {TA_HLNG, 4, Sample_Task, 2, 256, NULL});
+CRE_TSK(TSKID_SAMPLE5, {TA_HLNG, 5, Sample_Task, 2, 256, NULL});
+CRE_SEM(1, {TA_TFIFO, 1, 1});
+CRE_SEM(2, {TA_TFIFO, 1, 1});
+CRE_SEM(3, {TA_TFIFO, 1, 1});
+CRE_SEM(4, {TA_TFIFO, 1, 1});
+CRE_SEM(5, {TA_TFIFO, 1, 1});
+
+
+/* end of file */
diff --git a/sample/win/win32/gcc/gmake.mak b/sample/win/win32/gcc/gmake.mak
new file mode 100755 (executable)
index 0000000..26abd91
--- /dev/null
@@ -0,0 +1,57 @@
+
+
+TARGET ?= sample.exe
+
+INC_DIR = ../../../../kernel/include
+
+# Tools
+CC     = gcc
+ASM    = gcc
+LINK   = gcc
+DEPEND = gcc -M
+LINT   = splint
+AWK    = gawk
+
+CFLAGS = -c -g -O0 -Wall -I$(INC_DIR)
+AFLAGS = -c -g
+LFLAGS = 
+
+OBJS_DIR = objs
+
+OBJS = $(OBJS_DIR)/main.o                      \
+       $(OBJS_DIR)/sample.o                    \
+       $(OBJS_DIR)/ostimer.o           \
+       $(OBJS_DIR)/wintimer.o          \
+       $(OBJS_DIR)/kernel_cfg.o
+
+OS_LIBS = ../../../../kernel/build/win/win32/gcc/libhosv4a.a
+OS_CFG  = ../../../../cfgrtr/build/gcc/h4acfg-win32.exe
+
+VPATH = ..
+
+all: mkdir_objs mk_kernel $(TARGET)
+
+
+$(TARGET): $(OBJS)
+       $(LINK) $(LFLAGS) $(OBJS) $(OS_LIBS) -lwinmm -o $(TARGET)
+
+mk_kernel:
+       make -C ../../../../kernel/build/win/win32/gcc -f gmake.mak
+
+mkdir_objs:
+       @mkdir -p $(OBJS_DIR)
+
+clean:
+       rm -f $(OBJS) $(TARGET) ../kernel_cfg.c ../kernel_id.h
+
+../kernel_cfg.c ../kernel_id.h: ../system.cfg
+       cpp -E ../system.cfg ../system.i
+       $(OS_CFG) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h
+
+
+$(OBJS_DIR)/sample.o: ../kernel_id.h
+
+$(OBJS_DIR)/%.o :: %.c
+       $(CC) $(CFLAGS) -c $< -o $@
+
+
diff --git a/sample/win/win32/main.c b/sample/win/win32/main.c
new file mode 100755 (executable)
index 0000000..a05b33c
--- /dev/null
@@ -0,0 +1,27 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  main.c
+ * @brief %jp{メイン関数}%en{main}
+ *
+ * @version $Id: main.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "kernel.h"
+
+
+/** %jp{メイン関数} */
+int main()
+{
+       /** %jp{カーネルの動作開始} */
+       vsta_knl();
+       
+       return 0;
+}
+
+
+/* end of file */
diff --git a/sample/win/win32/ostimer.c b/sample/win/win32/ostimer.c
new file mode 100755 (executable)
index 0000000..5f769df
--- /dev/null
@@ -0,0 +1,46 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  ostimer.c
+ * @brief %jp{OSタイマ}%en{OS timer}
+ *
+ * @version $Id: ostimer.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "kernel.h"
+#include "ostimer.h"
+#include "wintimer.h"
+
+
+#define OSTIMER_TIMER_INHNO            1                       /**< %jp{割り込みハンドラ番号} */
+
+
+static void OsTimer_IrqHandler(void);          /**< %jp{タイマ割り込みハンドラ} */
+
+
+/** %jp{OS用タイマ初期化ルーチン} */
+void OsTimer_Initialize(VP_INT exinf)
+{
+       T_DINH dfinh;
+       
+       /* %jp{割り込みハンドラ定義} */
+       dfinh.inthdr = (FP)OsTimer_IrqHandler;
+       def_inh(OSTIMER_TIMER_INHNO, &dfinh);
+       
+       /* %jp{タイマ動作開始} */
+       WinTimer_Start(OSTIMER_TIMER_INHNO, 10);
+}
+
+
+/** %jp{タイマ割り込みハンドラ} */
+void OsTimer_IrqHandler(void)
+{
+       isig_tim();
+}
+
+
+/* end of file */
diff --git a/sample/win/win32/ostimer.h b/sample/win/win32/ostimer.h
new file mode 100755 (executable)
index 0000000..26cc6aa
--- /dev/null
@@ -0,0 +1,33 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  ostimer.c
+ * @brief %jp{OSタイマ}%en{OS timer}
+ *
+ * @version $Id: ostimer.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __ostimer_h__
+#define __ostimer_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/** %jp{OS用タイマ初期化ルーチン} */
+void OsTimer_Initialize(VP_INT exinf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __ostimer_h__ */
+
+
+/* end of file */
diff --git a/sample/win/win32/sample.c b/sample/win/win32/sample.c
new file mode 100755 (executable)
index 0000000..d1e89d0
--- /dev/null
@@ -0,0 +1,159 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  sample.c
+ * @brief %jp{サンプルプログラム}%en{Sample program}
+ *
+ * @version $Id: sample.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include <stdio.h>
+#include <stdlib.h>
+#include "kernel.h"
+#include "kernel_id.h"
+#include "wintimer.h"
+
+
+#define LEFT(num)      ((num) <= 1 ? 5 : (num) - 1)
+#define RIGHT(num)     ((num) >= 5 ? 1 : (num) + 1)
+
+
+ID mbxid;
+ID mpfid;
+
+
+/** %jp{メッセージ構造体} */
+typedef struct t_print_msg
+{
+       T_MSG msg;
+       char  text[32];
+} T_PRINT_MSG;
+
+
+/** %jp{初期化ハンドラ} */
+void Sample_Initialize(VP_INT exinf)
+{
+       T_CMPF cmpf;
+       T_CMBX cmbx;
+       
+       /* %jp{固定長メモリプール生成} */
+       cmpf.mpfatr = TA_TFIFO;                                 
+       cmpf.blkcnt = 3;                                                
+       cmpf.blksz  = sizeof(T_PRINT_MSG);              
+       cmpf.mpf    = NULL;                                             
+       mpfid = acre_mpf(&cmpf);
+
+       /* %jp{メールボックス生成} */
+       cmbx.mbxatr  = TA_TFIFO | TA_TFIFO;             
+       cmbx.maxmpri = 1;                                               
+       cmbx.mprihd  = NULL;                                    
+       mbxid = acre_mbx(&cmbx);
+
+       /* %jp{タスク起動} */
+       act_tsk(TSKID_PRINT);
+       act_tsk(TSKID_SAMPLE1);
+       act_tsk(TSKID_SAMPLE2);
+       act_tsk(TSKID_SAMPLE3);
+       act_tsk(TSKID_SAMPLE4);
+       act_tsk(TSKID_SAMPLE5);
+}
+
+
+/** %jp{適当な時間待つ} */
+void rand_wait(void)
+{
+       dly_tsk(rand() % 100 + 1);      
+}
+
+
+/** %jp{状態表示} */
+void print_state(int num, char *text)
+{
+       T_PRINT_MSG *msg;
+       VP  mem;
+       
+       /* %jp{メモリ取得} */
+       get_mpf(mpfid, &mem);
+       msg = (T_PRINT_MSG *)mem;
+
+       /* %jp{文字列生成} */
+       sprintf(msg->text, "%d : %s", num, text);
+
+       /* %jp{表示タスクに送信} */
+       snd_mbx(mbxid, (T_MSG *)msg);
+}
+
+
+/** %jp{サンプルタスク} */
+void Sample_Task(VP_INT exinf)
+{
+       int num;
+
+       num = (int)exinf;
+
+       /* %jp{いわゆる哲学者の食事の問題} */
+       for ( ; ; )
+       {
+               /* %jp{適当な時間考える} */
+               print_state(num, "thinking");
+               rand_wait();
+
+               /* %jp{左右のフォークを取るまでループ} */
+               for ( ; ; )
+               {
+                       /* %jp{左から順に取る} */
+                       wai_sem(LEFT(num));
+                       if ( pol_sem(RIGHT(num)) == E_OK )
+                       {
+                               break;  /* %jp{両方取れた} */
+                       }
+                       sig_sem(LEFT(num));     /* %jp{取れなければ離す} */
+                       
+                       /* %jp{適当な時間待つ} */
+                       print_state(num, "hungry");
+                       rand_wait();
+
+                       /* %jp{右から順に取る} */
+                       wai_sem(RIGHT(num));
+                       if ( pol_sem(LEFT(num)) == E_OK )
+                       {
+                               break;  /* %jp{両方取れた} */
+                       }
+                       sig_sem(RIGHT(num));    /* %jp{取れなければ離す} */
+
+                       /* %jp{適当な時間待つ} */
+                       print_state(num, "hungry");
+                       rand_wait();
+               }
+               
+               /* %jp{適当な時間、食べる} */
+               print_state(num, "eating");
+               rand_wait();
+               
+               /* %jp{フォークを置く} */
+               sig_sem(LEFT(num));
+               sig_sem(RIGHT(num));
+       }
+}
+
+
+/** %jp{表示タスク} */
+void Sample_Print(VP_INT exinf)
+{
+       T_PRINT_MSG *msg;
+
+       for ( ; ; )
+       {
+               rcv_mbx(mbxid, (T_MSG **)&msg);
+               printf("%s\n", msg->text);
+               rel_mpf(mpfid, msg);
+       }
+}
+
+
+
+/* end of file */
diff --git a/sample/win/win32/sample.h b/sample/win/win32/sample.h
new file mode 100755 (executable)
index 0000000..aa5a5cc
--- /dev/null
@@ -0,0 +1,35 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  sample.c
+ * @brief %jp{サンプルプログラム}%en{Sample program}
+ *
+ * @version $Id: sample.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef __sample_h__
+#define __sample_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void Sample_Initialize(VP_INT exinf);
+void Sample_Task(VP_INT exinf);
+void Sample_Print(VP_INT exinf);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __sample_h__ */
+
+
+/* end of file */
diff --git a/sample/win/win32/system.cfg b/sample/win/win32/system.cfg
new file mode 100755 (executable)
index 0000000..91b5abd
--- /dev/null
@@ -0,0 +1,41 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  system.cfg
+ * @brief %jp{サンプルのコンフィギュレーション}
+ *
+ * @version $Id: system.cfg,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+/* %jp{カーネル独自の設定}%en{kernel} */
+KERNEL_HEP_MEM(65536, NULL);
+KERNEL_INT_STK(4096, NULL);
+KERNEL_MAX_TSKID(16);
+KERNEL_MAX_SEMID(16);
+
+
+/* %jp{OSタイマの設定}%en{OS timer} */
+INCLUDE("\"ostimer.h\"");
+ATT_INI({TA_HLNG, 0, OsTimer_Initialize});
+
+/* %jp{サンプル}%en{Sample program} */
+INCLUDE("\"sample.h\"");
+ATT_INI({TA_HLNG, 0, Sample_Initialize});
+CRE_TSK(TSKID_PRINT,   {TA_HLNG, 1, Sample_Print, 1, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE4, {TA_HLNG, 4, Sample_Task, 2, 1024, NULL});
+CRE_TSK(TSKID_SAMPLE5, {TA_HLNG, 5, Sample_Task, 2, 1024, NULL});
+CRE_SEM(1, {TA_TFIFO, 1, 1});
+CRE_SEM(2, {TA_TFIFO, 1, 1});
+CRE_SEM(3, {TA_TFIFO, 1, 1});
+CRE_SEM(4, {TA_TFIFO, 1, 1});
+CRE_SEM(5, {TA_TFIFO, 1, 1});
+
+
+/* end of file */
diff --git a/sample/win/win32/vc60/cfg.bat b/sample/win/win32/vc60/cfg.bat
new file mode 100755 (executable)
index 0000000..c68a0d9
--- /dev/null
@@ -0,0 +1,4 @@
+cd ..
+cl /E system.cfg > system.i
+..\..\..\cfgrtr\build\vc60\Debug\h4acfg.exe
+pause
diff --git a/sample/win/win32/vc60/sample.dsp b/sample/win/win32/vc60/sample.dsp
new file mode 100755 (executable)
index 0000000..32e4d09
--- /dev/null
@@ -0,0 +1,137 @@
+# Microsoft Developer Studio Project File - Name="sample" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** \95Ò\8fW\82µ\82È\82¢\82Å\82­\82¾\82³\82¢ **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=sample - Win32 Debug\r
+!MESSAGE \82±\82ê\82Í\97L\8cø\82ÈÒ²¸Ì§²Ù\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81\82±\82ÌÌßÛ¼Þª¸Ä\82ðËÞÙÄÞ\82·\82é\82½\82ß\82É\82Í NMAKE \82ð\8eg\97p\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+!MESSAGE [Ò²¸Ì§²Ù\82Ì´¸½Îß°Ä] ºÏÝÄÞ\82ð\8eg\97p\82µ\82Ä\8eÀ\8ds\82µ\82Ä\82­\82¾\82³\82¢\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "sample.mak".\r
+!MESSAGE \r
+!MESSAGE NMAKE \82Ì\8eÀ\8ds\8e\9e\82É\8d\\90¬\82ð\8ew\92è\82Å\82«\82Ü\82·\r
+!MESSAGE ºÏÝÄޠײÝ\8fã\82ÅϸÛ\82Ì\90Ý\92è\82ð\92è\8b`\82µ\82Ü\82·\81B\97á:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "sample.mak" CFG="sample - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE \91I\91ð\89Â\94\\82ÈËÞÙÄÞ Ó°ÄÞ:\r
+!MESSAGE \r
+!MESSAGE "sample - Win32 Release" ("Win32 (x86) Console Application" \97p)\r
+!MESSAGE "sample - Win32 Debug" ("Win32 (x86) Console Application" \97p)\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "sample - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /W3 /GX /O2 /I "../../../../kernel/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x411 /d "NDEBUG"\r
+# ADD RSC /l 0x411 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "sample - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Ignore_Export_Lib 0\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /MTd /W3 /Gm /GX /ZI /Od /I "../../../../kernel/include" /D "_CONSOLE" /D "WIN32" /D "_DEBUG" /D "_MBCS" /YX /FD /D /GZ /c\r
+# ADD BASE RSC /l 0x411 /d "_DEBUG"\r
+# ADD RSC /l 0x411 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib winmm.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "sample - Win32 Release"\r
+# Name "sample - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=..\kernel_cfg.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\main.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\ostimer.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\sample.c\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\wintimer.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# Begin Source File\r
+\r
+SOURCE=..\kernel_id.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\ostimer.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\sample.h\r
+# End Source File\r
+# Begin Source File\r
+\r
+SOURCE=..\wintimer.h\r
+# End Source File\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# Begin Source File\r
+\r
+SOURCE=..\system.cfg\r
+# End Source File\r
+# End Target\r
+# End Project\r
diff --git a/sample/win/win32/vc60/sample.dsw b/sample/win/win32/vc60/sample.dsw
new file mode 100755 (executable)
index 0000000..6e8d891
--- /dev/null
@@ -0,0 +1,59 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# \8cx\8d\90\82±\82ÌÜ°¸½Íß°½ Ì§²Ù \82ð\95Ò\8fW\82Ü\82½\82Í\8dí\8f\9c\82µ\82È\82¢\82Å\82­\82¾\82³\82¢!\r
+\r
+###############################################################################\r
+\r
+Project: "h4acfg"="..\..\..\..\cfgrtr\build\vc60\h4acfg.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "hosv4a"="..\..\..\..\kernel\build\win\win32\vc60\hosv4a.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "sample"=".\sample.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+    Begin Project Dependency\r
+    Project_Dep_Name hosv4a\r
+    End Project Dependency\r
+    Begin Project Dependency\r
+    Project_Dep_Name h4acfg\r
+    End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
diff --git a/sample/win/win32/wintimer.c b/sample/win/win32/wintimer.c
new file mode 100755 (executable)
index 0000000..92714a3
--- /dev/null
@@ -0,0 +1,62 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  wintimer.c
+ * @brief %jp{Windows用のタイマ}%en{Windows timer object}
+ *
+ * @version $Id: wintimer.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+/** %jp{Windows ヘッダファイルの読みこみ} */
+#define SIZE  WIN_SIZE
+#include <windows.h>
+#undef  SIZE
+
+#include "kernel.h"
+#include "wintimer.h"
+#include "arch/proc/win/win32/proc.h"
+
+
+static DWORD WINAPI WinTimer_Thread(LPVOID param);             /**< %jp{タイマ割り込み用スレッド関数} */
+static HANDLE hEventTimer;                                                             /**< %jp{タイマハンドル} */
+
+
+/** %jp{OS用タイマの初期化} */
+void WinTimer_Start(INHNO inhno, int iInterval)
+{
+       DWORD dwThreadId;
+               
+       /* %jp{タイマ用イベントの作成} */
+       hEventTimer = CreateEvent(NULL, FALSE, FALSE, NULL);
+       
+       /* %jp{マルチメディアタイマの開始} */
+       timeSetEvent(iInterval, 1, (LPTIMECALLBACK)hEventTimer, 0, TIME_PERIODIC | TIME_CALLBACK_EVENT_PULSE);
+       
+       /* %jp{スレッド生成} */
+       CreateThread(NULL, 0, WinTimer_Thread, (LPVOID)inhno, 0, &dwThreadId);
+}
+
+
+/** %jp{タイマ割り込み用スレッド関数} */
+DWORD WINAPI WinTimer_Thread(LPVOID param)
+{
+       INHNO inhno;
+       
+       inhno = (INHNO)param;
+
+       for ( ; ; )
+       {
+               /* %jp{タイマイベントを待つ} */
+               WaitForSingleObject(hEventTimer, INFINITE);
+
+               /* %jp{割り込みシグナルを入れる} */
+               vsig_int(inhno);
+       }
+}
+
+
+/* end of file */
diff --git a/sample/win/win32/wintimer.h b/sample/win/win32/wintimer.h
new file mode 100755 (executable)
index 0000000..491f3b8
--- /dev/null
@@ -0,0 +1,35 @@
+/** 
+ *  Sample program for Hyper Operating System V4 Advance
+ *
+ * @file  wintimer.h
+ * @brief %jp{Windows用のタイマ}%en{Windows timer object}
+ *
+ * @version $Id: wintimer.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+
+#ifndef __wintimer_h__
+#define __wintimer_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void WinTimer_Start(INHNO inhno, int iInterval);       /** %jp{タイマ動作開始} */
+
+#ifdef __cplusplus
+}
+#endif
+
+
+
+#endif /* __wintimer_h__ */
+
+
+
+/* end of file */
diff --git a/test/que/test_que.c b/test/que/test_que.c
new file mode 100755 (executable)
index 0000000..323552c
--- /dev/null
@@ -0,0 +1,487 @@
+/* ------------------------------------------------------------------------ */
+/*  Hyper Operating System V4  μITRON4.0仕様 Real-Time OS                  */
+/*  μカーネル キュー の単体テストモジュール                                */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2006 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+
+#include <stdio.h>
+#include "kernel.h"
+#include "arch/proc/win/win32/procatr.h"
+#include "arch/proc/win/win32/proc.h"
+#include "arch/irc/none/ircatr.h"
+#include "arch/irc/none/irc.h"
+#include "config/cfgknl.h"
+#include "parser/parsknl.h"
+#include "core/opttyp.h"
+#include "object/tskobj.h"
+#include "config/cfgerr.h"
+#include "parser/parserr.h"
+
+
+
+#include <assert.h>
+#define TEST_ASSERT(a)         assert(a)
+
+int que_test(void);
+
+
+int main()
+{
+       que_test();
+
+       printf("OK\n");
+
+       return 0;
+}
+
+
+#define TEST_QUE_NUM   6
+
+static _KERNEL_T_QUE test_que; 
+
+
+#if _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_BLKARRAY          /* %en{block array}%jp{TCBを単純配列で管理} */
+
+_KERNEL_T_TCB _kernel_tcb_tbl[TEST_QUE_NUM];                   /* %jp{タスクコントロールブロックのポインタを配列で持つ} */
+
+#elif _KERNEL_TCB_ALGORITHM == _KERNEL_TCB_ALG_PTRARRAY                /* pointer array */
+
+
+_KERNEL_T_TCB test_tcb[TEST_QUE_NUM];
+_KERNEL_T_TCB *_kernel_tcb_tbl[TEST_QUE_NUM] =         /* %jp{タスクコントロールブロックのポインタを配列で持つ} */
+       {
+               &test_tcb[0],
+               &test_tcb[1],
+               &test_tcb[2],
+               &test_tcb[3],
+               &test_tcb[4],
+               &test_tcb[5],
+       };
+
+#endif
+
+
+
+/* キューが全部外れていることをチェック */
+BOOL check_que_empty(void)
+{
+       _KERNEL_T_TSKHDL tskhdl;
+       int i;
+
+       if ( _KERNEL_REF_QUE(&test_que) != _KERNEL_TSKHDL_NULL )
+       {
+               return FALSE;           /* 異常 */
+       }
+
+       for ( i = 1; i <= TEST_QUE_NUM; i++ )
+       {
+               tskhdl = _KERNEL_TSK_ID2TSKHDL(i);
+
+               if ( _KERNEL_TSK_GET_QUE(tskhdl) != NULL )
+               {
+                       return FALSE;   /* 異常 */
+               }
+       }
+
+       return TRUE;
+}
+
+
+
+int que_test(void)
+{
+       _KERNEL_T_TSKHDL tskhdl;
+
+       /* Initialize */
+       _KERNEL_CRE_QUE(&test_que);
+
+       _KERNEL_TSK_SET_QUE   (_KERNEL_TSK_ID2TSKHDL(1), NULL);
+       _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(1), 1);
+       _KERNEL_TSK_SET_QUE   (_KERNEL_TSK_ID2TSKHDL(2), NULL);
+       _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(2), 2);
+       _KERNEL_TSK_SET_QUE   (_KERNEL_TSK_ID2TSKHDL(3), NULL);
+       _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(3), 3);
+       _KERNEL_TSK_SET_QUE   (_KERNEL_TSK_ID2TSKHDL(4), NULL);
+       _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(4), 1);
+       _KERNEL_TSK_SET_QUE   (_KERNEL_TSK_ID2TSKHDL(5), NULL);
+       _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(5), 2);
+       _KERNEL_TSK_SET_QUE   (_KERNEL_TSK_ID2TSKHDL(6), NULL);
+       _KERNEL_TSK_SET_TSKPRI(_KERNEL_TSK_ID2TSKHDL(6), 3);
+
+
+       /* ----------------------------- */
+       /*           FIFO順              */
+       /* ----------------------------- */
+
+       /* 1個の付け外し */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(check_que_empty());
+
+       /* 1個の付け外し(頭抜き)  */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       tskhdl = _KERNEL_RMH_QUE(&test_que);
+       TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(check_que_empty());
+
+       /* 2個の付け外し(先頭外し) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(check_que_empty());
+
+       /* 2個の付け外し(末尾外し) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(check_que_empty());
+
+       /* 2個の付け外し(頭抜き) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       tskhdl = _KERNEL_RMH_QUE(&test_que);
+       TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(1));
+       tskhdl = _KERNEL_RMH_QUE(&test_que);
+       TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(先→中→末の順で取り外し) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+       
+       /* 3個の付け外し(先→末→中の順で取り外し) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(中→先→末の順で取り外し) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(中→末→先の順で取り外し) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(末→先→中の順で取り外し) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(末→中→先の順で取り外し) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(頭抜き) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TFIFO);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       tskhdl = _KERNEL_RMH_QUE(&test_que);
+       TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(1));
+       tskhdl = _KERNEL_RMH_QUE(&test_que);
+       TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(2));
+       tskhdl = _KERNEL_RMH_QUE(&test_que);
+       TEST_ASSERT(tskhdl == _KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+
+       
+       /* ----------------------------- */
+       /*          優先度順             */
+       /* ----------------------------- */
+
+       /* 1個の付け外し */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(check_que_empty());
+
+
+       /* 2個の付け外し(優先度:1→2) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(check_que_empty());
+
+       /* 2個の付け外し(優先度:2→1) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(check_que_empty());
+
+       /* 2個の付け外し(優先度:2→2 (FIFO順になるはず)) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(5), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(5));
+       TEST_ASSERT(check_que_empty());
+       
+       /* 上の逆 */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(5), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(5));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(check_que_empty());
+
+
+       /* 3個の付け外し(優先度:1→2→3) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(優先度:1→3→2) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(優先度:2→1→3) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(優先度:2→3→1) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(優先度:3→1→2) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(優先度:3→2→1) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(同優先混ぜ:先頭) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(4), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(4));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(4));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(同優先混ぜ:中) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(5), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(5));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(check_que_empty());
+
+       /* 3個の付け外し(同優先混ぜ:末尾) */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(6), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(6));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(6));
+       TEST_ASSERT(check_que_empty());
+
+
+       /* ALL:おまけ */
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(1), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(2), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(3), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(6), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(5), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+       _KERNEL_ADD_QUE(&test_que, _KERNEL_TSK_ID2TSKHDL(4), TA_TPRI);
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(1));
+
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(1));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(4));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(4));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(2));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(2));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(5));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(5));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(3));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(3));
+       TEST_ASSERT(_KERNEL_REF_QUE(&test_que) == _KERNEL_TSK_ID2TSKHDL(6));
+       _KERNEL_TRM_QUE(_KERNEL_TSK_ID2TSKHDL(6));
+       TEST_ASSERT(check_que_empty());
+       
+       return TRUE;
+}
+
+
+
diff --git a/test/que/test_que.dsp b/test/que/test_que.dsp
new file mode 100755 (executable)
index 0000000..30097b5
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="test_que" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** \95Ò\8fW\82µ\82È\82¢\82Å\82­\82¾\82³\82¢ **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=test_que - Win32 Debug\r
+!MESSAGE \82±\82ê\82Í\97L\8cø\82ÈÒ²¸Ì§²Ù\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81\82±\82ÌÌßÛ¼Þª¸Ä\82ðËÞÙÄÞ\82·\82é\82½\82ß\82É\82Í NMAKE \82ð\8eg\97p\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+!MESSAGE [Ò²¸Ì§²Ù\82Ì´¸½Îß°Ä] ºÏÝÄÞ\82ð\8eg\97p\82µ\82Ä\8eÀ\8ds\82µ\82Ä\82­\82¾\82³\82¢\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test_que.mak".\r
+!MESSAGE \r
+!MESSAGE NMAKE \82Ì\8eÀ\8ds\8e\9e\82É\8d\\90¬\82ð\8ew\92è\82Å\82«\82Ü\82·\r
+!MESSAGE ºÏÝÄޠײÝ\8fã\82ÅϸÛ\82Ì\90Ý\92è\82ð\92è\8b`\82µ\82Ü\82·\81B\97á:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "test_que.mak" CFG="test_que - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE \91I\91ð\89Â\94\\82ÈËÞÙÄÞ Ó°ÄÞ:\r
+!MESSAGE \r
+!MESSAGE "test_que - Win32 Release" ("Win32 (x86) Console Application" \97p)\r
+!MESSAGE "test_que - Win32 Debug" ("Win32 (x86) Console Application" \97p)\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "test_que - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /W3 /GX /O2 /I "../../kernel/include" /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x411 /d "NDEBUG"\r
+# ADD RSC /l 0x411 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "test_que - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /I "../../kernel/include" /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ /c\r
+# ADD BASE RSC /l 0x411 /d "_DEBUG"\r
+# ADD RSC /l 0x411 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "test_que - Win32 Release"\r
+# Name "test_que - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=.\test_que.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/test/que/test_que.dsw b/test/que/test_que.dsw
new file mode 100755 (executable)
index 0000000..f55812e
--- /dev/null
@@ -0,0 +1,44 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# \8cx\8d\90\82±\82ÌÜ°¸½Íß°½ Ì§²Ù \82ð\95Ò\8fW\82Ü\82½\82Í\8dí\8f\9c\82µ\82È\82¢\82Å\82­\82¾\82³\82¢!\r
+\r
+###############################################################################\r
+\r
+Project: "hosv4a"="..\..\kernel\build\win\win32\vc60\hosv4a.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Project: "test_que"=".\test_que.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+    Begin Project Dependency\r
+    Project_Dep_Name hosv4a\r
+    End Project Dependency\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
diff --git a/tools/cmtcnv/cmtcnv.c b/tools/cmtcnv/cmtcnv.c
new file mode 100755 (executable)
index 0000000..5c84283
--- /dev/null
@@ -0,0 +1,181 @@
+#include <stdio.h>
+#include <string.h>
+
+
+#define BUF_SIZE                                       4096
+
+#define MAIN_ST_CODE                           0
+#define MAIN_ST_COMMENT1                       1
+#define MAIN_ST_COMMENT2                       2
+
+#define COMMENT_ST_NORMAL                      0
+#define COMMENT_ST_FILTER_CHECK                1
+#define COMMENT_ST_FILTER_OK           2
+#define COMMENT_ST_FILTER_NG           3
+
+
+char szBuf[BUF_SIZE];
+int  iBufSize      = 0;
+int  iMainState    = MAIN_ST_CODE;
+int  iCommentState = COMMENT_ST_NORMAL;
+FILE *fpIn         = stdin;
+FILE *fpOut        = stdout;
+char *pszFilter    = "en";
+int  c;
+
+
+static void CommentState(void);
+static void FlushBuffer(void);
+
+
+int main(int argc, char *argv[])
+{
+       
+       while ( (c = fgetc(fpIn)) != EOF )
+       {
+               szBuf[iBufSize++] = c;
+               if ( iBufSize <= 1 )
+               {
+                       continue;
+               }
+
+               switch ( iMainState )
+               {
+               case MAIN_ST_CODE:
+                       if ( iBufSize > 1 )
+                       {
+                               if ( szBuf[0] == '/' && szBuf[1] == '*' )
+                               {
+                                       FlushBuffer();
+                                       iMainState    = MAIN_ST_COMMENT1;
+                                       iCommentState = COMMENT_ST_NORMAL;
+                               }
+                               else if ( szBuf[0] == '/' && szBuf[1] == '/' )
+                               {
+                                       FlushBuffer();
+                                       iMainState    = MAIN_ST_COMMENT2;
+                                       iCommentState = COMMENT_ST_NORMAL;
+                               }
+                               else
+                               {
+                                       fputc(szBuf[0], fpOut);
+                                       szBuf[0] = szBuf[1];
+                                       iBufSize = 1;
+                               }
+                       }
+                       break;
+
+               case MAIN_ST_COMMENT1:
+                       if ( szBuf[iBufSize - 2] == '*' && szBuf[iBufSize - 1] == '/' )
+                       {
+                               FlushBuffer();
+                               iMainState = MAIN_ST_CODE;
+                       }
+                       else
+                       {
+                               CommentState();
+                       }
+                       break;
+
+               case MAIN_ST_COMMENT2:
+                       if ( szBuf[iBufSize - 1] == '\n' )
+                       {
+                               FlushBuffer();
+                               iMainState = MAIN_ST_CODE;
+                       }
+                       else
+                       {
+                               CommentState();
+                       }
+                       break;
+               }
+       }
+
+       return 0;
+}
+
+
+void CommentState(void)
+{
+       switch ( iCommentState )
+       {
+       case COMMENT_ST_NORMAL:
+               if ( iBufSize > 1 )
+               {
+                       if ( szBuf[0] == '%' )
+                       {
+                               if ( szBuf[1] != '%' )
+                               {
+                                       iCommentState = COMMENT_ST_FILTER_CHECK;
+                                       szBuf[0] = szBuf[1];
+                                       iBufSize = 1;
+                               }
+                               else
+                               {
+                                       fputc('%', fpOut);
+                                       iBufSize = 0;
+                               }
+                       }
+                       else
+                       {
+                               fputc(szBuf[0], fpOut);
+                               szBuf[0] = szBuf[1];
+                               iBufSize = 1;
+                       }
+               }
+               break;
+
+       case COMMENT_ST_FILTER_CHECK:
+               if ( szBuf[iBufSize - 1] == '{' )
+               {
+                       szBuf[iBufSize - 1] = '\0';
+                       if ( strcmp(szBuf, pszFilter) == 0 )
+                       {
+                               iCommentState = COMMENT_ST_FILTER_OK;
+                       }
+                       else
+                       {
+                               iCommentState = COMMENT_ST_FILTER_NG;
+                       }
+                       iBufSize = 0;
+               }
+               break;
+       
+       case COMMENT_ST_FILTER_OK:
+               if ( szBuf[1] == '}' )
+               {
+                       fputc(szBuf[0], fpOut);
+                       iBufSize = 0;
+                       iCommentState = COMMENT_ST_NORMAL;
+               }
+               else
+               {
+                       fputc(szBuf[0], fpOut);
+                       szBuf[0] = szBuf[1];
+                       iBufSize = 1;
+               }
+               break;
+
+       case COMMENT_ST_FILTER_NG:
+               if ( szBuf[1] == '}' )
+               {
+                       iBufSize = 0;
+                       iCommentState = COMMENT_ST_NORMAL;
+               }
+               else
+               {
+                       szBuf[0] = szBuf[1];
+                       iBufSize = 1;
+               }
+               break;
+       }
+}
+
+
+
+void FlushBuffer(void)
+{
+       szBuf[iBufSize] = '\0';
+       fputs(szBuf, fpOut);
+       iBufSize = 0;
+}
diff --git a/tools/cmtcnv/cmtcnv.dsp b/tools/cmtcnv/cmtcnv.dsp
new file mode 100755 (executable)
index 0000000..b6aba36
--- /dev/null
@@ -0,0 +1,100 @@
+# Microsoft Developer Studio Project File - Name="cmtcnv" - Package Owner=<4>\r
+# Microsoft Developer Studio Generated Build File, Format Version 6.00\r
+# ** \95Ò\8fW\82µ\82È\82¢\82Å\82­\82¾\82³\82¢ **\r
+\r
+# TARGTYPE "Win32 (x86) Console Application" 0x0103\r
+\r
+CFG=cmtcnv - Win32 Debug\r
+!MESSAGE \82±\82ê\82Í\97L\8cø\82ÈÒ²¸Ì§²Ù\82Å\82Í\82 \82è\82Ü\82¹\82ñ\81\82±\82ÌÌßÛ¼Þª¸Ä\82ðËÞÙÄÞ\82·\82é\82½\82ß\82É\82Í NMAKE \82ð\8eg\97p\82µ\82Ä\82­\82¾\82³\82¢\81B\r
+!MESSAGE [Ò²¸Ì§²Ù\82Ì´¸½Îß°Ä] ºÏÝÄÞ\82ð\8eg\97p\82µ\82Ä\8eÀ\8ds\82µ\82Ä\82­\82¾\82³\82¢\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "cmtcnv.mak".\r
+!MESSAGE \r
+!MESSAGE NMAKE \82Ì\8eÀ\8ds\8e\9e\82É\8d\\90¬\82ð\8ew\92è\82Å\82«\82Ü\82·\r
+!MESSAGE ºÏÝÄޠײÝ\8fã\82ÅϸÛ\82Ì\90Ý\92è\82ð\92è\8b`\82µ\82Ü\82·\81B\97á:\r
+!MESSAGE \r
+!MESSAGE NMAKE /f "cmtcnv.mak" CFG="cmtcnv - Win32 Debug"\r
+!MESSAGE \r
+!MESSAGE \91I\91ð\89Â\94\\82ÈËÞÙÄÞ Ó°ÄÞ:\r
+!MESSAGE \r
+!MESSAGE "cmtcnv - Win32 Release" ("Win32 (x86) Console Application" \97p)\r
+!MESSAGE "cmtcnv - Win32 Debug" ("Win32 (x86) Console Application" \97p)\r
+!MESSAGE \r
+\r
+# Begin Project\r
+# PROP AllowPerConfigDependencies 0\r
+# PROP Scc_ProjName ""\r
+# PROP Scc_LocalPath ""\r
+CPP=cl.exe\r
+RSC=rc.exe\r
+\r
+!IF  "$(CFG)" == "cmtcnv - Win32 Release"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 0\r
+# PROP BASE Output_Dir "Release"\r
+# PROP BASE Intermediate_Dir "Release"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 0\r
+# PROP Output_Dir "Release"\r
+# PROP Intermediate_Dir "Release"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD CPP /nologo /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /c\r
+# ADD BASE RSC /l 0x411 /d "NDEBUG"\r
+# ADD RSC /l 0x411 /d "NDEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /machine:I386\r
+\r
+!ELSEIF  "$(CFG)" == "cmtcnv - Win32 Debug"\r
+\r
+# PROP BASE Use_MFC 0\r
+# PROP BASE Use_Debug_Libraries 1\r
+# PROP BASE Output_Dir "Debug"\r
+# PROP BASE Intermediate_Dir "Debug"\r
+# PROP BASE Target_Dir ""\r
+# PROP Use_MFC 0\r
+# PROP Use_Debug_Libraries 1\r
+# PROP Output_Dir "Debug"\r
+# PROP Intermediate_Dir "Debug"\r
+# PROP Target_Dir ""\r
+# ADD BASE CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c\r
+# ADD CPP /nologo /W3 /Gm /GX /ZI /Od /D "WIN32" /D "_DEBUG" /D "_CONSOLE" /D "_MBCS" /YX /FD /GZ  /c\r
+# ADD BASE RSC /l 0x411 /d "_DEBUG"\r
+# ADD RSC /l 0x411 /d "_DEBUG"\r
+BSC32=bscmake.exe\r
+# ADD BASE BSC32 /nologo\r
+# ADD BSC32 /nologo\r
+LINK32=link.exe\r
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+# ADD LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib  kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /subsystem:console /debug /machine:I386 /pdbtype:sept\r
+\r
+!ENDIF \r
+\r
+# Begin Target\r
+\r
+# Name "cmtcnv - Win32 Release"\r
+# Name "cmtcnv - Win32 Debug"\r
+# Begin Group "Source Files"\r
+\r
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"\r
+# Begin Source File\r
+\r
+SOURCE=.\cmtcnv.c\r
+# End Source File\r
+# End Group\r
+# Begin Group "Header Files"\r
+\r
+# PROP Default_Filter "h;hpp;hxx;hm;inl"\r
+# End Group\r
+# Begin Group "Resource Files"\r
+\r
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"\r
+# End Group\r
+# End Target\r
+# End Project\r
diff --git a/tools/cmtcnv/cmtcnv.dsw b/tools/cmtcnv/cmtcnv.dsw
new file mode 100755 (executable)
index 0000000..51caa6b
--- /dev/null
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00\r
+# \8cx\8d\90\82±\82ÌÜ°¸½Íß°½ Ì§²Ù \82ð\95Ò\8fW\82Ü\82½\82Í\8dí\8f\9c\82µ\82È\82¢\82Å\82­\82¾\82³\82¢!\r
+\r
+###############################################################################\r
+\r
+Project: "cmtcnv"=".\cmtcnv.dsp" - Package Owner=<4>\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<4>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r
+Global:\r
+\r
+Package=<5>\r
+{{{\r
+}}}\r
+\r
+Package=<3>\r
+{{{\r
+}}}\r
+\r
+###############################################################################\r
+\r