• R/O
  • HTTP
  • SSH
  • HTTPS

common_source_project-fm7: コミット

Common Source Code Project for Qt (a.k.a for FM-7).


コミットメタ情報

リビジョン532dc43b7d7b8e3a9c81dad9dff9f315abe16491 (tree)
日時2020-03-26 01:07:47
作者K.Ohta <whatisthis.sowhat@gmai...>
コミッターK.Ohta

ログメッセージ

[VM][DEBUGGER][I386_NP21][MC6809] Add "RH" command to debugger and bool get_debug_regs_description(_TCHAR *, size_t) to API.

変更サマリ

差分

--- a/source/src/debugger.cpp
+++ b/source/src/debugger.cpp
@@ -285,6 +285,7 @@ void* debugger_thread(void *lpx)
285285 helplist.push_back("O[{B,W,D}] <port> <value> - output port (byte,word,dword)");
286286 helplist.push_back("R - show register(s)");
287287 helplist.push_back("R <reg> <value> - edit register");
288+ helplist.push_back("RH - show registers description");
288289 helplist.push_back("S <range> <list> - search");
289290 helplist.push_back("U [<range>] - unassemble");
290291 helplist.push_back("UT [<steps> | <steps> <logging_file>] - unassemble back trace");
@@ -1588,7 +1589,11 @@ RESTART_GO:
15881589 }
15891590 } else if(_tcsicmp(params[0], _T("!!")) == 0) {
15901591 // do nothing
1591- } else if(_tcsicmp(params[0], _T("?")) == 0) {
1592+ } else if(_tcsicmp(params[0], _T("RH")) == 0) {
1593+ if(target->get_debug_regs_description(buffer, array_length(buffer))) {
1594+ my_printf(p->osd, _T("REGISTER DESCRIPTION:\n%s\n"), buffer);
1595+ }
1596+ } else if(_tcsicmp(params[0], _T("?")) == 0) {
15921597 for(auto n = helplist.begin(); n != helplist.end(); ++n) {
15931598 std::string tmps = *n;
15941599 my_printf(p->osd, (const _TCHAR *)(tmps.c_str()));
--- a/source/src/vm/common_vm/CMakeLists.txt
+++ b/source/src/vm/common_vm/CMakeLists.txt
@@ -1,6 +1,6 @@
11 message("* vm/common_vm")
22
3-SET(THIS_LIB_VERSION 2.24.1)
3+SET(THIS_LIB_VERSION 2.25.0)
44
55 #include(cotire)
66 set(s_vm_common_vm_srcs
--- a/source/src/vm/device.h
+++ b/source/src/vm/device.h
@@ -1222,6 +1222,10 @@ public:
12221222 {
12231223 return false;
12241224 }
1225+ virtual bool get_debug_regs_description(_TCHAR *buffer, size_t buffer_len)
1226+ {
1227+ return false;
1228+ }
12251229 virtual int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
12261230 {
12271231 return debug_dasm_with_userdata(pc, buffer, buffer_len, 0);
--- a/source/src/vm/i386_np21.cpp
+++ b/source/src/vm/i386_np21.cpp
@@ -654,16 +654,45 @@ uint32_t I386::read_debug_reg(const _TCHAR *reg)
654654 return 0;
655655 }
656656
657+bool I386::get_debug_regs_description(_TCHAR *buffer, size_t buffer_len)
658+{
659+ my_stprintf_s(buffer, buffer_len,
660+ _T("(E)IP : Instruction pointer\n")
661+ _T("(E)FLAGS : FLAGs\n")
662+ _T("CS : Code SEGMENT\n")
663+ _T("SS : Stack SEGMENT\n")
664+ _T("DS ES FS GS : Data SEGMENT\n")
665+ _T("(E)SP : Stack pointer\n")
666+ _T("(E)BP : Base pointer (sometimes using local stack pointer)\n")
667+ _T("(E)SI : SOURCE INDEX\n")
668+ _T("(E)DI : DESTINATION INDEX\n")
669+ _T("EAX EBX ECX EDX : 32bit ACCUMERATORS\n")
670+ _T("AX BX CX DX : 16bit ACCUMERATORS\n")
671+ _T("AH AL BH BL CH CL DH DL : 8bit ACCUMERATORS\n")
672+ _T("*** ExX is same as xX, split into xH and xL\n")
673+ _T("LDTR : LOCAL SEGMENT ADDRESS TABLE\n")
674+ _T("GDTR : GLOBAL SEGMENT ADDRESS TABLE\n")
675+ _T("IDTR : INTERRUPT SEGMENT ADDRESS TABLE\n")
676+ _T("TRx : TEST REGISTERs\n")
677+ _T("DRx : DEBUG REGISTERs\n")
678+ _T("CR0-CR4 : SYSTEM REGISTERs\n")
679+ _T("MXCSR : \n")
680+ _T("\n")
681+ );
682+ return true;
683+}
657684 bool I386::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
658685 {
659686 if(CPU_STAT_PM) {
660687 my_stprintf_s(buffer, buffer_len,
661688 _T("EAX=%08X EBX=%08X ECX=%08X EDX=%08X\n")
662689 _T("ESP=%08X EBP=%08X ESI=%08X EDI=%08X\n")
663- _T("DS=%04X ES=%04X SS=%04X CS=%04X EIP=%08X FLAG=[%c%c%c%c%c%c%c%c%c%s]\n")
690+ _T("SS=%04X CS=%04X DS=%04X ES=%04X FS=%04X GS=%04X\n")
691+ _T("EIP=%08X PREV_EIP=%08X PREV_ESP=%08X EFLAGS=%08X FLAG=[%c%c%c%c%c%c%c%c%c%s]\n")
664692 _T("Clocks = %llu (%llu) Since Scanline = %d/%d (%d/%d)"),
665693 CPU_EAX, CPU_EBX, CPU_ECX, CPU_EDX, CPU_ESP, CPU_EBP, CPU_ESI, CPU_EDI,
666- CPU_DS, CPU_ES, CPU_SS, CPU_CS, CPU_EIP,
694+ CPU_SS, CPU_CS, CPU_DS, CPU_ES, CPU_FS, CPU_GS,
695+ CPU_EIP, CPU_PREV_EIP, CPU_PREV_ESP, CPU_FLAG,
667696 (CPU_FLAG & O_FLAG) ? _T('O') : _T('-'), (CPU_FLAG & D_FLAG) ? _T('D') : _T('-'), (CPU_FLAG & I_FLAG) ? _T('I') : _T('-'), (CPU_FLAG & T_FLAG) ? _T('T') : _T('-'), (CPU_FLAG & S_FLAG) ? _T('S') : _T('-'),
668697 (CPU_FLAG & Z_FLAG) ? _T('Z') : _T('-'), (CPU_FLAG & A_FLAG) ? _T('A') : _T('-'), (CPU_FLAG & P_FLAG) ? _T('P') : _T('-'), (CPU_FLAG & C_FLAG) ? _T('C') : _T('-'), (CPU_STAT_VM86) ? _T(":VM86") : _T(""),
669698 total_cycles, total_cycles - prev_total_cycles,
@@ -671,10 +700,12 @@ bool I386::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
671700 } else {
672701 my_stprintf_s(buffer, buffer_len,
673702 _T("AX=%04X BX=%04X CX=%04X DX=%04X SP=%04X BP=%04X SI=%04X DI=%04X\n")
674- _T("DS=%04X ES=%04X SS=%04X CS=%04X IP=%04X FLAG=[%c%c%c%c%c%c%c%c%c]\n")
703+ _T("SS=%04X CS=%04X DS=%04X ES=%04X FS=%04X GS=%04X\n")
704+ _T("IP=%04X PREV_IP=%04X PREV_SP=%04X EFLAGS=%08X FLAG=[%c%c%c%c%c%c%c%c%c]\n")
675705 _T("Clocks = %llu (%llu) Since Scanline = %d/%d (%d/%d)"),
676706 CPU_AX, CPU_BX, CPU_CX, CPU_DX, CPU_SP, CPU_BP, CPU_SI, CPU_DI,
677- CPU_DS, CPU_ES, CPU_SS, CPU_CS, CPU_IP,
707+ CPU_SS, CPU_CS, CPU_DS, CPU_ES, CPU_FS, CPU_GS,
708+ CPU_IP, CPU_STATSAVE.cpu_regs.prev_eip.w.w, CPU_STATSAVE.cpu_regs.prev_esp.w.w, CPU_FLAG,
678709 (CPU_FLAG & O_FLAG) ? _T('O') : _T('-'), (CPU_FLAG & D_FLAG) ? _T('D') : _T('-'), (CPU_FLAG & I_FLAG) ? _T('I') : _T('-'), (CPU_FLAG & T_FLAG) ? _T('T') : _T('-'), (CPU_FLAG & S_FLAG) ? _T('S') : _T('-'),
679710 (CPU_FLAG & Z_FLAG) ? _T('Z') : _T('-'), (CPU_FLAG & A_FLAG) ? _T('A') : _T('-'), (CPU_FLAG & P_FLAG) ? _T('P') : _T('-'), (CPU_FLAG & C_FLAG) ? _T('C') : _T('-'),
680711 total_cycles, total_cycles - prev_total_cycles,
--- a/source/src/vm/i386_np21.h
+++ b/source/src/vm/i386_np21.h
@@ -128,9 +128,10 @@ public:
128128 uint32_t __FASTCALL read_debug_io32(uint32_t addr);
129129 void __FASTCALL write_debug_io32(uint32_t addr, uint32_t data);
130130 uint32_t __FASTCALL read_debug_io16(uint32_t addr);
131- bool write_debug_reg(const _TCHAR *reg, uint32_t data);
131+ virtual bool write_debug_reg(const _TCHAR *reg, uint32_t data);
132132 uint32_t __FASTCALL read_debug_reg(const _TCHAR *reg);
133- bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
133+ virtual bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
134+ virtual bool get_debug_regs_description(_TCHAR *buffer, size_t buffer_len);
134135 int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
135136 //#endif
136137 bool process_state(FILEIO* state_fio, bool loading);
--- a/source/src/vm/libcpu_newdev/device.cpp
+++ b/source/src/vm/libcpu_newdev/device.cpp
@@ -546,6 +546,10 @@ bool DEVICE::get_debug_regs_info(_TCHAR *buffer, size_t buffer_len)
546546 {
547547 return false;
548548 }
549+bool DEVICE::get_debug_regs_description(_TCHAR *buffer, size_t buffer_len)
550+{
551+ return false;
552+}
549553 int DEVICE::debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len)
550554 {
551555 return debug_dasm_with_userdata(pc, buffer, buffer_len, 0);
--- a/source/src/vm/libcpu_newdev/device.h
+++ b/source/src/vm/libcpu_newdev/device.h
@@ -758,6 +758,7 @@ public:
758758 virtual bool write_debug_reg(const _TCHAR *reg, uint32_t data);
759759 virtual uint32_t __FASTCALL read_debug_reg(const _TCHAR *reg);
760760 virtual bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
761+ virtual bool get_debug_regs_description(_TCHAR *buffer, size_t buffer_len);
761762 virtual int debug_dasm(uint32_t pc, _TCHAR *buffer, size_t buffer_len);
762763 virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
763764 /*
--- a/source/src/vm/mc6809.h
+++ b/source/src/vm/mc6809.h
@@ -609,8 +609,9 @@ public:
609609 val |= read_debug_io16(addr + 2);
610610 return val;
611611 }
612- bool write_debug_reg(const _TCHAR *reg, uint32_t data);
613- bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
612+ virtual bool write_debug_reg(const _TCHAR *reg, uint32_t data);
613+ virtual bool get_debug_regs_info(_TCHAR *buffer, size_t buffer_len);
614+ virtual bool get_debug_regs_description(_TCHAR *buffer, size_t buffer_len);
614615 virtual int debug_dasm_with_userdata(uint32_t pc, _TCHAR *buffer, size_t buffer_len, uint32_t userdata = 0);
615616 virtual uint32_t cpu_disassemble_m6809(_TCHAR *buffer, uint32_t pc, const uint8_t *oprom, const uint8_t *opram);
616617 virtual void __FASTCALL debugger_hook(void);
--- a/source/src/vm/mc6809_base.cpp
+++ b/source/src/vm/mc6809_base.cpp
@@ -677,6 +677,32 @@ bool MC6809_BASE::write_debug_reg(const _TCHAR *reg, uint32_t data)
677677 return true;
678678 }
679679
680+bool MC6809_BASE::get_debug_regs_description(_TCHAR *buffer, size_t buffer_len)
681+{
682+ my_stprintf_s(buffer, buffer_len,
683+ _T("PC : PROGRAM COUNTER (16bit)\n")
684+ _T("CC : CONDITION FLAGS (16bit)\n")
685+ _T("DP : DIRECT POINTER (8bit)\n")
686+ _T("S : SYSTEM STACK POINTER (16bit)\n")
687+ _T("U : USER STACK POINTER (16bit)\n")
688+ _T("X : INDEX REGISTER (16bit)\n")
689+ _T("Y : INDEX REGISTER (16bit)\n")
690+ _T("A : ACCUMLATOR (8bit)\n")
691+ _T("B : ACCUMLATOR (8bit)\n")
692+ _T("D : ACCUMLATOR (16bit)\n")
693+ _T("NOTE: D is chain of A and B.D = (A << 8) | B.\n")
694+ _T("NOTE: ENDIANNESS is BIG.\n")
695+ _T("ADDRESSING:\n")
696+ _T("foo #bar (16/8bit) : immediate value of bar\n")
697+ _T("foo <bar (8bit) : direct addressing of bar; address = (DP << 8) | bar.\n")
698+ _T("foo bar (16bit or index) : extended address.address = bar\n")
699+ _T("foo [bar] (16bit or index) : indirect addressing.address = VALUE16(bar)\n")
700+ _T("FLAGS:\n")
701+ _T("E: ENTIRE / F: FAST INTERRUPT(FIRQ) / H: HALF CARRY / I: (STANDARD) INTERRUPT(IRQ/SWI)\n")
702+ _T("N: NEGATIVE / Z: ZERO / V: OVERFLOW / C: CARRY")
703+ );
704+ return true;
705+}
680706 /*
681707 PC = 0000 PPC = 0000
682708 INTR=[ IRQ FIRQ NMI HALT][CI CO SI SO TRAP] CC =[EFHINZVC]
@@ -1435,8 +1461,8 @@ OP_HANDLER(sync_09) // Rename 20101110
14351461
14361462 /* $14 trap(HALT) */
14371463 OP_HANDLER(trap) {
1438- int_state |= MC6809_INSN_HALT; // HALT繝輔Λ繧ー
1439- // Debug: 繝医Λ繝・・隕∝屏
1464+ int_state |= MC6809_INSN_HALT; // HALT郢晁シ釆帷ケァ?ー
1465+ // Debug: 郢晏現ホ帷ケ昴?繝サ髫補?螻
14401466 this->out_debug_log(_T("TRAP(HALT) @%04x %02x %02x\n"), PC - 1, RM((PC - 1)), RM(PC));
14411467 }
14421468
@@ -1522,7 +1548,7 @@ OP_HANDLER(exg) {
15221548 t1.d = 0;
15231549 t2.d = 0;
15241550 /*
1525- * 20111011: 16bit vs 16Bit縺ョ貍皮ョ励↓縺吶k(XM7/ cpu_x86.asm繧医j
1551+ * 20111011: 16bit vs 16Bit邵コ?ョ雋咲坩?ョ蜉ア竊鍋クコ蜷カ??XM7/ cpu_x86.asm郢ァ蛹サ?
15261552 */
15271553 {
15281554 switch ((tb >> 4) & 15) {
@@ -1679,7 +1705,7 @@ OP_HANDLER(tfr) {
16791705 IMMBYTE(tb);
16801706 t.d = 0;
16811707 /*
1682- * 20111011: 16bit vs 16Bit縺ョ貍皮ョ励↓縺吶k(XM7/ cpu_x86.asm繧医j)
1708+ * 20111011: 16bit vs 16Bit邵コ?ョ雋咲坩?ョ蜉ア竊鍋クコ蜷カ??XM7/ cpu_x86.asm郢ァ蛹サ??
16831709 */
16841710 {
16851711 switch ((tb >> 4) & 15) {
旧リポジトリブラウザで表示