summaryrefslogtreecommitdiff
path: root/asmmon.h
diff options
context:
space:
mode:
Diffstat (limited to 'asmmon.h')
-rw-r--r--asmmon.h109
1 files changed, 43 insertions, 66 deletions
diff --git a/asmmon.h b/asmmon.h
index 53fdea2..213c9b5 100644
--- a/asmmon.h
+++ b/asmmon.h
@@ -4,37 +4,19 @@
#define MAX_TOK 0x1000
-struct line {
- uint8_t stab;
- uint8_t sspace;
- uint8_t dir;
- uint8_t mne;
- uint8_t rs;
- uint8_t opbase;
- uint8_t aopbase;
- uint8_t am;
- uint8_t cm;
- uint8_t etab;
- uint8_t espace;
- uint8_t islabel;
- uint8_t issym;
- uint16_t sym;
- uint16_t com;
- uint16_t str;
- uint16_t incl;
- uint16_t linenum;
- uint64_t op;
- uint64_t aop;
- uint64_t addr;
-};
+typedef struct tok token ;
+typedef struct ln line ;
+typedef struct sym symbol;
+typedef struct fix fixup ;
struct tok {
- struct tok *next; /* Pointer to the next token. */
- uint8_t id; /* Token ID. */
- uint8_t type; /* Token type ID. */
+ token *next; /* Pointer to the next token. */
+ uint8_t id; /* Token ID. */
+ uint8_t type; /* Token type ID. */
/* Token value(s). */
union {
+ symbol *sym;
char *str;
uint8_t byte ;
uint16_t word ;
@@ -44,8 +26,8 @@ struct tok {
};
struct ln {
- struct ln *next; /* Pointer to the next line. */
- struct tok *tok; /* The token(s) for this line. */
+ line *next; /* Pointer to the next line. */
+ token *tok; /* The token(s) for this line. */
uint16_t count; /* Total tokens for this line. */
uint32_t linenum; /* Line number. */
uint64_t addr; /* The address of this line. */
@@ -55,20 +37,22 @@ struct ln {
uint8_t espace; /* Number of ending spaces. */
};
-typedef struct tok token;
-typedef struct ln line;
-struct fixup {
- struct symbol *s;
+struct fix {
+ fixup *next;
+ symbol *s;
token *t;
uint64_t adr;
};
-struct symbol {
+struct sym {
+ symbol *next;
+ symbol *local;
+ uint16_t count;
uint64_t val;
uint8_t def;
- char name[128];
+ char *name;
uint16_t id;
};
@@ -80,10 +64,9 @@ extern line *lines;
extern line *last_line;
extern token *tokens;
extern token *last_tok;
-extern struct line tokline[];
-extern struct line tln[];
-extern struct symbol *symbols[];
-extern struct fixup *fixups[];
+extern symbol *symbols;
+extern symbol *locals;
+extern fixup *fixups;
extern uint8_t lex_type;
@@ -98,6 +81,7 @@ enum dir {
enum token {
TOK_DIR,
+ TOK_LOCAL,
TOK_LABEL,
TOK_SYM,
TOK_EXPR,
@@ -117,6 +101,7 @@ enum token {
enum pre_token {
PTOK_DOT,
+ PTOK_AT,
PTOK_COLON,
PTOK_EQU,
PTOK_PLUS,
@@ -255,23 +240,24 @@ static const char *rs_t[4] = {
[3] = ".q"
};
-static const char *lex_tok[16] = {
- [0x0] = "TOK_DIR",
- [0x1] = "TOK_LABEL",
- [0x2] = "TOK_SYM",
- [0x3] = "TOK_EXPR",
- [0x4] = "TOK_CSV",
- [0x5] = "TOK_STRING",
- [0x6] = "TOK_CHAR",
- [0x7] = "TOK_IND",
- [0x8] = "TOK_IMM",
- [0x9] = "TOK_OPCODE",
- [0xA] = "TOK_RS",
- [0xB] = "TOK_COMMENT",
- [0xC] = "TOK_HEX",
- [0xD] = "TOK_DEC",
- [0xE] = "TOK_BIN",
- [0xF] = "TOK_INCLUDE"
+static const char *lex_tok[17] = {
+ [0x00] = "TOK_DIR",
+ [0x01] = "TOK_LOCAL",
+ [0x02] = "TOK_LABEL",
+ [0x03] = "TOK_SYM",
+ [0x04] = "TOK_EXPR",
+ [0x05] = "TOK_CSV",
+ [0x06] = "TOK_STRING",
+ [0x07] = "TOK_CHAR",
+ [0x08] = "TOK_IND",
+ [0x09] = "TOK_IMM",
+ [0x0A] = "TOK_OPCODE",
+ [0x0B] = "TOK_RS",
+ [0x0C] = "TOK_COMMENT",
+ [0x0D] = "TOK_HEX",
+ [0x0E] = "TOK_DEC",
+ [0x0F] = "TOK_BIN",
+ [0x10] = "TOK_INCLUDE"
};
static const char *adrmode[9] = {
@@ -504,19 +490,10 @@ typedef struct bc bytecount;
extern uint8_t defined;
extern uint8_t isfixup;
-extern void init_symbol();
-extern uint16_t mksymbol(const char *name, uint64_t val, uint8_t def, uint8_t useid, uint16_t id, uint8_t dbg);
-extern uint64_t use_symbol(const char *name, uint16_t id, uint64_t val, uint8_t useid, uint8_t dbg);
-extern uint8_t set_symval(const char *name, uint16_t id, uint64_t val, uint8_t useid, uint8_t dbg);
-extern char *get_symname(uint16_t id, uint8_t dbg);
-extern uint16_t get_symid(const char *name, uint64_t val, token *t, uint8_t dbg);
-extern uint16_t get_comment(const char *cmnt, uint8_t dbg);
-extern uint16_t reslv_fixups(uint8_t dbg);
extern line *find_line(uint32_t ln, uint8_t dbg);
extern uint64_t lex(char *str, uint64_t address, uint8_t dbg);
extern uint64_t parse_tokens(token *tm, bytecount *bc, uint8_t isasm, uint64_t address, uint8_t dbg);
-extern token *make_token(uint8_t id, uint8_t type, uint64_t value, char *str);
+extern token *make_token(uint8_t id, uint8_t type, uint64_t value, char *str, symbol *sym);
extern void assemble(line *ln, bytecount *bc, uint8_t dbg);
-extern void free_tokens(token *t, uint16_t count);
-extern void free_lines();
+extern void cleanup();