X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=sim%2Fucsim%2Fxa.src%2Fxa.cc;h=4f20da91b6c48104a50ce9c9f9ac583cc8236306;hb=90f4aedaef8a2310573eef905f95c671f84e5cde;hp=da7ed0fc6d74b42a279bd22124bcf800f7e86fae;hpb=43bf8451d1a94f47b5f035e0058a1d4d7b2bd35d;p=fw%2Fsdcc diff --git a/sim/ucsim/xa.src/xa.cc b/sim/ucsim/xa.src/xa.cc index da7ed0fc..4f20da91 100644 --- a/sim/ucsim/xa.src/xa.cc +++ b/sim/ucsim/xa.src/xa.cc @@ -59,8 +59,8 @@ int cl_xa::init(void) { cl_uc::init(); /* Memories now exist */ - ram= mem(MEM_XRAM); - rom= mem(MEM_ROM); + ram= address_space(MEM_XRAM_ID); + rom= address_space(MEM_ROM_ID); /* set SCR to osc/4, native XA mode, flat 24 */ set_scr(0); @@ -76,16 +76,18 @@ cl_xa::init(void) return(0); } -class cl_mem * +/* +class cl_m * cl_xa::mk_mem(enum mem_class type, char *class_name) { - class cl_mem *m= cl_uc::mk_mem(type, class_name); + class cl_m *m= cl_uc::mk_mem(type, class_name); if (type == MEM_SFR) sfr= m; if (type == MEM_IRAM) iram= m; return(m); } +*/ char * cl_xa::id_string(void) @@ -97,20 +99,21 @@ cl_xa::id_string(void) /* * Making elements of the controller */ - +/* t_addr cl_xa::get_mem_size(enum mem_class type) { switch(type) { case MEM_IRAM: return(0x2000); - case MEM_SFR: return(0x2000); - case MEM_ROM: return(0x10000); + case MEM_SFR: return(0x2000); + case MEM_ROM: return(0x10000); case MEM_XRAM: return(0x10000); default: return(0); } return(cl_uc::get_mem_size(type)); } +*/ void cl_xa::mk_hw_elements(void) @@ -119,6 +122,60 @@ cl_xa::mk_hw_elements(void) /* t_uc::mk_hw() does nothing */ } +void +cl_xa::make_memories(void) +{ + class cl_address_space *as; + + as= rom= new cl_address_space("rom", 0, 0x10000, 8); + as->init(); + address_spaces->add(as); + as= iram= new cl_address_space("iram", 0, 0x2000, 8); + as->init(); + address_spaces->add(as); + as= sfr= new cl_address_space("sfr", 0x0, 0x2000, 8); + as->init(); + address_spaces->add(as); + as= ram= new cl_address_space("xram", 0, 0x10000, 8); + as->init(); + address_spaces->add(as); + + class cl_address_decoder *ad; + class cl_memory_chip *chip; + + chip= new cl_memory_chip("rom_chip", 0x10000, 8); + chip->init(); + memchips->add(chip); + ad= new cl_address_decoder(as= address_space("rom"), chip, 0, 0xffff, 0); + ad->init(); + as->decoders->add(ad); + ad->activate(0); + + chip= new cl_memory_chip("iram_chip", 0x2000, 8); + chip->init(); + memchips->add(chip); + ad= new cl_address_decoder(as= address_space("iram"), chip, 0, 0x1fff, 0); + ad->init(); + as->decoders->add(ad); + ad->activate(0); + + chip= new cl_memory_chip("xram_chip", 0x10000, 8); + chip->init(); + memchips->add(chip); + ad= new cl_address_decoder(as= address_space("xram"), chip, 0, 0xffff, 0); + ad->init(); + as->decoders->add(ad); + ad->activate(0); + + chip= new cl_memory_chip("sfr_chip", 0x2000, 8); + chip->init(); + memchips->add(chip); + ad= new cl_address_decoder(as= address_space("sfr"), chip, 0x0, 0x1fff, 0); + ad->init(); + as->decoders->add(ad); + ad->activate(0); +} + /* * Help command interpreter @@ -220,14 +277,14 @@ cl_xa::get_disasm_info(t_addr addr, int i; int start_addr = addr; - code= get_mem(MEM_ROM, addr++); + code= get_mem(MEM_ROM_ID, addr++); if (code == 0x00) { i= 0; while (disass_xa[i].mnemonic != NOP) i++; } else { len = 2; - code = (code << 8) | get_mem(MEM_ROM, addr++); + code = (code << 8) | get_mem(MEM_ROM_ID, addr++); i= 0; while ((code & disass_xa[i].mask) != disass_xa[i].code && disass_xa[i].mnemonic != BAD_OPCODE) @@ -326,13 +383,13 @@ cl_xa::disass(t_addr addr, char *sep) sprintf(parm_str, "%s,[%s+%02x]", reg_strs[((code >> 4) & 0xf)], w_reg_strs[(code & 0x7)], - get_mem(MEM_ROM, addr+immed_offset)); + get_mem(MEM_ROM_ID, addr+immed_offset)); ++immed_offset; break; case IREGOFF8_REG : sprintf(parm_str, "[%s+%02x],%s", w_reg_strs[(code & 0x7)], - get_mem(MEM_ROM, addr+immed_offset), + get_mem(MEM_ROM_ID, addr+immed_offset), reg_strs[((code >> 4) & 0xf)] ); ++immed_offset; break; @@ -340,16 +397,16 @@ cl_xa::disass(t_addr addr, char *sep) sprintf(parm_str, "%s,[%s+%04x]", reg_strs[((code >> 4) & 0xf)], w_reg_strs[(code & 0x7)], - (short)((get_mem(MEM_ROM, addr+immed_offset+1)) | - (get_mem(MEM_ROM, addr+immed_offset)<<8)) ); + (short)((get_mem(MEM_ROM_ID, addr+immed_offset+1)) | + (get_mem(MEM_ROM_ID, addr+immed_offset)<<8)) ); ++immed_offset; ++immed_offset; break; case IREGOFF16_REG : sprintf(parm_str, "[%s+%04x],%s", w_reg_strs[(code & 0x7)], - (short)((get_mem(MEM_ROM, addr+immed_offset+1)) | - (get_mem(MEM_ROM, addr+immed_offset)<<8)), + (short)((get_mem(MEM_ROM_ID, addr+immed_offset+1)) | + (get_mem(MEM_ROM_ID, addr+immed_offset)<<8)), reg_strs[((code >> 4) & 0xf)] ); ++immed_offset; ++immed_offset; @@ -367,104 +424,104 @@ cl_xa::disass(t_addr addr, char *sep) case DIRECT_REG : sprintf(parm_str, "%s,%s", get_dir_name(((code & 0x7) << 8) | - get_mem(MEM_ROM, addr+immed_offset)), + get_mem(MEM_ROM_ID, addr+immed_offset)), reg_strs[((code >> 4) & 0xf)] ); ++immed_offset; break; case REG_DIRECT : sprintf(parm_str, "%s,%s", - reg_strs[((code >> 4) & 0xf)], + reg_strs[((code >> 4) & 0xf)], get_dir_name(((code & 0x7) << 8) | - get_mem(MEM_ROM, addr+immed_offset))); + get_mem(MEM_ROM_ID, addr+immed_offset))); ++immed_offset; break; case REG_DATA8 : sprintf(parm_str, "%s,#0x%02x", b_reg_strs[((code >> 4) & 0xf)], - get_mem(MEM_ROM, addr+immed_offset) ); + get_mem(MEM_ROM_ID, addr+immed_offset) ); ++immed_offset; break; case REG_DATA16 : sprintf(parm_str, "%s,#0x%04x", reg_strs[((code >> 4) & 0xf)], - (short)((get_mem(MEM_ROM, addr+immed_offset+1)) | - (get_mem(MEM_ROM, addr+immed_offset)<<8)) ); + (short)((get_mem(MEM_ROM_ID, addr+immed_offset+1)) | + (get_mem(MEM_ROM_ID, addr+immed_offset)<<8)) ); ++immed_offset; ++immed_offset; break; case IREG_DATA8 : sprintf(parm_str, "[%s], 0x%02x", w_reg_strs[((code >> 4) & 0x7)], - get_mem(MEM_ROM, addr+immed_offset) ); + get_mem(MEM_ROM_ID, addr+immed_offset) ); ++immed_offset; break; case IREG_DATA16 : sprintf(parm_str, "[%s], 0x%04x", w_reg_strs[((code >> 4) & 0x7)], - (short)((get_mem(MEM_ROM, addr+immed_offset+1)) | - (get_mem(MEM_ROM, addr+immed_offset)<<8)) ); + (short)((get_mem(MEM_ROM_ID, addr+immed_offset+1)) | + (get_mem(MEM_ROM_ID, addr+immed_offset)<<8)) ); ++immed_offset; ++immed_offset; break; case IREGINC_DATA8 : sprintf(parm_str, "[%s+], 0x%02x", w_reg_strs[((code >> 4) & 0x7)], - get_mem(MEM_ROM, addr+immed_offset) ); + get_mem(MEM_ROM_ID, addr+immed_offset) ); ++immed_offset; break; case IREGINC_DATA16 : sprintf(parm_str, "[%s+], 0x%04x", w_reg_strs[((code >> 4) & 0x7)], - (short)((get_mem(MEM_ROM, addr+immed_offset+1)) | - (get_mem(MEM_ROM, addr+immed_offset)<<8)) ); + (short)((get_mem(MEM_ROM_ID, addr+immed_offset+1)) | + (get_mem(MEM_ROM_ID, addr+immed_offset)<<8)) ); ++immed_offset; ++immed_offset; break; case IREGOFF8_DATA8 : sprintf(parm_str, "[%s+%02x], 0x%02x", w_reg_strs[((code >> 4) & 0x7)], - get_mem(MEM_ROM, addr+immed_offset), - get_mem(MEM_ROM, addr+immed_offset+1) ); + get_mem(MEM_ROM_ID, addr+immed_offset), + get_mem(MEM_ROM_ID, addr+immed_offset+1) ); immed_offset += 2; break; case IREGOFF8_DATA16 : sprintf(parm_str, "[%s+%02x], 0x%04x", w_reg_strs[((code >> 4) & 0x7)], - get_mem(MEM_ROM, addr+immed_offset), - (short)((get_mem(MEM_ROM, addr+immed_offset+2)) | - (get_mem(MEM_ROM, addr+immed_offset+1)<<8)) ); + get_mem(MEM_ROM_ID, addr+immed_offset), + (short)((get_mem(MEM_ROM_ID, addr+immed_offset+2)) | + (get_mem(MEM_ROM_ID, addr+immed_offset+1)<<8)) ); immed_offset += 3; break; case IREGOFF16_DATA8 : sprintf(parm_str, "[%s+%04x], 0x%02x", w_reg_strs[((code >> 4) & 0x7)], - (short)((get_mem(MEM_ROM, addr+immed_offset+1)) | - (get_mem(MEM_ROM, addr+immed_offset+0)<<8)), - get_mem(MEM_ROM, addr+immed_offset+2) ); + (short)((get_mem(MEM_ROM_ID, addr+immed_offset+1)) | + (get_mem(MEM_ROM_ID, addr+immed_offset+0)<<8)), + get_mem(MEM_ROM_ID, addr+immed_offset+2) ); immed_offset += 3; break; case IREGOFF16_DATA16 : sprintf(parm_str, "[%s+%04x], 0x%04x", w_reg_strs[((code >> 4) & 0x7)], - (short)((get_mem(MEM_ROM, addr+immed_offset+1)) | - (get_mem(MEM_ROM, addr+immed_offset+0)<<8)), - (short)((get_mem(MEM_ROM, addr+immed_offset+3)) | - (get_mem(MEM_ROM, addr+immed_offset+2)<<8)) ); + (short)((get_mem(MEM_ROM_ID, addr+immed_offset+1)) | + (get_mem(MEM_ROM_ID, addr+immed_offset+0)<<8)), + (short)((get_mem(MEM_ROM_ID, addr+immed_offset+3)) | + (get_mem(MEM_ROM_ID, addr+immed_offset+2)<<8)) ); immed_offset += 4; break; case DIRECT_DATA8 : sprintf(parm_str, "%s,#0x%02x", get_dir_name(((code & 0x0070) << 4) | - get_mem(MEM_ROM, addr+immed_offset)), - get_mem(MEM_ROM, addr+immed_offset+1)); + get_mem(MEM_ROM_ID, addr+immed_offset)), + get_mem(MEM_ROM_ID, addr+immed_offset+1)); immed_offset += 3; break; case DIRECT_DATA16 : sprintf(parm_str, "%s,#0x%04x", get_dir_name(((code & 0x0070) << 4) | - get_mem(MEM_ROM, addr+immed_offset)), - get_mem(MEM_ROM, addr+immed_offset+2) + - (get_mem(MEM_ROM, addr+immed_offset+1)<<8)); + get_mem(MEM_ROM_ID, addr+immed_offset)), + get_mem(MEM_ROM_ID, addr+immed_offset+2) + + (get_mem(MEM_ROM_ID, addr+immed_offset+1)<<8)); immed_offset += 3; break; @@ -474,11 +531,11 @@ cl_xa::disass(t_addr addr, char *sep) break; case CY_BIT : sprintf(parm_str, "C,%s", - get_bit_name(((code&0x0003)<<8) + get_mem(MEM_ROM, addr+2))); + get_bit_name(((code&0x0003)<<8) + get_mem(MEM_ROM_ID, addr+2))); break; case BIT_CY : sprintf(parm_str, "%s,C", - get_bit_name(((code&0x0003)<<8) + get_mem(MEM_ROM, addr+2))); + get_bit_name(((code&0x0003)<<8) + get_mem(MEM_ROM_ID, addr+2))); break; case REG_DATA4 : strcpy(parm_str, "REG_DATA4"); @@ -500,14 +557,14 @@ cl_xa::disass(t_addr addr, char *sep) break; case DIRECT_DATA4 : sprintf(parm_str, "%s,#0x%x", - get_dir_name(((code & 0x70)<<4) | - get_mem(MEM_ROM, addr+2)), - code&0x0f); + get_dir_name(((code & 0x70)<<4) | + get_mem(MEM_ROM_ID, addr+2)), + code&0x0f); break; case DIRECT : sprintf(parm_str, "%s", - get_dir_name(((code & 0x007) << 4) + - get_mem(MEM_ROM, addr+2))); + get_dir_name(((code & 0x007) << 4) + + get_mem(MEM_ROM_ID, addr+2))); break; case REG : sprintf(parm_str, "%s", @@ -519,33 +576,33 @@ cl_xa::disass(t_addr addr, char *sep) break; case BIT_ALONE : sprintf(parm_str, "%s", - get_bit_name(((code&0x0003)<<8) + get_mem(MEM_ROM, addr+2))); + get_bit_name(((code&0x0003)<<8) + get_mem(MEM_ROM_ID, addr+2))); break; case BIT_REL8 : sprintf(parm_str, "%s,0x%04x", - get_bit_name((code&0x0003)<<8) + get_mem(MEM_ROM, addr+2), - ((signed char)get_mem(MEM_ROM, addr+3)*2+addr+len)&0xfffe); + get_bit_name((code&0x0003)<<8) + get_mem(MEM_ROM_ID, addr+2), + ((signed char)get_mem(MEM_ROM_ID, addr+3)*2+addr+len)&0xfffe); break; case DATA4: sprintf(parm_str, "#0x%02x", code&0x0f); break; case ADDR24 : sprintf(parm_str, "0x%06x", - (get_mem(MEM_ROM, addr+3)<<16) + - (get_mem(MEM_ROM, addr+1)<<8) + - get_mem(MEM_ROM, addr+2)); + (get_mem(MEM_ROM_ID, addr+3)<<16) + + (get_mem(MEM_ROM_ID, addr+1)<<8) + + get_mem(MEM_ROM_ID, addr+2)); break; break; case REG_REL8 : sprintf(parm_str, "%s,0x%04x", - reg_strs[(code>>4) & 0xf], - ((signed char)get_mem(MEM_ROM, addr+2)*2+addr+len)&0xfffe); + reg_strs[(code>>4) & 0xf], + ((signed char)get_mem(MEM_ROM_ID, addr+2)*2+addr+len)&0xfffe); break; case DIRECT_REL8 : sprintf(parm_str, "%s,0x%04x", - get_dir_name(((code&0x07)<<8) + - get_mem(MEM_ROM, addr+2)), - ((signed char)get_mem(MEM_ROM, addr+2)*2+addr+len)&0xfffe); + get_dir_name(((code&0x07)<<8) + + get_mem(MEM_ROM_ID, addr+2)), + ((signed char)get_mem(MEM_ROM_ID, addr+2)*2+addr+len)&0xfffe); break; case REG_USP: sprintf(parm_str, "REG_USP"); @@ -555,58 +612,58 @@ cl_xa::disass(t_addr addr, char *sep) break; case REL8 : sprintf(parm_str, "0x%04x", - ((signed char)get_mem(MEM_ROM, addr+1)*2+addr+len)&0xfffe); + ((signed char)get_mem(MEM_ROM_ID, addr+1)*2+addr+len)&0xfffe); break; case REL16 : sprintf(parm_str, "0x%04x", - ((signed short)((get_mem(MEM_ROM, addr+1)<<8) + get_mem(MEM_ROM, addr+2))*2+addr+len)&0xfffe); + ((signed short)((get_mem(MEM_ROM_ID, addr+1)<<8) + get_mem(MEM_ROM_ID, addr+2))*2+addr+len)&0xfffe); break; case RLIST : { /* TODO: the list should be comma reperated - and maybe for POP the list should be reversed */ + and maybe for POP the list should be reversed */ unsigned char rlist=code&0xff; parm_str[0]='\0'; if (code&0x0800) { // word list - if (code&0x4000) { // R8-R15 - if (rlist&0x80) strcat (parm_str, "R15 "); - if (rlist&0x40) strcat (parm_str, "R14"); - if (rlist&0x20) strcat (parm_str, "R13 "); - if (rlist&0x10) strcat (parm_str, "R12 "); - if (rlist&0x08) strcat (parm_str, "R11 "); - if (rlist&0x04) strcat (parm_str, "R10 "); - if (rlist&0x02) strcat (parm_str, "R9 "); - if (rlist&0x01) strcat (parm_str, "R8 "); - } else { // R7-R0 - if (rlist&0x80) strcat (parm_str, "R7 "); - if (rlist&0x40) strcat (parm_str, "R6 "); - if (rlist&0x20) strcat (parm_str, "R5 "); - if (rlist&0x10) strcat (parm_str, "R4 "); - if (rlist&0x08) strcat (parm_str, "R3 "); - if (rlist&0x04) strcat (parm_str, "R2 "); - if (rlist&0x02) strcat (parm_str, "R1 "); - if (rlist&0x01) strcat (parm_str, "R0 "); - } + if (code&0x4000) { // R8-R15 + if (rlist&0x80) strcat (parm_str, "R15 "); + if (rlist&0x40) strcat (parm_str, "R14"); + if (rlist&0x20) strcat (parm_str, "R13 "); + if (rlist&0x10) strcat (parm_str, "R12 "); + if (rlist&0x08) strcat (parm_str, "R11 "); + if (rlist&0x04) strcat (parm_str, "R10 "); + if (rlist&0x02) strcat (parm_str, "R9 "); + if (rlist&0x01) strcat (parm_str, "R8 "); + } else { // R7-R0 + if (rlist&0x80) strcat (parm_str, "R7 "); + if (rlist&0x40) strcat (parm_str, "R6 "); + if (rlist&0x20) strcat (parm_str, "R5 "); + if (rlist&0x10) strcat (parm_str, "R4 "); + if (rlist&0x08) strcat (parm_str, "R3 "); + if (rlist&0x04) strcat (parm_str, "R2 "); + if (rlist&0x02) strcat (parm_str, "R1 "); + if (rlist&0x01) strcat (parm_str, "R0 "); + } } else { // byte list - if (code&0x4000) { //R7h-R4l - if (rlist&0x80) strcat (parm_str, "R7h "); - if (rlist&0x40) strcat (parm_str, "R7l "); - if (rlist&0x20) strcat (parm_str, "R6h "); - if (rlist&0x10) strcat (parm_str, "R6l "); - if (rlist&0x08) strcat (parm_str, "R5h "); - if (rlist&0x04) strcat (parm_str, "R5l "); - if (rlist&0x02) strcat (parm_str, "R4h "); - if (rlist&0x01) strcat (parm_str, "R4l "); - } else { // R3h-R0l - if (rlist&0x80) strcat (parm_str, "R3h "); - if (rlist&0x40) strcat (parm_str, "R3l "); - if (rlist&0x20) strcat (parm_str, "R2h "); - if (rlist&0x10) strcat (parm_str, "R2l "); - if (rlist&0x08) strcat (parm_str, "R1h "); - if (rlist&0x04) strcat (parm_str, "R1l "); - if (rlist&0x02) strcat (parm_str, "R0h "); - if (rlist&0x01) strcat (parm_str, "R0l "); - } + if (code&0x4000) { //R7h-R4l + if (rlist&0x80) strcat (parm_str, "R7h "); + if (rlist&0x40) strcat (parm_str, "R7l "); + if (rlist&0x20) strcat (parm_str, "R6h "); + if (rlist&0x10) strcat (parm_str, "R6l "); + if (rlist&0x08) strcat (parm_str, "R5h "); + if (rlist&0x04) strcat (parm_str, "R5l "); + if (rlist&0x02) strcat (parm_str, "R4h "); + if (rlist&0x01) strcat (parm_str, "R4l "); + } else { // R3h-R0l + if (rlist&0x80) strcat (parm_str, "R3h "); + if (rlist&0x40) strcat (parm_str, "R3l "); + if (rlist&0x20) strcat (parm_str, "R2h "); + if (rlist&0x10) strcat (parm_str, "R2l "); + if (rlist&0x08) strcat (parm_str, "R1h "); + if (rlist&0x04) strcat (parm_str, "R1l "); + if (rlist&0x02) strcat (parm_str, "R0h "); + if (rlist&0x01) strcat (parm_str, "R0l "); + } } } break; @@ -615,34 +672,34 @@ cl_xa::disass(t_addr addr, char *sep) sprintf(parm_str, "%s,%s,0x%02x", reg_strs[((code >> 4) & 0xf)], get_dir_name(((code & 0x7) << 8) + - get_mem(MEM_ROM, addr+immed_offset)), - ((signed char) get_mem(MEM_ROM, addr+immed_offset+1) * 2) & 0xfffe ); + get_mem(MEM_ROM_ID, addr+immed_offset)), + ((signed char) get_mem(MEM_ROM_ID, addr+immed_offset+1) * 2) & 0xfffe ); break; case REG_DATA8_REL8 : sprintf(parm_str, "%s,#0x%02x,0x%02x", reg_strs[((code >> 4) & 0xf)], - get_mem(MEM_ROM, addr+immed_offset+1), - ((signed char)get_mem(MEM_ROM, addr+immed_offset) * 2) & 0xfffe ); + get_mem(MEM_ROM_ID, addr+immed_offset+1), + ((signed char)get_mem(MEM_ROM_ID, addr+immed_offset) * 2) & 0xfffe ); break; case REG_DATA16_REL8 : sprintf(parm_str, "%s,#0x%04x,0x%02x", w_reg_strs[(code >> 4) & 0xf], - get_mem(MEM_ROM, addr+immed_offset+2) + - (get_mem(MEM_ROM, addr+immed_offset+1)<<8), - ((signed char)get_mem(MEM_ROM, addr+immed_offset) * 2) & 0xfffe ); + get_mem(MEM_ROM_ID, addr+immed_offset+2) + + (get_mem(MEM_ROM_ID, addr+immed_offset+1)<<8), + ((signed char)get_mem(MEM_ROM_ID, addr+immed_offset) * 2) & 0xfffe ); break; case IREG_DATA8_REL8 : sprintf(parm_str, "[%s],#0x%02x,0x%02x", reg_strs[((code >> 4) & 0x7)], - get_mem(MEM_ROM, addr+immed_offset+1), - ((signed char)get_mem(MEM_ROM, addr+immed_offset) * 2) & 0xfffe ); + get_mem(MEM_ROM_ID, addr+immed_offset+1), + ((signed char)get_mem(MEM_ROM_ID, addr+immed_offset) * 2) & 0xfffe ); break; case IREG_DATA16_REL8 : sprintf(parm_str, "[%s],#0x%04x,0x%02x", w_reg_strs[(code >> 4) & 0x7], - get_mem(MEM_ROM, addr+immed_offset+2) + - (get_mem(MEM_ROM, addr+immed_offset+1)<<8), - ((signed char)get_mem(MEM_ROM, addr+immed_offset) * 2) & 0xfffe ); + get_mem(MEM_ROM_ID, addr+immed_offset+2) + + (get_mem(MEM_ROM_ID, addr+immed_offset+1)<<8), + ((signed char)get_mem(MEM_ROM_ID, addr+immed_offset) * 2) & 0xfffe ); break; case A_APLUSDPTR : @@ -655,17 +712,17 @@ cl_xa::disass(t_addr addr, char *sep) case REG_REGOFF8 : sprintf(parm_str, "%s,%s+0x%02x", - w_reg_strs[(code >> 4) & 0x7], - w_reg_strs[code & 0x7], - get_mem(MEM_ROM, addr+immed_offset)); + w_reg_strs[(code >> 4) & 0x7], + w_reg_strs[code & 0x7], + get_mem(MEM_ROM_ID, addr+immed_offset)); break; case REG_REGOFF16 : sprintf(parm_str, "%s,%s+0x%02x", - w_reg_strs[(code >> 4) & 0x7], - w_reg_strs[code & 0x7], - get_mem(MEM_ROM, addr+immed_offset+1) + - (get_mem(MEM_ROM, addr+immed_offset+0)<<8)); + w_reg_strs[(code >> 4) & 0x7], + w_reg_strs[code & 0x7], + get_mem(MEM_ROM_ID, addr+immed_offset+1) + + (get_mem(MEM_ROM_ID, addr+immed_offset+0)<<8)); break; case A_PLUSDPTR : @@ -717,7 +774,7 @@ cl_xa::disass(t_addr addr, char *sep) Used to print a status line while stepping through the code. |--------------------------------------------------------------------*/ void -cl_xa::print_regs(class cl_console *con) +cl_xa::print_regs(class cl_console_base *con) { unsigned char flags; @@ -932,10 +989,11 @@ int cl_xa::exec_inst(void) break; } - if (PC) + /*if (PC) PC--; else - PC= get_mem_size(MEM_ROM)-1; + PC= get_mem_size(MEM_ROM_ID)-1;*/ + PC= rom->inc_address(PC, -1); //tick(-clock_per_cycle()); sim->stop(resINV_INST); return(resINV_INST);