doxygen用にコメント修正。関数のstatic指定を外す
authorj8takagi <j8takagi@nifty.com>
Tue, 28 Dec 2010 06:12:41 +0000 (15:12 +0900)
committerj8takagi <j8takagi@nifty.com>
Tue, 28 Dec 2010 06:14:12 +0000 (15:14 +0900)
20 files changed:
include/assemble.h
include/casl2.h [deleted file]
include/cerr.h
include/cmem.h
include/hash.h
src/assemble.c
src/cmd.c
src/cmem.c
src/doxygen.c [new file with mode: 0644]
src/dump.c
src/dumpword.c
src/label.c
src/macro.c [deleted file]
src/struct.c
src/token.c
src/word.c
test/system/casl2/Test.mk
test/system/casl2/lib_inl/cmd
test/system/casl2/lib_mull/cmd
test/system/comet2/err_201/0.txt

index 15d314c..a878058 100644 (file)
@@ -9,27 +9,27 @@
  * CASL IIの仕様
  */
 enum {
-    LABELSIZE = 8,         /** ラベルの最大文字数 */
-    OPDSIZE = 40,          /** オペラントの最大数。CASL IIシミュレータの制限 */
+    LABELSIZE = 8,         /**<ラベルの最大文字数 */
+    OPDSIZE = 40,          /**<オペラントの最大数。CASL IIシミュレータの制限 */
 };
 
 /**
  * YACASL2の制限
  */
 enum {
-    LINESIZE = 1024,       /* 行の最大文字数 */
-    TOKENSIZE = 256,       /* トークンの最大文字数 */
+    LINESIZE = 1024,       /**<行の最大文字数 */
+    TOKENSIZE = 256,       /**<トークンの最大文字数 */
 };
 
 /**
  * アセンブルモード
  */
 typedef struct {
-    bool src;             /* ソースを表示する場合はtrue */
-    bool label;           /* ラベル表を表示する場合はtrue */
-    bool onlylabel;       /* ラベル表を表示して終了する場合はtrue */
-    bool asdetail;        /* アセンブラ詳細結果を表示する場合はtrue */
-    bool onlyassemble;    /* アセンブルだけを行う場合はtrue */
+    bool src;             /**<ソースを表示する場合はtrue */
+    bool label;           /**<ラベル表を表示する場合はtrue */
+    bool onlylabel;       /**<ラベル表を表示して終了する場合はtrue */
+    bool asdetail;        /**<アセンブラ詳細結果を表示する場合はtrue */
+    bool onlyassemble;    /**<アセンブルだけを行う場合はtrue */
 } ASMODE;
 
 extern ASMODE asmode;
@@ -38,11 +38,14 @@ extern ASMODE asmode;
  * アセンブルのプロパティ
  */
 typedef struct {
-    WORD ptr;     /* 現在のポインタ */
-    WORD lptr;    /* リテラル(=付きの値)を格納するポインタ */
-    char *prog;   /* 他のプログラムで参照する入口名 */
+    WORD ptr;     /**<現在のポインタ */
+    WORD lptr;    /**<リテラル(=付きの値)を格納するポインタ */
+    char *prog;   /**<他のプログラムで参照する入口名 */
 } ASPROP;
 
+/**
+ * アセンブルのプロパティ: ptr, lptr, *prog
+ */
 extern ASPROP *asprop;
 
 /**
@@ -59,10 +62,10 @@ typedef enum {
   * アセンブラ命令を表す配列
   */
 typedef struct {
-    ASCMDID cmdid;
-    int opdc_min;
-    int opdc_max;
-    char *cmd;
+    ASCMDID cmdid;              /**<アセンブル命令のID */
+    int opdc_min;               /**<最小オペランド数 */
+    int opdc_max;               /**<最大オペランド数 */
+    char *cmd;                  /**<コマンド名 */
 } ASCMD;
 
 /**
@@ -79,29 +82,29 @@ typedef enum {
  * マクロ命令を表す配列
  */
 typedef struct {
-    MACROCMDID cmdid;
-    int opdc_min;
-    int opdc_max;
-    char *cmd;
+    MACROCMDID cmdid;              /**<アセンブル命令のID */
+    int opdc_min;                  /**<最小オペランド数 */
+    int opdc_max;                  /**<最大オペランド数 */
+    char *cmd;                     /**<コマンド名 */
 } MACROCMD;
 
 /**
  * ラベル配列
  */
 typedef struct {
-    char *prog;
-    char *label;
-    WORD adr;
+    char *prog;                 /**<プログラム  */
+    char *label;                /**<ラベル */
+    WORD adr;                   /**<アドレス */
 } LABELARRAY;
 
 /**
  * ラベル表
  */
 typedef struct _LABELTAB {
-    struct _LABELTAB *next;
-    char *prog;
-    char *label;
-    WORD adr;
+    struct _LABELTAB *next;     /**<リスト次項目へのポインタ */
+    char *prog;                 /**<プログラム名  */
+    char *label;                /**<ラベル名 */
+    WORD adr;                   /**<アドレス */
 } LABELTAB;
 
 enum {
@@ -112,7 +115,7 @@ enum {
 };
 
 /**
- * アセンブラが、1回目か、2回目か、を表す
+ * アセンブラが、1回目か2回目か
  */
 typedef enum {
     FIRST = 0,
@@ -125,7 +128,7 @@ typedef enum {
 WORD getlabel(const char *prog, const char *label);
 
 /**
- * ã\83©ã\83\99ã\83«ã\82\92表に追加する
+ * ã\83\97ã\83­ã\82°ã\83©ã\83 å\90\8dã\80\81ã\83©ã\83\99ã\83«ã\80\81ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92ã\83©ã\83\99ã\83«表に追加する
  */
 bool addlabel(const char *prog, const char *label, WORD word);
 
@@ -143,21 +146,21 @@ void freelabel();
  * オペランド
  */
 typedef struct {
-    int opdc;
-    char *opdv[OPDSIZE];
+    int opdc;                   /**<オペランド数 */
+    char *opdv[OPDSIZE];        /**<オペランド配列 */
 } OPD;
 
 /**
  * 命令行
  */
 typedef struct {
-    char *label;
-    char *cmd;
-    OPD *opd;
+    char *label;                /**<ラベル */
+    char *cmd;                  /**<コマンド */
+    OPD *opd;                   /**<オペランド */
 } CMDLINE;
 
 /**
- * 1行を解析する
+ * 空白またはタブで区切られた1行から、トークンを取得する
  */
 CMDLINE *linetok(const char *line);
 
@@ -168,7 +171,7 @@ CMDLINE *linetok(const char *line);
 bool assemble(const char *file, PASS pass);
 
 /**
- * 指定されたファイルにアセンブル結果を書込
+ * 引数で指定したファイルにアセンブル結果を書込
  */
 void outassemble(const char *file);
 
diff --git a/include/casl2.h b/include/casl2.h
deleted file mode 100644 (file)
index 49f4c8c..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-#ifndef YACASL2_CASL2_INCLUDED
-#define YACASL2_CASL2_INCLUDED
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdbool.h>
-#include <time.h>
-#include <assert.h>
-#include <ctype.h>
-#include <string.h>
-
-#include "word.h"
-#include "hash.h"
-#include "cmem.h"
-#include "cerr.h"
-
-/* COMET IIの規格 */
-enum {
-    CMDSIZE = 4,              /* 命令の最大文字数 */
-    GRSIZE = 8,               /* 汎用レジスタの数。COMET II規格で、7 */
-    DEFAULT_MEMSIZE = 512,    /* デフォルトのメモリ容量。COMET II規格では、65536語 */
-    DEFAULT_CLOCKS = 5000000, /* デフォルトのクロック周波数。COMET II規格では、未定義 */
-};
-
-/* COMET II フラグのマスク値 */
-enum {
-    OF = 0x4,    /* Overflow Flag */
-    SF = 0x2,    /* Sign Flag */
-    ZF = 0x1,    /* Zero Flag */
-};
-
-/* COMET IIのCPU */
-typedef struct {
-    WORD gr[GRSIZE]; /* 汎用レジスタ */
-    WORD sp;         /* スタックポインタ */
-    WORD pr;         /* プログラムレジスタ */
-    WORD fr;         /* フラグレジスタ */
-} CPU;
-
-/* COMET IIの仮装実行マシンシステム */
-typedef struct {
-    CPU *cpu;        /* CPU */
-    WORD *memory;    /* メモリ */
-    int memsize;     /* メモリサイズ */
-    int clocks;      /* クロック周波数 */
-} SYSTEM;
-
-extern SYSTEM *sys;
-
-/* COMET II 命令 */
-/* 命令タイプは、オペランドにより6種類に分類 */
-typedef enum {
-    /* オペランド数2または3 */
-    /*     第1オペランド: 汎用レジスタ */
-    /*     第2オペランド: アドレス */
-    /*     第3オペランド: 指標レジスタ */
-    R_ADR_X = 010,
-    /* オペランド数2または3 */
-    /*     第1オペランド: 汎用レジスタ、*/
-    /*     第2オペランド: アドレスに格納されている内容 */
-    /*     第3オペランド: 指標レジスタ */
-    R_ADR_X_ = 011,
-    /* オペランド数2 */
-    /*     第1オペランド: 汎用レジスタ */
-    /*     第2オペランド: 汎用レジスタ */
-    R1_R2 = 020,
-    /* オペランド数1または2 */
-    /*     第1オペランド: アドレス */
-    /*     第2オペランド: 指標レジスタ */
-    ADR_X = 030,
-    /* オペランド数1 */
-    /*     第1オペランド: 汎用レジスタ */
-    R_ = 040,
-    /* オペランドなし */
-    NONE = 0,
-} CMDTYPE;
-
-/* 命令コード配列 */
-typedef struct {
-    char *name;
-    CMDTYPE type;
-    WORD code;
-} CMD;
-
-/* 命令コード配列のサイズ */
-extern int comet2cmdsize;
-
-/* 命令コードのハッシュ表 */
-typedef struct _CMDTAB {
-    struct _CMDTAB *next;
-    CMD *cmd;
-} CMDTAB;
-
-extern CMDTAB **cmdtype_code;
-extern CMDTAB **code_type;
-extern int cmdtabsize;
-
-/* CASL2プログラムのプロパティ */
-typedef struct {
-    WORD start;   /* プログラムの開始番地 */
-    WORD end;     /* プログラムの終了番地 */
-} PROGPROP;
-
-extern PROGPROP *prog;
-
-/* COMET II仮想マシンのリセット */
-void reset(int memsize, int clocks);
-
-/* COMET II仮想マシンのシャットダウン */
-void shutdown();
-
-/* 命令と命令タイプがキーのハッシュ表を作成する */
-bool create_cmdtype_code();
-
-/* 命令と命令タイプから、命令コードを取得する */
-/* 無効な場合は0xFFFFを返す */
-WORD getcmdcode(const char *cmd, CMDTYPE type);
-
-/* 命令と命令タイプがキーのハッシュ表を表示する */
-void print_cmdtype_code();
-
-/* 命令と命令タイプがキーのハッシュ表を解放する */
-void free_cmdtype_code();
-
-/* 命令コードがキーのハッシュ表を作成する */
-bool create_code_type();
-
-/* 命令コードから命令タイプを取得する */
-/* 無効な場合はNONEを返す */
-CMDTYPE getcmdtype(WORD code);
-
-/* 命令コードがキーのハッシュ表を表示する */
-void print_code_type();
-
-/* 命令コードがキーのハッシュ表を解放する */
-void free_code_type();
-
-/* 指定されたファイルにアセンブル結果を書込 */
-void outassemble(const char *file);
-
-#endif            /* YACASL2_CASL2_INCLUDEDの終端 */
index db9adbe..1433f90 100644 (file)
@@ -8,8 +8,8 @@
  * エラーの構造体
  */
 typedef struct {
-    int num;        /* エラー番号 */
-    char *msg;      /* エラーメッセージ */
+    int num;        /**<エラー番号 */
+    char *msg;      /**<エラーメッセージ */
 } CERR;
 
 /**
@@ -21,8 +21,8 @@ extern CERR *cerr;
  * エラーリスト型
  */
 typedef struct _CERRLIST {
-    struct _CERRLIST *next;
-    CERR *cerr;
+    struct _CERRLIST *next;     /**<リスト次項目へのポインタ */
+    CERR *cerr;                 /**<エラーの構造体 */
 } CERRLIST;
 
 /**
index a8629ab..a38c81d 100644 (file)
@@ -2,22 +2,32 @@
 #define YACASL2_CMEM_H_INCLUDED
 #include <stdlib.h>
 
+/*
+ * 配列のサイズを返す
+ */
 #ifndef ARRAYSIZE
 #define ARRAYSIZE(array) (sizeof(array)/sizeof(array[0]))
 #endif
 
-/* mallocを実行し、0で初期化 */
-/* メモリを確保できない場合はエラーを出力して終了 */
+/**
+ * mallocを実行し、0で初期化
+ * メモリを確保できない場合はエラーを出力して終了
+ */
 void *malloc_chk(size_t size, char *tag);
 
-/* callocを実行 */
-/* メモリを確保できない場合はエラーを出力して終了 */
+/**
+ * callocを実行
+ * メモリを確保できない場合はエラーを出力して終了
+ */
 void *calloc_chk(size_t nmemb, size_t size, char *tag);
 
-/* malloc_chkを実行してメモリを確保してから、 */
-/* コピーした文字列を返す */
+/**
+ * malloc_chkを実行してメモリを確保し、コピーした文字列を返す
+ */
 char *strdup_chk(const char *s, char *tag);
 
-/* メモリがNULLの場合は解放 */
+/**
+ * メモリを解放
+ */
 void free_chk(void *ptr, char *tag);
 #endif
index 3c05972..361e251 100644 (file)
@@ -13,11 +13,11 @@ typedef enum {
  * ハッシュ共用体
  */
 typedef struct {
-    UTYPE type;
+    UTYPE type;                 /**<ハッシュ値の元データのデータ型 */
     union {
-        char *s;
-        int i;
-    } val;
+        char *s;                /**<char型のデータ */
+        int i;                  /**<int型のデータ */
+    } val;                      /**<ハッシュ値の元データ */
 } HKEY;
 
 /**
index 272f2f8..563431c 100644 (file)
@@ -13,7 +13,7 @@
 ASMODE asmode = {false, false, false, false, false};
 
 /**
- * アセンブルのプロパティ
+ * アセンブルのプロパティ: ptr, lptr, *prog
  */
 ASPROP *asprop;
 
@@ -24,8 +24,6 @@ static CERR cerr_assemble[] = {
     { 101, "label already defined" },
     { 102, "label table is full" },
     { 103, "label not found" },
-    { 104, "label length is too long" },
-    { 105, "no command in the line" },
     { 106, "operand mismatch in assemble command" },
     { 107, "no label in START" },
     { 108, "not command of operand \"r\"" },
@@ -34,48 +32,42 @@ static CERR cerr_assemble[] = {
     { 111, "not command of operand \"adr[,x]\"" },
     { 112, "not command of no operand" },
     { 113, "operand too many in COMET II command" },
-    { 117, "operand too many in DC" },
-    { 118, "operand length too long" },
     { 119, "out of COMET II memory" },
     { 120, "GR0 in operand x" },
-    { 121, "cannot get operand token" },
     { 122, "cannot create hash table" },
-    { 123, "unclosed quote" },
     { 124, "more than one character in literal" },
     { 125, "not GR in operand x" },
 };
 
-#ifndef UNITTEST
-static WORD getadr(const char *prog, const char *str, PASS pass);
+WORD getadr(const char *prog, const char *str, PASS pass);
 
-static WORD getgr(const char *str, bool is_x);
+WORD getgr(const char *str, bool is_x);
 
-static WORD getliteral(const char *str, PASS pass);
+WORD getliteral(const char *str, PASS pass);
 
-static bool assemblecmd(const CMDLINE *cmdl, PASS pass);
+bool assemblecmd(const CMDLINE *cmdl, PASS pass);
 
-static bool macrocmd(const CMDLINE *cmdl, PASS pass);
+bool macrocmd(const CMDLINE *cmdl, PASS pass);
 
-static bool writeIN(const char *ibuf, const char *len, PASS pass);
+bool writeIN(const char *ibuf, const char *len, PASS pass);
 
-static bool writeOUT(const char *obuf, const char *len, PASS pass);
+bool writeOUT(const char *obuf, const char *len, PASS pass);
 
-static bool writeRPUSH(PASS pass);
+bool writeRPUSH(PASS pass);
 
-static bool writeRPOP(PASS pass);
+bool writeRPOP(PASS pass);
 
-static bool cometcmd(const CMDLINE *cmdl, PASS pass);
+bool cometcmd(const CMDLINE *cmdl, PASS pass);
 
-static bool writememory(WORD word, WORD adr, PASS pass);
+bool writememory(WORD word, WORD adr, PASS pass);
 
-static void writestr(const char *str, bool literal, PASS pass);
+void writestr(const char *str, bool literal, PASS pass);
 
-static void writeDC(const char *str, PASS pass);
+void writeDC(const char *str, PASS pass);
 
-static bool assembleline(const CMDLINE *cmdl, PASS pass);
+bool assembleline(const CMDLINE *cmdl, PASS pass);
 
-static void printline(FILE *stream, const char *filename, int lineno, char *line);
-#endif
+void printline(FILE *stream, const char *filename, int lineno, char *line);
 
 /**
  * 汎用レジスタを表す文字列「GR[0-7]」から、レジスタ番号[0-7]をWORD値で返す
index 258c491..fc5da13 100644 (file)
--- a/src/cmd.c
+++ b/src/cmd.c
@@ -8,7 +8,7 @@
 /**
  * 機械語命令のリスト
  */
-CMD comet2cmd[] = {
+static CMD comet2cmd[] = {
     { "NOP", NONE, 0x0 },
     { "LD", R_ADR_X_, 0x1000 },
     { "ST", R_ADR_X, 0x1100 },
@@ -64,12 +64,6 @@ static int cmdtabsize;
  */
 static CMDTAB **cmdtype_code, **code_type;
 
-#ifndef UNITTEST
-static unsigned hash_cmdtype(const char *cmd, CMDTYPE type);
-
-static unsigned hash_code(WORD code);
-#endif
-
 /**
  * 命令の名前とタイプからハッシュ値を生成する
  */
index 0be54c4..2274c2e 100644 (file)
@@ -36,7 +36,7 @@ void *calloc_chk(size_t nmemb, size_t size, char *tag)
 }
 
 /**
- * malloc_chkã\82\92å®\9fè¡\8cã\81\97ã\81¦ã\83¡ã\83¢ã\83ªã\82\92確ä¿\9dã\81\97ã\81¦ã\81\8bã\82\89ã\80\81ã\82³ã\83\94ã\83¼ã\81\97ã\81\9fæ\96\87å­\97å\88\97ã\82\92è¿\94ã\81\99
+ * malloc_chkを実行してメモリを確保し、コピーした文字列を返す
  */
 char *strdup_chk(const char *s, char *tag)
 {
@@ -54,4 +54,5 @@ char *strdup_chk(const char *s, char *tag)
 void free_chk(void *ptr, char *tag)
 {
     free(ptr);
+    ptr = NULL;
 }
diff --git a/src/doxygen.c b/src/doxygen.c
new file mode 100644 (file)
index 0000000..6b1693e
--- /dev/null
@@ -0,0 +1,35 @@
+/**
+ * \mainpage YACASL2 内部仕様書
+ * \section メイン関数
+ * - casl2.c
+ * - comet2.c
+ * - dumpword.c
+ *
+ * \section ヘッダファイル
+ * - assemble.h
+ * - exec.h
+ * - struct.h
+ * - word.h
+ * - hash.h
+ * - cerr.h
+ * - cmem.h
+ *
+ * \section Webサイト
+ * http://www.j8takagi.net/yacasl2/
+ *
+ * \section 外部仕様書
+ * http://www.j8takagi.net/yacasl2/doc/yacasl2.html
+ *
+ * \section CASLII仕様書
+ *
+ *   試験で使用する情報処理用語・プログラム言語など(2008年10月版)
+ *   http://www.jitec.ipa.go.jp/1_00topic/topic_20081027_hani_yougo.pdf (PDFファイル)
+ *       別紙 1 アセンブラ言語の仕様
+ *
+ * \section ライセンス
+ * \author j8takagi
+ *
+ * YACASL2 is licensed under the MIT license.
+ *
+ * MIT Licenseの詳細は、LICENSEファイルを参照してください。
+ */
index 857b3de..769b175 100644 (file)
@@ -2,7 +2,7 @@
 #include "exec.h"
 
 /**
- * COMET IIのメモリを表示
+ * COMET IIのメモリを表示する
  */
 void dumpmemory()
 {
@@ -29,7 +29,7 @@ void dumpmemory()
 }
 
 /**
- * COMET IIのレジスタを表示
+ * COMET IIのレジスタを表示する
  */
 void dspregister()
 {
index d0afa9f..0bc9a47 100644 (file)
@@ -5,6 +5,9 @@
 #include "word.h"
 #include "cerr.h"
 
+/**
+ * dumpwordコマンドのオプション
+ */
 static struct option longopts[] = {
     { "arithmetic", no_argument, NULL, 'a' },
     { "logical", no_argument, NULL, 'l' },
index 2c4214e..9124b5c 100644 (file)
 static int labelcnt = 0;                /* ラベル数 */
 static LABELTAB *labels[LABELTABSIZE];  /* ラベル表 */
 
-#ifndef UNITTEST
-static unsigned labelhash(const char *prog, const char *label);
-
-static int compare_adr(const void *a, const void *b);
-#endif
-
 /**
  * プログラム名とラベルに対応するハッシュ値を返す
  */
@@ -38,7 +32,7 @@ unsigned labelhash(const char *prog, const char *label)
 }
 
 /**
- * ã\83©ã\83\99ã\83«è¡¨ã\81\8bã\82\89ã\82¢ã\83\89ã\83¬ã\82¹ã\82\92検索する
+ * ã\83\97ã\83­ã\82°ã\83©ã\83 å\90\8dã\81¨ã\83©ã\83\99ã\83«ã\81«å¯¾å¿\9cã\81\99ã\82\8bã\82¢ã\83\89ã\83¬ã\82¹ã\82\92ã\83©ã\83\99ã\83«è¡¨ã\81\8bã\82\89検索する
  */
 WORD getlabel(const char *prog, const char *label)
 {
diff --git a/src/macro.c b/src/macro.c
deleted file mode 100644 (file)
index e41eef9..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-#include "casl2.h"
-#include "assemble.h"
-
-/* マクロ命令「IN IBUF,LEN」をメモリに書込 */
-/*         PUSH 0,GR1   */
-/*         PUSH 0,GR2   */
-/*         LAD GR1,IBUF */
-/*         LAD GR2,LEN  */
-/*         SVC 1        */
-/*         POP GR2      */
-/*         POP GR1      */
-bool writeIN(const char *ibuf, const char *len, PASS pass)
-{
-    bool status = false;
-
-    /* PUSH 0,GR1 */
-    writememory(0x7001, (asprop->ptr)++, pass);
-    writememory(0x0, (asprop->ptr)++, pass);
-    /* PUSH 0,GR2 */
-    writememory(0x7002, (asprop->ptr)++, pass);
-    writememory(0x0, (asprop->ptr)++, pass);
-    /* LAD GR1,IBUF */
-    writememory(0x1210, (asprop->ptr)++, pass);
-    writememory(getadr(asprop->prog, ibuf, pass), (asprop->ptr)++, pass);
-    /* LAD GR2,LEN */
-    writememory(0x1220, (asprop->ptr)++, pass);
-    writememory(getadr(asprop->prog, len, pass), (asprop->ptr)++, pass);
-    /* SVC 1 */
-    writememory(0xF000, (asprop->ptr)++, pass);
-    writememory(0x0001, (asprop->ptr)++, pass);
-    /* POP GR2 */
-    writememory(0x7120, (asprop->ptr)++, pass);
-    /* POP GR1 */
-    writememory(0x7110, (asprop->ptr)++, pass);
-    if(cerr->num == 0) {
-        status = true;
-    }
-    return status;
-}
-
-/* マクロ命令「OUT OBUF,LEN」をメモリに書込 */
-/*         PUSH 0,GR1   */
-/*         PUSH 0,GR2   */
-/*         LAD GR1,OBUF */
-/*         LAD GR2,LEN  */
-/*         SVC 2        */
-/*         LAD GR1,=#A  */
-/*         LAD GR2,1    */
-/*         SVC 2        */
-/*         POP GR2      */
-/*         POP GR1      */
-bool writeOUT(const char *obuf, const char *len, PASS pass)
-{
-    bool status = false;
-
-    /* PUSH 0,GR1 */
-    writememory(0x7001, (asprop->ptr)++, pass);
-    writememory(0x0, (asprop->ptr)++, pass);
-    /* PUSH 0,GR2 */
-    writememory(0x7002, (asprop->ptr)++, pass);
-    writememory(0x0, (asprop->ptr)++, pass);
-    /* LAD GR1,OBUF */
-    writememory(0x1210, (asprop->ptr)++, pass);
-    writememory(getadr(asprop->prog, obuf, pass), (asprop->ptr)++, pass);
-    /* LAD GR2,OLEN */
-    writememory(0x1220, (asprop->ptr)++, pass);
-    writememory(getadr(asprop->prog, len, pass), (asprop->ptr)++, pass);
-    /* SVC 2 */
-    writememory(0xF000, (asprop->ptr)++, pass);
-    writememory(0x0002, (asprop->ptr)++, pass);
-    /* LAD GR1,=#A */
-    writememory(0x1210, (asprop->ptr)++, pass);
-    if(pass == FIRST) {
-        (asprop->ptr)++;
-    } else {
-        writememory(asprop->lptr, (asprop->ptr)++, pass);    /* リテラルのアドレスを書込 */
-    }
-    writememory(0xA, (asprop->lptr)++, pass);
-    /* LAD GR2,=1 */
-    writememory(0x1220, (asprop->ptr)++, pass);
-    if(pass == FIRST) {
-        (asprop->ptr)++;
-    } else {
-        writememory(asprop->lptr, (asprop->ptr)++, pass);    /* リテラルのアドレスを書込 */
-    }
-    writememory(0x1, (asprop->lptr)++, pass);
-    /* SVC 2 */
-    writememory(0xF000, (asprop->ptr)++, pass);
-    writememory(0x0002, (asprop->ptr)++, pass);
-    /* POP GR2 */
-    writememory(0x7120, (asprop->ptr)++, pass);
-    /* POP GR1 */
-    writememory(0x7110, (asprop->ptr)++, pass);
-    if(cerr->num == 0) {
-        status = true;
-    }
-    return status;
-}
-
-/* マクロ命令「RPUSH」をメモリに書き込む
-        PUSH 0,GR1
-        PUSH 0,GR2
-        PUSH 0,GR3
-        PUSH 0,GR4
-        PUSH 0,GR5
-        PUSH 0,GR6
-        PUSH 0,GR7
- */
-bool writeRPUSH(PASS pass) {
-    int i;
-    bool status = false;
-
-    for(i = 1; i <= 7; i++) {
-        writememory(0x7000 + i, (asprop->ptr)++, pass);   /* PUSH GRn */
-        writememory(0x0, (asprop->ptr)++, pass);
-    }
-    if(cerr->num == 0) {
-        status = true;
-    }
-    return status;
-}
-
-/* マクロ命令「RPOP」をメモリに書き込む
-        POP GR7
-        POP GR6
-        POP GR5
-        POP GR4
-        POP GR3
-        POP GR3
-        POP GR2
-        POP GR1
- */
-bool writeRPOP(PASS pass) {
-    int i;
-    bool status = false;
-    for(i = 7; i >= 1; i--) {
-        writememory((0x7100 + (i << 4)), (asprop->ptr)++, pass);  /* POP GRn */
-    }
-    if(cerr->num == 0) {
-        status = true;
-    }
-    return status;
-}
index 7ac58e5..58a3585 100644 (file)
@@ -1,13 +1,19 @@
 #include "struct.h"
 #include "cmem.h"
 
-/* COMET IIの仮装実行マシンシステム */
+/**
+ * COMET IIの仮装実行マシンシステム
+ */
 SYSTEM *sys;
 
-/* CASL IIプログラムのプロパティ */
+/**
+ * CASL IIプログラムのプロパティ
+ */
 PROGPROP *prog;
 
-/* COMET II仮想マシンのリセット */
+/**
+ * COMET II仮想マシンのリセット
+ */
 void reset(int memsize, int clocks)
 {
     int i;
@@ -29,7 +35,9 @@ void reset(int memsize, int clocks)
     prog = malloc_chk(sizeof(PROGPROP), "prog");
 }
 
-/* COMET II仮想マシンのシャットダウン */
+/**
+ * COMET II仮想マシンのシャットダウン
+ */
 void shutdown()
 {
     free_chk(prog, "prog");
index 3972d51..9731605 100644 (file)
@@ -4,11 +4,9 @@
 #include "cmem.h"
 #include "assemble.h"
 
-#ifndef UNITTEST
-static OPD *opdtok(const char *str);
-#endif
-
-/* 「,」区切りの文字列から、オペランドのトークンを取得 */
+/**
+ * 「,」区切りの文字列から、オペランドのトークンを取得
+ */
 OPD *opdtok(const char *str)
 {
     OPD *opd = malloc_chk(sizeof(OPD), "opd");
@@ -16,6 +14,13 @@ OPD *opdtok(const char *str)
     int sepc = ',', rcnt = 0;
     bool quoting = false;
 
+    CERR cerr_opdtok[] = {
+        { 117, "operand too many in DC" },
+        { 118, "operand length too long" },
+        { 121, "cannot get operand token" },
+        { 123, "unclosed quote" },
+    };
+    addcerrlist(ARRAYSIZE(cerr_opdtok), cerr_opdtok);
     opd->opdc = 0;
     if(str == NULL) {
         return opd;
@@ -70,13 +75,20 @@ OPD *opdtok(const char *str)
     return opd;
 }
 
-/* 空白またはタブで区切られた1行から、トークンを取得 */
+/**
+ * 空白またはタブで区切られた1行から、トークンを取得する
+ */
 CMDLINE *linetok(const char *line)
 {
     char *tokens, *p, *sepp;
     bool quoting = false;
     CMDLINE *cmdl = malloc_chk(sizeof(CMDLINE), "cmdl");
 
+    CERR cerr_linetok[] = {
+        { 104, "label length is too long" },
+        { 105, "no command in the line" },
+    };
+    addcerrlist(ARRAYSIZE(cerr_linetok), cerr_linetok);
     if(line == NULL || strlen(line) == 0) {
         return NULL;
     }
index 3e9d305..bc51180 100644 (file)
@@ -7,15 +7,19 @@
 #include "word.h"
 #include "cerr.h"
 
-/* wordのエラー定義 */
+/**
+ * wordのエラー定義
+ */
 static CERR cerr_word[] = {
     { 114, "not integer" },
     { 115, "not hex" },
     { 116, "out of hex range" },
 };
 
-/* 10進数の文字列をWORD値に変換 */
-static WORD n2word(const char *str)
+/**
+ * 10進数の文字列をWORD値に変換
+ */
+WORD n2word(const char *str)
 {
     assert(isdigit(*str) || *str == '-');
 
@@ -34,8 +38,10 @@ static WORD n2word(const char *str)
     return (WORD)n;
 }
 
-/* 16進数の文字列をWORD値に変換 */
-static WORD h2word(const char *str)
+/**
+ * 16進数の文字列をWORD値に変換
+ */
+WORD h2word(const char *str)
 {
     assert(*str == '#');
 
@@ -55,7 +61,9 @@ static WORD h2word(const char *str)
     return word;
 }
 
-/* 10進数または16進数の文字列をWORD値に変換 */
+/**
+ * 10進数または16進数の文字列をWORD値に変換
+ */
 WORD nh2word(const char *str)
 {
     assert(sizeof(WORD)*8 == 16); /* WORD型のサイズが16ビットであることを確認 */
@@ -75,7 +83,9 @@ WORD nh2word(const char *str)
     return word;
 }
 
-/* WORD値を10進数の文字列に変換 */
+/**
+ * WORD値を10進数の文字列に変換
+ */
 char *word2n(WORD word)
 {
     enum {
@@ -95,7 +105,9 @@ char *word2n(WORD word)
     return digit;
 }
 
-/* WORD値を2進数の文字列に変換 */
+/**
+ * WORD値を2進数の文字列に変換
+ */
 char *word2bit(const WORD word)
 {
     enum {
@@ -112,7 +124,9 @@ char *word2bit(const WORD word)
     return bit;
 }
 
-/* WORD値を解析して表示 */
+/**
+ * WORD値を解析して表示
+ */
 void print_dumpword(WORD word, bool logicalmode)
 {
     if(logicalmode == true) {
index 8da44c1..216986e 100644 (file)
@@ -19,8 +19,7 @@ SHELL = /bin/bash
 TEST = $(notdir $(CURRDIR))
 
 # コマンドファイルのソース
-CMDSRC_FILE := $(CMD_FILE)
-#CMDSRC_FILE := $(CMD_FILE).c
+CMDSRC_FILE ?= $(CMD_FILE)
 
 .PHONY: check set reset time cleantime clean cleanall
 
index 7a7215c..f68c159 100755 (executable)
@@ -1 +1 @@
-../../../../casl2 -M720 inl.casl ../../../../as/casl2lib/inl.casl ../../../../as/casl2lib/outl.casl ../../../../as/casl2lib/str2l.casl ../../../../as/casl2lib/divl.casl ../../../../as/casl2lib/rev.casl  <teststr.txt
+../../../../casl2 -M720 inl.casl ../../../../as/casl2lib/inl.casl ../../../../as/casl2lib/outl.casl ../../../../as/casl2lib/mull.casl ../../../../as/casl2lib/str2l.casl ../../../../as/casl2lib/divl.casl ../../../../as/casl2lib/rev.casl  <teststr.txt
index d5a5aef..bd6a01a 100755 (executable)
@@ -1 +1 @@
-../../../../casl2 -M640 mull.casl ../../../../as/casl2lib/mull.casl ../../../../as/casl2lib/outl.casl ../../../../as/casl2lib/divl.casl ../../../../as/casl2lib/rev.casl 
+../../../../casl2 -M4096 mull.casl ../../../../as/casl2lib/mull.casl ../../../../as/casl2lib/outl.casl ../../../../as/casl2lib/divl.casl ../../../../as/casl2lib/rev.casl 
index dc54058..7486ef1 100644 (file)
@@ -1 +1 @@
-Execute error - 201: load object file - full of COMET II memory
+Load error - 201: a.o: Loading - full of COMET II memory