25 {
"source", no_argument, NULL,
's' },
26 {
"label", no_argument, NULL,
'l' },
27 {
"labelonly", no_argument, NULL,
'L' },
28 {
"assembledetail", no_argument, NULL,
'a' },
29 {
"assembledetailonly", no_argument, NULL,
'A' },
30 {
"assembleout", optional_argument, NULL,
'o' },
31 {
"assembleoutonly", optional_argument, NULL,
'O' },
32 {
"trace", no_argument, NULL,
't' },
33 {
"tracearithmetic", no_argument, NULL,
't' },
34 {
"tracelogical", no_argument, NULL,
'T' },
35 {
"dump", no_argument, NULL,
'd' },
36 {
"monitor", no_argument, NULL,
'm' },
37 {
"reverse", no_argument, NULL,
'r' },
38 {
"memorysize", required_argument, NULL,
'M' },
39 {
"clocks", required_argument, NULL,
'C' },
40 {
"version", no_argument, NULL,
'v' },
41 {
"help", no_argument, NULL,
'h' },
49 { 126,
"no source file" },
50 { 127,
"invalid option" },
60 const char *default_name =
"a.o";
62 (name == NULL || !name[0]) ? default_name : name,
75int main(
int argc,
char *argv[])
85 const char *cmdversion =
"casl2 of YACASL2 version %s\n";
87 "Usage: %s [-slLaAtTdmrvh] [-oO[<OBJECTFILE>]] [-M <MEMORYSIZE>] [-C <CLOCKS>] FILE1[ FILE2 ...]\n";
96 while((opt = getopt_long(argc, argv,
"tTdslLmaro::O::AM:C:vh",
longopts, NULL)) != -1) {
113 asmode.onlyassemble =
true;
119 asmode.onlyassemble =
true;
150 fprintf(stdout, cmdversion, version);
153 fprintf(stdout, usage, argv[0]);
156 fprintf(stderr, usage, argv[0]);
163 if(argv[optind] == NULL) {
165 fprintf(stderr,
"casl2 error - %d: %s\n",
cerr->num,
cerr->msg);
170 asfilecnt = argc - optind;
171 asfile =
calloc_chk(asfilecnt,
sizeof(
char *),
"asfile");
172 for(
int i = 0; i < asfilecnt; i++) {
173 asfile[i] = argv[optind + i];
176 if(
assemble(asfilecnt, asfile, 0) ==
false ||
asmode.onlylabel ==
true) {
180 if(objfile != NULL) {
184 if(
asmode.onlyassemble ==
false) {
ASMODE asmode
アセンブルモード: src, label, onlylabel, asdetail, onlyassemble
void outassemble(const char *file)
ファイルにアセンブル結果を書き込む
void addcerrlist_assemble()
アセンブルエラーをエラーリストに追加する
bool assemble(int filec, char *filev[], WORD adr)
指定された1つまたは複数のファイルを2回アセンブル
int main(int argc, char *argv[])
casl2コマンドのメイン
void addcerrlist_casl2()
CASL IIのエラーをエラーリストに追加
CERR cerr_casl2[]
casl2のエラー定義
char * objfile_name(const char *name)
アセンブル結果を書き込むファイルの名前
static struct option longopts[]
casl2コマンドのオプション
struct _CERR CERR
エラーを表すデータ型
void addcerrlist(int cerrc, CERR cerrv[])
エラーリストを作成・追加する
void freecerr()
エラーリストと現在のエラーを解放する
void cerr_init()
エラーを初期化する
void setcerr(int num, const char *str)
現在のエラーを設定する
#define FREE(ptr)
メモリを解放するマクロ
void * calloc_chk(size_t nmemb, size_t size, const char *tag)
領域の数とサイズを指定してメモリーを確保するcallocを実行する
#define ARRAYSIZE(array)
配列のサイズを返すマクロ
char * strdup_chk(const char *s, const char *tag)
malloc_chkを実行してメモリを確保し、コピーした文字列を返す
void exec()
COMET II仮想マシンを実行する
CLOCK clock_str2clock(const char *str)
クロック周波数を表す数値文字列を、正の整数値であるCLOCK型の数値に変換。変換できない場合は、エラーを表示して0を返す
void addcerrlist_exec()
実行エラーをエラーリストに追加する
WORD memsize_str2word(const char *str)
メモリーサイズを表す数値文字列をWORD値に変換して返す。WORD値に変換できない場合は、エラーを表示して0を返す
void comet2_shutdown()
COMET II仮想マシンのシャットダウン
bool create_cmdtable(CMDTAB_HASH hash)
命令ハッシュ表を作成する
void free_cmdtable(CMDTAB_HASH hash)
void comet2_init(WORD memsize, CLOCK clocks)
COMET II仮想マシンの初期化
EXECMODE execmode
実行モード: trace, logical, dump, reverse, monitor, step