+/**
+ * @brief プログラムレジスタ(PR)を表すWORD値を文字列に変換
+ *
+ * @return 文字列「PR:XXXX」(Xは16進数の数字)
+ *
+ * @param pr プログラムレジスタ(PR)を表すWORD値
+ */
+char *pr2str(WORD pr);
+
+/**
+ * @brief 標準入力から文字データを読込(SVC 1)
+ *
+ * @return なし
+ */
+void svcin();
+
+/**
+ * @brief 標準出力へ文字データを書出(SVC 2)
+ *
+ * @return なし
+ */
+void svcout();
+
+/**
+ * @brief ロード/論理積/論理和/排他的論理和のフラグ設定。OFは常に0
+ *
+ * @return なし
+ *
+ * @param adr アドレス
+ */
+void setfr(WORD adr);
+
+/**
+ * @brief WORD値からr/r1を取得
+ *
+ * @return r/r1を表すWORD値
+ *
+ * @param oprx オペランドを表すWORD値
+ */
+WORD get_r_r1(WORD oprx);
+
+/**
+ * @brief WORD値からx/r2を取得
+ *
+ * @return x/r2を表すWORD値
+ *
+ * @param oprx オペランドを表すWORD値
+ */
+WORD get_x_r2(WORD oprx);
+
+/**
+ * @brief 2つのWORD値からadr[,x]を取得
+ *
+ * @return adr[,x]を表すWORD値
+ *
+ * @param adr アドレスを表すWORD値
+ * @param oprx オペランドを表すWORD値
+ */
+WORD get_adr_x(WORD adr, WORD oprx);
+
+/**
+ * @brief 2つのWORD値からadr[,x]のアドレスに格納されている値を取得
+ *
+ * @return adr[,x]のアドレスに格納されている値を表すWORD値
+ *
+ * @param adr アドレスを表すWORD値
+ * @param oprx オペランドを表すWORD値
+ */
+WORD get_val_adr_x(WORD adr, WORD oprx);
+
+/**
+ * @brief 実行エラーの定義
+ */
+static CERR cerr_exec[] = {
+ { 201, "Program Register (PR) - memory overflow" },
+ { 202, "Stack Pointer (SP) - stack overflow" },
+ { 203, "Stack Pointer (SP) - stack underflow" },
+ { 204, "OP in word #1 - not command code" },
+ { 205, "r/r1 in word #1 - not GR" },
+ { 206, "x/r2 in word #1 - not GR" },
+ { 207, "address in word #2 - out of memory" },
+ { 208, "SVC input - memory overflow" },
+ { 209, "SVC output - memory overflow" },
+};
+
+/**
+ * @brief 実行モード: trace, logical, dump, dump_start, dump_end, monitor, step
+ */
+EXECMODE execmode = {false, false, false, 0, 0xFFFF, false, false};
+
+char *pr2str(WORD pr)
+{
+ char *str = malloc_chk(CERRSTRSIZE + 1, "pr2str.pr");
+
+ sprintf(str, "PR:#%04X", pr);
+ return str;
+}
+