--- nono/vm/cmmu.cpp 2026/04/29 17:05:14 1.1.1.5 +++ nono/vm/cmmu.cpp 2026/04/29 17:05:17 1.1.1.6 @@ -12,29 +12,31 @@ // CMMU が確定したらそっちのデバイスログから出力する。 #include "cmmu.h" -#include "mpu88xx0.h" - -// グローバル参照用 -CMMUDevice *gCMMU; +#include "m88200.h" // コンストラクタ CMMUDevice::CMMUDevice() - : inherited("CMMUIOSpace") + : inherited(OBJ_CMMUIO) { } // デストラクタ CMMUDevice::~CMMUDevice() { - gCMMU = NULL; } +// 初期化 bool CMMUDevice::Init() { + if (inherited::Init() == false) { + return false; + } + // CMMU をポイントしておく - cmmus[7] = &gMPU88xx0->GetCPU()->cmmu[0]; - cmmus[6] = &gMPU88xx0->GetCPU()->cmmu[1]; + for (int i = 0; i < cmmus.size(); i++) { + cmmus[i] = gMainApp.FindObject(OBJ_M88200(i)); + } return true; } @@ -154,8 +156,10 @@ CMMUDevice::Write32(uint32 addr, uint32 { uint32 newid = data >> 24; if (id != newid) { - cmmu->putlogf(1, lstr("IDR <- $%08x (set ID $%02x)", data, newid)); - cmmu->SetID(newid); + // 後から ID を変更するのはサポートしない。というか実際無理では。 + cmmu->putlogf(0, lstr( + "IDR <- $%08x (change ID $%02x to $%02x; NOT SUPPORTED)", + data, id, newid)); } else { cmmu->putlogf(2, lstr("IDR <- $%08x", data)); } @@ -287,6 +291,7 @@ CMMUDevice::Peek8(uint32 addr) return (data >> 8) & 0xff; case 3: return data & 0xff; + default: + return 0xff; } - __unreachable(); }