File:  [Isaki's NoNo m68k/m88k emulator] / nono / debugger / debugger_m680x0.h
Revision 1.1.1.12 (vendor branch): download - view: text, annotated - select for diffs
Wed Apr 29 17:05:58 2026 UTC (2 months, 3 weeks ago) by root
Branches: MAIN, Isaki
CVS tags: v027, HEAD
nono 1.7.0

//
// nono
// Copyright (C) 2020 nono project
// Licensed under nono-license.txt
//

//
// デバッガ (M680x0 依存部分)
//

#pragma once

#include "debugger_private.h"
#include "mpu680x0.h"
#include "m680x0disasm.h"

class StackData;

class DebuggerMD_m680x0 : public DebuggerMD
{
	using inherited = DebuggerMD;
 public:
	explicit DebuggerMD_m680x0(Debugger *parent);
	~DebuggerMD_m680x0() override;

	CPUState GetCPUState() const override { return (CPUState)cpu->GetState(); }
	bool IsSuper() const override { return cpu->IsSuper(); }
	bool MMUEnabled() const override { return cpu->mmu_enable; }
	busaddr TranslateAddr(busaddr laddr) const override;

	uint32 GetPC() const override { return cpu->reg.pc; }
	int32 GetAndResetLastVector() override {
		return cpu->GetAndResetLastVector();
	}

	void SetStepOut() override;
	bool IsStepOut() const override;
	bool IsOpStepIn(DebuggerMemoryStream& mem) override;
	uint64 GetRegAddr(const char *name) const override;
	void BackupRegs() override { prev = cpu->reg; }
	bool ShowRegister(FILE *, const std::vector<std::string>& args) override;
	const HelpMessages& GetHelpListReg() const override;
	const HelpMessages& GetHelpReg() const override;

	bool CheckLEA(uint32 laddr) override { return false; }

	std::string Disassemble(DebuggerMemoryStream& mem) override;
	std::string ParseInst(const std::string&) const override;

	void PrintExceptionFrame(FILE *, busaddr) override;

	// 浮動小数点ステートフレームを表示する。
	void PrintFPStateFrame(FILE *, busaddr);

 private:
	MPU680x0Device *cpu {};	// MPU デバイス
	m68kreg prev {};		// 前回のレジスタセットのコピー

	static bool IsOPcc(uint16 op);
	static bool IsDBcc(uint16 op);
	static int  IsFXcc(const std::vector<uint16>& ir);
	bool IsCond(uint16 op) const;
	const char *CondStr(const std::vector<uint16>& ir) const;

	static const HelpMessages HelpListReg;
	static const HelpMessages HelpReg;
	void ShowRegMain(FILE *);
	void ShowRegFPU(FILE *);
	void ShowRegMMU30(FILE *);
	void ShowRegMMU40(FILE *);
	void ShowRegATC();
	void ShowRegOther();

	bool PrintExceptionFrameCommon(FILE *, const StackData&, bool);
	void PrintExceptionFrame0(FILE *, StackData&);
	void PrintExceptionFrame2(FILE *, StackData&);
	void PrintExceptionFrame3(FILE *, StackData&);
	void PrintExceptionFrame4(FILE *, StackData&);
	void PrintExceptionFrame7(FILE *, StackData&);
	void PrintExceptionFrameB(FILE *, StackData&);

	void PrintFPFrame6888xIdle(FILE *, StackData&, uint32 len);
	void PrintFPFrame6888xBusy(FILE *, StackData&, uint32 len);
	void PrintFPFrame68040Unimpl(FILE *, StackData&, uint base);
	void PrintFPFrame68040Busy(FILE *, StackData&);

	uint32 so_a7 {};			// ステップアウト判定用
	uint16 so_sr {};
};

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.