--- nono/vm/mpu64180.h 2026/04/29 17:05:29 1.1.1.3 +++ nono/vm/mpu64180.h 2026/04/29 17:05:46 1.1.1.5 @@ -17,6 +17,7 @@ #include "message.h" #include +class HD647180ASCIDevice; class PIO0Device; class SSGDevice; class XPbusDevice; @@ -48,6 +49,7 @@ class MPU64180Device : public MPUDevice, ~MPU64180Device() override; void putlogn(const char *fmt, ...) const override; + bool Create() override; bool Init() override; void ResetHard(bool poweron) override; @@ -69,6 +71,9 @@ class MPU64180Device : public MPUDevice, // (ネゲートはローカルで行う) void AssertINT0(); + // ASCI0/1 の割り込みをアサート/ネゲートする (ASCI から呼ばれる)。 + void ChangeASCIInt(uint n, bool req); + // ブランチ履歴 (例外履歴を含む) BranchHistory_hd64180 brhist { OBJ_XP_BRHIST }; // 例外履歴のみ @@ -81,13 +86,6 @@ class MPU64180Device : public MPUDevice, bool GetIEF1() const { return ief1; } bool GetIEF2() const { return ief2; } - // CPU からの論理メモリアクセス - // (MSXDOSDevice からも呼ぶので public にしてある) - uint32 Read1(uint32 addr); - uint32 Write1(uint32 addr, uint32 data); - uint32 Read2(uint32 addr); - void Write2(uint32 addr, uint32 data); - // アドレス変換 (デバッガ用) uint32 TranslatePeek(uint32) const; @@ -119,8 +117,14 @@ class MPU64180Device : public MPUDevice, uint32 GetWW(uint) const; void SetWW(uint, uint32); + // CPU からの論理メモリアクセス uint32 Fetch1(); uint32 Fetch2(); + uint32 Read1(uint32 addr); + uint32 Write1(uint32 addr, uint32 data); + uint32 Read2(uint32 addr); + void Write2(uint32 addr, uint32 data); + void Jump(uint16); void op_illegal(int pos); @@ -294,6 +298,8 @@ class MPU64180Device : public MPUDevice, void (*syscall_callback)(void *) = NULL; void *syscall_arg {}; + std::unique_ptr asci /*{}*/; + PIO0Device *pio0 {}; SSGDevice *ssg {}; XPbusDevice *xpbus {}; @@ -302,9 +308,9 @@ class MPU64180Device : public MPUDevice, DECLARE_MONITOR_CALLBACK(MonitorUpdateReg); DECLARE_MONITOR_CALLBACK(MonitorUpdateIO); DECLARE_MONITOR_CALLBACK(MonitorUpdateIntr); - Monitor reg_monitor { this }; - Monitor io_monitor { this }; - Monitor intr_monitor { this }; + Monitor *reg_monitor {}; + Monitor *io_monitor {}; + Monitor *intr_monitor {}; // 実行コールバック EventCallback_t exec_func {};