From 385a621b9487456c3167f204b02cb0ea0752191d Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Mon, 31 Aug 2020 11:25:19 -0400 Subject: - Optimized the memory read/write functions a bit more. - Added a memcopy() function, for later on. --- disasm.c | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'disasm.c') diff --git a/disasm.c b/disasm.c index 4a39c4f..43f78db 100644 --- a/disasm.c +++ b/disasm.c @@ -51,10 +51,7 @@ void disasm(struct sux *cpu, uint8_t lines, uint8_t opcode, uint8_t prefix, uint case IMM : case REL : addrsize = (1 << rs)-1; break; } - - for (uint8_t i = 0; i < addrsize+1; i++) { - mask.u8[i] = (i == addrsize && addrsize != 0xFF) ? 0x7F : 0xFF; - } + mask.u64 = (-(uint64_t)1 >> ((7 - addrsize) * 8)); value = read_value(cpu, 0, cpu->pc, addrsize, 0, 0); if ((prefix >> 6) == 1 || (prefix >> 6) == 2 || optype[opcode] == REL) { switch (addrsize) { @@ -67,7 +64,7 @@ void disasm(struct sux *cpu, uint8_t lines, uint8_t opcode, uint8_t prefix, uint case 6 : case 7 : sign = ((int64_t)value < 0) ? "-" : "+"; break; } - value &= mask.u64; + value = (sign[0] == '-') ? (~value + 1) & mask.u64 : value; } switch (optype[opcode]) { case BREG: -- cgit v1.2.3-13-gbd6f