Index: ssp_armv6_m_gcc/trunk/armv6_m_gcc/MANIFEST
===================================================================
--- ssp_armv6_m_gcc/trunk/armv6_m_gcc/MANIFEST	(revision 411)
+++ ssp_armv6_m_gcc/trunk/armv6_m_gcc/MANIFEST	(revision 421)
@@ -5,12 +5,11 @@
 Makefile.prc
 arm_m.h
-prc.tf
 prc_cfg1_out.h
-prc_check.tf
+prc_check.trb
 prc_config.c
 prc_config.h
-prc_def.csv
 prc_insn.h
 prc_kernel.h
+prc_kernel.trb
 prc_rename.def
 prc_rename.h
@@ -18,7 +17,8 @@
 prc_stddef.h
 prc_support.S
+prc_sym.def
 prc_test.h
+prc_timer.c
 prc_timer.cfg
-prc_timer.c
 prc_timer.h
 prc_unrename.h
Index: ssp_armv6_m_gcc/trunk/armv6_m_gcc/Makefile.prc
===================================================================
--- ssp_armv6_m_gcc/trunk/armv6_m_gcc/Makefile.prc	(revision 411)
+++ ssp_armv6_m_gcc/trunk/armv6_m_gcc/Makefile.prc	(revision 421)
@@ -1,5 +1,5 @@
 #
 #  @(#) $Id: Makefile.prc 1304 2008-08-27 07:28:36Z ertl-honda $
-# 
+#
 
 #
@@ -7,10 +7,13 @@
 #
 
+PRCDIR = $(SRCDIR)/arch/$(PRC)_$(TOOL)
+
 #
 #  コンパイルオプション
 #
-INCLUDES := $(INCLUDES) -I$(SRCDIR)/arch/$(PRC)_$(TOOL)/
-LDFLAGS := -nostdlib $(LDFLAGS) 
+COPTS := $(COPTS)
 CDEFS := $(CDEFS) -DTOPPERS_LABEL_ASM
+INCLUDES := $(INCLUDES) -I$(PRCDIR)
+LDFLAGS := -nostdlib $(LDFLAGS)
 LIBS := $(LIBS)  -lgcc
 
@@ -18,16 +21,27 @@
 #  カーネルに関する定義
 #
-KERNEL_DIR := $(KERNEL_DIR) $(SRCDIR)/arch/$(PRC)_$(TOOL)
+KERNEL_DIRS := $(KERNEL_DIRS) $(PRCDIR)
 KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) prc_support.o
 KERNEL_COBJS := $(KERNEL_COBJS) prc_config.o prc_timer.o
+KERNEL_CFLAGS := $(KERNEL_CFLAGS)
 
 #
 #  コンフィギュレータ関係の変数の定義
 #
-CFG_TABS := $(CFG_TABS) --cfg1-def-table $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc_def.csv
+CFG_TABS := $(CFG_TABS) --symval-table $(PRCDIR)/prc_sym.def
+CFG1_OUT_LDFLAGS := $(CFG1_OUT_LDFLAGS)
+CFG_OBJS := $(CFG_OBJS)
+CFG2_OUT := $(CFG2_OUT)
 
 #
 #  依存関係の定義
 #
-cfg1_out.c: $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc_def.csv
-kernel_cfg.timestamp: $(SRCDIR)/arch/$(PRC)_$(TOOL)/prc.tf
+cfg1_out.c: $(PRCDIR)/prc_sym.def
+kernel_cfg.timestamp: $(PRCDIR)/prc_kernel.trb
+check.timestamp: $(PRCDIR)/prc_check.trb
+
+#
+#  その他
+#
+CLEAN_FILES := $(CLEAN_FILES)
+REALCLEAN_FILES := $(REALCLEAN_FILES)
Index: ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc.tf
===================================================================
--- ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc.tf	(revision 411)
+++ 	(revision )
@@ -1,142 +1,0 @@
-$ 
-$     パス2のアーキテクチャ依存テンプレート（ARMv6-M用）
-$ 
-
-$ 
-$  有効な割込み番号，割込みハンドラ番号
-$ 
-$INTNO_VALID = RANGE(15, TMAX_INTNO)$
-$INHNO_VALID = INTNO_VALID$
-
-$ 
-$  有効なCPU例外番号
-$ 
-$EXCNO_VALID = { 2,3,11,14 }$
-
-$ 
-$  ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
-$ 
-$INTNO_ATTISR_VALID = INTNO_VALID$
-$INHNO_ATTISR_VALID = INHNO_VALID$
-
-$ 
-$  DEF_INT／DEF_EXCで使用できる割込みハンドラ番号／CPU例外ハンドラ番号
-$ 
-$INHNO_DEFINH_VALID = INHNO_VALID$
-$EXCNO_DEFEXC_VALID = EXCNO_VALID$
-
-$ 
-$  チェック方法の指定
-$ 
-$CHECK_STKSZ_ALIGN = 8$
-
-$ 
-$  CFG_INTで使用できる割込み番号と割込み優先度
-$ 
-$INTNO_CFGINT_VALID = INTNO_VALID$
-$INTPRI_CFGINT_VALID = RANGE(-(1 << TBITW_IPRI),-1)$
-
-$ 
-$  割込み属性中のターゲット依存に用いるビット
-$ 
-$ TARGET_INTATR = $
-           
-$ 
-$  標準テンプレートファイルのインクルード
-$ 
-$INCLUDE "kernel/kernel.tf"$
-
-/*$NL$
-$SPC$*  Target-dependent Definitions (ARMv6-M)$NL$
-$SPC$*/$NL$
-$NL$
-
-$ 
-$  ベクターテーブル
-$ 
-
-$FILE "kernel_cfg.c"$
-$NL$
-
-extern void kernel_svc_handler(void);$NL$
-$NL$
-
-__attribute__ ((section(".vector"))) $NL$
-const FP _kernel_vector_table[] =      $NL$ 
-{                                    $NL$
-$ 	$TAB$(FP)(TOPPERS_ISTKPT(TOPPERS_ISTK, TOPPERS_ISTKSZ)),   // 0 The initial stack pointer $NL$
-	$TAB$(FP)(TOPPERS_ISTKPT(TOPPERS_STK, TOPPERS_STKSZ)),   // 0 The initial stack pointer $NL$
-	$TAB$(FP)_start,                 // 1 The reset handler         $NL$
-
-$FOREACH excno {2,3,...,14}$ 
-	$TAB$(FP)(_kernel_exc_entry),
-	$SPC$$FORMAT("/* %d */", +excno)$$NL$
-$END$
-
-$FOREACH inhno INTNO_VALID$ 
-	$IF LENGTH(INH.INHNO[inhno]) && (INT.INTPRI[inhno] < TIPM_LOCK)$
-		$TAB$(FP)($INH.INTHDR[inhno]$),
-	$ELSE$
-		$TAB$(FP)(_kernel_int_entry),
-	$END$
-	$SPC$$FORMAT("/* %d */", +inhno)$$NL$
-$END$
-
-
-$NL$};$NL$
-$NL$
-
-$NL$
-const FP _kernel_exc_tbl[] = $NL$
-{$NL$
-$FOREACH excno {0,1,...,14}$
-	$IF LENGTH(EXC.EXCNO[excno])$
-		$TAB$(FP)($EXC.EXCHDR[excno]$),
-	$ELSE$
-		$TAB$(FP)(_kernel_default_exc_handler),
-	$END$
-	$SPC$$FORMAT("/* %d */", +excno)$$NL$
-$END$
-
-
-$FOREACH inhno INTNO_VALID$
-	$IF LENGTH(INH.INHNO[inhno])$
-		$TAB$(FP)($INH.INTHDR[inhno]$),
-	$ELSE$
-		$TAB$(FP)(_kernel_default_int_handler),
-	$END$
-	$SPC$$FORMAT("/* %d */", +inhno)$$NL$
-$END$
-
-
-$NL$};$NL$
-$NL$
-
-$ 
-$  _kernel_bitpat_cfgintの生成
-$ 
-
-$bitpat_cfgint_num = 0$
-$bitpat_cfgint = 0$
-
-
-const uint32_t _kernel_bitpat_cfgint[
-$IF (TMAX_INTNO & 0x0f) == 0x00 $
-	$bitpat_cfgint_num = (TMAX_INTNO >> 4)$
-$ELSE$
-	$bitpat_cfgint_num = (TMAX_INTNO >> 4) + 1$
-$END$
-	$bitpat_cfgint_num$
-] = {$NL$
-$FOREACH num RANGE(0,(bitpat_cfgint_num-1))$
-	$bitpat_cfgint = 0$
-	$FOREACH inhno RANGE(num*32, (num*32)+31)$
-		$IF LENGTH(INH.INHNO[inhno])$
-			$bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))$
-		$END$
-	$END$
-	$TAB$UINT32_C($FORMAT("0x%08x", bitpat_cfgint)$), $NL$
-$END$
-
-$NL$};$NL$
-$NL$
Index: ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_check.tf
===================================================================
--- ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_check.tf	(revision 411)
+++ 	(revision )
@@ -1,18 +1,0 @@
-$ 
-$ 		パス3のプロセッサ依存テンプレート（ARM-M用）
-$ 
-
-$ 
-$  チェック方法の指定
-$ 
-$CHECK_FUNC_ALIGN = 1$
-$CHECK_FUNC_NONNULL = 1$
-$CHECK_STACK_ALIGN = 8$
-$CHECK_STACK_NONNULL = 1$
-$CHECK_MPF_ALIGN = 4$
-$CHECK_MPF_NONNULL = 1$
-
-$ 
-$  標準テンプレートファイルのインクルード
-$ 
-$ $INCLUDE "kernel/kernel_check.tf"$
Index: ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_check.trb
===================================================================
--- ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_check.trb	(revision 421)
+++ ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_check.trb	(revision 421)
@@ -0,0 +1,54 @@
+# -*- coding: utf-8 -*-
+# 
+#		パス3の生成スクリプトのコア依存部（ARM用）
+# 
+#  $Id: core_check.trb 730 2016-04-03 02:04:52Z ertl-hiro $
+#
+
+#
+#  ターゲット非依存部のインクルード
+#
+IncludeTrb("kernel/kernel_check.trb")
+
+#
+#  割込みハンドラテーブルに関するチェック
+#
+# DEF_INHで登録した割込みハンドラのみチェックする．逆に言うと，コンフィ
+# ギュレータで生成した割込みハンドラや，default_int_handlerのチェックは
+# 行わない．
+#
+inhinib_entry = SYMBOL("_kernel_inhinib_entry")
+$cfgData[:DEF_INH].each do |key, params|
+  inthdr = PEEK(inhinib_entry, $sizeof_FP)
+
+  #	割込みハンドラの先頭番地のチェック
+  if (inthdr & ($CHECK_FUNC_ALIGN - 1)) != 0
+    error_wrong_id("E_PAR", params, :inthdr, :inhno, "not aligned")
+  end
+  if $CHECK_FUNC_NONNULL && inthdr == 0
+    error_wrong_id("E_PAR", params, :inthdr, :inhno, "null")
+  end
+
+  inhinib_entry += $sizeof_FP
+end
+
+#
+#  CPU例外ハンドラテーブルに関するチェック
+#
+# DEF_EXCで登録したCPU例外ハンドラのみチェックする．逆に言うと，
+# default_exc_handlerのチェックは行わない．
+#
+excinib_entry = SYMBOL("_kernel_excinib_entry")
+$cfgData[:DEF_EXC].each do |key, params|
+  exchdr = PEEK(excinib_entry, $sizeof_FP)
+
+  # CPU例外ハンドラの先頭番地のチェック
+  if (exchdr & ($CHECK_FUNC_ALIGN - 1)) != 0
+    error_wrong_id("E_PAR", params, :exchdr, :excno, "not aligned")
+  end
+  if $CHECK_FUNC_NONNULL && exchdr == 0
+    error_wrong_id("E_PAR", params, :exchdr, :excno, "null")
+  end
+
+  excinib_entry += $sizeof_FP
+end
Index: ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_def.csv
===================================================================
--- ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_def.csv	(revision 411)
+++ 	(revision )
@@ -1,3 +1,0 @@
-TMAX_INTNO,TMAX_INTNO
-TIPM_LOCK,TIPM_LOCK 
-TBITW_IPRI,TBITW_IPRI
Index: ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_kernel.trb
===================================================================
--- ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_kernel.trb	(revision 421)
+++ ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_kernel.trb	(revision 421)
@@ -0,0 +1,175 @@
+# -*- coding: utf-8 -*-
+#
+#   TOPPERS/SSP Kernel
+#       Toyohashi Open Platform for Embedded Real-Time Systems/
+#       Advanced Standard Profile Kernel
+# 
+#   Copyright (C) 2015 by FUJI SOFT INCORPORATED, JAPAN
+#   Copyright (C) 2015,2016 by Embedded and Real-Time Systems Laboratory
+#               Graduate School of Information Science, Nagoya Univ., JAPAN
+#   Copyright (C) 2017-2020 by Naoki Saito
+#              Nagoya Municipal Industrial Research Institute, JAPAN
+#
+# 
+#   上記著作権者は，以下の(1)〜(4)の条件を満たす場合に限り，本ソフトウェ
+#   ア（本ソフトウェアを改変したものを含む．以下同じ）を使用・複製・改
+#   変・再配布（以下，利用と呼ぶ）することを無償で許諾する．
+#   (1) 本ソフトウェアをソースコードの形で利用する場合には，上記の著作
+#       権表示，この利用条件および下記の無保証規定が，そのままの形でソー
+#       スコード中に含まれていること．
+#   (2) 本ソフトウェアを，ライブラリ形式など，他のソフトウェア開発に使
+#       用できる形で再配布する場合には，再配布に伴うドキュメント（利用
+#       者マニュアルなど）に，上記の著作権表示，この利用条件および下記
+#       の無保証規定を掲載すること．
+#   (3) 本ソフトウェアを，機器に組み込むなど，他のソフトウェア開発に使
+#       用できない形で再配布する場合には，次のいずれかの条件を満たすこ
+#       と．
+#     (a) 再配布に伴うドキュメント（利用者マニュアルなど）に，上記の著
+#         作権表示，この利用条件および下記の無保証規定を掲載すること．
+#     (b) 再配布の形態を，別に定める方法によって，TOPPERSプロジェクトに
+#         報告すること．
+#   (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
+#       害からも，上記著作権者およびTOPPERSプロジェクトを免責すること．
+#       また，本ソフトウェアのユーザまたはエンドユーザからのいかなる理
+#       由に基づく請求からも，上記著作権者およびTOPPERSプロジェクトを
+#       免責すること．
+# 
+#   本ソフトウェアは，無保証で提供されているものである．上記著作権者お
+#   よびTOPPERSプロジェクトは，本ソフトウェアに関して，特定の使用目的
+#   に対する適合性も含めて，いかなる保証も行わない．また，本ソフトウェ
+#   アの利用により直接的または間接的に生じたいかなる損害に関しても，そ
+#   の責任を負わない．
+# 
+#   $Id: core_kernel.trb 662 2016-02-27 02:33:51Z ertl-hiro $
+# 
+
+#
+#		パス2の生成スクリプトのコア依存部（ARMv6-M用）
+#
+
+#
+#  有効な割込み番号，割込みハンドラ番号
+#
+$INTNO_VALID = Array(15..$TMAX_INTNO)
+$INHNO_VALID = $INTNO_VALID
+
+#
+#  有効なCPU例外ハンドラ番号
+#
+$EXCNO_VALID = [ 2, 3, 11, 14 ]
+
+#
+#  ATT_ISRで使用できる割込み番号とそれに対応する割込みハンドラ番号
+#
+$INTNO_ATTISR_VALID = $INTNO_VALID
+$INHNO_ATTISR_VALID = $INHNO_VALID
+
+#
+#  DEF_INT/DEF_EXCで使用できる割込みハンドラ番号／CPU例外ハンドラ番号
+#
+$INHNO_DEFINH_VALID = $INHNO_VALID
+$EXCNO_DEFEXC_VALID = $EXCNO_VALID
+
+#
+#  チェック方法の指定
+#
+$CHECK_STKSZ_ALIGN = 8
+
+#
+#  CFG_INTで使用できる割込み番号と割込み優先度
+#
+$INTNO_CFGINT_VALID = $INTNO_VALID
+$INTPRI_CFGINT_VALID = Array(-(1 << $TBITW_IPRI)..-1)
+
+#
+#  割込み属性中のターゲット依存に用いるビット
+#
+#$TARGET_INTATR =
+
+#
+#  ターゲット非依存部のインクルード
+#
+IncludeTrb("kernel/kernel.trb")
+
+$kernelCfgC.comment_header("Target-dependent Definitions (ARMv6-M)")
+
+#
+#  割込みベクタテーブル
+#
+$kernelCfgC.comment_header("Interrupt Vector Table")
+
+$kernelCfgC.add("extern void kernel_svc_handler(void);")
+$kernelCfgC.add
+$kernelCfgC.add("__attribute__ ((section(\".vector\")))")
+$kernelCfgC.add("const FP _kernel_vector_table[] = {")
+$kernelCfgC.add("\t(FP)(TOPPERS_ISTKPT(TOPPERS_STK, TOPPERS_STKSZ)),   // 0 The initial stack pointer")
+$kernelCfgC.add("\t(FP)_start,                 // 1 The reset handler")
+
+(2..14).each do |excno|
+  $kernelCfgC.append("\t(FP)(_kernel_exc_entry),")
+  $kernelCfgC.add(" /* #{excno} */")
+end
+
+$INTNO_VALID.each do |inhno|
+  if ($cfgData[:DEF_INH].has_key?(inhno)) && ($cfgData[:CFG_INT][inhno][:intpri] < $TIPM_LOCK)
+    $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_INH][inhno][:inthdr]})")
+  else
+    $kernelCfgC.append("\t(FP)(_kernel_int_entry)")
+  end
+  $kernelCfgC.add(", /* #{inhno} */")
+end
+
+$kernelCfgC.add
+$kernelCfgC.add2("};")
+
+#
+#  CPU例外ハンドラテーブル
+#
+$kernelCfgC.comment_header("CPU Exception Handler Table")
+
+$kernelCfgC.add("const FP _kernel_exc_tbl[] = {")
+(0..14).each do |excno|
+  if $cfgData[:DEF_EXC].has_key?(excno)
+    $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_EXC][excno][:exchdr]})")
+  else
+    $kernelCfgC.append("\t(FP)(_kernel_default_exc_handler)")
+  end
+  $kernelCfgC.add(", /* #{excno} */")
+end
+
+$INTNO_VALID.each do |inhno|
+  if $cfgData[:DEF_INH].has_key?(inhno)
+    $kernelCfgC.append("\t(FP)(#{$cfgData[:DEF_INH][inhno][:inthdr]})")
+  else
+    $kernelCfgC.append("\t(FP)(_kernel_default_int_handler)")
+  end
+  $kernelCfgC.add(", /* #{inhno} */")
+end
+
+$kernelCfgC.add
+$kernelCfgC.add2("};")
+
+#
+#  _kernel_bitpat_cfgintの生成
+#
+
+if ($TMAX_INTNO & 0x0f) == 0
+  bitpat_cfgint_num = ($TMAX_INTNO >> 4)
+else
+  bitpat_cfgint_num = ($TMAX_INTNO >> 4) + 1
+end
+
+$kernelCfgC.add("const uint32_t _kernel_bitpat_cfgint[#{bitpat_cfgint_num}] = {")
+
+(0..(bitpat_cfgint_num-1)).each do |num|
+  bitpat_cfgint = 0
+  ((num*32)..(num*32+31)).each do |inhno|
+    if $cfgData[:DEF_INH].has_key?(inhno)
+      bitpat_cfgint = bitpat_cfgint | (1 << (inhno & 0x01f))
+    end
+  end
+  $kernelCfgC.add("\tUINT32_C(0x#{sprintf("%08x", bitpat_cfgint)}),")
+end
+
+$kernelCfgC.add2("};")
+
Index: ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_sym.def
===================================================================
--- ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_sym.def	(revision 421)
+++ ssp_armv6_m_gcc/trunk/armv6_m_gcc/prc_sym.def	(revision 421)
@@ -0,0 +1,3 @@
+TMAX_INTNO
+TIPM_LOCK,,signed 
+TBITW_IPRI
Index: ssp_armv6_m_gcc/trunk/build_ssp.sh
===================================================================
--- ssp_armv6_m_gcc/trunk/build_ssp.sh	(revision 421)
+++ ssp_armv6_m_gcc/trunk/build_ssp.sh	(revision 421)
@@ -0,0 +1,83 @@
+#!/usr/bin/env bash
+set -eu
+
+if [ ! -v SCRIPTS_DIR ]; then
+  SCRIPTS_DIR=$(cd $(dirname $0);pwd)
+fi
+
+if [ ! -v WORK_DIR ]; then
+  # if directory doesn't exist, it will be made
+  if [ ! -d $HOME/workdir ]; then
+    echo "$WORK_DIR doesn't exists. working directory 'toppers_workdir' will be made in current directory."
+    WORK_DIR=$(pwd)/toppers_workdir
+    mkdir -p $WORK_DIR
+  else
+    WORK_DIR=$HOME/workdir
+  fi
+fi
+
+SSP_DIR=$WORK_DIR/ssp
+SSP_PACKAGE=ssp-1.3.0.tar.gz
+SSP_DOWNLOAD_URL=https://www.toppers.jp/download.cgi/$SSP_PACKAGE
+SSP_RUBYCFG_FILES_URL=http://dev.toppers.jp/svn_user/contrib/rubycfg_ssp/trunk
+SSP_TARGET_NAME=lpcxpresso_lpc812_gcc
+
+ASP3_DIR=$WORK_DIR/asp3
+ASP3_PACKAGE=asp3-3.1.0.tar.gz
+ASP3_DOWNLOAD_URL=https://www.toppers.jp/download.cgi/$ASP3_PACKAGE
+
+: "setup tools (compiler, emulator, etc.)" && {
+  $SCRIPTS_DIR/setup_tools.sh
+  . $HOME/.profile
+}
+
+: "Download TOPPERS/ASP3 package to get a configurator files"  && {
+  cd $WORK_DIR
+  if [ ! -e $ASP3_DIR ]; then
+    if [ ! -e $ASP3_PACKAGE ]; then
+      curl $ASP3_DOWNLOAD_URL -o $ASP3_PACKAGE
+    fi
+    tar xvf $ASP3_PACKAGE
+  fi
+}
+
+: "if ssp directory already exists, rename it and create new directory" && {
+  cd $WORK_DIR
+  if [ -e $SSP_DIR ]; then
+    mv $SSP_DIR $SSP_DIR.$(date +%Y%m%d_%H%M%S)
+  fi
+
+  if [ ! -e $SSP_PACKAGE ]; then
+    curl $SSP_DOWNLOAD_URL -o $SSP_PACKAGE
+  fi
+
+  mkdir $SSP_DIR
+  tar xvf $SSP_PACKAGE -C $SSP_DIR --strip-components 2
+}
+
+: "setup source code(convert to UTF8, patch, etc.)" && {
+  for i in `find $SSP_DIR -type f` ; do nkf --overwrite --oc=UTF-8 $i; done
+  cp -a $ASP3_DIR/sample/Makefile $SSP_DIR/sample
+
+  svn co $SSP_RUBYCFG_FILES_URL rubycfg_ssp
+  rubycfg_ssp/install.sh $SSP_DIR
+
+  $SCRIPTS_DIR/install.sh $SSP_DIR
+
+  cd $SSP_DIR
+  cp -a $ASP3_DIR/configure.rb configure.rb
+  cp -a $ASP3_DIR/cfg cfg
+}
+
+: "build a kernel" && {
+  cd $SSP_DIR
+  if [ -e build ]; then
+    mv build build.$(date +%Y%m%d_%H%M%S)
+  fi
+  mkdir build
+  cd build
+  ../configure.rb -T $SSP_TARGET_NAME -w
+  make
+}
+
+exit 0
Index: ssp_armv6_m_gcc/trunk/install.sh
===================================================================
--- ssp_armv6_m_gcc/trunk/install.sh	(revision 421)
+++ ssp_armv6_m_gcc/trunk/install.sh	(revision 421)
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+set -eu
+
+SCRIPT_DIR=$(cd $(dirname $0);pwd)
+
+if [ $# -lt 1 ]; then
+  echo "usage: install.sh dest_ssp_dir"
+  exit 1
+else
+  SSPDIR=$1
+fi
+
+cp -a ${SCRIPT_DIR}/armv6_m_gcc ${SSPDIR}/arch/
+cp -a ${SCRIPT_DIR}/lpcxpresso_lpc812_gcc ${SSPDIR}/target/
+
+exit 0
Index: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/MANIFEST
===================================================================
--- ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/MANIFEST	(revision 411)
+++ ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/MANIFEST	(revision 421)
@@ -2,16 +2,17 @@
 
 E_PACKAGE
+LPC812M101FDH20.h
 MANIFEST
 Makefile.target
 lpcxpresso_lpc812.h
 lpcxpresso_lpc812.ld
-LPC812M101FDH20.h
-target.tf
+openocd_lpc812max.cfg
 target_cfg1_out.h
-target_check.tf
+target_check.trb
 target_config.c
 target_config.h
-target_def.csv
+target_kernel.cfg
 target_kernel.h
+target_kernel.trb
 target_rename.def
 target_rename.h
@@ -22,4 +23,5 @@
 target_stddef.h
 target_support.S
+target_sym.def
 target_syssvc.h
 target_test.h
Index: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/Makefile.target
===================================================================
--- ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/Makefile.target	(revision 411)
+++ ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/Makefile.target	(revision 421)
@@ -13,5 +13,4 @@
 #  CMSIS を使うかどうか
 #
-
 USE_CMSIS = false
 CMSIS_INCLUDE_PATH = /Users/saito/Documents/LPCXpresso_5.2.4/workspace/CMSIS_CORE_LPC8xx/inc
@@ -21,5 +20,4 @@
 #  MTB(Micro Trace Buffer)を使うかどうか
 #
-
 USE_MTB = false
 MTB_BUF_SIZE = 64
@@ -31,33 +29,28 @@
 
 #
-#  各セグメントの開始アドレスの定義
+#  コンパイルオプション
 #
+COPTS := $(COPTS) -mcpu=cortex-m0 -mthumb
+CDEFS := $(CDEFS) -D__NEWLIB__
+INCLUDES := $(INCLUDES) -I$(TARGETDIR)
+LDFLAGS := $(LDFLAGS)
+LIBS := $(LIBS)
 
 #
-#  コンパイルオプション
+#  システムサービスに関する定義
 #
-INCLUDES := $(INCLUDES) -I$(TARGETDIR)
-CDEFS := $(CDEFS) -D__NEWLIB__
-COPTS := $(COPTS) -mcpu=cortex-m0 -mthumb
+SYSSVC_DIRS := $(SYSSVC_DIRS)
+SYSSVC_ASMOBJS := $(SYSSVC_ASMOBJS)
+SYSSVC_COBJS := $(SYSSVC_COBJS)
+SYSSVC_CFLAGS := $(SYSSVC_CFLAGS)
+SYSSVC_LIBS := $(SYSSVC_LIBS)
 
 #
 #  カーネルに関する定義
 #
-KERNEL_DIR := $(KERNEL_DIR) $(TARGETDIR)
-KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) target_support.o 
+KERNEL_DIRS := $(KERNEL_DIRS) $(TARGETDIR)
+KERNEL_ASMOBJS := $(KERNEL_ASMOBJS) target_support.o
 KERNEL_COBJS := $(KERNEL_COBJS) target_config.o target_serial.o
 KERNEL_CFLAGS := $(KERNEL_CFLAGS) -fno-strict-aliasing
-
-#
-#  システムサービスに関する定義
-#
-SYSSVC_DIR := $(SYSSVC_DIR)
-SYSSVC_COBJS := $(SYSSVC_COBJS)
-SYSSVC_CFLAGS := $(SYSSVC_CFLAGS)
-
-#
-#  コンフィギュレータ関係の変数の定義
-#
-CFG_TABS := $(CFG_TABS) --cfg1-def-table $(TARGETDIR)/target_def.csv
 
 #
@@ -66,7 +59,27 @@
 ifeq ($(ENABLE_TRACE),true)
 	COPTS := $(COPTS) -DTOPPERS_ENABLE_TRACE
-	KERNEL_DIR := $(KERNEL_DIR) $(SRCDIR)/arch/logtrace
+	KERNEL_DIRS := $(KERNEL_DIRS) $(SRCDIR)/arch/logtrace
 	KERNEL_COBJS := $(KERNEL_COBJS) trace_config.o trace_dump.o
 endif
+
+#
+#  コンフィギュレータ関係の変数の定義
+#
+CFG_TABS := $(CFG_TABS) --symval-table $(TARGETDIR)/target_sym.def
+CFG1_OUT_LDFLAGS := $(CFG1_OUT_LDFLAGS)
+CFG_OBJS := $(CFG_OBJS)
+CFG2_OUT := $(CFG2_OUT)
+
+#
+#  -Wall オプションの省略
+#    -Wallを追加したくない場合に true に定義する
+#
+#OMIT_WARNING_ALL = true
+
+#
+#  最適化フラグの省略
+#    -O2を追加したくない場合に true に定義する
+#
+#OMIT_OPTIMIZATION = true
 
 #
@@ -99,17 +112,33 @@
 
 #
+#  各セクションの先頭番地の指定
+#
+#TEXT_START_ADDRESS =
+#DATA_START_ADDRESS =
+
+#
 #  スタートアップモジュールに関する定義
 #
+
+#  スタートアップモジュール
+START_OBJS =
 #  リンカスクリプトに「STARTUP(start.o)」を記述したため，スタートアップモジュー
 #  ルの名前をHIDDEN_OBJSに定義する．また，LDFLAGSに-nostdlibを追加している．
-#
 HIDDEN_OBJS = start.o
 
+# スタートアップモジュールのコンパイルルール
+$(START_OBJS): %.o: %.S
+	$(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<
 $(HIDDEN_OBJS): %.o: %.S
 	$(CC) -c $(CFLAGS) $(KERNEL_CFLAGS) $<
 
+
+# スタートアップモジュールの依存関係作成ルール
+$(START_OBJS:.o=.d): %.d: %.S
+	@$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
+                -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend
 $(HIDDEN_OBJS:.o=.d): %.d: %.S
-	@$(PERL) $(SRCDIR)/utils/makedep -C $(CC) \
-		-O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend
+	@$(PERL) $(SRCDIR)/utils/makedep -C $(CC) $(MAKEDEP_OPTS) \
+                -O "$(CFLAGS) $(KERNEL_CFLAGS)" $< >> Makefile.depend
 
 LDFLAGS := -nostdlib $(LDFLAGS) --entry=_start
@@ -118,7 +147,14 @@
 #  依存関係の定義
 #
-cfg1_out.c: $(TARGETDIR)/target_def.csv
-kernel_cfg.timestamp: $(TARGETDIR)/target.tf
-$(OBJFILE): $(TARGETDIR)/target_check.tf
+cfg1_out.c: $(TARGETDIR)/target_sym.def
+kernel_cfg.timestamp: $(TARGETDIR)/target_kernel.trb
+check.timestamp: $(TARGETDIR)/target_check.trb
+
+#
+#  その他
+#
+CLEAN_FILES := $(CLEAN_FILES)
+REALCLEAN_FILES := $(REALCLEAN_FILES)
+
 
 #
Index: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/lpcxpresso_lpc812.h
===================================================================
--- ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/lpcxpresso_lpc812.h	(revision 411)
+++ ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/lpcxpresso_lpc812.h	(revision 421)
@@ -2,8 +2,8 @@
  *  TOPPERS/SSP Kernel
  *      Smallest Set Profile Kernel
- * 
+ *
  *  Copyright (C) 2013 by Naoki Saito
  *             Nagoya Municipal Industrial Research Institute, JAPAN
- * 
+ *
  *  上記著作権者は，Free Software Foundation によって公表されている
  *  GNU General Public License の Version 2 に記述されている条件か，以
@@ -26,10 +26,10 @@
  *  (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
  *      害からも，上記著作権者を免責すること．
- * 
+ *
  *  本ソフトウェアは，無保証で提供されているものである．上記著作権者は，
  *  本ソフトウェアに関して，その適用可能性も含めて，いかなる保証も行わ
  *  ない．また，本ソフトウェアの利用により直接的または間接的に生じたい
  *  かなる損害に関しても，その責任を負わない．
- * 
+ *
  */
 
@@ -58,5 +58,5 @@
 
 // 外部オシレータを使用する（使用しない場合はコメントアウトする．クロック源はIRCとなる）
-#define USE_EXTERNAL_OSCILLATOR
+//#define USE_EXTERNAL_OSCILLATOR
 
 /*
@@ -92,5 +92,5 @@
 	// PLLの逓倍器および分周器のパラメータ
 	// 以下からダウンロードできるPLLパラメータ設定用Excelシートで算出した．
-	// http://www.lpcware.com/content/nxpfile/lpc8xx-clock-and-pll-configuration-tool
+	// https://community.nxp.com/docs/DOC-334793
 	// これによると，入力周波数が12MHzで60MHzのメインクロックを生成する場合，PSEL=2, MSEL=4
 	#define TVALUE_SYSCON_SYSPLLCTRL_MSEL	(0x04)	// MSEL = 4
Index: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/openocd_lpc812max.cfg
===================================================================
--- ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/openocd_lpc812max.cfg	(revision 421)
+++ ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/openocd_lpc812max.cfg	(revision 421)
@@ -0,0 +1,11 @@
+#LPC812-CMSYS DAP
+source [find interface/cmsis-dap.cfg]
+source [find target/lpc8xx.cfg]
+
+gdb_memory_map disable
+ 
+#GDB PORT
+gdb_port 3333
+ 
+#TELNET PORT
+telnet_port 4444
Index: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target.tf
===================================================================
--- ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target.tf	(revision 411)
+++ 	(revision )
@@ -1,13 +1,0 @@
-$ 
-$     パス2のターゲット依存テンプレート(LPCXPRESSO-LPC812用)
-$ 
-
-$ 
-$  プロセッサ依存のテンプレートファイルのインクルード
-$ 
-$INCLUDE"armv6_m_gcc/prc.tf"$
-
-$ 
-$  バナー出力用のTFファイル
-$ 
-$INCLUDE "syssvc/banner.tf"$
Index: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_check.tf
===================================================================
--- ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_check.tf	(revision 411)
+++ 	(revision )
@@ -1,8 +1,0 @@
-$ 
-$     パス3のターゲット依存テンプレート(LPCXPRESSO-LPC812用)
-$ 
-
-$ 
-$  パス3のプロセッサ依存のテンプレートのインクルード
-$ 
-$INCLUDE"armv6_m_gcc/prc_check.tf"$
Index: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_check.trb
===================================================================
--- ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_check.trb	(revision 421)
+++ ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_check.trb	(revision 421)
@@ -0,0 +1,6 @@
+# -*- coding: utf-8 -*-
+#
+#		パス3の生成スクリプトのターゲット依存部
+#
+
+IncludeTrb("prc_check.trb")
Index: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_kernel.cfg
===================================================================
--- ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_kernel.cfg	(revision 421)
+++ ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_kernel.cfg	(revision 421)
@@ -0,0 +1,1 @@
+INCLUDE("target_timer.cfg");
Index: ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_kernel.trb
===================================================================
--- ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_kernel.trb	(revision 421)
+++ ssp_armv6_m_gcc/trunk/lpcxpresso_lpc812_gcc/target_kernel.trb	(revision 421)
@@ -0,0 +1,7 @@
+# -*- coding: utf-8 -*-
+#
+#		パス2の生成スクリプトのターゲット依存部
+#
+
+IncludeTrb("prc_kernel.trb")
+IncludeTrb("syssvc/banner.trb")
Index: ssp_armv6_m_gcc/trunk/setup_tools.sh
===================================================================
--- ssp_armv6_m_gcc/trunk/setup_tools.sh	(revision 421)
+++ ssp_armv6_m_gcc/trunk/setup_tools.sh	(revision 421)
@@ -0,0 +1,16 @@
+#!/usr/bin/env bash
+set -eu
+
+# Variables
+GCC_COMMAND=arm-none-eabi-gcc
+
+: "install $GCC_COMMAND" && {
+  if type $GCC_COMMAND > /dev/null 2>&1; then
+    echo "$GCC_COMMAND already exists. skip install."
+  else
+    sudo apt-get update
+    sudo apt-get install -y gcc-arm-none-eabi gdb-arm-none-eabi
+  fi
+}
+
+exit 0
