OSDN Git Service

(none)
authorryuz <ryuz>
Sun, 26 Nov 2006 06:32:13 +0000 (06:32 +0000)
committerryuz <ryuz>
Sun, 26 Nov 2006 06:32:13 +0000 (06:32 +0000)
17 files changed:
aplfw/build/win/win32/vc60/hosaplfw.dsp
cfgrtr/include/idlstk.h
cfgrtr/source/hos4cfg.cpp
cfgrtr/source/idlstk.cpp
kernel/build/common/gmake/knlsrc.inc
kernel/build/common/gmake/makeexe.inc
kernel/build/win/win32/vc60/hosv4a.dsp
kernel/include/core/adtq.h
kernel/include/core/dpc.h
kernel/include/core/sys.h
kernel/source/arch/proc/h8/h8300ha/gcc/ctxctl.S
kernel/source/core/dpc/dpc_fre.c [deleted file]
kernel/source/core/dpc/dpc_rcv.c [deleted file]
kernel/source/core/dpc/dpc_snd.c [deleted file]
kernel/source/core/dpc/lev_svc.c [deleted file]
kernel/source/object/sys/sta_knl.c
sample/h8/h83069/gcc/gmake.mak

index 168831b..0bcf960 100755 (executable)
@@ -428,10 +428,6 @@ SOURCE=..\..\..\..\system\file\stdfile.h
 # PROP Default_Filter ""
 # Begin Source File
 
-SOURCE=..\..\..\..\system\memory\memif.h
-# End Source File
-# Begin Source File
-
 SOURCE=..\..\..\..\system\memory\memory.c
 # End Source File
 # Begin Source File
@@ -515,6 +511,14 @@ SOURCE=..\..\..\..\apl\hello\hello.c
 SOURCE=..\..\..\..\apl\hello\hello.h
 # End Source File
 # End Group
+# Begin Group "memdump"
+
+# PROP Default_Filter ""
+# Begin Source File
+
+SOURCE=..\..\..\..\apl\memdump\memdump.c
+# End Source File
+# End Group
 # End Group
 # End Target
 # End Project
index 8ac60cd..70d99c9 100755 (executable)
@@ -25,6 +25,7 @@ public:
        int   AnalyzeApi(const char* pszApiName, const char* pszParams);        // APIの解析
        int   AutoId(void);
        void  WriteCfgDef(FILE* fp);            // cfgファイル定義部書き出し
+       void  WriteCfgIni(FILE* fp);
 };
 
 
index 03a3097..436d0ec 100755 (executable)
@@ -50,10 +50,10 @@ void PrintUsage(void);
 
 
 CApiInclude    g_ApiInclude;
+CApiKernelHeap g_ApiKernelHeap;
 CApiIdleStack  g_ApiIdleStack;
 CApiMaxTpri    g_ApiMaxTpri;
 CApiIntStack   g_IntStack;
-CApiKernelHeap g_ApiKernelHeap;
 CApiCreTsk     g_ApiCreTsk;
 CApiDefTex     g_ApiDefTex;
 CApiCreSem     g_ApiCreSem;
@@ -78,9 +78,9 @@ static const char *s_szCfgFile            = DEFAULT_CFGFILE;
 static CApiDef* g_ApiList[] =
        {
                &g_ApiInclude,
+               &g_ApiKernelHeap,
                &g_ApiIdleStack,
                &g_IntStack,
-               &g_ApiKernelHeap,
                &g_ApiCreTsk,
 //             &g_ApiDefTex,
                &g_ApiCreSem,
index 122a620..390411e 100755 (executable)
@@ -16,8 +16,8 @@
 #include "readcfg.h"
 
 
-#define IDLSTK_STKSZ           0
-#define IDLSTK_STK                     1
+#define SYSSTK_STKSZ           0
+#define SYSSTK_STK                     1
 
 
 // コンストラクタ
@@ -45,7 +45,7 @@ int CApiIdleStack::AutoId(void)
 // APIの解析
 int CApiIdleStack::AnalyzeApi(const char* pszApiName, const char* pszParams)
 {
-       if ( strcmp(pszApiName, "KERNEL_IDL_STK") == 0 )
+       if ( strcmp(pszApiName, "KERNEL_SYS_STK") == 0 )
        {
                if ( m_iObjs > 0 )
                {
@@ -69,15 +69,15 @@ void  CApiIdleStack::WriteCfgDef(FILE* fp)
        fputs(
                "\n\n\n"
                "/* ------------------------------------------ */\n"
-               "/*                 idle stack                 */\n"
+               "/*               system stack                 */\n"
                "/* ------------------------------------------ */\n\n"
                , fp);
 
        // パラメータ読み出し
        if ( m_iObjs > 0 )
        {
-               pszSize  = m_pParamPacks[0]->GetParam(IDLSTK_STKSZ);
-               pszStack = m_pParamPacks[0]->GetParam(IDLSTK_STK);
+               pszSize  = m_pParamPacks[0]->GetParam(SYSSTK_STKSZ);
+               pszStack = m_pParamPacks[0]->GetParam(SYSSTK_STK);
        }
        else
        {
@@ -90,19 +90,44 @@ void  CApiIdleStack::WriteCfgDef(FILE* fp)
        {
                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",
+                       "VP         _kernel_sys_stkblk[((%s) + sizeof(VP) - 1) / sizeof(VP)];\t/* system stack block*/\n\n",
                        pszSize);
        }
+}
+
+
+// cfgファイル起動部書き出し
+void  CApiIdleStack::WriteCfgIni(FILE* fp)
+{
+       const char* pszSize;
+       const char* pszStack;
+
+       // パラメータ読み出し
+       if ( m_iObjs > 0 )
+       {
+               pszSize  = m_pParamPacks[0]->GetParam(SYSSTK_STKSZ);
+               pszStack = m_pParamPacks[0]->GetParam(SYSSTK_STK);
+       }
        else
        {
+               pszSize  = "128";               // 指定が無ければデフォルトサイズ
+               pszStack = "NULL";              // 指定が無ければNULL(自動生成)
+       }
+       
+       if ( strcmp(pszStack, "NULL") == 0 )
+       {
                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);
+                       "\n\t_KERNEL_SYS_INI_SYSSTK((VP)(_kernel_sys_stkblk), (SIZE)sizeof(_kernel_sys_stkblk));\n");
        }
+       else
+       {
+               fprintf(
+                       fp,
+                       "\n\t_KERNEL_SYS_INI_SYSSTK((VP)(%s), (SIZE)(%s));\n",
+                       pszStack, pszSize);
+       }
+
 }
 
 
index e17b73e..f42bfe9 100755 (executable)
@@ -25,6 +25,7 @@ QUE_DIR     = $(CORE_DIR)/que
 TOQ_DIR     = $(CORE_DIR)/toq
 HEP_DIR     = $(CORE_DIR)/hep
 DPC_DIR     = $(CORE_DIR)/dpc
+ADTQ_DIR    = $(CORE_DIR)/adtq
 
 SYSOBJ_DIR  = $(OBJ_DIR)/sys
 TSKOBJ_DIR  = $(OBJ_DIR)/tsk
@@ -39,11 +40,9 @@ TIMOBJ_DIR  = $(OBJ_DIR)/tim
 
 INC_DIRS += $(INC_DIR)
 
-SRC_DIRS += $(DSP_DIR) $(QUE_DIR) $(TOQ_DIR) $(HEP_DIR) $(DPC_DIR)     \
-            $(SYSOBJ_DIR) $(TSKOBJ_DIR) $(SEMOBJ_DIR) $(FLGOBJ_DIR)    \
-            $(MBXOBJ_DIR) $(MPFOBJ_DIR) $(INHOBJ_DIR) $(ISROBJ_DIR)    \
-            $(TIMOBJ_DIR)
-
+SRC_DIRS += $(DSP_DIR) $(QUE_DIR) $(TOQ_DIR) $(HEP_DIR) $(DPC_DIR) $(ADTQ_DIR)         \
+            $(SYSOBJ_DIR) $(TSKOBJ_DIR) $(SEMOBJ_DIR) $(FLGOBJ_DIR) $(MBXOBJ_DIR)      \
+            $(MPFOBJ_DIR) $(INHOBJ_DIR) $(ISROBJ_DIR) $(TIMOBJ_DIR)
 
 
 # C source files
@@ -71,10 +70,13 @@ CSRCS         += $(DSP_DIR)/ent_tsk.c                       \
                  $(HEP_DIR)/cre_hep.c                  \
                  $(HEP_DIR)/alc_hep.c                  \
                  $(HEP_DIR)/fre_hep.c                  \
-                 $(DPC_DIR)/dpc_fre.c                  \
-                 $(DPC_DIR)/dpc_rcv.c                  \
-                 $(DPC_DIR)/dpc_snd.c                  \
-                 $(DPC_DIR)/lev_svc.c                  \
+                 $(DPC_DIR)/exe_dpc.c                  \
+                 $(ADTQ_DIR)/frcv_adq.c                        \
+                 $(ADTQ_DIR)/fsnd_adq.c                        \
+                 $(ADTQ_DIR)/rcv_adq.c                 \
+                 $(ADTQ_DIR)/reff_adq.c                        \
+                 $(ADTQ_DIR)/refs_adq.c                        \
+                 $(ADTQ_DIR)/snd_adq.c                 \
                  $(SYSOBJ_DIR)/sta_knl.c               \
                  $(SYSOBJ_DIR)/get_tid.c               \
                  $(SYSOBJ_DIR)/loc_cpu.c               \
index 3b4d21a..27b9e6f 100755 (executable)
@@ -13,7 +13,6 @@
 
 ifeq ($(DEBUG),Yes)
 # %jp{デバッグ指定があればデバッグ版作成}
-TARGET := $(TARGET)dbg
 AFLAGS += $(AFLAGS_DBG) $(AFLAGS_OPT_NONE)
 CFLAGS += $(CFLAGS_DBG) $(CFLAGS_OPT_NONE)
 else
@@ -95,7 +94,7 @@ OBJS = $(addprefix $(OBJS_DIR)/, $(addsuffix .$(EXT_OBJ), $(basename $(notdir $(
 
 # %jp{ライブラリ生成}
 .PHONY : makeexe_all
-makeexe_all: $(CSRCS) $(ASRCS) mk_kernel mkdir_objs
+makeexe_all: mk_kernel mkdir_objs $(CSRCS) $(ASRCS)
 
 # %jp{クリーンナップ}
 .PHONY : makeexe_clean
index ebb1f8c..0e624bb 100755 (executable)
@@ -455,19 +455,7 @@ SOURCE=..\..\..\..\source\core\adtq\snd_adq.c
 # PROP Default_Filter ""\r
 # Begin Source File\r
 \r
-SOURCE=..\..\..\..\source\core\dpc\dpc_fre.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\..\..\source\core\dpc\dpc_rcv.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\..\..\source\core\dpc\dpc_snd.c\r
-# End Source File\r
-# Begin Source File\r
-\r
-SOURCE=..\..\..\..\source\core\dpc\lev_svc.c\r
+SOURCE=..\..\..\..\source\core\dpc\exe_dpc.c\r
 # End Source File\r
 # End Group\r
 # End Group\r
index f047794..4011485 100755 (executable)
@@ -63,10 +63,13 @@ _KERNEL_ADTQ_T_ADTQCNT _kernel_adtq_ref_sdtqnt(_KERNEL_T_ADTQCB *adtqcb);
 #endif
 
 
-#define _KERNEL_ADTQ_SND_DAT(adtqcb, data)                     _kernel_adtq_snd_dat((adtqcb), (data))
-#define _KERNEL_ADTQ_RCV_DAT(adtqcb, p_data)           _kernel_adtq_rcv_dat((adtqcb), (p_data))
-#define _KERNEL_ADTQ_REF_FDTQNT(adtqcb)                                _kernel_adtq_ref_fdtqnt(adtqcb)
-#define _KERNEL_ADTQ_REF_SDTQNT(adtqcb)                                _kernel_adtq_ref_sdtqnt(adtqcb)
+#define _KERNEL_ADTQ_INI_QUE(adtqcb, adtq, adtqcnt)            do { _KERNEL_ADTQ_SET_ADTQ((adtqcb), (adtq)); _KERNEL_ADTQ_SET_ADTQCNT((adtqcb), (adtqcnt)); } while(0)
+#define _KERNEL_ADTQ_SND_DAT(adtqcb, data)                             _kernel_adtq_snd_dat((adtqcb), (data))
+#define _KERNEL_ADTQ_RCV_DAT(adtqcb, p_data)                   _kernel_adtq_rcv_dat((adtqcb), (p_data))
+#define _KERNEL_ADTQ_FSND_DAT(adtqcb, data)                            _kernel_adtq_fsnd_dat((adtqcb), (data)) 
+#define _KERNEL_ADTQ_FRCV_DAT(adtqcb)                                  _kernel_adtq_frcv_dat(adtqcb)
+#define _KERNEL_ADTQ_REF_SDTQNT(adtqcb)                                        _kernel_adtq_ref_sdtqnt(adtqcb)
+#define _KERNEL_ADTQ_REF_FDTQNT(adtqcb)                                        _kernel_adtq_ref_fdtqnt(adtqcb)
 
 
 #endif /* _KERNEL__core__adtq_h__ */
index a0fb7f4..0bd6f64 100755 (executable)
 #define _KERNEL__core__dpc_h__
 
 
+#include "core/adtq.h"
+
+
 typedef struct _kernel_t_dpccb
 {
-       VP_INT                  *msgq;
-       UINT                    msgqsz;
-       volatile UINT   head;
-       volatile UINT   tail;
+       _KERNEL_T_ADTQCB        adtq;                                   /**< 遅延プロシージャコール用非同期メッセージキュー */
 } _KERNEL_T_DPCCB;
 
 
@@ -26,20 +26,18 @@ typedef struct _kernel_t_dpccb
 extern "C" {
 #endif
 
-void   _kernel_dpc_snd_msg(_KERNEL_T_DPCCB *dcpcb, VP_INT msg);
-VP_INT _kernel_dpc_rcv_msg(_KERNEL_T_DPCCB *dcpcb);
-UINT   _kernel_dpc_ref_dat(_KERNEL_T_DPCCB *dcpcb);
-UINT   _kernel_dpc_ref_fre(_KERNEL_T_DPCCB *dcpcb);
-void   _kernel_dpc_lev_svc(void);
+void   _kernel_exe_dpc(void);
 
 #ifdef __cplusplus
 }
 #endif
 
-#define _KERNEL_DPC_SND_MSG(dcpcb, msg)                        _kernel_dpc_snd_msg((dcpcb), (msg))
-#define _KERNEL_DPC_RCV_MSG(dcpcb)                             _kernel_dpc_rcv_msg((dcpcb))
-#define _KERNEL_DPC_REF_DAT(dcpcb)                             _kernel_dpc_ref_dat((dcpcb))                    /* データ数参照 */
-#define _KERNEL_DPC_REF_FRE(dcpcb)                             _kernel_dpc_ref_fre((dcpcb))                    /* 空き領域参照 */
+#define _KERNEL_DPC_INI_DPC(dcpcb, que, quecnt)                _KERNEL_ADTQ_INI_QUE(&(dcpcb)->adtq, que, quecnt)
+#define _KERNEL_DPC_EXE_DPC()                                          _kernel_exe_dpc()
+#define _KERNEL_DPC_SND_MSG(dcpcb, msg)                                _KERNEL_ADTQ_FSND_DAT(&(dcpcb)->adtq, (msg))
+#define _KERNEL_DPC_RCV_MSG(dcpcb)                                     _KERNEL_ADTQ_FRCV_DAT(&(dcpcb)->adtq)
+#define _KERNEL_DPC_REF_DAT(dcpcb)                                     _KERNEL_ADTQ_REF_SDTQNT(&(dcpcb)->adtq)                 /* データ数参照 */
+#define _KERNEL_DPC_REF_FRE(dcpcb)                                     _KERNEL_ADTQ_REF_FDTQNT(&(dcpcb)->adtq)                 /* 空き領域参照 */
 
 
 #endif /* _KERNEL__core__dpc_h__ */
index 59a93b3..55987bd 100755 (executable)
@@ -33,15 +33,16 @@ typedef struct _kernel_t_proccb
 {
        STAT                            stat;                           /**< %jp{システムのコンテキスト状態}%en{system state} */
        UB                  dlydsp;                             /**< %jp{ディスパッチのディレイ管理} */
+#if _KERNEL_SPT_DPC
+       UB                  svcent;                             /**< %jp{サービスコール実行中管理} */
+#endif
+
        _KERNEL_T_TSKHDL        tskhdl_run;                     /**< %jp{実行中タスク} */
        _KERNEL_T_CTXCB         sysctxcb;                       /**< %jp{システムコンテキスト(アイドル実行等)のコンテキスト} */
        SIZE                            sysstksz;                       /**< %jp{システムコンテキストのスタックサイズ} */
        VP                                      sysstk;                         /**< %jp{システムコンテキストのスタック} */
        SIZE                            intstksz;                       /**< %jp{割り込みコンテキストのスタックサイズ} */
        VP                                      intstk;                         /**< %jp{割り込みコンテキストのスタック} */
-#if _KERNEL_SPT_DPC
-       UINT                svcnst;                             /**< %jp{サービスコールネストカウンタ} */
-#endif
 } _KERNEL_T_PROCCB;
 
 
@@ -78,6 +79,9 @@ extern _KERNEL_T_SYSCB _kernel_syscb;
 #define _KERNEL_SYS_FRE_MEM(ptr)                       _kernel_fre_hep(&_kernel_syscb.memhep, (ptr))                                           /**< %jp{カーネルメモリの開放} */
 #define _KERNEL_SYS_ALG_MEM(size)                      _kernel_alg_hep(size)                                                                                           /**< %jp{カーネルメモリのサイズアライメント} */
 
+#define _KERNEL_SYS_INI_SYSSTK(stk, stksz)     do { _kernel_syscb.proccb[0].sysstk = (stk); _kernel_syscb.proccb[0].sysstksz = (stksz); } while(0)
+                                                                                                                                                                                                                               /**< %jp{システムスタックの初期化} */
+
 #define _KERNEL_SYS_GET_STST()                         (_KERNEL_SYS_GET_PRCCB()->stat)                                                                         /**< %jp{カレントプロセッサ状態の取得} */
 #define _KERNEL_SYS_SET_STST(x)                                do { _KERNEL_SYS_GET_PRCCB()->stat = (x); } while (0)                           /**< %jp{カレントプロセッサ状態の設定} */
 #define _KERNEL_SYS_GET_RUNTSK()                       (_KERNEL_SYS_GET_PRCCB()->tskhdl_run)                                                           /**< %jp{カレントプロセッサの実行中タスク取得} */
@@ -114,12 +118,14 @@ extern _KERNEL_T_SYSCB _kernel_syscb;
 
 #if _KERNEL_SPT_DPC            /* %jp{遅延プロシージャコールの場合} */
 
-#define _KERNEL_SYS_REF_SVC()                          (_kernel_syscb.proccb[0].svcnst)
-#define _KERNEL_SYS_SET_SVC(x)                         do { _kernel_syscb.proccb[0].svcnst = (x); } while (0)
+#define _KERNEL_SYS_SET_SVC()                          do { _kernel_syscb.proccb[0].svcent = TRUE; } while (0)
+#define _KERNEL_SYS_CLR_SVC()                          do { _kernel_syscb.proccb[0].svcent = FALSE; } while (0)
+#define _KERNEL_SYS_SNS_SVC()                          (_kernel_syscb.proccb[0].svcent)
 
-#define _KERNEL_ENTER_SVC()                                    do { _KERNEL_SYS_SET_SVC(_KERNEL_SYS_REF_SVC() + 1); } while (0)
-#define _KERNEL_LEAVE_SVC()                                    do { _kernel_dpc_lev_svc(); } while (0)
+#define _KERNEL_ENTER_SVC()                                    do { _KERNEL_SYS_SET_SVC(); } while (0)
+#define _KERNEL_LEAVE_SVC()                                    do { _KERNEL_DPC_EXE_DPC(); _KERNEL_SYS_CLR_SVC(); } while (0)
 
+#define _KERNEL_SYS_INI_DPC(que, quecnt)       _KERNEL_DPC_INI_DPC(&_kernel_syscb.dpccb, (que), (quecnt))                                                              /**< %jp{SPCの初期化} */
 #define _KERNEL_SYS_LOC_DPC()                          do { _KERNEL_DIS_INT(); } while (0)
 #define _KERNEL_SYS_UNL_DPC()                          do { if (!(_KERNEL_SYS_GET_STST() & _KERNEL_TSS_LOC)){ _KERNEL_ENA_INT(); } } while (0)
 #define _KERNEL_SYS_SND_DPC(msg)                       _KERNEL_DPC_SND_MSG(&_kernel_syscb.dpccb, (msg))
index 5a2479e..57718b6 100755 (executable)
@@ -54,9 +54,9 @@ __kernel_wai_int:
 /*  実行コンテキストエントリーアドレス
 ************************************************/
 ctx_entry:     
-                               mov.l   er3, er0                                /* 実行時パラメータを第一引数に設定 */
-                               mov.l   er4, er1                                /* 実行時パラメータを第一引数に設定 */
-                               jmp             @er2                                    /* 実行アドレスにジャンプ */
+                               mov.l   er5, er0                                /* 実行時パラメータを第一引数に設定 */
+                               mov.l   er6, er1                                /* 実行時パラメータを第一引数に設定 */
+                               jmp             @er4                                    /* 実行アドレスにジャンプ */
 
 
 /************************************************
@@ -64,21 +64,20 @@ ctx_entry:
   _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)]
+               FP              entry,                                  実行アドレス         [er2]
+               VP_INT          par1,                                   実行時パラメータ1    [@(4, er7)]
+               VP_INT          par2)                                   実行時パラメータ2    [@(8, er7)]
 ************************************************/
 __kernel_cre_ctx:
-                               sub.l   #24, er1                                /* エントリーポイント+er2〜er6 までの退避分 */
+                               sub.l   #16, er1                                /* エントリーポイント+er4〜er6 までの退避分 */
                                mov.l   er1, @(0, er0)                  /* スタックポインタの格納 */
                                mov.l   #ctx_entry, er0
-                               mov.l   er0, @(20, er1)                 /* 実行エントリーポイントの設定 */
+                               mov.l   er0, @(12, er1)                 /* 実行エントリーポイントの設定 */
+                               mov.l   er2, @(8, er1)                  /* 実行アドレスの格納(er4部分) */
                                mov.l   @(4, er7), er0
-                               mov.l   er0, @(16, er1)                 /* 実行アドレスの格納(er2部分) */
+                               mov.l   er0, @(4, er1)                  /* 実行時パラメータ1の格納(er5部分) */
                                mov.l   @(8, er7), er0
-                               mov.l   er0, @(12, er1)                 /* 実行時パラメータ1の格納(er3部分) */
-                               mov.l   @(12, er7), er0
-                               mov.l   er0, @(8, er1)                  /* 実行時パラメータ1の格納(er4部分) */
+                               mov.l   er0, @(0, er1)                  /* 実行時パラメータ2の格納(er6部分) */
                                rts
 
 
@@ -89,12 +88,10 @@ __kernel_cre_ctx:
                _KERNEL_T_CTXCB *pk_ctxcb_now)                  現在のコンテキスト       [er1]
 ************************************************/
 __kernel_swi_ctx:
-                               push.l  er2
-                               push.l  er3
                                push.l  er4
                                push.l  er5
                                push.l  er6
-                               mov.l   er7,@(0, er1)                   /* スタックポインタ保存 */
+                               mov.l   er7, @(0, er1)                  /* スタックポインタ保存 */
                /* ---- このまま _kernel_sta_ctx に続ける ---- */
 
 /************************************************
@@ -107,8 +104,6 @@ __kernel_sta_ctx:
                                pop.l   er6
                                pop.l   er5
                                pop.l   er4
-                               pop.l   er3
-                               pop.l   er2
                                rts
 
 
@@ -117,14 +112,13 @@ __kernel_sta_ctx:
  void _kernel_rst_ctx(
                VP_INT par1,                                                    実行時パラメータ1    [er0]
                VP_INT par2,                                                    実行時パラメータ2    [er1]
-               VP     isp,                                                             初期スタックポインタ [@(4, er7)]
-               FP     entry)                                                   実行アドレス         [@(8, er7)]
+               VP     isp,                                                             初期スタックポインタ [er2]
+               FP     entry)                                                   実行アドレス         [@(4, er7)]
 ************************************************/
 __kernel_rst_ctx:
-                               mov.l   @(4, er7), er3                  /* 初期スタックポインタ */
-                               mov.l   @(8, er7), er4                  /* 実行アドレス取り出し */
-                               mov.l   er3, er7                                /* スタックポインタリセット */
-                               jmp             @er4                                    /* 実行アドレスに分岐 */
+                               mov.l   @(4, er7), er3                  /* 実行アドレス取り出し */
+                               mov.l   er2, er7                                /* スタックポインタリセット */
+                               jmp             @er3                                    /* 実行アドレスに分岐 */
 
 
                                .comm   __kernel_h83_imsk,1
diff --git a/kernel/source/core/dpc/dpc_fre.c b/kernel/source/core/dpc/dpc_fre.c
deleted file mode 100755 (executable)
index d6e7d9d..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-/** 
- *  Hyper Operating System V4 Advance
- *
- * @file  dpc.h
- * @brief %jp{遅延プロシージャーコールヘッダファイル}%en{Deferred Procedure Call header file}
- *
- * Copyright (C) 1998-2006 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include "core/core.h"
-#include "core/dpc.h"
-
-
-#if _KERNEL_SPT_DPC
-
-/* データ数参照 */
-UINT _kernel_dpc_ref_dat(_KERNEL_T_DPCCB *dcpcb)
-{
-       UINT head;
-       UINT tail;
-
-       head = dcpcb->head;
-       tail = dcpcb->tail;
-
-       if ( head <= tail )
-       {
-               return tail - head;
-       }
-       else
-       {
-               return dcpcb->msgqsz + tail - head;
-       }
-}
-
-
-/* 空き領域の取得 */
-UINT _kernel_dpc_ref_fre(_KERNEL_T_DPCCB *dcpcb)
-{
-       UINT head;
-       UINT tail;
-
-       head = dcpcb->head;
-       tail = dcpcb->tail;
-
-       if ( head > tail )
-       {
-               return head - tail - 1;
-       }
-       else
-       {
-               return dcpcb->msgqsz - tail + head  - 1;
-       }
-}
-
-#endif /* _KERNEL_SPT_DPC      */
-
-
-/* end of file */
diff --git a/kernel/source/core/dpc/dpc_rcv.c b/kernel/source/core/dpc/dpc_rcv.c
deleted file mode 100755 (executable)
index 8bfd029..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/** 
- *  Hyper Operating System V4 Advance
- *
- * @file  dpc.h
- * @brief %jp{遅延プロシージャーコールヘッダファイル}%en{Deferred Procedure Call header file}
- *
- * Copyright (C) 1998-2006 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include "core/core.h"
-#include "core/dpc.h"
-
-#if _KERNEL_SPT_DPC
-
-VP_INT _kernel_dpc_rcv_msg(_KERNEL_T_DPCCB *dcpcb)
-{
-       UINT   head;
-       VP_INT msg;
-
-       head = dcpcb->head;
-       if ( head == dcpcb->tail )
-       {
-               return 0;
-       }
-
-       msg = dcpcb->msgq[head];
-
-       if ( head + 1 >= dcpcb->msgqsz )
-       {
-               dcpcb->head = 0;
-       }
-       else
-       {
-               dcpcb->head = head + 1;
-       }
-
-       return msg;
-}
-
-#endif /* _KERNEL_SPT_DPC      */
-
-
-/* end of file */
diff --git a/kernel/source/core/dpc/dpc_snd.c b/kernel/source/core/dpc/dpc_snd.c
deleted file mode 100755 (executable)
index 79619a0..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/** 
- *  Hyper Operating System V4 Advance
- *
- * @file  dpc.h
- * @brief %jp{遅延プロシージャーコールヘッダファイル}%en{Deferred Procedure Call header file}
- *
- * Copyright (C) 1998-2006 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include "core/core.h"
-#include "core/dpc.h"
-
-#if _KERNEL_SPT_DPC
-
-/* %jp{メッセージの送信} */
-void _kernel_dpc_snd_msg(_KERNEL_T_DPCCB *dcpcb, VP_INT msg)
-{
-       UINT next_tail;
-
-       /* %jp{次の末尾位置算出} */
-       if ( dcpcb->tail + 1 >= dcpcb->msgqsz )
-       {
-               next_tail = 0;
-       }
-       else
-       {
-               next_tail = dcpcb->tail + 1;
-       }
-
-       /* %jp{オーバーフローチェック} */
-       if ( next_tail == dcpcb->head )
-       {
-               return;
-       }
-
-       /* %jp{格納} */
-       dcpcb->msgq[dcpcb->tail] = msg;
-       dcpcb->tail = next_tail;
-}
-
-
-#endif /* _KERNEL_SPT_DPC      */
-
-
-/* end of file */
diff --git a/kernel/source/core/dpc/lev_svc.c b/kernel/source/core/dpc/lev_svc.c
deleted file mode 100755 (executable)
index 36996d5..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-/** 
- *  Hyper Operating System V4 Advance
- *
- * @file  dpc.h
- * @brief %jp{遅延プロシージャーコールヘッダファイル}%en{Deferred Procedure Call header file}
- *
- * Copyright (C) 1998-2006 by Project HOS
- * http://sourceforge.jp/projects/hos/
- */
-
-
-#include "core/core.h"
-#include "core/dpc.h"
-
-#if _KERNEL_SPT_DPC
-
-/* サービスコール退出時の処理 */
-void _kernel_dpc_lev_svc(void)
-{
-       FP   fncSvc;
-       UINT svcnst;
-       
-       /* サービスコールのネスト数取得 */
-       svcnst = _KERNEL_SYS_REF_SVC();
-
-       /* 遅延プロシージャ処理中の再呼び出しは無視 */
-       if ( svcnst > 1 || _KERNEL_SYS_SNS_DPN() )
-       {
-               _KERNEL_SYS_SET_SVC(svcnst - 1);
-               return;
-       }
-       
-       /* 遅延プロシージャ呼び出し */
-       while ( _KERNEL_SYS_RDT_DPC() > 0 )
-       {
-               fncSvc = (FP)_KERNEL_SYS_RCV_DPC();
-               fncSvc();
-       }
-
-       /* タスクディスパッチの実施 */
-
-       _KERNEL_DSP_TSK();
-
-       /* サービスコールを抜ける */
-       _KERNEL_SYS_SET_SVC(0);
-}
-
-#endif /* _KERNEL_SPT_DPC      */
-
-
-/* end of file */
index 7a38fa9..ed129cd 100755 (executable)
@@ -16,9 +16,6 @@
 /**** 暫定の手抜き(ここから) *****/
 _KERNEL_T_SYSCB _kernel_syscb;
 
-extern VP   _kernel_idl_stk;
-extern SIZE _kernel_idl_stksz;
-
 #if _KERNEL_SPT_DPC
 VP_INT dpc_buf[32];
 #endif
@@ -50,15 +47,10 @@ ER vsta_knl(void)
        /* %jp{IRC固有の初期化} */
        _KERNEL_INI_IRC();
        
+       /* %jp{初期化ハンドラ実行} */
+       _kernel_cfg_ini();
 
-#if _KERNEL_SPT_DPC
-       _kernel_syscb.dpccb.msgq   = dpc_buf;
-       _kernel_syscb.dpccb.msgqsz = 32;
-#endif
-
-       _kernel_syscb.proccb[0].sysstk   = _kernel_idl_stk;
-       _kernel_syscb.proccb[0].sysstksz = _kernel_idl_stksz;
-       
+       _KERNEL_SYS_INI_DPC(dpc_buf, 32);
        
        /* %jp{システムコンテキストの生成} */
        _KERNEL_CRE_CTX(
@@ -71,8 +63,6 @@ ER vsta_knl(void)
                        (VP_INT)0
                );
        
-       /* %jp{初期化ハンドラ実行} */
-       _kernel_cfg_ini();
 
        _KERNEL_LEAVE_SVC();
 
index 6b0b30c..7bb2b7c 100755 (executable)
@@ -29,13 +29,15 @@ OBJS_DIR          = objs_$(TARGET)
 include $(KERNEL_MAKINC_DIR)/common.inc
 
 
-ifeq ($(ROM),Yes)
+ifeq ($(RAM),Yes)
+# %jp{RAM実行(モニタプログラム利用を想定)}
+TARGET := $(TARGET)_ram
+LINKER_SCRIPT ?= link_ram.x
+C_DEFS        += _RAM
+else
 # %jp{ROM焼きする場合}
-TARGET := $(TARGET)_rom
 LINKER_SCRIPT ?= link_rom.x
-else
-# %jp{デフォルトはRAM実行とする(モニタプログラム利用を想定)}
-LINKER_SCRIPT ?= link_ram.x
+C_DEFS        += 
 endif