From 4f0fb4945a97e5fc4d23814226b08709469513fa Mon Sep 17 00:00:00 2001 From: j8takagi Date: Thu, 28 Feb 2019 15:54:13 +0900 Subject: [PATCH] =?utf8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=81=8B?= =?utf8?q?=E3=82=89=E3=81=AE=E3=83=AD=E3=83=BC=E3=83=89=E3=81=AB=E3=81=A4?= =?utf8?q?=E3=81=84=E3=81=A6=E3=81=AE=E8=A8=98=E8=BF=B0=E3=82=92=E3=80=81l?= =?utf8?q?oad.c=E3=81=A8load.h=E3=81=AB?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- include/load.h | 19 +++++++++++++++++++ include/word.h | 5 ----- src/casl2rev.c | 1 + src/comet2.c | 1 + src/comet2monitor.c | 1 + src/dumpword.c | 4 ++-- src/exec.c | 19 ------------------- src/load.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ src/word.c | 15 --------------- 9 files changed, 68 insertions(+), 41 deletions(-) create mode 100644 include/load.h create mode 100644 src/load.c diff --git a/include/load.h b/include/load.h new file mode 100644 index 0000000..6ded1f4 --- /dev/null +++ b/include/load.h @@ -0,0 +1,19 @@ +#ifndef YACASL2_LOAD_H_INCLUDE +#define YACASL2_LOAD_H_INCLUDE + +/** + * @brief アセンブル結果読み込みエラーをエラーリストに追加する + */ +void addcerrlist_load(); + +/** + * @brief 指定されたファイルからアセンブル結果を読み込む + * + * @return 読み込み終了アドレス。読み込めなかった場合は、0 + * + * @param file 読み込むファイル名 + * @param start 読み込み開始アドレス + */ +WORD loadassemble(const char *file, WORD start); + +#endif diff --git a/include/word.h b/include/word.h index 7215a54..8e70f2e 100644 --- a/include/word.h +++ b/include/word.h @@ -8,11 +8,6 @@ */ typedef unsigned short WORD; -/** - * @brief アセンブル結果読み込みエラーをエラーリストに追加する - */ -void addcerrlist_load(); - /** * @brief wordデータ型についてのエラーをエラーリストに追加する * diff --git a/src/casl2rev.c b/src/casl2rev.c index aa150b5..f81d640 100644 --- a/src/casl2rev.c +++ b/src/casl2rev.c @@ -1,5 +1,6 @@ #include "package.h" #include "disassemble.h" +#include "load.h" /** * @brief casl2revコマンドのオプション diff --git a/src/comet2.c b/src/comet2.c index 8b827ba..f358ec1 100644 --- a/src/comet2.c +++ b/src/comet2.c @@ -1,5 +1,6 @@ #include "package.h" #include "exec.h" +#include "load.h" /** * comet2コマンドのオプション diff --git a/src/comet2monitor.c b/src/comet2monitor.c index 8d83948..1f08637 100644 --- a/src/comet2monitor.c +++ b/src/comet2monitor.c @@ -1,5 +1,6 @@ #include "package.h" #include "exec.h" +#include "load.h" /** * comet2monitorコマンドのオプション diff --git a/src/dumpword.c b/src/dumpword.c index 3909890..88915a8 100644 --- a/src/dumpword.c +++ b/src/dumpword.c @@ -49,14 +49,14 @@ int main(int argc, char *argv[]) goto dumpwordfin; case '?': fprintf(stderr, usage, argv[0]); - setcerr(212, ""); /* invalid option */ + setcerr(999, ""); goto dumpwordfin; } } if(argv[optind] == NULL) { - setcerr(213, ""); /* invalid argument */ fprintf(stderr, usage, argv[0]); + setcerr(999, ""); goto dumpwordfin; } /* WORD値に変換 */ diff --git a/src/exec.c b/src/exec.c index 5d4e191..65bd3a7 100644 --- a/src/exec.c +++ b/src/exec.c @@ -215,25 +215,6 @@ void addcerrlist_exec() addcerrlist(ARRAYSIZE(cerr_exec), cerr_exec); } -WORD loadassemble(const char *file, WORD start) -{ - FILE *fp = NULL; - WORD end = 0; - - assert(file != NULL); - if((fp = fopen(file, "rb")) == NULL) { - perror(file); - return 0; - } - end = start + fread(sys->memory + start, sizeof(WORD), sys->memsize - start, fp); - if(end == sys->memsize) { - setcerr(210, file); /* load - memory overflow */ - fprintf(stderr, "Load error - %d: %s\n", cerr->num, cerr->msg); - } - fclose(fp); - return end; -} - void nop() { sys->cpu->pr += 1; diff --git a/src/load.c b/src/load.c new file mode 100644 index 0000000..c511d05 --- /dev/null +++ b/src/load.c @@ -0,0 +1,44 @@ +#include +#include +#include +#include +#include + +#include "word.h" +#include "struct.h" +#include "cerr.h" + +/** + * @brief ファイル読み込みのエラー定義 + */ +static CERR cerr_load[] = { + { 210, "load - memory overflow" }, + { 211, "object file not specified" }, + { 212, "invalid option" }, + { 213, "invalid argument" }, +}; + +/* load.hで定義された関数群 */ +void addcerrlist_load() +{ + addcerrlist(ARRAYSIZE(cerr_load), cerr_load); +} + +WORD loadassemble(const char *file, WORD start) +{ + FILE *fp = NULL; + WORD end = 0; + + assert(file != NULL); + if((fp = fopen(file, "rb")) == NULL) { + perror(file); + return 0; + } + end = start + fread(sys->memory + start, sizeof(WORD), sys->memsize - start, fp); + if(end == sys->memsize) { + setcerr(210, file); /* load - memory overflow */ + fprintf(stderr, "Load error - %d: %s\n", cerr->num, cerr->msg); + } + fclose(fp); + return end; +} diff --git a/src/word.c b/src/word.c index bb564cf..1c1f845 100644 --- a/src/word.c +++ b/src/word.c @@ -73,22 +73,7 @@ static CERR cerr_word[] = { { 116, "out of hex range" }, }; -/** - * @brief ファイル読み込みのエラー定義 - */ -static CERR cerr_load[] = { - { 210, "load - memory overflow" }, - { 211, "object file not specified" }, - { 212, "invalid option" }, - { 213, "invalid argument" }, -}; - /* word.hで定義された関数群 */ -void addcerrlist_load() -{ - addcerrlist(ARRAYSIZE(cerr_load), cerr_load); -} - void addcerrlist_word() { addcerrlist(ARRAYSIZE(cerr_word), cerr_word); -- 2.18.0