--- nono/m680x0/m68030disasm.h 2026/04/29 17:04:34 1.1.1.2 +++ nono/m680x0/m68030disasm.h 2026/04/29 17:05:26 1.1.1.9 @@ -10,19 +10,21 @@ #include "m68030.h" // 逆アセンブル -class m680x0disasm : public Disasm +class m680x0disasm final : public DisasmLine { - using inherited = Disasm; + using inherited = DisasmLine; public: - m680x0disasm(DebuggerMD *m); + m680x0disasm(); ~m680x0disasm() override; // 逆アセンブルを実行 - bool Exec(saddr_t laddr) override; + bool Exec(DebuggerMemoryStream *mem_) override; + + // IOCS コール名を返す。なければ NULL を返す。(分岐履歴から呼ばれる) + static const char *GetIOCSName(int n) { return x68k_iocscall[n]; } private: - saddr_t pc {}; // 現在の PC - uint32 pc0 = 0; // 命令先頭アドレス + uint32 pc0 {}; // 命令先頭アドレス enum Reg { CCR, @@ -54,6 +56,8 @@ class m680x0disasm : public Disasm ITT1, DTT0, DTT1, + + MaxReg, }; // L/S/X/P/W/D/B/(Pk) は FMOVE ,FPn の時の並び順。 @@ -70,9 +74,9 @@ class m680x0disasm : public Disasm None, }; - virtual uint32 fetch16(); - virtual uint32 peek16(); // PC を進めずワードを取得 (IOCSコール用) - uint32 fetch32(); + uint32 fetch2(); + uint32 peek2(); // PC を進めずワードを取得 (IOCSコール用) + uint32 fetch4(); std::string make_reg(Reg); @@ -86,15 +90,15 @@ class m680x0disasm : public Disasm std::string make_ea(uint); std::string make_eaix(std::string basereg); - std::string addr16(uint32 addr); // addr をワードアドレスとして - std::string addr32(uint32 addr); // addr をロングワードアドレスとして - std::string addr16(); // フェッチした値をワードアドレスとして - std::string addr32(); // フェッチした値をロングワードアドレスとして - std::string disp16(); // フェッチしたワードディスプレースメント - std::string disp32(); // フェッチしたロングワードディスプレースメント - std::string imm8(); - std::string imm16(); - std::string imm32(); + std::string addr2(uint32 addr); // addr をワードアドレスとして + std::string addr4(uint32 addr); // addr をロングワードアドレスとして + std::string addr2(); // フェッチした値をワードアドレスとして + std::string addr4(); // フェッチした値をロングワードアドレスとして + std::string disp2(); // フェッチしたワードディスプレースメント + std::string disp4(); // フェッチしたロングワードディスプレースメント + std::string imm1(); + std::string imm2(); + std::string imm4(); std::string make_dn(uint); std::string make_an(uint); std::string make_rn(uint); @@ -132,7 +136,6 @@ class m680x0disasm : public Disasm void ops_btst_imm_ea(); void ops_move(Size sz); void ops_movem_ext(Size sz); - void ops_scc(); void ops_bcc(); void ops_sub(Size sz); void ops_add(Size sz); @@ -150,10 +153,10 @@ class m680x0disasm : public Disasm std::vector ir {}; - std::string name; + std::string name {}; Size size {}; - std::string src; - std::string dst; + std::string src {}; + std::string dst {}; #define OP_PROTO(name) void __CONCAT(op_,name)() #define OP_DEF(name) void __CONCAT(m680x0disasm::op_,name)()