Merge branch 'master'
authorj8takagi <j8takagi@nifty.com>
Wed, 27 Feb 2019 04:11:36 +0000 (13:11 +0900)
committerj8takagi <j8takagi@nifty.com>
Wed, 27 Feb 2019 04:11:36 +0000 (13:11 +0900)
1  2 
include/assemble.h
include/exec.h
src/casl2.c
src/doxygen.c
test/system/comet2monitor/load/0.txt

diff --combined include/assemble.h
@@@ -9,7 -9,11 +9,7 @@@
  #include <assert.h>
  #include <errno.h>
  #include "cerr.h"
 -#include "cmem.h"
 -#include "exec.h"
 -#include "hash.h"
  #include "struct.h"
 -#include "word.h"
  #include "token.h"
  
  /**
@@@ -138,13 -142,13 +138,13 @@@ bool assemblefile(const char *file, PAS
  /**
   * @brief 指定された1つまたは複数のファイルを2回アセンブル
   *
-  * @return ã\81ªã\81\97
+  * @return ã\82¢ã\82»ã\83³ã\83\96ã\83«å®\8cäº\86æ\99\82ã\81¯trueã\80\81ã\82¨ã\83©ã\83¼ç\99ºç\94\9fæ\99\82ã\81¯falseã\82\92è¿\94ã\81\99
   *
   * @param filec アセンブルするファイルの数
   * @param filev アセンブルするファイル名の配列
   * @param adr アセンブル結果を格納するアドレス
   */
void assemble(int filec, char *filev[], WORD adr);
bool assemble(int filec, char *filev[], WORD adr);
  
  /**
   * @brief ファイルにアセンブル結果を書き込む
diff --combined include/exec.h
@@@ -16,16 -16,29 +16,11 @@@ enum 
      INSIZE = 256    /**<IN命令の、入力領域 */
  };
  
 -/**
 - * @brief 実行モードを表すデータ型
 - */
 -typedef struct {
 -    bool trace;           /**<レジストリの内容をステップごとに表示する場合はtrue */
 -    bool logical;         /**<レジストリの内容を論理値(0から65535)で表示する場合はtrue */
 -    bool dump;            /**<メモリの内容をステップごとに表示する場合はtrue */
 -    int dump_start;       /**<メモリの内容をステップごとに表示する場合の開始アドレス */
 -    int dump_end;         /**<メモリの内容をステップごとに表示する場合の終了アドレス */
 -    bool monitor;         /**<モニターモードの場合はtrue */
 -    bool step;            /**<ステップ実行の場合はtrue */
 -} EXECMODE;
 -
 -/**
 - * @brief 実行モード: trace, logical, dump, monitor, step
 - */
 -extern EXECMODE execmode;
 -
  /**
   * @brief 実行エラーをエラーリストに追加する
   */
  void addcerrlist_exec();
  
- /**
-  * @brief アセンブル結果読み込みエラーをエラーリストに追加する
-  */
- void addcerrlist_load();
  /**
   * @brief 指定されたファイルからアセンブル結果を読み込む
   *
diff --combined src/casl2.c
@@@ -1,6 -1,5 +1,6 @@@
  #include "package.h"
  #include "assemble.h"
 +#include "exec.h"
  
  /**
   * @brief CASL IIのエラーをエラーリストに追加
@@@ -46,6 -45,7 +46,7 @@@ static struct option longopts[] = 
   */
  CERR cerr_casl2[] = {
      { 126, "no source file" },
+     { 127, "invalid option" },
  };
  
  void addcerrlist_casl2()
@@@ -75,6 -75,12 +76,12 @@@ int main(int argc, char *argv[]
      const char *usage =
          "Usage: %s [-slLaAtTdmvh] [-oO[<OBJECTFILE>]] [-M <MEMORYSIZE>] [-C <CLOCKS>] FILE1[ FILE2  ...]\n";
  
+     /* エラーの定義 */
+     cerr_init();
+     addcerrlist_casl2();
+     addcerrlist_assemble();
+     addcerrlist_exec();
      /* オプションの処理 */
      while((opt = getopt_long(argc, argv, "tTdslLmao::O::AM:C:vh", longopts, NULL)) != -1) {
          switch(opt) {
              break;
          case 'v':
              fprintf(stdout, cmdversion, version);
-             return 0;
+             goto casl2fin;
          case 'h':
              fprintf(stdout, usage, argv[0]);
-             return 0;
+             goto casl2fin;
          case '?':
              fprintf(stderr, usage, argv[0]);
-             exit(1);
+             setcerr(212, "");    /* invalid option */
+             goto casl2fin;
          }
      }
  
-     /* エラーの定義 */
-     cerr_init();
-     addcerrlist_casl2();
-     addcerrlist_assemble();
-     addcerrlist_exec();
      /* ソースファイルが指定されていない場合は終了 */
      if(argv[optind] == NULL) {
          setcerr(126, "");    /* no source file */
-         fprintf(stderr, "CASL2 error - %d: %s\n", cerr->num, cerr->msg);
-         freecerr();                                    /* エラーの解放 */
-         exit(1);
+         fprintf(stderr, "casl2 error - %d: %s\n", cerr->num, cerr->msg);
+         goto casl2fin;
      }
      create_cmdtable(HASH_CMDTYPE);                 /* 命令の名前とタイプがキーのハッシュ表を作成 */
      reset(memsize, clocks);                        /* 仮想マシンCOMET IIのリセット */
      for(i = 0; i < argc - optind; i++) {           /* 引数からファイル名配列を取得 */
          af[i] = argv[optind + i];
      }
-     assemble(i, af, 0);                            /* アセンブル */
-     if(asmode.onlylabel == true || cerr->num > 0) {
-         goto casl2fin;
+     /* アセンブル */
+     if(assemble(i, af, 0) == false || asmode.onlylabel == true) {
+         goto shutdown;
      }
      /* オブジェクトファイル名が指定されている場合は、アセンブル結果をオブジェクトファイルに出力 */
      if(objfile != NULL) {
          outassemble(objfile);
-         FREE(objfile);
      }
      /* onlyassembleモード以外の場合、仮想マシンCOMET IIを実行 */
      if(asmode.onlyassemble == false) {
          exec();                                    /* 仮想マシンCOMET IIの実行 */
      }
+ shutdown:
+     shutdown();                                   /* 仮想マシンCOMET IIのシャットダウン */
  casl2fin:
-     shutdown();                                    /* 仮想マシンCOMET IIのシャットダウン */
      free_cmdtable(HASH_CMDTYPE);
-     stat = (cerr->num == 0) ? 0 : 1;
+     FREE(objfile);
+     if(cerr->num > 0) {
+         stat = 1;
+     }
      freecerr();                                    /* エラーの解放 */
      return stat;
  }
diff --combined src/doxygen.c
@@@ -3,9 -3,9 +3,10 @@@
   * \section メイン関数
   * - src/casl2.c
   * - src/comet2.c
 + * - src/comet2monitor.c
   * - src/dumpword.c
   * - src/casl2rev.c
+  * - src/comet2monitor.c
   *
   * \section そのほかのソースファイル
   * - src/assemble.c
@@@ -1,4 -1,10 +1,10 @@@
  COMET II machine code monitor. Type ? for help.
- (comet2 monitor) l as/sample/sum_10.o
+ (comet2 monitor) l sum_10.o
  (comet2 monitor) d
 -(comet2 monitor) 
+ #0000: adr : 0000 0001 0002 0003 0004 0005 0006 0007 0008 0009 000A 000B 000C 000D 000E 000F
+        -------------------------------------------------------------------------------------
+ #0000: 0000: 7001 0000 7002 0000 3622 1010 0015 2621 2210 0017 4110 0016 6500 0010 6400 0007
+ #0000: 0010: 1120 0018 7120 7110 8100 0001 000A 0001 0000 0000 0000 0000 0000 0000 0000 0000
+ #0000: 0020: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
+ #0000: 0030: 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000
 +(comet2 monitor)