Mercurial > repos > blastem
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 } |