+#include "cerr.h"
+
+/**
+ * 実行エラーの定義
+ */
+static CERR cerr_exec[] = {
+ { 202, "SVC input - out of Input memory" },
+ { 203, "SVC output - out of COMET II memory" },
+ { 204, "Program Register (PR) - out of COMET II memory" },
+ { 205, "Stack Pointer (SP) - cannot allocate stack buffer" },
+ { 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" },
+};
+
+/**
+ * 実行モード: trace, logical, dump
+ */
+EXECMODE execmode = {false, false, false};
+
+/**
+ * アセンブル結果読み込みエラーをエラーリストに追加
+ */
+void addcerrlist_load()
+{
+ addcerrlist(ARRAYSIZE(cerr_load), cerr_load);
+}
+
+/**
+ * 実行エラーをエラーリストに追加
+ */
+void addcerrlist_exec()
+{
+ addcerrlist(ARRAYSIZE(cerr_exec), cerr_exec);
+}
+/**
+ * 指定されたファイルからアセンブル結果を読み込む
+ */
+bool loadassemble(char *file)
+{
+ FILE *fp;
+ bool status = true;
+
+ assert(file != NULL);
+ if((fp = fopen(file, "r")) == NULL) {
+ perror(file);
+ return false;
+ }
+ execptr->end = execptr->start +
+ fread(sys->memory, sizeof(WORD), sys->memsize - execptr->start, fp);
+ if(execptr->end == sys->memsize) {
+ setcerr(201, file); /* Loading - full of COMET II memory */
+ fprintf(stderr, "Load error - %d: %s\n", cerr->num, cerr->msg);
+ status = false;
+ }
+ fclose(fp);
+ return status;
+}
+
+/**
+ * プログラムレジスタ(PR)を表す文字列を返す
+ **/
+static char *pr2str(WORD pr) {
+ char *str = malloc_chk(CERRSTRSIZE + 1, "pr2str.pr");
+
+ sprintf(str, "PR:#%04X", pr);
+ return str;
+}