From 4ed07ca38b99abdca750c6612c512f30965f1714 Mon Sep 17 00:00:00 2001 From: mrb0nk500 Date: Sun, 30 Aug 2020 12:44:21 -0400 Subject: - Did some more work on SuBAsm's lexer. - Optimized the memory read, and write functions. - Made the emulator faster, and cleaner in general. --- disasm.c | 65 ++++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 22 deletions(-) (limited to 'disasm.c') diff --git a/disasm.c b/disasm.c index 707e237..4a39c4f 100644 --- a/disasm.c +++ b/disasm.c @@ -55,7 +55,7 @@ void disasm(struct sux *cpu, uint8_t lines, uint8_t opcode, uint8_t prefix, uint for (uint8_t i = 0; i < addrsize+1; i++) { mask.u8[i] = (i == addrsize && addrsize != 0xFF) ? 0x7F : 0xFF; } - value = read_value(cpu, cpu->pc, addrsize, 0, 0); + value = read_value(cpu, 0, cpu->pc, addrsize, 0, 0); if ((prefix >> 6) == 1 || (prefix >> 6) == 2 || optype[opcode] == REL) { switch (addrsize) { case 0 : sign = ((int8_t )value < 0) ? "-" : "+"; break; @@ -97,6 +97,7 @@ void disasm(struct sux *cpu, uint8_t lines, uint8_t opcode, uint8_t prefix, uint int row, col; uint8_t iscursor = 0; union reg ptr; + ptr.u64 = 0; uint32_t adr; if (address == CTRL_ADDR || addr[STEP_ADDR]) { adr = 0x30000; @@ -133,38 +134,58 @@ void disasm(struct sux *cpu, uint8_t lines, uint8_t opcode, uint8_t prefix, uint wmove(scr, ln++, 0); } } + /*wclrtoeol(scr); + wprintw(scr, "rega: $%02X, ", addr[0x0A]); + wprintw(scr, "regb: $%02X, ", addr[0x0B]); + wprintw(scr, "regc: $%02X, ", addr[0x0C]); + wprintw(scr, "regd: $%02X, ", addr[0x0D]); + wprintw(scr, "rege: $%02X, ", addr[0x0E]); + wprintw(scr, "regf: $%02X, ", addr[0x0F]); + wprintw(scr, "regg: $%02X", addr[0x10]);*/ + wmove(scr, 30, 0); wclrtoeol(scr); + adr = 0x25; - ptr.u8[0] = addr[adr+0]; ptr.u8[1] = addr[adr+1]; - ptr.u8[2] = addr[adr+2]; ptr.u8[3] = addr[adr+3]; - ptr.u8[4] = addr[adr+4]; ptr.u8[5] = addr[adr+5]; - ptr.u8[6] = addr[adr+6]; ptr.u8[7] = addr[adr+7]; + ptr.u64 = read_value(cpu, 0, adr, 7, 0, 0); wprintw(scr, "ptr1: $%04"PRIX64, ptr.u64); + adr = 0x2D; - ptr.u8[0] = addr[adr+0]; ptr.u8[1] = addr[adr+1]; - ptr.u8[2] = addr[adr+2]; ptr.u8[3] = addr[adr+3]; - ptr.u8[4] = addr[adr+4]; ptr.u8[5] = addr[adr+5]; - ptr.u8[6] = addr[adr+6]; ptr.u8[7] = addr[adr+7]; + ptr.u64 = read_value(cpu, 0, adr, 7, 0, 0); wprintw(scr, ", ptr2: $%04"PRIX64, ptr.u64); + adr = 0x35; - ptr.u8[0] = addr[adr+0]; ptr.u8[1] = addr[adr+1]; - ptr.u8[2] = addr[adr+2]; ptr.u8[3] = addr[adr+3]; - ptr.u8[4] = addr[adr+4]; ptr.u8[5] = addr[adr+5]; - ptr.u8[6] = addr[adr+6]; ptr.u8[7] = addr[adr+7]; + ptr.u64 = read_value(cpu, 0, adr, 7, 0, 0); wprintw(scr, ", ptr3: $%04"PRIX64, ptr.u64); - adr = 0x3349A; - ptr.u8[0] = addr[adr+0]; ptr.u8[1] = addr[adr+1]; - ptr.u8[2] = addr[adr+2]; ptr.u8[3] = addr[adr+3]; - ptr.u8[4] = addr[adr+4]; ptr.u8[5] = addr[adr+5]; - ptr.u8[6] = addr[adr+6]; ptr.u8[7] = addr[adr+7]; + + adr = 0x02049A; + ptr.u64 = read_value(cpu, 0, adr, 7, 0, 0); wprintw(scr, ", idx0: $%04"PRIX64, ptr.u64); + adr = 0x334BA; - ptr.u8[0] = addr[adr+0]; ptr.u8[1] = addr[adr+1]; - ptr.u8[2] = addr[adr+2]; ptr.u8[3] = addr[adr+3]; - ptr.u8[4] = addr[adr+4]; ptr.u8[5] = addr[adr+5]; - ptr.u8[6] = addr[adr+6]; ptr.u8[7] = addr[adr+7]; + ptr.u64 = read_value(cpu, 0, adr, 7, 0, 0); wprintw(scr, ", valbuf: $%016"PRIX64, ptr.u64); + + + wmove(scr, 31, 0); + wclrtoeol(scr); + adr = 0x204CA; + ptr.u64 = read_value(cpu, 0, adr, 3, 0, 0); + wprintw(scr, "t_id: $%02X", ptr.u8[0]); + wprintw(scr, ", t_type: $%02X", ptr.u8[1]); + wprintw(scr, ", t_space: $%02X", ptr.u8[2]); + wprintw(scr, ", t_tab: $%02X", ptr.u8[3]); + adr += 4; + ptr.u64 = read_value(cpu, 0, adr, 7, 0, 0); + wprintw(scr, ", t_val: $%"PRIX64, ptr.u64); + adr += 8; + ptr.u64 = read_value(cpu, 0, adr, 7, 0, 0); + wprintw(scr, ", t_str: $%"PRIX64, ptr.u64); + adr += 8; + ptr.u64 = read_value(cpu, 0, adr, 7, 0, 0); + wprintw(scr, ", t_sym: $%"PRIX64, ptr.u64); + + /* wmove(scr, 47, 0); wclrtoeol(scr); -- cgit v1.2.3-13-gbd6f