Guest User

Untitled

a guest
Jul 23rd, 2018
91
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.87 KB | None | 0 0
  1. diff --git a/vice/src/monitor/mon_lex.l b/vice/src/monitor/mon_lex.l
  2. index f5ac3cf..3201b08 100644
  3. --- a/vice/src/monitor/mon_lex.l
  4. +++ b/vice/src/monitor/mon_lex.l
  5. @@ -309,6 +309,14 @@ if { BEGIN (COND_MODE); return IF; }
  6. <BNAME,INITIAL,COND_MODE>10: { return MEM_DISK10; }
  7. <BNAME,INITIAL,COND_MODE>11: { return MEM_DISK11; }
  8.  
  9. +<LABEL_DATA_TYPE>c|code { yylval.ldt = e_label_code; return LABEL_DATA_TYPE; }
  10. +<LABEL_DATA_TYPE>d|addr { yylval.ldt = e_label_addr; return LABEL_DATA_TYPE; }
  11. +<LABEL_DATA_TYPE>b|byte { yylval.ldt = e_label_byte; return LABEL_DATA_TYPE; }
  12. +<LABEL_DATA_TYPE>w|word { yylval.ldt = e_label_word; return LABEL_DATA_TYPE; }
  13. +<LABEL_DATA_TYPE>a|ascii { yylval.ldt = e_label_ascii; return LABEL_DATA_TYPE; }
  14. +<LABEL_DATA_TYPE>z|asciz { yylval.ldt = e_label_asciz; return LABEL_DATA_TYPE; }
  15. +<LABEL_DATA_TYPE>7|asci7 { yylval.ldt = e_label_asci7; return LABEL_DATA_TYPE; }
  16. +
  17. <CTYPE>[_a-zA-Z0-9]* { yylval.str = lib_stralloc(yytext); return CPUTYPE; }
  18.  
  19. <*>[ \t]*
  20. diff --git a/vice/src/monitor/mon_parse.y b/vice/src/monitor/mon_parse.y
  21. index 24437cc..6dc2b3a 100644
  22. --- a/vice/src/monitor/mon_parse.y
  23. +++ b/vice/src/monitor/mon_parse.y
  24. @@ -132,6 +132,7 @@ extern int cur_len, last_len;
  25. CONDITIONAL cond_op;
  26. cond_node_t *cond_node;
  27. RADIXTYPE rt;
  28. + LABELDATATYPE ldt;
  29. ACTION action;
  30. char *str;
  31. asm_mode_addr_info_t mode;
  32. @@ -159,6 +160,8 @@ extern int cur_len, last_len;
  33. %token CMD_COMMENT CMD_LIST CMD_STOPWATCH RESET
  34. %token CMD_EXPORT CMD_AUTOSTART CMD_AUTOLOAD
  35. %token<str> CMD_LABEL_ASGN
  36. +%token<ldt> LABEL_DATA_TYPE
  37. +%type<ldt> opt_data_type
  38. %token<i> L_PAREN R_PAREN ARG_IMMEDIATE REG_A REG_X REG_Y COMMA INST_SEP
  39. %token<i> L_BRACKET R_BRACKET LESS_THAN REG_U REG_S REG_PC REG_PCR
  40. %token<i> REG_B REG_C REG_D REG_E REG_H REG_L
  41. @@ -173,7 +176,7 @@ extern int cur_len, last_len;
  42. %type<range> address_range address_opt_range
  43. %type<a> address opt_address
  44. %type<cond_node> opt_if_cond_expr cond_expr compare_operand
  45. -%type<i> number expression d_number guess_default device_num
  46. +%type<i> number expression d_number guess_default device_num opt_number
  47. %type<i> memspace memloc memaddr checkpt_num mem_op opt_mem_op
  48. %type<i> top_level value
  49. %type<i> assembly_instruction register
  50. @@ -287,8 +290,8 @@ symbol_table_rules: CMD_LOAD_LABELS memspace opt_sep filename end_cmd
  51. { mon_save_symbols($2, $4); }
  52. | CMD_SAVE_LABELS filename end_cmd
  53. { mon_save_symbols(e_default_space, $2); }
  54. - | CMD_ADD_LABEL address opt_sep LABEL end_cmd
  55. - { mon_add_name_to_symbol_table($2, $4); }
  56. + | CMD_ADD_LABEL address opt_sep LABEL opt_sep opt_data_type opt_sep opt_number end_cmd
  57. + { mon_add_name_to_symbol_table($2, $4, $6, $8); }
  58. | CMD_DEL_LABEL LABEL end_cmd
  59. { mon_remove_name_from_symbol_table(e_default_space, $2); }
  60. | CMD_DEL_LABEL memspace opt_sep LABEL end_cmd
  61. @@ -297,13 +300,13 @@ symbol_table_rules: CMD_LOAD_LABELS memspace opt_sep filename end_cmd
  62. { mon_print_symbol_table($2); }
  63. | CMD_SHOW_LABELS end_cmd
  64. { mon_print_symbol_table(e_default_space); }
  65. - | CMD_LABEL_ASGN EQUALS address end_cmd
  66. + | CMD_LABEL_ASGN EQUALS address opt_data_type opt_number end_cmd
  67. {
  68. - mon_add_name_to_symbol_table($3, mon_prepend_dot_to_name($1));
  69. + mon_add_name_to_symbol_table($3, mon_prepend_dot_to_name($1), $4, $5);
  70. }
  71. - | CMD_LABEL_ASGN EQUALS address LABEL_ASGN_COMMENT end_cmd
  72. + | CMD_LABEL_ASGN EQUALS address opt_data_type opt_number LABEL_ASGN_COMMENT end_cmd
  73. {
  74. - mon_add_name_to_symbol_table($3, mon_prepend_dot_to_name($1));
  75. + mon_add_name_to_symbol_table($3, mon_prepend_dot_to_name($1), $4, $5);
  76. }
  77. ;
  78.  
  79. @@ -963,6 +966,15 @@ index_usreg:
  80. | REG_S { $$ = (3 << 5); printf("reg_s\n"); }
  81. ;
  82.  
  83. +opt_number:
  84. + number { $$ = $1; }
  85. + | { $$ = 0; }
  86. + ;
  87. +
  88. +opt_data_type:
  89. + LABEL_DATA_TYPE { $$ = $1; }
  90. + | { $$ = e_label_code; }
  91. + ;
  92.  
  93. %%
  94.  
  95. diff --git a/vice/src/monitor/monitor.c b/vice/src/monitor/monitor.c
  96. index f1c9902..697c1a9 100644
  97. --- a/vice/src/monitor/monitor.c
  98. +++ b/vice/src/monitor/monitor.c
  99. @@ -121,6 +121,8 @@ monitor_cartridge_commands_t mon_cart_cmd;
  100. struct symbol_entry {
  101. WORD addr;
  102. char *name;
  103. + LABELDATATYPE type;
  104. + WORD size;
  105. struct symbol_entry *next;
  106. };
  107. typedef struct symbol_entry symbol_entry_t;
  108. @@ -155,6 +157,16 @@ const char *_mon_space_strings[] = {
  109. "Default", "Computer", "Disk8", "Disk9", "Disk10", "Disk11", "<<Invalid>>"
  110. };
  111.  
  112. +static const char *label_data_type_strings[e_label_count] = {
  113. + "code",
  114. + "addr",
  115. + "byte",
  116. + "word",
  117. + "ascii",
  118. + "asciz",
  119. + "asci7"
  120. +};
  121. +
  122. static WORD watch_load_array[10][NUM_MEMSPACES];
  123. static WORD watch_store_array[10][NUM_MEMSPACES];
  124. static unsigned int watch_load_count[NUM_MEMSPACES];
  125. @@ -1651,7 +1663,7 @@ char* mon_prepend_dot_to_name(char* name)
  126. return s;
  127. }
  128.  
  129. -void mon_add_name_to_symbol_table(MON_ADDR addr, char *name)
  130. +void mon_add_name_to_symbol_table(MON_ADDR addr, char *name, LABELDATATYPE type, WORD size)
  131. {
  132. symbol_entry_t *sym_ptr;
  133. char *old_name;
  134. @@ -1679,10 +1691,14 @@ void mon_add_name_to_symbol_table(MON_ADDR addr, char *name)
  135. mon_remove_name_from_symbol_table(mem, name);
  136. }
  137.  
  138. + mon_out("DEBUG: New label: %s=$%04x type=%u, size=%d\n", name, loc, type, size);
  139. +
  140. /* Add name to name list */
  141. sym_ptr = lib_malloc(sizeof(symbol_entry_t));
  142. sym_ptr->name = name;
  143. sym_ptr->addr = loc;
  144. + sym_ptr->type = type;
  145. + sym_ptr->size = size;
  146.  
  147. sym_ptr->next = monitor_labels[mem].name_list;
  148. monitor_labels[mem].name_list = sym_ptr;
  149. @@ -1760,7 +1776,17 @@ void mon_print_symbol_table(MEMSPACE mem)
  150.  
  151. sym_ptr = monitor_labels[mem].name_list;
  152. while (sym_ptr) {
  153. - mon_out("$%04x %s\n",sym_ptr->addr, sym_ptr->name);
  154. + mon_out("$%04x %s",sym_ptr->addr, sym_ptr->name);
  155. +
  156. + /* optional parameters, so only print if necissary */
  157. + if(sym_ptr->type || sym_ptr->size) {
  158. + assert(sym_ptr->type < e_label_count);
  159. + mon_out("%s", label_data_type_strings[sym_ptr->type]);
  160. + if(sym_ptr->size) {
  161. + mon_out("%x",sym_ptr->size);
  162. + }
  163. + }
  164. + mon_out("\n");
  165. sym_ptr = sym_ptr->next;
  166. }
  167. }
  168. diff --git a/vice/src/monitor/montypes.h b/vice/src/monitor/montypes.h
  169. index 65b2094..4c58983 100644
  170. --- a/vice/src/monitor/montypes.h
  171. +++ b/vice/src/monitor/montypes.h
  172. @@ -119,6 +119,18 @@ enum t_radixtype {
  173. };
  174. typedef enum t_radixtype RADIXTYPE;
  175.  
  176. +enum t_labeldatatype {
  177. + e_label_code,
  178. + e_label_addr,
  179. + e_label_byte,
  180. + e_label_word,
  181. + e_label_ascii,
  182. + e_label_asciz,
  183. + e_label_asci7,
  184. + e_label_count
  185. +};
  186. +typedef enum t_labeldatatype LABELDATATYPE;
  187. +
  188. enum t_action {
  189. e_OFF = 0,
  190. e_ON = 1,
  191. @@ -299,7 +311,7 @@ extern void mon_keyboard_feed(const char *string);
  192. extern char *mon_symbol_table_lookup_name(MEMSPACE mem, WORD addr);
  193. extern int mon_symbol_table_lookup_addr(MEMSPACE mem, char *name);
  194. extern char* mon_prepend_dot_to_name(char *name);
  195. -extern void mon_add_name_to_symbol_table(MON_ADDR addr, char *name);
  196. +extern void mon_add_name_to_symbol_table(MON_ADDR addr, char *name, LABELDATATYPE type, WORD size);
  197. extern void mon_remove_name_from_symbol_table(MEMSPACE mem, char *name);
  198. extern void mon_print_symbol_table(MEMSPACE mem);
  199. extern void mon_load_symbols(MEMSPACE mem, const char *filename);
Add Comment
Please, Sign In to add comment