+++ /dev/null
-/***********************************************************************/
-/* */
-/* FILE :dbsct.c */
-/* DATE :Wed, Aug 02, 2006 */
-/* DESCRIPTION :Setting of B,R Section */
-/* CPU TYPE :SH7040 */
-/* */
-/* This file is generated by Renesas Project Generator (Ver.4.5). */
-/* */
-/***********************************************************************/
-
-
-
-
-#pragma section $DSEC
-static const struct {
- unsigned char *rom_s; /* 初期化データセクションのROM 上の先頭アドレス */
- unsigned char *rom_e; /* 初期化データセクションのROM 上の最終アドレス */
- unsigned char *ram_s; /* 初期化データセクションのRAM 上の先頭アドレス */
-} DTBL[] = {
- { __sectop("D"), __secend("D"), __sectop("R") }
-};
-
-#pragma section $BSEC
-static const struct {
- unsigned char *b_s; /* 未初期化データセクションの先頭アドレス */
- unsigned char *b_e; /* 未初期化データセクションの最終アドレス */
-} BTBL[] = {
- { __sectop("B"), __secend("B") }
-};
+OS_DIR = ../../../..
-TARGET ?= sample.abs
+TARGET ?= sample
-INC_DIR = ../../../../kernel/include
+ifeq ($(ROM),Yes)
+TARGET := $(TARGET)_rom
+ADDR_VECT = 0
+ADDR_ROM = 0100
+ADDR_RAM = 0FFE140
+else
+ADDR_VECT = 0FFC040
+ADDR_ROM = 0FFC140
+ADDR_RAM = 0FFE140
+endif
+
+
+INC_DIR = $(OS_DIR)/kernel/include
# Tools
CC = ch38
ASM = asm38
LINK = optlnk
-DEPEND = depend
-LINT = splint
-AWK = gawk
CFLAGS = -CP=300HA -DEBug -I=$(INC_DIR)
AFLAGS = -CP=300HA -DEBug
OBJS_DIR = objs
-OBJS = $(OBJS_DIR)/main.obj \
+OBJS = $(OBJS_DIR)/vcttbl.obj \
+ $(OBJS_DIR)/startup.obj \
+ $(OBJS_DIR)/dbsct.obj \
+ $(OBJS_DIR)/kernel_cfg.obj \
+ $(OBJS_DIR)/main.obj \
$(OBJS_DIR)/sample.obj \
$(OBJS_DIR)/ostimer.obj \
- $(OBJS_DIR)/kernel_cfg.obj \
- $(OBJS_DIR)/dbsct.obj \
- $(OBJS_DIR)/startup.obj \
- $(OBJS_DIR)/vcttbl.obj \
- $(OBJS_DIR)/lowlvl.obj \
- $(OBJS_DIR)/lowsrc.obj \
- $(OBJS_DIR)/sbrk.obj \
+ $(OBJS_DIR)/sci1.obj \
-OS_LIBS = ../../../../kernel/build/h8/h8300ha/ch38/libhosv4a.lib
-OS_CFG = ../../../../cfgrtr/build/gcc/h4acfg-h8300ha.exe
+OS_LIBS = $(OS_DIR)/kernel/build/h8/h8300ha/ch38/libhosv4a.lib
+OS_CFG = $(OS_DIR)/cfgrtr/build/gcc/h4acfg-h8300ha.exe
STD_LIBS = stdlib.lib
VPATH = ..
-all: mkdir_objs mk_kernel $(TARGET)
+all: mkdir_objs mk_kernel $(TARGET).abs
-$(TARGET): $(OBJS) $(STD_LIBS) $(OS_LIBS)
+$(TARGET).abs: $(OBJS) $(STD_LIBS) $(OS_LIBS)
echo rom D=R > $(OBJS_DIR)/subcmd.txt
- echo list smp.map >> $(OBJS_DIR)/subcmd.txt
+ echo list $(TARGET).map >> $(OBJS_DIR)/subcmd.txt
echo -Input=$(OBJS) | sed "s/ /,/g" >> $(OBJS_DIR)/subcmd.txt
echo -LIB=$(OS_LIBS),$(STD_LIBS) >> $(OBJS_DIR)/subcmd.txt
- echo "-start=VECTTBL,P,C,C\$$BSEC,C\$$DSEC,D/00,B,R/0200000,S/000FFBF20" >> $(OBJS_DIR)/subcmd.txt
- echo -output=$(TARGET) >> $(OBJS_DIR)/subcmd.txt
+ echo "-start=VECTTBL/$(ADDR_VECT),P,C,C\$$BSEC,C\$$DSEC,D/$(ADDR_ROM),B,R,S/$(ADDR_RAM)" >> $(OBJS_DIR)/subcmd.txt
+ echo -output=$(TARGET).abs >> $(OBJS_DIR)/subcmd.txt
echo end >> $(OBJS_DIR)/subcmd.txt
- echo -input=$(TARGET) >> $(OBJS_DIR)/subcmd.txt
+ echo -input=$(TARGET).abs >> $(OBJS_DIR)/subcmd.txt
echo form stype >> $(OBJS_DIR)/subcmd.txt
- echo output smp.mot >> $(OBJS_DIR)/subcmd.txt
+ echo output $(TARGET).mot >> $(OBJS_DIR)/subcmd.txt
echo -exit >> $(OBJS_DIR)/subcmd.txt
$(LINK) -SU=$(OBJS_DIR)/subcmd.txt
lbg38 -OUTPut=$(STD_LIBS) $(CFLAGS) -REent
mk_kernel:
- make -C ../../../../kernel/build/h8/h8300ha/ch38 -f gmake.mak
+ make -C $(OS_DIR)/kernel/build/h8/h8300ha/ch38 -f gmake.mak
mkdir_objs:
@mkdir -p $(OBJS_DIR)
+++ /dev/null
-;------------------------------------------------------------------------
-; |
-; FILE :lowlvl.src |
-; DATE :Mon, Aug 07, 2006 |
-; DESCRIPTION :Program of Low level |
-; CPU TYPE :H8/ |
-; |
-; This file is generated by Renesas Project Generator (Ver.4.5). |
-; |
-;------------------------------------------------------------------------
-
-
-
-
- .EXPORT _charput
- .EXPORT _charget
-
-SIM_IO: .EQU H'0000
-
- .SECTION P,CODE,ALIGN=2
-;-----------------------------------------------------------------------
-; _charput:
-;-----------------------------------------------------------------------
-_charput:
- MOV.B R0L,@IO_BUF
- MOV.W #H'0112,R0
- MOV.L #IO_BUF,ER1
- MOV.L ER1,@PARM
-; MOV.W #H'0000,E1
-; MOV.W #LWORD PARM,R1
- mov.l #PARM, er1
- JSR @SIM_IO
- RTS
-;-----------------------------------------------------------------------
-; _charget:
-;-----------------------------------------------------------------------
-_charget:
- MOV.W #H'0101,R0
- MOV.W #LWORD IO_BUF,R1
- MOV.W R1,@PARM
- MOV.W #H'0000,E1
- MOV.W #LWORD PARM,R1
- JSR @SIM_IO
- MOV.B @IO_BUF,R0L
- RTS
-;-----------------------------------------------------------------------
-; I/O Buffer
-;-----------------------------------------------------------------------
- .SECTION B,DATA,ALIGN=2
-PARM: .RES.L 1
-IO_BUF: .RES.B 1
- .END
+++ /dev/null
-/***********************************************************************/
-/* */
-/* FILE :lowsrc.c */
-/* DATE :Tue, Mar 04, 2003 */
-/* DESCRIPTION :Program of I/O Stream */
-/* CPU TYPE :H8/SH */
-/* */
-/***********************************************************************/
-
-// SH・H8共用ファイル
-
-
-#include <string.h>
-#include <stdio.h>
-#include <stddef.h>
-#include "lowsrc.h"
-
-/* H8のみno_float.hをインクルード */
-#if defined( __2000N__ ) || defined( __2600N__ ) || defined( __300HN__ ) || defined( __2000A__ ) || defined( __2600A__ ) || defined( __300HA__ ) || defined( __300__ ) || defined( __300L__ )
-#include <no_float.h>
-#endif
-
-/* ファイル番号 */
-#define STDIN 0 /* 標準入力 (コンソール) */
-#define STDOUT 1 /* 標準出力 (コンソール) */
-#define STDERR 2 /* 標準エラー出力 (コンソール) */
-
-#define FLMIN 0 /* 最小のファイル番号 */
-
-/* ファイルフラグ */
-#define O_RDONLY 0x0001 /* 読み込み専用にオープン。 */
-#define O_WRONLY 0x0002 /* 書き出し専用にオープン。 */
-#define O_RDWR 0x0004 /* 読み書き、両用にオープン。 */
-#define O_CREAT 0x0008 /* ファイルが存在しない場合、新規作成。 */
-#define O_TRUNC 0x0010 /* ファイルが存在する場合、ファイルサイズを0に。*/
-#define O_APPEND 0x0020 /* 次に読み書きを行うファイル内の位置を設定。 */
- /* 0:ファイルの先頭。 1:ファイルの最後。 */
-
-
-/* 特殊文字コード */
-#define CR 0x0d /* 復帰 */
-#define LF 0x0a /* 改行 */
-
-const int _nfiles = IOSTREAM; /* 入出力ファイル数を指定。 */
-struct _iobuf _iob[IOSTREAM];
-unsigned char sml_buf[IOSTREAM];
-
-
-/* H8ノーマルモード・SH */
-#if defined( __2000N__ ) || defined( __2600N__ ) || defined( __300HN__ ) || defined( _SH1 ) || defined( _SH2 ) || defined( _SH2E ) || defined( _SH3 ) || defined( _SH4 )
-/* 標準入力からの1文字入力処理 */
-extern void charput(char);
-/* 標準出力への1文字出力処理 */
-extern char charget(void);
-/* ファイルへの1文字出力処理 */
-extern char fcharput(char, unsigned char);
-/* ファイルからの1文字入力処理 */
-extern char fcharget(char*, unsigned char);
-/* ファイルのオープン */
-extern char fileopen(char*, unsigned char, unsigned char*);
-/* ファイルのクローズ */
-extern char fileclose(unsigned char);
-/* ファイルポインタの移動 */
-extern char fpseek(unsigned char, long, unsigned char);
-/* ファイルポインタの取得 */
-extern char fptell(unsigned char, long*);
-
-/* H8アドバンストモード */
-#elif defined( __2000A__ ) || defined( __2600A__ ) || defined( __300HA__ )
-/* 標準入力からの1文字入力処理 */
-extern void charput(char);
-/* 標準出力への1文字出力処理 */
-extern char charget(void);
-/* ファイルへの1文字出力処理 */
-extern char fcharput(char, unsigned char);
-/* ファイルからの1文字入力処理 */
-extern char fcharget(char*, unsigned char);
-/* ファイルのオープン */
-/* 引数格納レジスタ3指定。 */
-extern char __regparam3 fileopen(char*, unsigned char, unsigned char*);
-/* ファイルのクローズ */
-extern char fileclose(unsigned char);
-/* ファイルポインタの移動 */
-extern char fpseek(unsigned char, long, unsigned char);
-/* ファイルポインタの取得 */
-extern char fptell(unsigned char, long*);
-
-/* H8300・H8300L */
-#elif defined( __300__ ) || defined( __300L__ )
-/* 標準入力からの1文字入力処理 */
-extern void charput(char);
-/* 標準出力への1文字出力処理 */
-extern char charget(void);
-/* ファイルへの1文字出力処理 */
-extern char fcharput(char, unsigned char);
-/* ファイルからの1文字入力処理 */
-extern char fcharget(char*, unsigned char);
-/* ファイルのオープン */
-/* 引数格納レジスタ3指定。 */
-extern char __regparam3 fileopen(char*, unsigned char, unsigned char*);
-/* ファイルのクローズ */
-extern char fileclose(unsigned char);
-/* ファイルポインタの移動 */
-/* 引数格納レジスタ3指定。 */
-extern char __regparam3 fpseek(unsigned char, long, unsigned char);
-/* ファイルポインタの取得 */
-extern char fptell(unsigned char, long*);
-#endif
-
-char flmod[IOSTREAM]; /* オープンしたファイルのモード設定場所 */
-
-
-/**************************************************************************/
-/* open:file open */
-/* Return value:File number (Pass) */
-/* -1 (Failure) */
-/**************************************************************************/
-open(char *name, /* ファイル名 */
- int mode, /* オープンモード */
- int flg) /* オープンフラグ */
-{
- char rcode = 0; /* fileopen()の戻り値 */
- unsigned char fileno = 0; /* ファイル番号 */
- unsigned char openmode = 0; /* シミュレータ用オープンモード */
-
-
- if(strcmp(name,"stdin")==0){ /* 標準入力ファイル */
- if((mode&O_RDONLY)==0){
- return -1;
- }
- flmod[STDIN] = mode;
- return STDIN;
- }
-
- else if(strcmp(name,"stdout")==0){ /* 標準出力ファイル */
- if((mode&O_WRONLY)==0){
- return -1;
- }
- flmod[STDOUT] = mode;
- return STDOUT;
- }
-
- else if(strcmp(name,"stderr")==0){ /* 標準エラー出力ファイル */
- if((mode&O_WRONLY)==0){
- return -1;
- }
- flmod[STDERR] = mode;
- return STDERR;
- }
-
-
- flg = 0777; /* フラグの設定 */
-
- /* ファイル名に従ってモードをチェックし、ファイル番号を返す。 */
- /* fileopen()でオープン処理を行い、得られたファイル番号を返す。 */
-
- /* 引数で与えられたオープンモードをシミュレータ用に変換。 */
-
- if( mode == O_RDONLY ) /* "r" */
- {
- openmode = 0x00;
- }
- else if( mode == (O_WRONLY | O_CREAT | O_TRUNC) ) /* "w" */
- {
- openmode = 0x01;
- }
- else if( mode == (O_WRONLY | O_CREAT | O_APPEND) ) /* "a" */
- {
- openmode = 0x02;
- }
- else if( mode == O_RDWR ) /* "r+" */
- {
- openmode = 0x03;
- }
- else if( mode == (O_RDWR | O_CREAT | O_TRUNC) ) /* "w+" */
- {
- openmode = 0x04;
- }
- else if( mode == (O_RDWR | O_CREAT | O_APPEND) ) /* "a+" */
- {
- openmode = 0x05;
- }
- else /* 対象外 */
- {
- return -1;
- }
-
- rcode=fileopen( name, openmode, &fileno );
- if( rcode==0 ) /* オープン処理成功。 */
- {
- flmod[fileno] = mode; /* モードを設定。 */
- if( fileno == 0 )
- {
- flmod[fileno] = O_RDONLY;
- }
- return fileno; /* ファイル番号を返却。 */
- }
- else /* オープン処理失敗。 */
- {
- return -1; /* エラー。 */
- }
-}
-
-/**************************************************************************/
-/* close:File close */
-/* Return value: 0 (pass) */
-/* -1 (Failure) */
-/**************************************************************************/
-close(int fileno) /* ファイル番号 */
-{
- char rcode = 0; /* fclose()の戻り値 */
-
- /* ファイル番号をチェックし、fileclose()でファイルをクローズする。 */
-
- /* 最小ファイル番号、最大ファイル番号チェック。 */
- if( (fileno < FLMIN) || (IOSTREAM <= fileno) )
- {
- return -1; /* エラー。 */
- }
- else
- {
- if( flmod[fileno] != 0 ) /* ファイルのオープンチェック。 */
- {
- rcode = fileclose( fileno );
- if( rcode == 0 ) /* クローズ処理成功。 */
- {
- flmod[fileno] = 0; /* ファイルモードのリセット。 */
- return 0;
- }
- else /* クローズ処理失敗。 */
- {
- return -1; /* エラー。 */
- }
- }
- else /* オープンされていない。 */
- {
- return -1; /* エラー。 */
-
- }
- }
-}
-
-/**************************************************************************/
-/* read:Data read */
-/* Return value:Number of read characters (Pass) */
-/* -1 (Failure) */
-/**************************************************************************/
-read(int fileno, /* ファイル番号 */
- char *buf, /* 転送先バッファアドレス */
- int count) /* 読み込む文字数 */
-{
- unsigned int i; /* カウント用変数 */
- char rcode = 0; /* fcharget()の戻り値 */
- char* tmppt = NULL; /* 先頭アドレスの保持 */
- int datanum = 0; /* 読み込んだデータ数 */
-
- /* ファイルのモードをチェックし、一文字づつ読み込みバッファに格納。 */
-
- /* 読み込み専用 or 読み込み書き出し両用にオープンされているか判定。 */
- if(flmod[fileno]&O_RDONLY||flmod[fileno]&O_RDWR)
- {
- /* ファイル番号を比較。 */
- /* 標準入力(stdin)の時 ⇒ charget()をコール。 */
- /* 標準出力(stdout・stderr) ⇒ エラーを返却。 */
- /* それ以外 ⇒ fcharget()をコール。 */
-
- if( fileno == STDIN ) /* 標準入力 */
- {
- for(i=count; i>0; --i)
- {
- *buf = charget();
- if( *buf == CR ) /* 改行文字の置き換え。 */
- *buf=LF;
- buf++;
- }
- return count; /* 読み込んだ文字数返却。 */
- }
- else if( (fileno == STDOUT) ||
- (fileno == STDERR) ) /* 標準出力 */
- {
- return -1;
- }
- else /* ファイル入力 */
- {
- tmppt = buf; /* 先頭アドレスの保持。 */
- for( i=count; i>0; --i )
- {
- rcode = fcharget( buf, fileno );
- if( rcode == 0 ) /* 処理成功 */
- {
- if( *buf == CR ) /* 改行文字の置き換え。 */
- {
- *buf = LF;
- }
- datanum++; /* 取得文字数のインクリメント。 */
- buf++; /* 出力先ポインタのインクリメント。*/
- }
- else /* EOF検出(-1) */
- {
- break; /* 処理終了 */
- }
- }
- buf = tmppt; /* 先頭アドレスの設定。 */
- }
- return datanum; /* 読み込んだ文字数返却。 */
- }
- else
- {
- return -1; /* エラー。 */
- }
-}
-
-/**************************************************************************/
-/* write:Data write */
-/* Return value:Number of write characters (Pass) */
-/* -1 (Failure) */
-/**************************************************************************/
-write(int fileno, /* ファイル番号 */
- char *buf, /* 転送先バッファアドレス */
- int count) /* 書き出し文字数 */
-{
- unsigned int i; /* カウント用変数 */
- char c; /* 出力文字 */
- char rcode = 0; /* fcaharget()戻り値 */
- int datanum = 0; /* 書き出したデータ数 */
-
- /* ファイルのモードをチェックし、一文字づつ出力。 */
-
- /* 書き出し専用 or 読み込み書き出し両用にオープンされているか判定。 */
- if(flmod[fileno]&O_WRONLY || flmod[fileno]&O_RDWR)
- {
- /* ファイル番号を比較。 */
- /* 標準出力(stdout・stderr)の時 ⇒ charput()をコール。 */
- /* 標準入力(stdin)の時 ⇒ エラーを返却。 */
- /* それ以外 ⇒ fcharput()をコール。 */
-
- if( fileno == STDIN ) /* 標準入力 */
- {
- return -1;
- }
- else if( (fileno == STDOUT) ||
- (fileno == STDERR) ) /* 標準出力 */
- {
- for( i = count; i > 0; --i )
- {
- c = *buf++;
- charput(c);
- }
- return count; /* 書き出した文字数返却。 */
- }
- else /* ファイル出力 */
- {
- for( i = count; i > 0; --i )
- {
- c = *buf++;
- rcode = fcharput( c, fileno );
- if( rcode != 0 ) /* 処理失敗 */
- {
- return -1;
- }
- datanum++; /* 出力文字数のインクリメント。 */
- }
- return datanum; /* 書き出した文字数返却。 */
- }
- }
- else
- {
- return -1; /* エラー */
- }
-}
-
-/**************************************************************************/
-/* lseek:Definition of file read/write position */
-/* Return value:Offset from the top of file read/whrte position(Pass) */
-/* -1 (Failure) */
-/* (lseek is not supported in the console input/output) */
-/**************************************************************************/
-long lseek(int fileno, /* ファイル番号 */
- long offset, /* 読み込み/書き出し位置 */
- int base) /* オフセットの起点 */
-{
- char rcode = 0; /* fpseek()の戻り値 */
- long new_offset = 0; /* 新しいオフセット値 */
-
- /* ファイル番号を比較。 */
- /* 標準入出力(stdin・stdout・stderr)の時 ⇒ エラーを返却。 */
- /* ファイルの時 ⇒ fpseek()をコール。 */
- /* fpseek() 成功 ⇒ fptell()により、新しいオフセット値の取得。 */
- /* 取得したオフセット値 < 0 ⇒ エラーを返却。 */
- /* それ以外 ⇒ オフセット値返却。 */
- /* fpseek() 失敗 ⇒ エラーを返却。 */
-
- if( (fileno == STDIN) ||
- (fileno == STDOUT) ||
- (fileno == STDERR) ) /* 標準入出力の場合 */
- {
- return -1; /* エラー。 */
- }
- else /* 標準入出力以外 */
- {
- rcode = fpseek( fileno, offset, base );
- if( rcode == 0 ) /* ポインタ移動処理成功 */
- {
- /* fptell()で新しいオフセット値の取得。 */
- rcode = fptell( fileno, &new_offset );
- if( rcode == 0 ) /* オフセット取得成功 */
- {
- if( new_offset < 0 ) /* オフセット値判定。 */
- {
- return -1; /* エラー。 */
- }
- else
- {
- return new_offset; /* 新しいオフセットの返却。 */
- }
- }
- else
- {
- return -1; /* エラー。 */
- }
- }
- else /* ポインタ移動処理失敗。 */
- {
- return -1; /* エラー。 */
- }
- }
-}
-
-/****************************************************************************/
-/* _INIT_IOLIB */
-/* Initialize C library Functions, if necessary. */
-/* Define USES_SIMIO on Assembler Option. */
-/****************************************************************************/
-void _INIT_IOLIB(void)
-{
-FILE *fp;
-
- for( fp = _iob; fp < _iob + _nfiles; fp++ ) /* ファイル型データの初期設定 */
- {
- fp->_bufptr = NULL; /* バッファへのポインタ */
- fp->_bufcnt = 0; /* バッファカウント */
- fp->_buflen = 0; /* バッファ長 */
- fp->_bufbase = NULL; /* バッファへのベースポインタ */
- fp->_ioflag1 = 0; /* I/Oフラグ */
- fp->_ioflag2 = 0; /* I/Oフラグ */
- fp->_iofd = 0; /* ファイル番号 */
- }
-
- // 標準入出力用ファイルをオープン。
- // "stdin"・"stdout"・"stderr"は、ファイルが存在しなくても自動生成されます。
- // "stdin"は、実際は"r"でオープンしなくてはならないが、
- // 自動生成するために"w"でオープンした後I/Oフラグに"r"を設定しています。
- if(freopen( "stdin", "r", stdin )==NULL) /* 標準入力ファイルをオープン。 */
- stdin->_ioflag1 = 0xff; /* オープン失敗時のアクセス禁止。 */
- stdin->_ioflag1 = _IOREAD; /* "r"でオープンしたことにします。 */
- stdin->_ioflag1 |= _IOUNBUF; /* データのバッファリングなしに設定。 */
- if(freopen( "stdout", "w", stdout )==NULL) /* 標準出力ファイルをオープン。 */
- stdout->_ioflag1 = 0xff; /* オープン失敗時のアクセス禁止。 */
- stdout->_ioflag1 |= _IOUNBUF; /* オープンのバッファリングなしに設定。 */
- if(freopen( "stderr", "w", stderr )==NULL) /* 標準エラーファイルをオープン。 */
- stderr->_ioflag1 = 0xff; /* オープン失敗時のアクセス禁止。 */
- stderr->_ioflag1 |= _IOUNBUF;
-}
-
-/****************************************************************************/
-/* _CLOSEALL */
-/****************************************************************************/
-
-void _CLOSEALL(void)
-{
-int i;
-
- for( i=0; i < _nfiles; i++ )
- {
- /* ファイルがオープンしているかチェック。 */
- if( _iob[i]._ioflag1 & (_IOREAD | _IOWRITE | _IORW ) )
- /* ファイルをクローズする。 */
- fclose( & _iob[i] );
- }
-}
-
+++ /dev/null
-/***********************************************************************/
-/* */
-/* FILE :lowsrc.h */
-/* DATE :Mon, Aug 07, 2006 */
-/* DESCRIPTION :Header file of I/O Stream file */
-/* CPU TYPE :H8/ */
-/* */
-/* This file is generated by Renesas Project Generator (Ver.4.5). */
-/* */
-/***********************************************************************/
-/*Number of I/O Stream*/
-#define IOSTREAM 3
+++ /dev/null
-/***********************************************************************/
-/* */
-/* FILE :sbrk.c */
-/* DATE :Mon, Aug 07, 2006 */
-/* DESCRIPTION :Program of sbrk */
-/* CPU TYPE :H8/ */
-/* */
-/* This file is generated by Renesas Project Generator (Ver.4.5). */
-/* */
-/***********************************************************************/
-
-
-
-#include <no_float.h>
-#include <stdio.h>
-#include "typedefine.h"
-#include "sbrk.h"
-_SBYTE *sbrk(size_t);
-
-//const size_t _sbrk_size= /* Specifies the minimum unit of */
- /* the defined heap area */
-
-#pragma pack 2
-static union {
- _SWORD dummy; /* 2バイト境界にするためのダミー */
- _SBYTE heap[HEAPSIZE]; /* sbrkで管理する領域の宣言 */
-} heap_area;
-#pragma unpack
-
-static _SBYTE *brk=(_SBYTE *)&heap_area; /* sbrkで割り付けた領域の最終アドレス */
-
-/*****************************************************************************/
-/* sbrk:データの書き出し */
-/* リターン値:割り付けた領域の先頭アドレス(成功) */
-/* -1 (失敗) */
-/*****************************************************************************/
-extern _SBYTE *sbrk(size_t size) /* 割り付ける領域のサイズ */
-{
- _SBYTE *p;
- if(brk+size > heap_area.heap+HEAPSIZE){ /* 空き領域のチェック */
- p = (_SBYTE *)-1;
- }
- else {
- p = brk; /* 領域の割り付け */
- brk += size; /* 最終アドレスの更新 */
- }
-
- return p;
-}
+++ /dev/null
-/***********************************************************************/
-/* */
-/* FILE :sbrk.h */
-/* DATE :Mon, Aug 07, 2006 */
-/* DESCRIPTION :Header file of sbrk file */
-/* CPU TYPE :H8/ */
-/* */
-/* This file is generated by Renesas Project Generator (Ver.4.5). */
-/* */
-/***********************************************************************/
-/* size of area managed by sbrk */
-#define HEAPSIZE 0x420
.EXPORT _ResetHandler
.IMPORT __INITSCT
- .IMPORT __INIT_IOLIB
+ ; .IMPORT __INIT_IOLIB
.IMPORT _main
.SECTION P, CODE, ALIGN=2
_ResetHandler:
- mov.l #H'00FFFF00, er7
+ ; mov.l #H'00FFFF00, er7
+ mov.l #H'00FFFF20, er7
jsr @__INITSCT
- jsr @__INIT_IOLIB
+ ; jsr @__INIT_IOLIB
jsr @_main
sleep
+++ /dev/null
-/***********************************************************************/
-/* */
-/* FILE :typedefine.h */
-/* DATE :Mon, Aug 07, 2006 */
-/* DESCRIPTION :Aliases of Integer Type */
-/* CPU TYPE :H8/ */
-/* */
-/* This file is generated by Renesas Project Generator (Ver.4.5). */
-/* */
-/***********************************************************************/
-
-
-
-typedef signed char _SBYTE;
-typedef unsigned char _UBYTE;
-typedef signed short _SWORD;
-typedef unsigned short _UWORD;
-typedef signed int _SINT;
-typedef unsigned int _UINT;
-typedef signed long _SDWORD;
-typedef unsigned long _UDWORD;
.IMPORT _ResetHandler
- .IMPORT __kernel_vector_012
.IMPORT __kernel_vector_dmy
+ .IMPORT __kernel_vector_024
.SECTION VECTTBL, DATA, ALIGN=4
.DATA.L __kernel_vector_dmy ; ベクタ9 TRAP1
.DATA.L __kernel_vector_dmy ; ベクタ10 TRAP2
.DATA.L __kernel_vector_dmy ; ベクタ11 TRAP3
- .DATA.L __kernel_vector_012 ; ベクタ12 IRQ0
+ .DATA.L __kernel_vector_dmy ; ベクタ12 IRQ0
.DATA.L __kernel_vector_dmy ; ベクタ13
.DATA.L __kernel_vector_dmy ; ベクタ14
.DATA.L __kernel_vector_dmy ; ベクタ15
.DATA.L __kernel_vector_dmy ; ベクタ21
.DATA.L __kernel_vector_dmy ; ベクタ22
.DATA.L __kernel_vector_dmy ; ベクタ23
- .DATA.L __kernel_vector_dmy ; ベクタ24
+ .DATA.L __kernel_vector_024 ; ベクタ24
.DATA.L __kernel_vector_dmy ; ベクタ25
.DATA.L __kernel_vector_dmy ; ベクタ26
.DATA.L __kernel_vector_dmy ; ベクタ27
* @file main.c
* @brief %jp{メイン関数}%en{main}
*
- * @version $Id: main.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
- *
* Copyright (C) 1998-2006 by Project HOS
* http://sourceforge.jp/projects/hos/
*/
#include "kernel.h"
+/** %jp{割込み用スタック初期値} */
+void *_kernel_int_isp = (void *)0x0FFFF20;
+
+
/** %jp{メイン関数} */
int main()
{
- /** %jp{カーネルの動作開始} */
+ /* %jp{カーネルの動作開始} */
vsta_knl();
return 0;
}
-void *_kernel_int_isp = (void *)0x00ffff00;
/* end of file */
* @file ostimer.c
* @brief %jp{OSタイマ}%en{OS timer}
*
- * @version $Id: ostimer.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ * @version $Id: ostimer.c,v 1.2 2006-11-02 10:47:09 ryuz Exp $
*
* Copyright (C) 1998-2006 by Project HOS
* http://sourceforge.jp/projects/hos/
#include "ostimer.h"
-#define OSTIMER_TIMER_INHNO 12 /**< %jp{割り込みハンドラ番号} */
+#define OSTIMER_TIMER_INHNO 24 /**< %jp{割り込みハンドラ番号} */
+
+
+#define REG_TIM16_TSTR ((volatile UB *)0xffffff60)
+#define REG_TIM16_TSNC ((volatile UB *)0xffffff61)
+#define REG_TIM16_TMDR ((volatile UB *)0xffffff62)
+#define REG_TIM16_TOLR ((volatile UB *)0xffffff63)
+#define REG_TIM16_TISRA ((volatile UB *)0xffffff64)
+#define REG_TIM16_TISRB ((volatile UB *)0xffffff65)
+#define REG_TIM16_TISRC ((volatile UB *)0xffffff66)
+
+#define REG_TIM16_TCR0 ((volatile UB *)0xffffff68)
+#define REG_TIM16_TIOR0 ((volatile UB *)0xffffff69)
+#define REG_TIM16_TCNT0 ((volatile UH *)0xffffff6a)
+#define REG_TIM16_TCNT0H ((volatile UB *)0xffffff6a)
+#define REG_TIM16_TCNT0L ((volatile UB *)0xffffff6b)
+#define REG_TIM16_GRA0 ((volatile UH *)0xffffff6c)
+#define REG_TIM16_GRA0H ((volatile UB *)0xffffff6c)
+#define REG_TIM16_GRA0L ((volatile UB *)0xffffff6d)
+#define REG_TIM16_GRB0 ((volatile UH *)0xffffff6e)
+#define REG_TIM16_GRB0H ((volatile UB *)0xffffff6e)
+#define REG_TIM16_GRB0L ((volatile UB *)0xffffff6f)
static void OsTimer_IrqHandler(void); /**< %jp{タイマ割り込みハンドラ} */
def_inh(OSTIMER_TIMER_INHNO, &dfinh);
/* %jp{タイマ動作開始} */
+ *REG_TIM16_TSTR &= ~0x01; /* TCNT0動作停止 */
+ *REG_TIM16_TCR0 = 0x23; /* φ/8でカウント, GRAのコンペアマッチでクリア */
+ *REG_TIM16_TCNT0 = 0; /* カウンタクリア */
+ *REG_TIM16_GRA0 = 2500 - 1; /* 10 msec のインターバル(20MHz/8 = 2.5MHz) */
+ *REG_TIM16_TISRA &= ~0x01; /* 割り込み要因クリア */
+ *REG_TIM16_TISRA |= 0x10; /* 割り込み許可 */
+ *REG_TIM16_TSTR |= 0x01; /* TCNT0動作開始 */
}
/** %jp{タイマ割り込みハンドラ} */
void OsTimer_IrqHandler(void)
{
+ /* 割り込み要因クリア */
+ *REG_TIM16_TISRA &= ~0x01; /* 割り込み要因クリア */
+
+/* Sci1_PutChar('T'); */
+
isig_tim();
}
* @file ostimer.c
* @brief %jp{OSタイマ}%en{OS timer}
*
- * @version $Id: ostimer.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ * @version $Id: ostimer.h,v 1.2 2006-11-02 10:47:09 ryuz Exp $
*
* Copyright (C) 1998-2006 by Project HOS
* http://sourceforge.jp/projects/hos/
* @file sample.c
* @brief %jp{サンプルプログラム}%en{Sample program}
*
- * @version $Id: sample.c,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ * @version $Id: sample.c,v 1.2 2006-11-02 10:47:09 ryuz Exp $
*
* Copyright (C) 1998-2006 by Project HOS
* http://sourceforge.jp/projects/hos/
*/
-
-#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
#include "kernel.h"
#include "kernel_id.h"
+#include "sci1.h"
#define LEFT(num) ((num) <= 1 ? 5 : (num) - 1)
/** %jp{適当な時間待つ} */
void rand_wait(void)
{
- dly_tsk(10000 /*rand()*/ % 1000 + 1);
+ dly_tsk(rand() % 1000 + 1);
}
msg = (T_PRINT_MSG *)mem;
/* %jp{文字列生成} */
-/* sprintf(msg->text, "%d : %s", num, text); */
-
+ msg->text[0] = '0' + num;
+ msg->text[1] = ' ';
+ msg->text[2] = ':';
+ msg->text[3] = ' ';
+ strcpy(&msg->text[4], text);
+ strcat(msg->text, "\n");
+
/* %jp{表示タスクに送信} */
snd_mbx(mbxid, (T_MSG *)msg);
}
void Sample_Task(VP_INT exinf)
{
int num;
-
+
num = (int)exinf;
-
- putchar('a');
-
+
/* %jp{いわゆる哲学者の食事の問題} */
for ( ; ; )
{
/* %jp{適当な時間考える} */
print_state(num, "thinking");
rand_wait();
-
+
/* %jp{左右のフォークを取るまでループ} */
for ( ; ; )
{
void Sample_Print(VP_INT exinf)
{
T_PRINT_MSG *msg;
-
+
for ( ; ; )
{
rcv_mbx(mbxid, (T_MSG **)&msg);
- /* printf("%s\n", msg->text); */
+ Sci1_PutString(msg->text);
rel_mpf(mpfid, msg);
}
}
* @file sample.c
* @brief %jp{サンプルプログラム}%en{Sample program}
*
- * @version $Id: sample.h,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ * @version $Id: sample.h,v 1.2 2006-11-02 10:47:09 ryuz Exp $
*
* Copyright (C) 1998-2006 by Project HOS
* http://sourceforge.jp/projects/hos/
--- /dev/null
+/**
+ * Sample program for Hyper Operating System V4 Advance
+ *
+ * @file sci1.c
+ * @brief %jp{SCI1への出力}%en{SCI1 device driver}
+ *
+ * @version $Id: sci1.c,v 1.1 2006-11-02 10:47:09 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#include "kernel.h"
+
+
+
+#define REG_SCI1_SMR ((volatile UB*)0xffffffb8)
+#define REG_SCI1_BRR ((volatile UB*)0xffffffb9)
+#define REG_SCI1_SCR ((volatile UB*)0xffffffba)
+#define REG_SCI1_TDR ((volatile UB*)0xffffffbb)
+#define REG_SCI1_SSR ((volatile UB*)0xffffffbc)
+#define REG_SCI1_RDR ((volatile UB*)0xffffffbd)
+#define REG_SCI1_SCMR ((volatile UB*)0xffffffbe)
+
+
+
+/* %jp{SCI1 の初期化} */
+void Sci1_Initialize(void)
+{
+ *REG_SCI1_SCR = 0;
+ *REG_SCI1_SMR = 0;
+ *REG_SCI1_BRR = 15; /* %jp{ボーレート設定(38400bps)} */
+ *REG_SCI1_SCR |= 0x20; /* %jp{送信許可} */
+}
+
+/* %jp{1文字出力} */
+void Sci1_PutChar(int c)
+{
+/* return; */
+
+ while ( ((*REG_SCI1_SSR) & 0x80) != 0x80 )
+ ;
+
+ *REG_SCI1_TDR = (UB)c;
+
+ *REG_SCI1_SSR &= 0x7f;
+}
+
+/* %jp{文字列出力} */
+void Sci1_PutString(const char *text)
+{
+ while ( *text != '\0' )
+ {
+ if ( *text == '\n' )
+ {
+ Sci1_PutChar('\r');
+ Sci1_PutChar('\n');
+ }
+ else
+ {
+ Sci1_PutChar(*text);
+ }
+
+ text++;
+ }
+}
+
+
+
+
+char Sci1_hex2asc(int a)
+{
+ if ( a < 10 )
+ {
+ return '0' + a;
+ }
+ return 'a' + a - 10;
+}
+
+
+void Sci1_PutHexByte(char c)
+{
+ Sci1_PutChar(Sci1_hex2asc((c >> 4) & 0xf));
+ Sci1_PutChar(Sci1_hex2asc((c >> 0) & 0xf));
+}
+
+void Sci1_PutHexWord(int i)
+{
+ Sci1_PutHexByte((i >> 8) & 0xff);
+ Sci1_PutHexByte((i >> 0) & 0xff);
+}
+
+
+
+/* end of file */
--- /dev/null
+/**
+ * Sample program for Hyper Operating System V4 Advance
+ *
+ * @file sci1.h
+ * @brief %jp{SCI1への出力}%en{SCI1 device driver}
+ *
+ * @version $Id: sci1.h,v 1.1 2006-11-02 10:47:09 ryuz Exp $
+ *
+ * Copyright (C) 1998-2006 by Project HOS
+ * http://sourceforge.jp/projects/hos/
+ */
+
+
+#ifndef __ostimer_h__
+#define __ostimer_h__
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void Sci1_Initialize(void); /* %jp{SCI1 の初期化} */
+void Sci1_PutChar(int c); /* %jp{1文字出力} */
+void Sci1_PutString(const char *text); /* %jp{文字列出力} */
+
+void Sci1_PutHexByte(char c);
+void Sci1_PutHexWord(int i);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __ostimer_h__ */
+
+
+/* end of file */
* @file system.cfg
* @brief %jp{サンプルのコンフィギュレーション}
*
- * @version $Id: system.cfg,v 1.1 2006-08-16 16:27:04 ryuz Exp $
+ * @version $Id: system.cfg,v 1.2 2006-11-02 10:47:09 ryuz Exp $
*
* Copyright (C) 1998-2006 by Project HOS
* http://sourceforge.jp/projects/hos/
/* %jp{カーネル独自の設定}%en{kernel} */
-KERNEL_HEP_MEM(65536, NULL);
-KERNEL_MAX_TSKID(16);
-KERNEL_MAX_SEMID(16);
+KERNEL_HEP_MEM(512, NULL);
+KERNEL_MAX_TSKID(8);
+KERNEL_MAX_SEMID(8);
+KERNEL_MAX_FLGID(8);
+KERNEL_MAX_MBXID(8);
+KERNEL_MAX_MPFID(8);
/* %jp{OSタイマの設定}%en{OS timer} */
/* %jp{サンプル}%en{Sample program} */
INCLUDE("\"sample.h\"");
ATT_INI({TA_HLNG, 0, Sample_Initialize});
-CRE_TSK(TSKID_PRINT, {TA_HLNG, 1, Sample_Print, 1, 1024, NULL});
-CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 1024, NULL});
-CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 1024, NULL});
-CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 1024, NULL});
-CRE_TSK(TSKID_SAMPLE4, {TA_HLNG, 4, Sample_Task, 2, 1024, NULL});
-CRE_TSK(TSKID_SAMPLE5, {TA_HLNG, 5, Sample_Task, 2, 1024, NULL});
+CRE_TSK(TSKID_PRINT, {TA_HLNG, 1, Sample_Print, 1, 256, NULL});
+CRE_TSK(TSKID_SAMPLE1, {TA_HLNG, 1, Sample_Task, 2, 512, NULL});
+CRE_TSK(TSKID_SAMPLE2, {TA_HLNG, 2, Sample_Task, 2, 512, NULL});
+CRE_TSK(TSKID_SAMPLE3, {TA_HLNG, 3, Sample_Task, 2, 512, NULL});
+CRE_TSK(TSKID_SAMPLE4, {TA_HLNG, 4, Sample_Task, 2, 512, NULL});
+CRE_TSK(TSKID_SAMPLE5, {TA_HLNG, 5, Sample_Task, 2, 512, NULL});
CRE_SEM(1, {TA_TFIFO, 1, 1});
CRE_SEM(2, {TA_TFIFO, 1, 1});
CRE_SEM(3, {TA_TFIFO, 1, 1});