クロック周波数の定義を追加
authorj8takagi <j8takagi@nifty.com>
Mon, 7 Dec 2009 11:32:21 +0000 (20:32 +0900)
committerj8takagi <j8takagi@nifty.com>
Mon, 7 Dec 2009 11:32:21 +0000 (20:32 +0900)
casl2 [deleted file]
comet2 [deleted file]
include/casl2.h
src/exec.c

diff --git a/casl2 b/casl2
deleted file mode 100755 (executable)
index ca2c1f6..0000000
Binary files a/casl2 and /dev/null differ
diff --git a/comet2 b/comet2
deleted file mode 100755 (executable)
index b1d553d..0000000
Binary files a/comet2 and /dev/null differ
index 4f933b4..70e25c5 100644 (file)
@@ -5,13 +5,16 @@
 #include <ctype.h>
 #include <assert.h>
 #include <stdbool.h>
+#include <time.h>
+
 #define ARRAYSIZE(array) (sizeof(array)/sizeof(array[0]))
 
 /* COMET IIの規格 */
 enum {
-    CMDSIZE = 4,    /* 命令の最大文字数 */    
-    REGSIZE = 8,     /* レジスタの数。COMET II規格では、8 */
-    MEMSIZE = 512    /* 主記憶の容量。COMET II規格では、65536語 */
+    CMDSIZE = 4,      /* 命令の最大文字数 */
+    REGSIZE = 8,      /* 汎用レジスタの数 */
+    MEMSIZE = 512,    /* メモリ容量。COMET II規格では、65536語 */
+    CLOCKS = 5000000  /* クロック周波数。COMET II規格では、未定義 */
 };
 
 /* ハッシュ値を取得する */
index d811c92..19be801 100644 (file)
@@ -266,6 +266,8 @@ void exec()
     WORD op, r_r1, x_r2, val;
     CMDTYPE cmdtype;
     char *errpr = malloc(8);
+    clock_t clock_begin, clock_end;
+
     if(tracemode) {
         fprintf(stdout, "\nExecuting machine codes\n");
     }
@@ -278,6 +280,7 @@ void exec()
     }
     /* 機械語の実行 */
     for (; ; ) {
+        clock_begin = clock();
         /* プログラムレジスタのアドレスが主記憶の範囲外の場合はエラー */
         if(PR >= MEMSIZE) {
             sprintf(errpr, "PR:#%04X", PR);
@@ -448,6 +451,9 @@ void exec()
         default:
             break;
         }
+        do {
+            clock_end = clock();
+        } while(clock_end - clock_begin < CLOCKS_PER_SEC / CLOCKS);
     }
 execerr:
     fprintf(stderr, "Execute error - %d: %s\n", cerrno, cerrmsg);