Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- diff --git a/vice/src/monitor/mon_lex.l b/vice/src/monitor/mon_lex.l
- index f5ac3cf..3201b08 100644
- --- a/vice/src/monitor/mon_lex.l
- +++ b/vice/src/monitor/mon_lex.l
- @@ -309,6 +309,14 @@ if { BEGIN (COND_MODE); return IF; }
- <BNAME,INITIAL,COND_MODE>10: { return MEM_DISK10; }
- <BNAME,INITIAL,COND_MODE>11: { return MEM_DISK11; }
- +<LABEL_DATA_TYPE>c|code { yylval.ldt = e_label_code; return LABEL_DATA_TYPE; }
- +<LABEL_DATA_TYPE>d|addr { yylval.ldt = e_label_addr; return LABEL_DATA_TYPE; }
- +<LABEL_DATA_TYPE>b|byte { yylval.ldt = e_label_byte; return LABEL_DATA_TYPE; }
- +<LABEL_DATA_TYPE>w|word { yylval.ldt = e_label_word; return LABEL_DATA_TYPE; }
- +<LABEL_DATA_TYPE>a|ascii { yylval.ldt = e_label_ascii; return LABEL_DATA_TYPE; }
- +<LABEL_DATA_TYPE>z|asciz { yylval.ldt = e_label_asciz; return LABEL_DATA_TYPE; }
- +<LABEL_DATA_TYPE>7|asci7 { yylval.ldt = e_label_asci7; return LABEL_DATA_TYPE; }
- +
- <CTYPE>[_a-zA-Z0-9]* { yylval.str = lib_stralloc(yytext); return CPUTYPE; }
- <*>[ \t]*
- diff --git a/vice/src/monitor/mon_parse.y b/vice/src/monitor/mon_parse.y
- index 24437cc..6dc2b3a 100644
- --- a/vice/src/monitor/mon_parse.y
- +++ b/vice/src/monitor/mon_parse.y
- @@ -132,6 +132,7 @@ extern int cur_len, last_len;
- CONDITIONAL cond_op;
- cond_node_t *cond_node;
- RADIXTYPE rt;
- + LABELDATATYPE ldt;
- ACTION action;
- char *str;
- asm_mode_addr_info_t mode;
- @@ -159,6 +160,8 @@ extern int cur_len, last_len;
- %token CMD_COMMENT CMD_LIST CMD_STOPWATCH RESET
- %token CMD_EXPORT CMD_AUTOSTART CMD_AUTOLOAD
- %token<str> CMD_LABEL_ASGN
- +%token<ldt> LABEL_DATA_TYPE
- +%type<ldt> opt_data_type
- %token<i> L_PAREN R_PAREN ARG_IMMEDIATE REG_A REG_X REG_Y COMMA INST_SEP
- %token<i> L_BRACKET R_BRACKET LESS_THAN REG_U REG_S REG_PC REG_PCR
- %token<i> REG_B REG_C REG_D REG_E REG_H REG_L
- @@ -173,7 +176,7 @@ extern int cur_len, last_len;
- %type<range> address_range address_opt_range
- %type<a> address opt_address
- %type<cond_node> opt_if_cond_expr cond_expr compare_operand
- -%type<i> number expression d_number guess_default device_num
- +%type<i> number expression d_number guess_default device_num opt_number
- %type<i> memspace memloc memaddr checkpt_num mem_op opt_mem_op
- %type<i> top_level value
- %type<i> assembly_instruction register
- @@ -287,8 +290,8 @@ symbol_table_rules: CMD_LOAD_LABELS memspace opt_sep filename end_cmd
- { mon_save_symbols($2, $4); }
- | CMD_SAVE_LABELS filename end_cmd
- { mon_save_symbols(e_default_space, $2); }
- - | CMD_ADD_LABEL address opt_sep LABEL end_cmd
- - { mon_add_name_to_symbol_table($2, $4); }
- + | CMD_ADD_LABEL address opt_sep LABEL opt_sep opt_data_type opt_sep opt_number end_cmd
- + { mon_add_name_to_symbol_table($2, $4, $6, $8); }
- | CMD_DEL_LABEL LABEL end_cmd
- { mon_remove_name_from_symbol_table(e_default_space, $2); }
- | CMD_DEL_LABEL memspace opt_sep LABEL end_cmd
- @@ -297,13 +300,13 @@ symbol_table_rules: CMD_LOAD_LABELS memspace opt_sep filename end_cmd
- { mon_print_symbol_table($2); }
- | CMD_SHOW_LABELS end_cmd
- { mon_print_symbol_table(e_default_space); }
- - | CMD_LABEL_ASGN EQUALS address end_cmd
- + | CMD_LABEL_ASGN EQUALS address opt_data_type opt_number end_cmd
- {
- - mon_add_name_to_symbol_table($3, mon_prepend_dot_to_name($1));
- + mon_add_name_to_symbol_table($3, mon_prepend_dot_to_name($1), $4, $5);
- }
- - | CMD_LABEL_ASGN EQUALS address LABEL_ASGN_COMMENT end_cmd
- + | CMD_LABEL_ASGN EQUALS address opt_data_type opt_number LABEL_ASGN_COMMENT end_cmd
- {
- - mon_add_name_to_symbol_table($3, mon_prepend_dot_to_name($1));
- + mon_add_name_to_symbol_table($3, mon_prepend_dot_to_name($1), $4, $5);
- }
- ;
- @@ -963,6 +966,15 @@ index_usreg:
- | REG_S { $$ = (3 << 5); printf("reg_s\n"); }
- ;
- +opt_number:
- + number { $$ = $1; }
- + | { $$ = 0; }
- + ;
- +
- +opt_data_type:
- + LABEL_DATA_TYPE { $$ = $1; }
- + | { $$ = e_label_code; }
- + ;
- %%
- diff --git a/vice/src/monitor/monitor.c b/vice/src/monitor/monitor.c
- index f1c9902..697c1a9 100644
- --- a/vice/src/monitor/monitor.c
- +++ b/vice/src/monitor/monitor.c
- @@ -121,6 +121,8 @@ monitor_cartridge_commands_t mon_cart_cmd;
- struct symbol_entry {
- WORD addr;
- char *name;
- + LABELDATATYPE type;
- + WORD size;
- struct symbol_entry *next;
- };
- typedef struct symbol_entry symbol_entry_t;
- @@ -155,6 +157,16 @@ const char *_mon_space_strings[] = {
- "Default", "Computer", "Disk8", "Disk9", "Disk10", "Disk11", "<<Invalid>>"
- };
- +static const char *label_data_type_strings[e_label_count] = {
- + "code",
- + "addr",
- + "byte",
- + "word",
- + "ascii",
- + "asciz",
- + "asci7"
- +};
- +
- static WORD watch_load_array[10][NUM_MEMSPACES];
- static WORD watch_store_array[10][NUM_MEMSPACES];
- static unsigned int watch_load_count[NUM_MEMSPACES];
- @@ -1651,7 +1663,7 @@ char* mon_prepend_dot_to_name(char* name)
- return s;
- }
- -void mon_add_name_to_symbol_table(MON_ADDR addr, char *name)
- +void mon_add_name_to_symbol_table(MON_ADDR addr, char *name, LABELDATATYPE type, WORD size)
- {
- symbol_entry_t *sym_ptr;
- char *old_name;
- @@ -1679,10 +1691,14 @@ void mon_add_name_to_symbol_table(MON_ADDR addr, char *name)
- mon_remove_name_from_symbol_table(mem, name);
- }
- + mon_out("DEBUG: New label: %s=$%04x type=%u, size=%d\n", name, loc, type, size);
- +
- /* Add name to name list */
- sym_ptr = lib_malloc(sizeof(symbol_entry_t));
- sym_ptr->name = name;
- sym_ptr->addr = loc;
- + sym_ptr->type = type;
- + sym_ptr->size = size;
- sym_ptr->next = monitor_labels[mem].name_list;
- monitor_labels[mem].name_list = sym_ptr;
- @@ -1760,7 +1776,17 @@ void mon_print_symbol_table(MEMSPACE mem)
- sym_ptr = monitor_labels[mem].name_list;
- while (sym_ptr) {
- - mon_out("$%04x %s\n",sym_ptr->addr, sym_ptr->name);
- + mon_out("$%04x %s",sym_ptr->addr, sym_ptr->name);
- +
- + /* optional parameters, so only print if necissary */
- + if(sym_ptr->type || sym_ptr->size) {
- + assert(sym_ptr->type < e_label_count);
- + mon_out("%s", label_data_type_strings[sym_ptr->type]);
- + if(sym_ptr->size) {
- + mon_out("%x",sym_ptr->size);
- + }
- + }
- + mon_out("\n");
- sym_ptr = sym_ptr->next;
- }
- }
- diff --git a/vice/src/monitor/montypes.h b/vice/src/monitor/montypes.h
- index 65b2094..4c58983 100644
- --- a/vice/src/monitor/montypes.h
- +++ b/vice/src/monitor/montypes.h
- @@ -119,6 +119,18 @@ enum t_radixtype {
- };
- typedef enum t_radixtype RADIXTYPE;
- +enum t_labeldatatype {
- + e_label_code,
- + e_label_addr,
- + e_label_byte,
- + e_label_word,
- + e_label_ascii,
- + e_label_asciz,
- + e_label_asci7,
- + e_label_count
- +};
- +typedef enum t_labeldatatype LABELDATATYPE;
- +
- enum t_action {
- e_OFF = 0,
- e_ON = 1,
- @@ -299,7 +311,7 @@ extern void mon_keyboard_feed(const char *string);
- extern char *mon_symbol_table_lookup_name(MEMSPACE mem, WORD addr);
- extern int mon_symbol_table_lookup_addr(MEMSPACE mem, char *name);
- extern char* mon_prepend_dot_to_name(char *name);
- -extern void mon_add_name_to_symbol_table(MON_ADDR addr, char *name);
- +extern void mon_add_name_to_symbol_table(MON_ADDR addr, char *name, LABELDATATYPE type, WORD size);
- extern void mon_remove_name_from_symbol_table(MEMSPACE mem, char *name);
- extern void mon_print_symbol_table(MEMSPACE mem);
- extern void mon_load_symbols(MEMSPACE mem, const char *filename);
Add Comment
Please, Sign In to add comment