summaryrefslogtreecommitdiff
path: root/disasm.c
diff options
context:
space:
mode:
authormrb0nk500 <b0nk@b0nk.xyz>2020-08-31 11:25:19 -0400
committermrb0nk500 <b0nk@b0nk.xyz>2020-08-31 11:25:19 -0400
commit385a621b9487456c3167f204b02cb0ea0752191d (patch)
treef8646458ea5b1b49af192d162ed0713c73c6cca6 /disasm.c
parent4ed07ca38b99abdca750c6612c512f30965f1714 (diff)
- Optimized the memory read/write functions a bit more.
- Added a memcopy() function, for later on.
Diffstat (limited to 'disasm.c')
-rw-r--r--disasm.c7
1 files changed, 2 insertions, 5 deletions
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: