+ case BIT_ALONE :
+ sprintf(parm_str, "%s",
+ 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_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_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_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_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");
+ break;
+ case USP_REG:
+ sprintf(parm_str, "USP_REG");
+ break;
+ case REL8 :
+ sprintf(parm_str, "0x%04x",
+ ((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_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 */
+ 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 ");
+ }
+ } 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 ");
+ }
+ }
+ }
+ break;
+
+ case REG_DIRECT_REL8 :
+ sprintf(parm_str, "%s,%s,0x%02x",
+ reg_strs[((code >> 4) & 0xf)],
+ get_dir_name(((code & 0x7) << 8) +
+ 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_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_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_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_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 :
+ strcpy(parm_str, "A, [A+DPTR]");
+ break;
+
+ case A_APLUSPC :
+ strcpy(parm_str, "A, [A+PC]");
+ break;
+
+ 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_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_ID, addr+immed_offset+1) +
+ (get_mem(MEM_ROM_ID, addr+immed_offset+0)<<8));
+ break;
+
+ case A_PLUSDPTR :
+ strcpy(parm_str, "[A+DPTR]");
+ break;
+
+ case IIREG :
+ sprintf(parm_str, "[[%s]]",
+ w_reg_strs[(code & 0x7)]);
+ break;