X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Fhc08.src%2Fhc08.cc;h=ed318ea16e997e227d30861b7baa3a53a16a9286;hb=34d14506fd0c12ee5434fec0f9dec27753e1aab5;hp=5603feadc2b48439fb7f3a02cf024a2e9a1a124a;hpb=9f4a142c68aec5404d59bd94ba66e8fc37fc0e45;p=fw%2Fsdcc diff --git a/sim/ucsim/hc08.src/hc08.cc b/sim/ucsim/hc08.src/hc08.cc index 5603fead..ed318ea1 100644 --- a/sim/ucsim/hc08.src/hc08.cc +++ b/sim/ucsim/hc08.src/hc08.cc @@ -98,7 +98,7 @@ cl_hc08::reset(void) } -char * +const char * cl_hc08::id_string(void) { return("unspecified HC08"); @@ -177,9 +177,8 @@ int cl_hc08::inst_length(t_addr addr) { int len = 0; - char *s; - s = get_disasm_info(addr, &len, NULL, NULL); + get_disasm_info(addr, &len, NULL, NULL); return len; } @@ -188,9 +187,8 @@ int cl_hc08::inst_branch(t_addr addr) { int b; - char *s; - s = get_disasm_info(addr, NULL, &b, NULL); + get_disasm_info(addr, NULL, &b, NULL); return b; } @@ -202,13 +200,13 @@ cl_hc08::longest_inst(void) } -char * +const char * cl_hc08::get_disasm_info(t_addr addr, int *ret_len, int *ret_branch, int *immed_offset) { - char *b = NULL; + const char *b = NULL; uint code; int len = 0; int immed_n = 0; @@ -263,11 +261,12 @@ cl_hc08::get_disasm_info(t_addr addr, return b; } -char * +const char * cl_hc08::disass(t_addr addr, char *sep) { char work[256], temp[20]; - char *buf, *p, *b, *t; + const char *b; + char *buf, *p, *t; int len = 0; int immed_offset = 0; @@ -284,63 +283,63 @@ cl_hc08::disass(t_addr addr, char *sep) while (*b) { if (*b == '%') - { - b++; - switch (*(b++)) - { - case 's': // s signed byte immediate - sprintf(temp, "#%d", (char)get_mem(MEM_ROM_ID, addr+immed_offset)); - ++immed_offset; - break; - case 'w': // w word immediate operand - sprintf(temp, "#0x%04x", - (uint)((get_mem(MEM_ROM_ID, addr+immed_offset)<<8) | - (get_mem(MEM_ROM_ID, addr+immed_offset+1))) ); - ++immed_offset; - ++immed_offset; - break; - case 'b': // b byte immediate operand - sprintf(temp, "#0x%02x", (uint)get_mem(MEM_ROM_ID, addr+immed_offset)); - ++immed_offset; - break; - case 'x': // x extended addressing - sprintf(temp, "0x%04x", - (uint)((get_mem(MEM_ROM_ID, addr+immed_offset)<<8) | - (get_mem(MEM_ROM_ID, addr+immed_offset+1))) ); - ++immed_offset; - ++immed_offset; - break; - case 'd': // d direct addressing - sprintf(temp, "*0x%02x", (uint)get_mem(MEM_ROM_ID, addr+immed_offset)); - ++immed_offset; - break; - case '2': // 2 word index offset - sprintf(temp, "0x%04x", - (uint)((get_mem(MEM_ROM_ID, addr+immed_offset)<<8) | - (get_mem(MEM_ROM_ID, addr+immed_offset+1))) ); - ++immed_offset; - ++immed_offset; - break; - case '1': // b byte index offset + { + b++; + switch (*(b++)) + { + case 's': // s signed byte immediate + sprintf(temp, "#%d", (char)get_mem(MEM_ROM_ID, addr+immed_offset)); + ++immed_offset; + break; + case 'w': // w word immediate operand + sprintf(temp, "#0x%04x", + (uint)((get_mem(MEM_ROM_ID, addr+immed_offset)<<8) | + (get_mem(MEM_ROM_ID, addr+immed_offset+1))) ); + ++immed_offset; + ++immed_offset; + break; + case 'b': // b byte immediate operand + sprintf(temp, "#0x%02x", (uint)get_mem(MEM_ROM_ID, addr+immed_offset)); + ++immed_offset; + break; + case 'x': // x extended addressing + sprintf(temp, "0x%04x", + (uint)((get_mem(MEM_ROM_ID, addr+immed_offset)<<8) | + (get_mem(MEM_ROM_ID, addr+immed_offset+1))) ); + ++immed_offset; + ++immed_offset; + break; + case 'd': // d direct addressing + sprintf(temp, "*0x%02x", (uint)get_mem(MEM_ROM_ID, addr+immed_offset)); + ++immed_offset; + break; + case '2': // 2 word index offset + sprintf(temp, "0x%04x", + (uint)((get_mem(MEM_ROM_ID, addr+immed_offset)<<8) | + (get_mem(MEM_ROM_ID, addr+immed_offset+1))) ); + ++immed_offset; + ++immed_offset; + break; + case '1': // b byte index offset sprintf(temp, "0x%02x", (uint)get_mem(MEM_ROM_ID, addr+immed_offset)); - ++immed_offset; - break; - case 'p': // b byte index offset + ++immed_offset; + break; + case 'p': // b byte index offset sprintf(temp, "0x%04x", addr+immed_offset+1 +(char)get_mem(MEM_ROM_ID, addr+immed_offset)); - ++immed_offset; - break; - default: - strcpy(temp, "?"); - break; - } - t= temp; - while (*t) - *(p++)= *(t++); - } + ++immed_offset; + break; + default: + strcpy(temp, "?"); + break; + } + t= temp; + while (*t) + *(p++)= *(t++); + } else - *(p++)= *(b++); + *(p++)= *(b++); } *p= '\0'; @@ -354,14 +353,14 @@ cl_hc08::disass(t_addr addr, char *sep) buf= (char *)malloc(6+strlen(p)+1); else buf= (char *)malloc((p-work)+strlen(sep)+strlen(p)+1); - for (p= work, b= buf; *p != ' '; p++, b++) - *b= *p; + for (p= work, t= buf; *p != ' '; p++, t++) + *t= *p; p++; - *b= '\0'; + *t= '\0'; if (sep == NULL) { while (strlen(buf) < 6) - strcat(buf, " "); + strcat(buf, " "); } else strcat(buf, sep); @@ -371,26 +370,26 @@ cl_hc08::disass(t_addr addr, char *sep) void -cl_hc08::print_regs(class cl_console *con) +cl_hc08::print_regs(class cl_console_base *con) { con->dd_printf("V--HINZC Flags= 0x%02x %3d %c ", - regs.P, regs.P, isprint(regs.P)?regs.P:'.'); + regs.P, regs.P, isprint(regs.P)?regs.P:'.'); con->dd_printf("A= 0x%02x %3d %c\n", - regs.A, regs.A, isprint(regs.A)?regs.A:'.'); + regs.A, regs.A, isprint(regs.A)?regs.A:'.'); con->dd_printf("%c--%c%c%c%c%c ", - (regs.P&BIT_V)?'1':'0', - (regs.P&BIT_H)?'1':'0', - (regs.P&BIT_I)?'1':'0', - (regs.P&BIT_N)?'1':'0', - (regs.P&BIT_Z)?'1':'0', - (regs.P&BIT_C)?'1':'0'); + (regs.P&BIT_V)?'1':'0', + (regs.P&BIT_H)?'1':'0', + (regs.P&BIT_I)?'1':'0', + (regs.P&BIT_N)?'1':'0', + (regs.P&BIT_Z)?'1':'0', + (regs.P&BIT_C)?'1':'0'); con->dd_printf(" H= 0x%02x %3d %c ", - regs.H, regs.H, isprint(regs.H)?regs.H:'.'); + regs.H, regs.H, isprint(regs.H)?regs.H:'.'); con->dd_printf("X= 0x%02x %3d %c\n", - regs.X, regs.X, isprint(regs.X)?regs.X:'.'); + regs.X, regs.X, isprint(regs.X)?regs.X:'.'); con->dd_printf("SP= 0x%04x [SP+1]= %02x %3d %c\n", - regs.SP, ram->get(regs.SP+1), ram->get(regs.SP+1), - isprint(ram->get(regs.SP+1))?ram->get(regs.SP+1):'.'); + regs.SP, ram->get(regs.SP+1), ram->get(regs.SP+1), + isprint(ram->get(regs.SP+1))?ram->get(regs.SP+1):'.'); print_disass(PC, con); }