--- /dev/null
+# ----------------------------------------------------------------------------
+# 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
--- /dev/null
+# ----------------------------------------------------------------------------
+# 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
# %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}
--- /dev/null
+/**
+ * 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 */
--- /dev/null
+/**
+ * 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 */
#include "arm_v4t.inc"
- .code 16
.text
.align 2
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を設定 */
mov r1, r6 /* par2を設定 */
bx r4 /* entry を実行 */
+ .size _kernel_cre_ctx, .-_kernel_cre_ctx
+
+
.end
--- /dev/null
+/**
+ * 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 */
--- /dev/null
+/**
+ * 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 */
.global _kernel_sta_ctx
_kernel_sta_ctx:
ldr sp, [r0] /* スタックポインタ復帰 */
- ldmfd sp!, {r4-r11, pc} /* レジスタ復帰 */
+ ldmfd sp!, {r4-r11, lr} /* レジスタ復帰 */
+ bx lr
.end
--- /dev/null
+/**
+ * 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 */
--- /dev/null
+/**
+ * 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 */
--- /dev/null
+# ----------------------------------------------------------------------------
+# 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
+
--- /dev/null
+
+ 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
--- /dev/null
+
+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
--- /dev/null
+
+
+ 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
--- /dev/null
+/* ------------------------------------------------------------------------ */
+/* 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 */
--- /dev/null
+# ----------------------------------------------------------------------------
+# 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
+
--- /dev/null
+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
+}
+
--- /dev/null
+/* ------------------------------------------------------------------------ */
+/* 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 */