xtal = 8000000;
- rom= mem(MEM_ROM);
+ rom= address_space(MEM_ROM_ID);
// ram= mem(MEM_XRAM);
ram= rom;
/*
* Making elements of the controller
*/
-
+/*
t_addr
cl_hc08::get_mem_size(enum mem_class type)
{
}
return(cl_uc::get_mem_size(type));
}
-
+*/
void
cl_hc08::mk_hw_elements(void)
{
/* t_uc::mk_hw() does nothing */
}
+void
+cl_hc08::make_memories(void)
+{
+ class cl_address_space *as;
+
+ as= new cl_address_space("rom", 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);
+}
+
/*
* Help command interpreter
int start_addr = addr;
struct dis_entry *dis_e;
- code= get_mem(MEM_ROM, addr++);
+ code= get_mem(MEM_ROM_ID, addr++);
dis_e = NULL;
switch(code) {
case 0x9e: /* ESC code to sp relative op-codes */
- code= get_mem(MEM_ROM, addr++);
+ code= get_mem(MEM_ROM_ID, addr++);
i= 0;
while ((code & disass_hc08_9e[i].mask) != disass_hc08_9e[i].code &&
disass_hc08_9e[i].mnemonic)
switch (*(b++))
{
case 's': // s signed byte immediate
- sprintf(temp, "#%d", (char)get_mem(MEM_ROM, addr+immed_offset));
+ 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, addr+immed_offset)<<8) |
- (get_mem(MEM_ROM, addr+immed_offset+1))) );
+ (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, addr+immed_offset));
+ 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, addr+immed_offset)<<8) |
- (get_mem(MEM_ROM, addr+immed_offset+1))) );
+ (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, addr+immed_offset));
+ 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, addr+immed_offset)<<8) |
- (get_mem(MEM_ROM, addr+immed_offset+1))) );
+ (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, addr+immed_offset));
+ sprintf(temp, "0x%02x", (uint)get_mem(MEM_ROM_ID, addr+immed_offset));
++immed_offset;
break;
case 'p': // b byte index offset
sprintf(temp, "0x%04x",
addr+immed_offset+1
- +(char)get_mem(MEM_ROM, addr+immed_offset));
+ +(char)get_mem(MEM_ROM_ID, addr+immed_offset));
++immed_offset;
break;
default:
default: return(resHALT);
}
- 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);
sim->stop(resINV_INST);
return(resINV_INST);