--- nono/vm/cmmu.cpp 2026/04/29 17:04:35 1.1 +++ nono/vm/cmmu.cpp 2026/04/29 17:05:14 1.1.1.5 @@ -4,28 +4,29 @@ // Licensed under nono-license.txt // +// // M88200 CMMU の I/O デバイス部分 +// + +// CMMU が確定しない場合はこのデバイスのログを使う。 +// CMMU が確定したらそっちのデバイスログから出力する。 #include "cmmu.h" #include "mpu88xx0.h" -// CMMU が確定したらそっちのデバイスログから出力する。 -// CMMU が確定しない場合はこのデバイスのログを使う。 - -std::unique_ptr gCMMU; +// グローバル参照用 +CMMUDevice *gCMMU; // コンストラクタ CMMUDevice::CMMUDevice() + : inherited("CMMUIOSpace") { - // m88200 側の logname が "cmmu7" とかなので、こっちを "cmmu" で - // 受け付けてしまうのは紛らわしそうなので。 - logname = "cmmudev"; - devname = "CMMU"; } // デストラクタ CMMUDevice::~CMMUDevice() { + gCMMU = NULL; } bool @@ -63,7 +64,7 @@ CMMUDevice::Read32(uint32 addr) m88200 *cmmu = GetCMMU(id); if (cmmu == NULL) { - putlog(3, "未搭載 CMMU[%d] 読み込み $%08x", id, addr); + putlog(3, "Read not-equipped CMMU[%d] $%08x", id, addr); return 0xffffffff; } @@ -72,47 +73,47 @@ CMMUDevice::Read32(uint32 addr) switch (offset) { case IDR: data = cmmu->GetIDR(); - cmmu->putlog(2, "IDR -> $%08x", data); + cmmu->putlogf(2, lstr("IDR -> $%08x", data)); return data; case SCR: data = cmmu->GetSCR(); - cmmu->putlog(2, "SCR -> $%08x", data); + cmmu->putlogf(2, lstr("SCR -> $%08x", data)); return data; case SSR: data = cmmu->GetSSR(); - cmmu->putlog(2, "SSR -> $%08x", data); + cmmu->putlogf(2, lstr("SSR -> $%08x", data)); return data; case SAR: data = cmmu->GetSAR(); - cmmu->putlog(2, "SAR -> $%08x", data); + cmmu->putlogf(2, lstr("SAR -> $%08x", data)); return data; case SCTR: data = cmmu->GetSCTR(); - cmmu->putlog(2, "SCTR -> $%08x", data); + cmmu->putlogf(2, lstr("SCTR -> $%08x", data)); return data; case PFSR: data = cmmu->GetPFSR(); - cmmu->putlog(2, "PFSR -> $%08x", data); + cmmu->putlogf(2, lstr("PFSR -> $%08x", data)); return data; case PFAR: data = cmmu->GetPFAR(); - cmmu->putlog(2, "PFAR -> $%08x", data); + cmmu->putlogf(2, lstr("PFAR -> $%08x", data)); return data; case SAPR: data = cmmu->GetSAPR(); - cmmu->putlog(2, "SAPR -> $%08x", data); + cmmu->putlogf(2, lstr("SAPR -> $%08x", data)); return data; case UAPR: data = cmmu->GetUAPR(); - cmmu->putlog(2, "UAPR -> $%08x", data); + cmmu->putlogf(2, lstr("UAPR -> $%08x", data)); return data; case BWP0 ... BWP7: @@ -125,13 +126,13 @@ CMMUDevice::Read32(uint32 addr) case CSSP: data = cmmu->GetCSSP(); - cmmu->putlog(2, "CSSP -> $%08x", data); + cmmu->putlogf(2, lstr("CSSP -> $%08x", data)); return data; default: break; } - putlog(0, "未実装読み込み $%08x", addr); + putlog(0, "Read $%08x (NOT IMPLEMENTED)", addr); return 0xffffffff; } @@ -142,7 +143,7 @@ CMMUDevice::Write32(uint32 addr, uint32 m88200 *cmmu = GetCMMU(id); if (cmmu == NULL) { - putlog(3, "未搭載 CMMU[%d] 書き込み $%08x <- $%08x", id, addr, data); + putlog(3, "Write not-equipped CMMU[%d] $%08x <- $%08x", id, addr, data); return 0; } @@ -153,10 +154,10 @@ CMMUDevice::Write32(uint32 addr, uint32 { uint32 newid = data >> 24; if (id != newid) { - cmmu->putlog(1, "ID 更新 $%02x", newid); + cmmu->putlogf(1, lstr("IDR <- $%08x (set ID $%02x)", data, newid)); cmmu->SetID(newid); } else { - cmmu->putlog(2, "IDR 書き込み(ID変更なし) <- $%08x", data); + cmmu->putlogf(2, lstr("IDR <- $%08x", data)); } return 0; } @@ -166,12 +167,12 @@ CMMUDevice::Write32(uint32 addr, uint32 return 0; case SSR: - cmmu->putlog(1, "SSR <- $%08x", data); + cmmu->putlogf(1, lstr("SSR <- $%08x", data)); cmmu->SetSSR(data); return 0; case SAR: - cmmu->putlog(2, "SAR <- $%08x", data); + cmmu->putlogf(2, lstr("SAR <- $%08x", data)); cmmu->SetSAR(data); return 0; @@ -198,7 +199,7 @@ CMMUDevice::Write32(uint32 addr, uint32 case BWP0 ... BWP7: n = (offset - BWP0) / 4; assert(n < 8); - cmmu->SetBATC(n, data); + cmmu->SetBWP(n, data); return 0; case CDP0 ... CDP3: @@ -212,8 +213,8 @@ CMMUDevice::Write32(uint32 addr, uint32 default: break; } - putlog(0, "未実装書き込み $%08x <- $%08x", addr, data); - PANIC(" "); + putlog(0, "Write $%08x <- $%08x (NOT IMPLEMENTED)", addr, data); + VMPANIC("not impl"); return 0; }