#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規格では、未定義 */
};
/* ハッシュ値を取得する */
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");
}
}
/* 機械語の実行 */
for (; ; ) {
+ clock_begin = clock();
/* プログラムレジスタのアドレスが主記憶の範囲外の場合はエラー */
if(PR >= MEMSIZE) {
sprintf(errpr, "PR:#%04X", PR);
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);