X-Git-Url: http://j8takagi.net/cgi-bin/gitweb.cgi?p=YACASL2.git;a=blobdiff_plain;f=include%2Fassemble.h;h=deb83ebb0f1ea7f2051f34f99019076bbcb3aff0;hp=ae746fd1eb593b093cc997529ec2fc25bed0ed54;hb=4ee27a568fb9222907a566e59aaefe248f08a8e4;hpb=4fe8479d27f535a0ff44c9f6ce270249934e980f diff --git a/include/assemble.h b/include/assemble.h index ae746fd..deb83eb 100644 --- a/include/assemble.h +++ b/include/assemble.h @@ -1,13 +1,16 @@ #ifndef YACASL2_ASSEMBLE_INCLUDED #define YACASL2_ASSEMBLE_INCLUDED -/* CASL IIの制限 */ +/* CASL IIの仕様 */ +enum { + LABELSIZE = 8, /* ラベルの最大文字数 */ + OPDSIZE = 40, /* オペラントの最大数。CASL IIシミュレータの制限 */ +}; + +/* YACASL2の制限 */ enum { LINESIZE = 1024, /* 行の最大文字数 */ TOKENSIZE = 256, /* トークンの最大文字数 */ - LABELSIZE = 8, /* ラベルの最大文字数 */ - LABELTABSIZE = 256, /* ラベルの最大数 */ - OPDSIZE = 40, /* オペラントの最大数 */ }; /* アセンブルモード */ @@ -18,16 +21,17 @@ typedef struct { bool asdetail; /* アセンブラ詳細結果を表示する場合はtrue */ bool onlyassemble; /* アセンブルだけを行う場合はtrue */ } ASMODE; -extern ASMODE asmode; -/* 値を格納するポインタ */ -extern WORD ptr; +extern ASMODE asmode; -/* リテラル(=付きの値)を格納するポインタ */ -extern WORD lptr; +/* アセンブル時のプロパティ */ +typedef struct { + WORD ptr; /* 現在のポインタ */ + WORD lptr; /* リテラル(=付きの値)を格納するポインタ */ + char *prog; /* 他のプログラムで参照する入口名 */ +} ASPROP; -/* 他のプログラムで参照する入口名 */ -extern char *prog; +extern ASPROP *asprop; /* アセンブラ命令とマクロ命令を表す番号 */ typedef enum { @@ -49,6 +53,13 @@ typedef struct { char *cmd; } CMDARRAY; +/* ラベル配列 */ +typedef struct { + char *prog; + char *label; + WORD adr; +} LABELARRAY; + /* ラベル表 */ typedef struct _LABELTAB { struct _LABELTAB *next; @@ -57,12 +68,19 @@ typedef struct _LABELTAB { WORD adr; } LABELTAB; +enum { + LABELTABSIZE = 251, /* ラベル表のサイズ */ +}; + /* アセンブラが、1回目か、2回目か、を表す */ typedef enum { FIRST = 0, SECOND = 1, } PASS; +/* アセンブルのエラー定義 */ +bool addcerrlist_assemble(); + /* プログラム名とラベルに対応するハッシュ値を返す */ unsigned labelhash(const char *prog, const char *label);