X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Fexec.c;h=5d8f62fa2c6d66241546cbdad2681273d1ed8d23;hb=641024682d02a49ea9fed303c2f6db4b4bd1d9c1;hp=7034e1989ba23d0e0dab1f1432f3ee4ccc220b44;hpb=ef1027cfd02733ad225d67e4a02f0f5901981b89;p=YACASL2.git diff --git a/src/exec.c b/src/exec.c index 7034e19..5d8f62f 100644 --- a/src/exec.c +++ b/src/exec.c @@ -9,7 +9,6 @@ * 実行エラーの定義 */ static CERR cerr_exec[] = { - { 201, "Loading - full of COMET II memory" }, { 202, "SVC input - out of Input memory" }, { 203, "SVC output - out of COMET II memory" }, { 204, "Program Register (PR) - out of COMET II memory" }, @@ -17,6 +16,15 @@ static CERR cerr_exec[] = { { 206, "Address - out of COMET II memory" }, { 207, "Stack Pointer (SP) - out of COMET II memory" }, { 209, "not GR in operand x" }, + { 210, "not command code of COMET II" }, +}; + +/** + * アセンブル結果読み込みエラーの定義 + */ +static CERR cerr_load[] = { + { 201, "Loading - full of COMET II memory" }, + { 208, "object file is not specified" }, }; /** @@ -25,13 +33,20 @@ static CERR cerr_exec[] = { EXECMODE execmode = {false, false, false}; /** - * 実行エラーをエラーリストに追加 + * アセンブル結果読み込みエラーをエラーリストに追加 */ -bool addcerrlist_exec() +void addcerrlist_load() { - return addcerrlist(ARRAYSIZE(cerr_exec), cerr_exec); + addcerrlist(ARRAYSIZE(cerr_load), cerr_load); } +/** + * 実行エラーをエラーリストに追加 + */ +void addcerrlist_exec() +{ + addcerrlist(ARRAYSIZE(cerr_exec), cerr_exec); +} /** * 指定されたファイルからアセンブル結果を読み込む */ @@ -80,7 +95,7 @@ static void svcin() sys->memory[sys->cpu->gr[1]+i] = *(buffer + i); } sys->memory[sys->cpu->gr[2]] = i + 1; - free_chk(buffer, "buffer"); + FREE(buffer); } /** @@ -132,7 +147,7 @@ static WORD adda(WORD val0, WORD val1) sys->cpu->fr = 0x0; /* 引数の値を16ビット符号付整数として加算し、オーバーフローをチェック */ - assert(sizeof(short)*8 == 16 && (short)0xFFFF == -1); + assert(sizeof(short) * 8 == 16 && (short)0xFFFF == -1); if((tmp = (short)val0 + (short)val1) > 32767 || tmp < -32768) { sys->cpu->fr += OF; } @@ -380,7 +395,9 @@ bool exec() /* 命令の取り出し */ op = sys->memory[sys->cpu->pr] & 0xFF00; /* 命令の解読 */ - cmdtype = getcmdtype(op); + if((cmdtype = getcmdtype(op)) == NOTCMD) { + setcerr(210, pr2str(sys->cpu->pr)); /* not command code of COMET II */ + } r_r1 = (sys->memory[sys->cpu->pr] >> 4) & 0xF; x_r2 = sys->memory[sys->cpu->pr] & 0xF; /* traceオプション指定時、レジスタを出力 */