comparison z80inst.c @ 314:54c0e5f22198

Show absolute addresses for JR, JRCC and DJNZ in Z80 disassembler
author Mike Pavone <pavone@retrodev.com>
date Thu, 09 May 2013 19:38:28 -0700
parents a13329645ea3
children 140af5509ce7
comparison
equal deleted inserted replaced
313:a13329645ea3 314:54c0e5f22198
1369 "pe", 1369 "pe",
1370 "p", 1370 "p",
1371 "m" 1371 "m"
1372 }; 1372 };
1373 1373
1374 int z80_disasm(z80inst * decoded, char * dst) 1374 int z80_disasm(z80inst * decoded, char * dst, uint16_t address)
1375 { 1375 {
1376 int len = sprintf(dst, "%s", z80_mnemonics[decoded->op]); 1376 int len = sprintf(dst, "%s", z80_mnemonics[decoded->op]);
1377 uint8_t needcomma; 1377 uint8_t needcomma;
1378 if (decoded->addr_mode & Z80_DIR) { 1378 if (decoded->addr_mode & Z80_DIR) {
1379 needcomma = 1; 1379 needcomma = 1;
1436 break; 1436 break;
1437 case Z80_REG_INDIRECT: 1437 case Z80_REG_INDIRECT:
1438 len += sprintf(dst+len, "%s (%s)", needcomma ? "," : "" , z80_regs[decoded->ea_reg]); 1438 len += sprintf(dst+len, "%s (%s)", needcomma ? "," : "" , z80_regs[decoded->ea_reg]);
1439 break; 1439 break;
1440 case Z80_IMMED: 1440 case Z80_IMMED:
1441 if (decoded->immed >= 63 || decoded->op == Z80_JP || decoded->op == Z80_JPCC || decoded->op == Z80_CALL || decoded->op == Z80_CALLCC || decoded->op == Z80_RST) 1441 if (decoded->op == Z80_JR || decoded->op == Z80_JRCC || decoded->op == Z80_DJNZ) {
1442 address += 2 + decoded->immed;
1443 len += sprintf(dst+len, "%s %X", needcomma ? "," : "" , address);
1444 } else if (decoded->immed >= 63 || decoded->op == Z80_JP || decoded->op == Z80_JPCC || decoded->op == Z80_CALL || decoded->op == Z80_CALLCC || decoded->op == Z80_RST)
1442 { 1445 {
1443 len += sprintf(dst+len, "%s $%X", needcomma ? "," : "" , decoded->immed); 1446 len += sprintf(dst+len, "%s $%X", needcomma ? "," : "" , decoded->immed);
1444 } else { 1447 } else {
1445 len += sprintf(dst+len, "%s %d", needcomma ? "," : "" , decoded->immed); 1448 len += sprintf(dst+len, "%s %d", needcomma ? "," : "" , decoded->immed);
1446 } 1449 }