mirror of
https://github.com/ksherlock/x65.git
synced 2024-12-29 10:30:32 +00:00
Disassembler local label improvement
- Determination for negative branches to local labels were one off which meant lots of unnecessary local labels at end of long functions - struse null/0-length check was reverse causing access to 0
This commit is contained in:
parent
0f740c25bd
commit
3b2b0f7778
@ -1786,10 +1786,10 @@ void GetReferences(unsigned char *mem, size_t bytes, bool acc_16, bool ind_16, i
|
|||||||
} else { // forward check
|
} else { // forward check
|
||||||
while (j!=refs.end()) {
|
while (j!=refs.end()) {
|
||||||
++j;
|
++j;
|
||||||
if (j!=refs.end() && !j->local)
|
|
||||||
skip_global = true;
|
|
||||||
if (j==refs.end() || trg_addr<j->address)
|
if (j==refs.end() || trg_addr<j->address)
|
||||||
break;
|
break;
|
||||||
|
if (j!=refs.end() && !j->local)
|
||||||
|
skip_global = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (skip_global) {
|
if (skip_global) {
|
||||||
@ -1884,15 +1884,6 @@ bool IsReadOnlyInstruction(MNM_Base op_base)
|
|||||||
static const char spacing[] = " ";
|
static const char spacing[] = " ";
|
||||||
void Disassemble(strref filename, unsigned char *mem, size_t bytes, bool acc_16, bool ind_16, int addr, bool ill_wdc, const dismnm *opcodes, bool src, int init_data, strref labels)
|
void Disassemble(strref filename, unsigned char *mem, size_t bytes, bool acc_16, bool ind_16, int addr, bool ill_wdc, const dismnm *opcodes, bool src, int init_data, strref labels)
|
||||||
{
|
{
|
||||||
FILE *f = stdout;
|
|
||||||
bool opened = false;
|
|
||||||
if (filename) {
|
|
||||||
f = fopen(strown<512>(filename).c_str(), "w");
|
|
||||||
if (!f)
|
|
||||||
return;
|
|
||||||
opened = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
const char *spc = src ? "" : spacing;
|
const char *spc = src ? "" : spacing;
|
||||||
|
|
||||||
strref prev_src;
|
strref prev_src;
|
||||||
@ -1908,6 +1899,15 @@ void Disassemble(strref filename, unsigned char *mem, size_t bytes, bool acc_16,
|
|||||||
bool is_ptrs = is_data && (refs[0].data==DT_PTRS || refs[0].data==DT_PTRS_DATA);
|
bool is_ptrs = is_data && (refs[0].data==DT_PTRS || refs[0].data==DT_PTRS_DATA);
|
||||||
strown<256> out;
|
strown<256> out;
|
||||||
|
|
||||||
|
FILE *f = stdout;
|
||||||
|
bool opened = false;
|
||||||
|
if (filename) {
|
||||||
|
f = fopen(strown<512>(filename).c_str(), "w");
|
||||||
|
if (!f)
|
||||||
|
return;
|
||||||
|
opened = true;
|
||||||
|
}
|
||||||
|
|
||||||
while (bytes) {
|
while (bytes) {
|
||||||
// Determine if current address is referenced from somewhere
|
// Determine if current address is referenced from somewhere
|
||||||
while (curr_label_index<(int)refs.size() && addr >= refs[curr_label_index].address) {
|
while (curr_label_index<(int)refs.size() && addr >= refs[curr_label_index].address) {
|
||||||
|
Loading…
Reference in New Issue
Block a user