diff options
author | mrb0nk500 <b0nk@b0nk.xyz> | 2020-08-30 12:44:21 -0400 |
---|---|---|
committer | mrb0nk500 <b0nk@b0nk.xyz> | 2020-08-30 12:44:21 -0400 |
commit | 4ed07ca38b99abdca750c6612c512f30965f1714 (patch) | |
tree | c093a404b40f9e2c8d02a8d41eed99087483ced3 /disasm.c | |
parent | d31aed21b27fbda68abe088d657ba18455607cc4 (diff) |
- Did some more work on SuBAsm's lexer.
- Optimized the memory read, and write functions.
- Made the emulator faster, and cleaner in general.
Diffstat (limited to 'disasm.c')
-rw-r--r-- | disasm.c | 65 |
1 files changed, 43 insertions, 22 deletions
@@ -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); |