+#ifndef YACASL2_CASL2_INCLUDED
+#define YACASL2_CASL2_INCLUDED
+
#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
#include <malloc.h>
-#include <ctype.h>
-#include <assert.h>
#include <stdbool.h>
+#include <time.h>
+#include <assert.h>
+#include <ctype.h>
+#include <string.h>
+
+#include "word.h"
+#include "hash.h"
+#include "cerr.h"
+
+#ifndef ARRAYSIZE
#define ARRAYSIZE(array) (sizeof(array)/sizeof(array[0]))
+#endif
/* COMET IIの規格 */
enum {
- CMDSIZE = 4, /* 命令の最大文字数 */
- REGSIZE = 8, /* レジスタの数。COMET II規格では、8 */
- MEMSIZE = 512 /* 主記憶の容量。COMET II規格では、65536語 */
+ CMDSIZE = 4, /* 命令の最大文字数 */
+ REGSIZE = 8, /* 汎用レジスタの数 */
+ DEFAULT_MEMSIZE = 512, /* デフォルトのメモリ容量。COMET II規格では、65536語 */
+ DEFAULT_CLOCKS = 5000000, /* デフォルトのクロック周波数。COMET II規格では、未定義 */
};
-/* ハッシュ値を取得する */
-unsigned hash(const char *key, int size);
-
-/* COMET IIの基本データサイズ */
-typedef unsigned short WORD;
-
/* COMET IIのメモリ */
-extern WORD memory[MEMSIZE];
+extern WORD *memory;
/* COMET IIのCPUレジスタ */
extern WORD GR[REGSIZE], SP, PR, FR;
enum {
OF = 0x4, /* Overflow Flag */
SF = 0x2, /* Sign Flag */
- ZF = 0x1 /* Zero Flag */
+ ZF = 0x1, /* Zero Flag */
};
-/* エラー番号 */
-extern int cerrno;
-
-/* エラーメッセージ */
-extern char *cerrmsg;
-
/* レジストリの内容を表示する場合はTRUE */
extern bool tracemode;
/* ラベル表を表示する場合はTRUE */
extern bool labelmode;
+/* ラベル表を表示して終了する場合はTRUE */
+extern bool onlylabelmode;
+
/* アセンブラ詳細結果を表示するならTRUE */
extern bool asdetailmode;
/* アセンブルだけを行う場合はTRUE */
extern bool onlyassemblemode;
+/* メモリーサイズ */
+extern int memsize;
+
+/* クロック周波数 */
+extern int clocks;
+
/* 実行開始番地 */
extern WORD startptr;
R1_R2 = 020,
ADR_X = 030,
R_ = 040,
- NONE = 0
+ NONE = 0,
} CMDTYPE;
typedef struct {
/* 命令コードがキーのハッシュ表を解放する */
void free_code_type();
-/* エラー番号とエラーメッセージを設定 */
-void setcerr(int num, const char *val);
-
-/* エラー番号からメッセージを返す */
-char *getcerrmsg(int num);
-
-/* WORD値を文字列に変換 */
-char *wtoa(WORD word);
-
-/* エラーを解放する */
-void freecerr();
-
/* 指定されたファイルにアセンブル結果を書込 */
void outassemble(char *file);
+
+#endif