OSDN Git Service

(none)
authorryuz <ryuz>
Tue, 20 Mar 2007 14:49:20 +0000 (14:49 +0000)
committerryuz <ryuz>
Tue, 20 Mar 2007 14:49:20 +0000 (14:49 +0000)
19 files changed:
kernel/build/arm/aduc7000/armcc/gmake.mak [new file with mode: 0755]
kernel/build/arm/aduc7000/gcc/gmake.mak [new file with mode: 0755]
kernel/build/common/gmake/gcc_rul.inc
kernel/source/arch/irc/arm/aduc7000/intc.c [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v4t/gcc/kabt_hdr.S [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v4t/gcc/kcre_ctx.S
kernel/source/arch/proc/arm/arm_v4t/gcc/kfiq_hdr.S [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v4t/gcc/kpre_hdr.S [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v4t/gcc/kswi_ctx.S
kernel/source/arch/proc/arm/arm_v4t/gcc/kswi_hdr.S [new file with mode: 0755]
kernel/source/arch/proc/arm/arm_v4t/gcc/kund_hdr.S [new file with mode: 0755]
sample/arm/aduc7000/armcc/gmake.mak [new file with mode: 0755]
sample/arm/aduc7000/armcc/startup.s [new file with mode: 0755]
sample/arm/aduc7000/armcc/uish.s [new file with mode: 0755]
sample/arm/aduc7000/armcc/vectors.s [new file with mode: 0755]
sample/arm/aduc7000/gcc/crt0.S [new file with mode: 0755]
sample/arm/aduc7000/gcc/gmake.mak [new file with mode: 0755]
sample/arm/aduc7000/gcc/link.x [new file with mode: 0755]
sample/arm/aduc7000/gcc/vectors.S [new file with mode: 0755]

diff --git a/kernel/build/arm/aduc7000/armcc/gmake.mak b/kernel/build/arm/aduc7000/armcc/gmake.mak
new file mode 100755 (executable)
index 0000000..f3a3dd0
--- /dev/null
@@ -0,0 +1,102 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for ADuC7000 series
+#
+# Copyright (C) 1998-2007 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+# ターゲット名
+TARGET    ?= libhosv4a
+
+
+# ディレクトリ定義
+HOSV4A_DIR        = ../../../../..
+KERNEL_DIR        = $(HOSV4A_DIR)/kernel
+KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake
+OBJS_DIR          = objs_$(TARGET)
+
+
+# %jp{共通定義読込み}
+include $(KERNEL_MAKINC_DIR)/common.inc
+
+
+# %jp{アーキテクチャ定義}
+ARCH_PROC ?= arm/arm_v4t
+ARCH_IRC  ?= arm/aduc7000
+ARCH_CC   ?= armcc
+
+# %jp{アーキテクチャパス}
+INC_PROC_DIR    = $(KERNEL_DIR)/include/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR     = $(KERNEL_DIR)/include/arch/irc/$(ARCH_IRC)
+SRC_PROC_DIR    = $(KERNEL_DIR)/source/arch/proc/$(ARCH_PROC)
+SRC_PROC_CC_DIR = $(KERNEL_DIR)/source/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR     = $(KERNEL_DIR)/source/arch/irc/$(ARCH_IRC)
+SRC_IRC_CC_DIR  = $(KERNEL_DIR)/source/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# %jp{パス設定}
+INC_DIRS += $(INC_PROC_DIR) $(INC_IRC_DIR)
+SRC_DIRS += $(SRC_PROC_DIR) $(SRC_PROC_DIR) $(SRC_PROC_CC_DIR) $(SRC_IRC_DIR) $(SRC_IRC_CC_DIR)
+
+# %jp{オプションフラグ}
+AFLAGS  += --cpu=ARM7TDMI --apcs=inter --thumb
+CFLAGS  += --cpu=ARM7TDMI --apcs=inter --thumb
+ARFLAGS += 
+
+# %jp{コンフィギュレータ定義}
+CFGRTR_DIR = $(HOSV4A_DIR)/cfgrtr/build/gcc
+CFGRTR     = h4acfg-aduc7000
+
+
+# %jp{armccc用の設定読込み}
+include $(KERNEL_MAKINC_DIR)/armcc_def.inc
+
+
+
+# C言語ファイルの追加
+CSRCS += $(SRC_PROC_DIR)/val_int.c                     \
+         $(SRC_IRC_DIR)/intc.c
+
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_CC_DIR)/kcre_ctx.s         \
+         $(SRC_PROC_CC_DIR)/kdis_int.s         \
+         $(SRC_PROC_CC_DIR)/kena_int.s         \
+         $(SRC_PROC_CC_DIR)/kirq_hdr.s         \
+         $(SRC_PROC_CC_DIR)/kfiq_hdr.s         \
+         $(SRC_PROC_CC_DIR)/krst_ctx.s         \
+         $(SRC_PROC_CC_DIR)/kswi_ctx.s         \
+         $(SRC_PROC_CC_DIR)/kwai_int.s
+
+
+
+# カーネル共通ソースの追加
+include $(KERNEL_MAKINC_DIR)/knlsrc.inc
+
+
+
+# %jp{ALL}
+.PHONY : all
+all: makelib_all
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+# %jp{クリーン}
+.PHONY : clean
+clean: makelib_clean
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+       $(RM) -f *.lst
+
+
+# %jp{ライブラリ生成用設定読込み}
+include $(KERNEL_MAKINC_DIR)/makelib.inc
+
+# %jp{armcc用のルール定義読込み}
+include $(KERNEL_MAKINC_DIR)/armcc_rul.inc
+
+# %jp{カーネル依存関係読込み}
+include $(KERNEL_MAKINC_DIR)/knldep.inc
+
+
+
+# end of file
diff --git a/kernel/build/arm/aduc7000/gcc/gmake.mak b/kernel/build/arm/aduc7000/gcc/gmake.mak
new file mode 100755 (executable)
index 0000000..002d7a8
--- /dev/null
@@ -0,0 +1,109 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#  makefile for ADuC7000 series
+#
+# Copyright (C) 1998-2007 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+# %jp{ターゲット名}
+TARGET ?= libhosv4a
+
+# %jp{アーキテクチャパス}
+ARCH_PROC ?= arm/arm_v4t
+ARCH_IRC  ?= arm/aduc7000
+ARCH_CC   ?= gcc
+
+# %jp{ツール定義}
+GCC_SYS  ?= elf
+CMD_CC   ?= arm-$(GCC_SYS)-gcc
+CMD_ASM  ?= arm-$(GCC_SYS)-gcc
+CMD_LIBR ?= arm-$(GCC_SYS)-ar
+
+
+# %jp{ディレクトリ定義}
+TOP_DIR           = ../../../../..
+KERNEL_DIR        = $(TOP_DIR)/kernel
+KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake
+OBJS_DIR          = objs_$(TARGET)
+
+
+# %jp{共通定義読込み}
+include $(KERNEL_MAKINC_DIR)/common.inc
+
+
+# %jp{アーキテクチャパス定義}
+INC_PROC_DIR    = $(KERNEL_DIR)/include/arch/proc/$(ARCH_PROC)
+INC_IRC_DIR     = $(KERNEL_DIR)/include/arch/irc/$(ARCH_IRC)
+SRC_PROC_DIR    = $(KERNEL_DIR)/source/arch/proc/$(ARCH_PROC)
+SRC_PROC_CC_DIR = $(KERNEL_DIR)/source/arch/proc/$(ARCH_PROC)/$(ARCH_CC)
+SRC_IRC_DIR     = $(KERNEL_DIR)/source/arch/irc/$(ARCH_IRC)
+SRC_IRC_CC_DIR  = $(KERNEL_DIR)/source/arch/irc/$(ARCH_IRC)/$(ARCH_CC)
+
+# %jp{パス設定}
+INC_DIRS += $(INC_PROC_DIR) $(INC_IRC_DIR)
+SRC_DIRS += $(SRC_PROC_DIR) $(SRC_PROC_DIR) $(SRC_PROC_CC_DIR) $(SRC_IRC_DIR) $(SRC_IRC_CC_DIR)
+
+# %jp{オプションフラグ}
+AFLAGS  += -mcpu=arm7tdmi -mthumb-interwork
+CFLAGS  += -mcpu=arm7tdmi -mthumb-interwork
+ARFLAGS += 
+
+# %jp{コンフィギュレータ定義}
+CFGRTR_DIR = $(TOP_DIR)/cfgrtr/build/gcc
+CFGRTR     = h4acfg-aduc7000
+
+
+# C言語ファイルの追加
+CSRCS += $(SRC_PROC_DIR)/val_int.c                     \
+         $(SRC_IRC_DIR)/intc.c
+
+# アセンブラファイルの追加
+ASRCS += $(SRC_PROC_CC_DIR)/kdis_int.S         \
+         $(SRC_PROC_CC_DIR)/kena_int.S         \
+         $(SRC_PROC_CC_DIR)/kcre_ctx.S         \
+         $(SRC_PROC_CC_DIR)/krst_ctx.S         \
+         $(SRC_PROC_CC_DIR)/kswi_ctx.S         \
+         $(SRC_PROC_CC_DIR)/kwai_int.S         \
+         $(SRC_PROC_CC_DIR)/kund_hdr.S         \
+         $(SRC_PROC_CC_DIR)/kswi_hdr.S         \
+         $(SRC_PROC_CC_DIR)/kpre_hdr.S         \
+         $(SRC_PROC_CC_DIR)/kabt_hdr.S         \
+         $(SRC_PROC_CC_DIR)/kirq_hdr.S         \
+         $(SRC_PROC_CC_DIR)/kfiq_hdr.S
+
+
+
+# カーネル共通ソースの追加
+include $(KERNEL_MAKINC_DIR)/knlsrc.inc
+
+
+# %jp{ALL}
+.PHONY : all
+all: makelib_all
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC)
+
+# %jp{クリーン}
+.PHONY : clean
+clean: makelib_clean
+       make -C $(CFGRTR_DIR) -f gmake.mak TARGET=$(CFGRTR) ARCH_PROC=$(ARCH_PROC) ARCH_IRC=$(ARCH_IRC) clean
+       $(RM) -f *.lst
+
+
+
+# %jp{gcc用の設定読込み}
+include $(KERNEL_MAKINC_DIR)/gcc_def.inc
+
+# %jp{ライブラリ生成用設定読込み}
+include $(KERNEL_MAKINC_DIR)/makelib.inc
+
+
+# %jp{ch38用のルール定義読込み}
+include $(KERNEL_MAKINC_DIR)/gcc_rul.inc
+
+# %jp{カーネル依存関係読込み}
+include $(KERNEL_MAKINC_DIR)/knldep.inc
+
+
+# end of file
index 9337c42..64c22f4 100755 (executable)
@@ -22,8 +22,8 @@ $(TARGET_HEX): $(TARGET_EXE)
 
 
 # %jp{プレーンバイナリ形式ファイル生成}%en{Plain Binary}
-$(TARGET_HEX): $(TARGET_EXE)
-       $(CMD_OBJCNV) -O binary $(TARGET_EXE) $(TARGET_HEX)
+$(TARGET_BIN): $(TARGET_EXE)
+       $(CMD_OBJCNV) -O binary $(TARGET_EXE) $(TARGET_BIN)
 
 
 # %jp{ライブラリ生成}%en{Library}
diff --git a/kernel/source/arch/irc/arm/aduc7000/intc.c b/kernel/source/arch/irc/arm/aduc7000/intc.c
new file mode 100755 (executable)
index 0000000..c7296d4
--- /dev/null
@@ -0,0 +1,121 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * @file  intc.h
+ * @brief %jp{ADuC7000シリーズ用割込みコントローラ操作}%en{ADuC7000 series}
+ *
+ * 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;
+}
+
+void _kernel_exe_irc(INHNO inhno)
+{
+       switch ( inhno )
+       {
+       case _KERNEL_ARM_INHNO_IRQ:
+               _kernel_arm_irq();
+               break;
+
+       case _KERNEL_ARM_INHNO_FIQ:
+               _kernel_arm_fiq();
+               break;
+       }
+}
+
+
+/** %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/kabt_hdr.S b/kernel/source/arch/proc/arm/arm_v4t/gcc/kabt_hdr.S
new file mode 100755 (executable)
index 0000000..b4b190f
--- /dev/null
@@ -0,0 +1,27 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "arm_v4t.inc"
+
+
+                               .code   32
+                               .text
+                               .align  2
+
+
+/************************************************
+  Data abort handler
+ ************************************************/
+                               .global _kernel_abt_hdr
+_kernel_abt_hdr:
+                               b               _kernel_abt_hdr
+
+                               .end
+
+
+/* end of file */
index d87834a..3bc11c8 100755 (executable)
@@ -9,7 +9,6 @@
 #include "arm_v4t.inc"
 
 
-                               .code   16
                                .text
                                .align  2
 
@@ -23,6 +22,9 @@
                        VP_INT         par2)            sp[0]:実行時パラメータ
  ************************************************/
                                .global _kernel_cre_ctx
+                               .code   16
+                               .thumb_func
+                               .type   _kernel_cre_ctx, %function
 _kernel_cre_ctx:
                                sub             r1, #36                                         /* スタックを確保 */
                                str             r2, [r1, #0]                            /* r4 部分にentryを設定 */
@@ -43,6 +45,9 @@ ctx_entry:
                                mov             r1, r6                                          /* par2を設定 */
                                bx              r4                                                      /* entry を実行 */
 
+                               .size   _kernel_cre_ctx, .-_kernel_cre_ctx
+
+
                                .end
 
 
diff --git a/kernel/source/arch/proc/arm/arm_v4t/gcc/kfiq_hdr.S b/kernel/source/arch/proc/arm/arm_v4t/gcc/kfiq_hdr.S
new file mode 100755 (executable)
index 0000000..18f97bb
--- /dev/null
@@ -0,0 +1,125 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "arm_v4t.inc"
+
+
+                               .code   32
+                               .text
+                               .align  2
+
+                               .global _kernel_ictxcb
+                               .global _kernel_sta_inh
+                               .global _kernel_end_inh
+                               .global _kernel_exe_inh
+
+
+/************************************************
+  FIQ handler
+ ************************************************/
+                               .global _kernel_fiq_hdr
+_kernel_fiq_hdr:
+                       /* ---- レジスタ退避 */
+                               mrs             r13, cpsr                                                               /* cpsrをr13に退避 */
+                               msr             cpsr_c, #(Mode_SYS | F_Bit | I_Bit)             /* SYSモードに移行 */
+                               stmfd   sp!, {r0-r3, r12, lr}                                   /* SYSモードの汎用レジスタ退避 */
+                               msr             cpsr_c, #(Mode_FIQ | F_Bit | I_Bit)             /* IRQモードに移行 */
+                               mov             r0, lr                                                                  /* lr_irq 取り出し */
+                               mrs             r1, spsr                                                                /* spsr_irq 取り出し */
+                               mov             r2, r13                                                                 /* cpsrを取り出し */
+                               msr             cpsr_c, #(Mode_SYS | F_Bit | I_Bit)             /* SYSモードに移行 */
+                               stmfd   sp!, {r0, r1}                                                   /* lr_fiq, spsr_fiq退避 */
+                               
+                       /* ---- 割込みマスク設定 */
+                               ldr             r0, =_kernel_ictxcb
+                               ldr             r3, [r0, #ICTXCB_IMSK]                                  /* 古いimsk値を取り出し */
+                               and             r2, r2, #(F_Bit | I_Bit)
+                               strb    r2, [r0, #ICTXCB_IMSK]                                  /* cpsr値をimsk値に設定 */
+                               
+                       /* ---- 多重割込み判定 */
+                               ldrb    r1, [r0, #ICTXCB_INTCNT]                                /* 割り込みネストカウンタ値取得 */
+                               add             r1, r1, #1                                                              /* 割り込みネストカウンタインクリメント */
+                               strb    r1, [r0, #ICTXCB_INTCNT]                                /* 割り込みネストカウンタ設定 */
+                               cmp             r1, #1
+                               bne             multiple_int                                                    /* 多重割り込みなら分岐 */
+                               
+                       /* ---- SPを割込みコンテキストのものに切替え */
+                               mov             r1, sp                                                                  /* タスクのSPを保存 */
+                               ldr             sp, [r0, #ICTXCB_ISP]                                   /* 割り込み用スタックに切り替え */
+                               stmfd   sp!, {r1, r3}                                                   /* タスクのSPと旧imask保存 */
+                               
+                       /* ---- 割込み開始処理 */
+                               bl              _kernel_sta_inh                                                 /* 割り込み開始 */
+                               
+                       /* ---- 割込みハンドラ実行 */
+                               mov             r0, #INHNO_IRQ
+                               bl              _kernel_exe_inh
+                               
+                       /* ---- 割込み処理の終了設定 */
+                               ldmfd   sp!, {r1, r3}                                                   /* 汎用レジスタ復帰 */
+                               mov             sp, r1                                                                  /* SPを元のコンテキストのものに戻す */
+                               ldr             r0, =_kernel_ictxcb                                             /* 割り込みネストカウンタのアドレス取得 */
+                               mov             r1, #0                                                                  /* 割り込みネストカウンタを0に戻す */
+                               strb    r1, [r0, #ICTXCB_INTCNT]                                /* 割り込みネストカウンタ値設定 */
+                       
+                       /* ---- 割込みマスク値復帰処理 */
+                               ldr             r1, [sp, #4]                                                    /* spsr_fiq 値取り出し */
+                               and             r1, r1, #(F_Bit | I_Bit)
+                               cmp             r1, r3                                                                  /* 旧imsk値と比較 */
+                               bne             return_int                                                              /* 不一致なら終了処理スキップ */
+                               strb    r3, [r0, #ICTXCB_IMSK]                                  /* マスク値復帰 */
+                               
+                       /* ---- 割込み終了処理 */
+                               bl              _kernel_end_inh                                                 /* 割り込み終了処理 */
+
+                               ldr             r0, =_kernel_ictxcb
+                               ldr             r1, [sp, #4]                                                    /* spsr_irq 値取り出し */
+                               ldrb    r0, [r0, #ICTXCB_IMSK]                                  /* この時点でのimsk値取り出し */
+                               bic             r1, r1, #(F_Bit | I_Bit)
+                               and             r0, r0, #(F_Bit | I_Bit)
+                               orr             r1, r1, r0
+                               str             r1, [sp, #4]                                                    /* spsr_irq にimsk値反映 */
+
+return_int:
+                       /* ---- 復帰処理 */
+                               ldmfd   sp!, {r0, r1}                                                   /* lr_fiq, spsr_fiq 復帰 */
+                               msr             cpsr_c, #(Mode_FIQ | F_Bit | I_Bit)             /* FIQモードに移行 */
+                               mov             lr, r0                                                                  /* lr_irq 復帰 */
+                               msr             spsr_csxf, r1                                                   /* spsr_fiq 復帰 */
+                               msr             cpsr_c, #(Mode_SYS | F_Bit | I_Bit)             /* SYSモードに移行 */
+                               ldmfd   sp!, {r0-r3, r12, lr}                                   /* SYSモードの汎用レジスタ復帰 */
+                               msr             cpsr_c, #(Mode_FIQ | F_Bit | I_Bit)             /* FIQモードに移行 */
+                               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, #ICTXCB_INTCNT]
+                               add             r1, r1, #1
+                               strb    r1, [r0, #ICTXCB_INTCNT]
+                               b               return_int                                                              /* 復帰処理 */
+
+
+                               .end
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/arm/arm_v4t/gcc/kpre_hdr.S b/kernel/source/arch/proc/arm/arm_v4t/gcc/kpre_hdr.S
new file mode 100755 (executable)
index 0000000..813b328
--- /dev/null
@@ -0,0 +1,27 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "arm_v4t.inc"
+
+
+                               .code   32
+                               .text
+                               .align  2
+
+
+/************************************************
+  Prefetch abort handler
+ ************************************************/
+                               .global _kernel_pre_hdr
+_kernel_pre_hdr:
+                               b               _kernel_pre_hdr
+
+                               .end
+
+
+/* end of file */
index b8439f1..2462f9d 100755 (executable)
@@ -33,7 +33,8 @@ _kernel_swi_ctx:
                                .global _kernel_sta_ctx
 _kernel_sta_ctx:
                                ldr             sp, [r0]                                        /* スタックポインタ復帰 */
-                               ldmfd   sp!, {r4-r11, pc}                       /* レジスタ復帰 */
+                               ldmfd   sp!, {r4-r11, lr}                       /* レジスタ復帰 */
+                               bx              lr
 
                                .end
 
diff --git a/kernel/source/arch/proc/arm/arm_v4t/gcc/kswi_hdr.S b/kernel/source/arch/proc/arm/arm_v4t/gcc/kswi_hdr.S
new file mode 100755 (executable)
index 0000000..0e2b3f8
--- /dev/null
@@ -0,0 +1,32 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "arm_v4t.inc"
+
+
+                               .code   32
+                               .text
+                               .align  2
+
+                               .global _kernel_ictxcb
+                               .global _kernel_sta_inh
+                               .global _kernel_end_inh
+                               .global _kernel_exe_inh
+
+
+/************************************************
+  SWI handler
+ ************************************************/
+                               .global _kernel_swi_hdr
+_kernel_swi_hdr:
+                               movs    pc, r14
+
+                               .end
+
+
+/* end of file */
diff --git a/kernel/source/arch/proc/arm/arm_v4t/gcc/kund_hdr.S b/kernel/source/arch/proc/arm/arm_v4t/gcc/kund_hdr.S
new file mode 100755 (executable)
index 0000000..700e258
--- /dev/null
@@ -0,0 +1,27 @@
+/** 
+ *  Hyper Operating System V4 Advance
+ *
+ * Copyright (C) 1998-2007 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "arm_v4t.inc"
+
+
+                               .code   32
+                               .text
+                               .align  2
+
+
+/************************************************
+  Undefined handler
+ ************************************************/
+                               .global _kernel_und_hdr
+_kernel_und_hdr:
+                               b               _kernel_und_hdr
+
+                               .end
+
+
+/* end of file */
diff --git a/sample/arm/aduc7000/armcc/gmake.mak b/sample/arm/aduc7000/armcc/gmake.mak
new file mode 100755 (executable)
index 0000000..9532547
--- /dev/null
@@ -0,0 +1,102 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#
+# Copyright (C) 1998-2007 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+
+# %jp{ターゲット名}
+TARGET ?= sample
+
+# %jp{ディレクトリ定義}
+OS_DIR            = ../../../..
+KERNEL_DIR        = $(OS_DIR)/kernel
+KERNEL_CFGRTR_DIR = $(OS_DIR)/cfgrtr/build/gcc
+KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake
+KERNEL_BUILD_DIR  = $(KERNEL_DIR)/build/arm/aduc7000/armcc
+OBJS_DIR          = objs_$(TARGET)
+
+# %jp{共通定義読込み}
+include $(KERNEL_MAKINC_DIR)/common.inc
+
+
+# デバッグ版のターゲット名変更
+ifeq ($(DEBUG),Yes)
+TARGET := $(TARGET)dbg
+endif
+
+# %jp{メモリマップ}
+SECTION_ROM  ?= 0x00000000
+SECTION_RAM  ?= 0x00010000
+
+
+# %jp{フラグ設定}
+CFLAGS  = --cpu=ARM7TDMI --apcs=inter --thumb
+AFLAGS  = --cpu=ARM7TDMI --apcs=inter --thumb
+LNFLAGS = --ro_base=$(SECTION_ROM) --rw_base=$(SECTION_RAM) --first=vectors.o --entry=$(SECTION_ROM)
+
+
+# %jp{コンフィギュレータ定義}
+KERNEL_CFGRTR = $(KERNEL_CFGRTR_DIR)/h4acfg-aduc7000
+
+
+# 出力ファイル名
+TARGET_EXE = $(TARGET).axf
+TARGET_MOT = $(TARGET).mot
+TARGET_HEX = $(TARGET).hex
+
+
+# %jp{armcc用の設定読込み}
+include $(KERNEL_MAKINC_DIR)/armcc_def.inc
+
+# ソースディレクトリ
+SRC_DIRS += . ..
+
+# アセンブラファイルの追加
+ASRCS += ./vectors.s           \
+         ./startup.s           \
+         ./uish.s
+
+
+# %jp{C言語ファイルの追加}
+CSRCS += ../kernel_cfg.c       \
+         ../main.c                     \
+         ../sample.c           \
+         ../ostimer.c          \
+         ../uart.c
+
+
+
+# --------------------------------------
+#  %jp{ルール}
+# --------------------------------------
+
+.PHONY : all
+all: makeexe_all $(TARGET_EXE) $(TARGET_MOT) $(TARGET_HEX)
+
+clean: makeexe_clean
+       rm -f $(TARGET_EXE) $(TARGET_EXE) $(OBJS) ../kernel_cfg.c ../kernel_id.h
+
+../kernel_cfg.c ../kernel_id.h: ../system.cfg
+       cpp -E ../system.cfg ../system.i
+       $(KERNEL_CFGRTR) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h
+
+
+# %jp{ライブラリ生成用設定読込み}
+include $(KERNEL_MAKINC_DIR)/makeexe.inc
+
+# %jp{armcc用のルール定義読込み}
+include $(KERNEL_MAKINC_DIR)/armcc_rul.inc
+
+
+
+# --------------------------------------
+#  %jp{依存関係}
+# --------------------------------------
+
+$(OBJS_DIR)/sample.obj: ../sample.c ../kernel_id.h
+
+
+# end of file
+
diff --git a/sample/arm/aduc7000/armcc/startup.s b/sample/arm/aduc7000/armcc/startup.s
new file mode 100755 (executable)
index 0000000..727bb02
--- /dev/null
@@ -0,0 +1,76 @@
+
+                               EXPORT  Reset_Handler
+                               EXPORT  Undefined_Handler
+                               EXPORT  Swi_Handler
+                               EXPORT  Prefetch_Handler
+                               EXPORT  Abort_Handler
+                               IMPORT  _kernel_int_isp
+
+
+
+; %jp{プロセッサモード定義}
+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            ; モードビットマスク
+
+; %jp{フラグ定義}
+T_Bit                  EQU             0x20            ; T ビット
+F_Bit                  EQU     0x40            ; F ビット
+I_Bit                  EQU     0x80            ; I ビット
+
+
+
+                               CODE32
+
+                               PRESERVE8
+                               AREA    Init, CODE, READONLY
+
+
+; リセットハンドラ
+Reset_Handler
+               ; --- SYSモード移行
+                               msr             cpsr_c, #Mode_SYS:OR:F_Bit:OR:I_Bit
+
+               ; --- スタック仮設定
+                               ldr             r0, =_kernel_int_isp
+                               ldr     sp, [r0]
+                               
+               ; --- C言語コードにジャンプ
+                               IMPORT  __main
+                               bl              __main
+end_loop
+                               b               end_loop
+
+
+
+
+;  SWIハンドラ
+Swi_Handler
+                               movs    pc, lr
+
+
+;  Undefined ハンドラ
+Undefined_Handler
+                               b               Undefined_Handler
+
+
+;  Prefetch ハンドラ
+Prefetch_Handler
+                               b               Prefetch_Handler
+
+
+;  Abort ハンドラ
+Abort_Handler
+                               b               Abort_Handler
+
+
+
+                               END
+
+
+; end of file                                            
diff --git a/sample/arm/aduc7000/armcc/uish.s b/sample/arm/aduc7000/armcc/uish.s
new file mode 100755 (executable)
index 0000000..9309dcb
--- /dev/null
@@ -0,0 +1,38 @@
+
+HEAP_SIZE              EQU             256
+
+
+                               EXPORT  __user_initial_stackheap
+                               IMPORT  __use_two_region_memory
+                               
+                               IMPORT  _kernel_int_stkblk
+                               IMPORT  _kernel_int_isp
+
+
+                               PRESERVE8
+                               AREA    UISH, CODE, READONLY
+                               CODE32
+
+__user_initial_stackheap       FUNCTION
+                               
+                               ldr             r0, =User_Heap                          ; Heap Base
+                               ldr             r2, =HEAP_SIZE
+                               add             r2, r2, r0                                      ; Heap Limit
+                               
+                               ldr             r1, =_kernel_int_isp
+                               ldr             r1, [r1]                                        ; Stack Base
+                               ldr             r3, =_kernel_int_stkblk         ; Stack Limit
+
+                               bx              lr
+
+                               ENDFUNC
+
+
+
+                               AREA    ||.bss||, NOINIT, ALIGN=2
+User_Heap
+                               %       HEAP_SIZE
+
+
+
+                               END
diff --git a/sample/arm/aduc7000/armcc/vectors.s b/sample/arm/aduc7000/armcc/vectors.s
new file mode 100755 (executable)
index 0000000..d5528a4
--- /dev/null
@@ -0,0 +1,42 @@
+
+
+                               IMPORT  Reset_Handler
+                               IMPORT  Undefined_Handler
+                               IMPORT  Swi_Handler
+                               IMPORT  Prefetch_Handler
+                               IMPORT  Abort_Handler
+                               IMPORT  _kernel_irq_hdr
+                               IMPORT  _kernel_fiq_hdr
+
+
+                               CODE32
+
+                               PRESERVE8
+                               AREA    Init, CODE, READONLY
+
+                               ENTRY
+
+                               ldr     pc, Reset_Addr
+                               ldr     pc, Undefined_Addr
+                               ldr     pc, Swi_Addr
+                               ldr     pc, Prefetch_Addr
+                               ldr     pc, Abort_Addr
+                               nop
+                               ldr     pc, IRQ_Addr
+                               ldr     pc, FIQ_Addr
+
+
+Reset_Addr             dcd             Reset_Handler
+Undefined_Addr dcd             Undefined_Handler
+Swi_Addr               dcd             Swi_Handler
+Prefetch_Addr  dcd             Prefetch_Handler
+Abort_Addr             dcd             Abort_Handler
+IRQ_Addr               dcd             _kernel_irq_hdr
+FIQ_Addr               dcd             _kernel_fiq_hdr
+
+
+                               END
+
+
+
+; end of file
diff --git a/sample/arm/aduc7000/gcc/crt0.S b/sample/arm/aduc7000/gcc/crt0.S
new file mode 100755 (executable)
index 0000000..e270d74
--- /dev/null
@@ -0,0 +1,82 @@
+/* ------------------------------------------------------------------------ */
+/*  Hyper Operating System V4 Advance                                       */
+/*    Sample program for ADuC7000 series                                    */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2007 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+                               .extern         __kernel_int_isp
+                               .extern         ___data
+                               .extern         ___data_end
+                               .extern         ___bss
+                               .extern         ___bss_end
+                               .extern         main
+
+                               .global         _reset_handler
+                               .global         __main
+
+
+                               .text
+
+#define Mode_USR               0x10
+#define Mode_IRQ               0x12
+#define Mode_FIQ               0x11
+#define Mode_SVC               0x13
+#define Mode_UND               0x1b
+#define Mode_SYS               0x1f
+#define I_Bit                  0x80
+#define F_Bit                  0x40
+#define T_Bit                  0x20
+
+
+/************************************************
+  リセットハンドラ
+************************************************/
+                               .align          4
+_reset_handler:        
+                               /* モード設定 */
+                               msr             cpsr_c, #(Mode_SYS | F_Bit | I_Bit)
+                               
+                               /* スタック仮設定 */
+                               ldr             r0, =_kernel_int_isp
+                               ldr     sp, [r0]
+                               
+                               
+                               /* DATA領域のコピー */
+                               ldr             r0, =___data_rom
+                               ldr             r1, =___data
+                               ldr             r2, =___data_end
+data_loop:             
+                               cmp             r1, r2
+                               ldrcc   r3, [r0], #4
+                               strcc   r3, [r1], #4
+                               bcc             data_loop
+                               
+                               
+                               /* BSS領域の初期化 */
+                               ldr             r0, =___bss
+                               ldr             r1, =___bss_end
+                               mov             r2, #0
+bss_loop:              
+                               cmp             r0, r1
+                               strcc   r2, [r0], #4
+                               bcc             bss_loop
+                               
+                               
+                               /* main関数の呼び出し */
+                               bl              main
+end_loop:
+                               b               end_loop
+
+
+__main:
+                               bx              lr
+
+
+
+                               .end
+
+
+/* end of file */
diff --git a/sample/arm/aduc7000/gcc/gmake.mak b/sample/arm/aduc7000/gcc/gmake.mak
new file mode 100755 (executable)
index 0000000..f76bfce
--- /dev/null
@@ -0,0 +1,104 @@
+# ----------------------------------------------------------------------------
+# Hyper Operating System V4 Advance
+#
+# Copyright (C) 1998-2007 by Project HOS
+# http://sourceforge.jp/projects/hos/
+# ----------------------------------------------------------------------------
+
+# %jp{ターゲット名}
+TARGET ?= sample
+
+# %jp{ツール定義}
+GCC_SYS    ?= arm-elf-
+CMD_CC     ?= $(GCC_SYS)gcc
+CMD_ASM    ?= $(GCC_SYS)gcc
+CMD_LINK   ?= $(GCC_SYS)gcc
+CMD_OBJCNV ?= $(GCC_SYS)objcopy
+
+
+# %jp{ディレクトリ定義}
+OS_DIR            = ../../../..
+KERNEL_DIR        = $(OS_DIR)/kernel
+KERNEL_CFGRTR_DIR = $(OS_DIR)/cfgrtr/build/gcc
+KERNEL_MAKINC_DIR = $(KERNEL_DIR)/build/common/gmake
+KERNEL_BUILD_DIR  = $(KERNEL_DIR)/build/arm/aduc7000/gcc
+OBJS_DIR          = objs_$(TARGET)
+
+# %jp{共通定義読込み}
+include $(KERNEL_MAKINC_DIR)/common.inc
+
+# デバッグ版のターゲット名変更
+ifeq ($(DEBUG),Yes)
+TARGET := $(TARGET)dbg
+endif
+
+# リンカスクリプト
+LINK_SCRIPT = link.x
+
+
+# %jp{フラグ設定}
+CFLAGS  = -mcpu=arm7tdmi -mthumb-interwork
+AFLAGS  = -mcpu=arm7tdmi -mthumb-interwork
+LNFLAGS = -mcpu=arm7tdmi -mthumb-interwork -nostartfiles -Wl,-Map,$(TARGET).map,-T$(LINK_SCRIPT)
+
+
+# %jp{コンフィギュレータ定義}
+KERNEL_CFGRTR = $(KERNEL_CFGRTR_DIR)/h4acfg-aduc7000
+
+# 出力ファイル名
+TARGET_EXE = $(TARGET).$(EXT_EXE)
+TARGET_MOT = $(TARGET).$(EXT_MOT)
+TARGET_HEX = $(TARGET).$(EXT_HEX)
+
+
+# %jp{gcc用の設定読込み}
+include $(KERNEL_MAKINC_DIR)/gcc_def.inc
+
+# ソースディレクトリ
+SRC_DIRS += . ..
+
+# アセンブラファイルの追加
+ASRCS += ./vectors.S           \
+         ./crt0.S
+
+# %jp{C言語ファイルの追加}
+CSRCS += ../kernel_cfg.c       \
+         ../main.c                     \
+         ../sample.c           \
+         ../ostimer.c          \
+         ../uart.c
+
+
+
+# --------------------------------------
+#  %jp{ルール}
+# --------------------------------------
+
+.PHONY : all
+all: makeexe_all $(TARGET_EXE) $(TARGET_MOT) $(TARGET_HEX)
+
+clean: makeexe_clean
+       rm -f $(TARGET_EXE) $(TARGET_EXE) $(OBJS) ../kernel_cfg.c ../kernel_id.h
+
+../kernel_cfg.c ../kernel_id.h: ../system.cfg
+       cpp -E ../system.cfg ../system.i
+       $(KERNEL_CFGRTR) ../system.i -c ../kernel_cfg.c -i ../kernel_id.h
+
+
+# %jp{ライブラリ生成用設定読込み}
+include $(KERNEL_MAKINC_DIR)/makeexe.inc
+
+# %jp{gcc用のルール定義読込み}
+include $(KERNEL_MAKINC_DIR)/gcc_rul.inc
+
+
+
+# --------------------------------------
+#  %jp{依存関係}
+# --------------------------------------
+
+$(OBJS_DIR)/sample.$(EXT_OBJ): ../sample.c ../kernel_id.h
+
+
+# end of file
+
diff --git a/sample/arm/aduc7000/gcc/link.x b/sample/arm/aduc7000/gcc/link.x
new file mode 100755 (executable)
index 0000000..e84cc12
--- /dev/null
@@ -0,0 +1,54 @@
+OUTPUT_ARCH(arm)
+ENTRY(_reset_handler)
+
+MEMORY
+{
+       vector : o = 0x00000000, l = 0x00000040
+       rom    : o = 0x00000040, l = 0x0000ffc0
+       ram    : o = 0x00010000, l = 0x00002000
+}
+
+SECTIONS
+{
+       .vector :
+       {
+               ___vector = . ; 
+               */vectors.o(.text)
+               FILL(0xff)
+               ___vector_end = . ; 
+       } > vector
+       .text :
+       {
+                ___text = . ; 
+               *(.text)
+               *(.strings)
+               *(.rodata*)
+               *(.glue*)
+                ___text_end = . ; 
+       }  > rom
+       .tors :
+       {
+               . = ALIGN(4);
+               ___ctors = . ;
+               *(.ctors)
+               ___ctors_end = . ;
+               ___dtors = . ;
+               *(.dtors)
+               ___dtors_end = . ;
+       } > rom
+       data : AT (ADDR(.tors) + SIZEOF(.tors))
+       {
+           ___data_rom = ADDR(.tors) + SIZEOF(.tors);
+               ___data = . ;
+               *(.data)
+               ___data_end = . ;
+       } > ram
+       .bss :
+       {
+               ___bss = . ;
+               *(.bss)
+               *(COMMON)
+               ___bss_end = . ;  
+       }  >ram
+}
+
diff --git a/sample/arm/aduc7000/gcc/vectors.S b/sample/arm/aduc7000/gcc/vectors.S
new file mode 100755 (executable)
index 0000000..c0f5a86
--- /dev/null
@@ -0,0 +1,55 @@
+/* ------------------------------------------------------------------------ */
+/*  Hyper Operating System V4  サンプルプログラム                           */
+/*    ベクタテーブル                                                        */
+/*                                                                          */
+/*                                  Copyright (C) 1998-2007 by Project HOS  */
+/*                                  http://sourceforge.jp/projects/hos/     */
+/* ------------------------------------------------------------------------ */
+
+
+               /* --- 外部定数宣言 */
+                               .global _reset_handler
+                               .global _kernel_und_hdr
+                               .global _kernel_swi_hdr
+                               .global _kernel_pre_hdr
+                               .global _kernel_abt_hdr
+                               .global _kernel_irq_hdr
+                               .global _kernel_fiq_hdr
+
+
+                               .text
+                               .align  2
+
+/* --------------------------------------- */
+/*            ベクタ定義                   */
+/* --------------------------------------- */
+                               ldr             pc, adr_rst_hdr
+                               ldr             pc, adr_und_hdr
+                               ldr             pc, adr_swi_hdr
+                               ldr             pc, adr_pre_hdr
+                               ldr             pc, adr_abt_hdr
+                               nop
+                               ldr             pc, adr_irq_hdr
+                               ldr             pc, adr_fiq_hdr
+
+
+adr_rst_hdr:   
+                               .long   _reset_handler
+adr_und_hdr:           
+                               .long   _kernel_und_hdr
+adr_swi_hdr:   
+                               .long   _kernel_swi_hdr
+adr_pre_hdr:           
+                               .long   _kernel_pre_hdr
+adr_abt_hdr:
+                               .long   _kernel_abt_hdr
+adr_irq_hdr:
+                               .long   _kernel_irq_hdr
+adr_fiq_hdr:
+                               .long   _kernel_fiq_hdr
+
+
+                               .end
+
+
+/* end of file */