--- nono/vm/cmmu.cpp 2026/04/29 17:05:17 1.1.1.6 +++ nono/vm/cmmu.cpp 2026/04/29 17:05:25 1.1.1.7 @@ -59,7 +59,7 @@ CMMUDevice::Decoder(uint32 addr) return offset; } -uint64 +busdata CMMUDevice::Read32(uint32 addr) { uint32 id = (addr >> 12) & 0xff; @@ -76,69 +76,71 @@ CMMUDevice::Read32(uint32 addr) case IDR: data = cmmu->GetIDR(); cmmu->putlogf(2, lstr("IDR -> $%08x", data)); - return data; + break; case SCR: data = cmmu->GetSCR(); cmmu->putlogf(2, lstr("SCR -> $%08x", data)); - return data; + break; case SSR: data = cmmu->GetSSR(); cmmu->putlogf(2, lstr("SSR -> $%08x", data)); - return data; + break; case SAR: data = cmmu->GetSAR(); cmmu->putlogf(2, lstr("SAR -> $%08x", data)); - return data; + break; case SCTR: data = cmmu->GetSCTR(); cmmu->putlogf(2, lstr("SCTR -> $%08x", data)); - return data; + break; case PFSR: data = cmmu->GetPFSR(); cmmu->putlogf(2, lstr("PFSR -> $%08x", data)); - return data; + break; case PFAR: data = cmmu->GetPFAR(); cmmu->putlogf(2, lstr("PFAR -> $%08x", data)); - return data; + break; case SAPR: data = cmmu->GetSAPR(); cmmu->putlogf(2, lstr("SAPR -> $%08x", data)); - return data; + break; case UAPR: data = cmmu->GetUAPR(); cmmu->putlogf(2, lstr("UAPR -> $%08x", data)); - return data; + break; case BWP0 ... BWP7: // BWP は書き込み専用 (何が読めるだろうか) - return 0xffffffff; - - case CDP0 ... CDP3: - case CTP0 ... CTP3: + data = 0xffffffff; break; case CSSP: data = cmmu->GetCSSP(); cmmu->putlogf(2, lstr("CSSP -> $%08x", data)); - return data; + break; + case CDP0 ... CDP3: + case CTP0 ... CTP3: default: - break; + putlog(0, "Read $%08x (NOT IMPLEMENTED)", addr); + data = 0xffffffff; } - putlog(0, "Read $%08x (NOT IMPLEMENTED)", addr); - return 0xffffffff; + + busdata bd = data; + // XXX wait? + return bd; } -uint64 +busdata CMMUDevice::Write32(uint32 addr, uint32 data) { uint32 id = (addr >> 12) & 0xff; @@ -163,62 +165,62 @@ CMMUDevice::Write32(uint32 addr, uint32 } else { cmmu->putlogf(2, lstr("IDR <- $%08x", data)); } - return 0; + break; } case SCR: cmmu->SetSCR(data); - return 0; + break; case SSR: cmmu->putlogf(1, lstr("SSR <- $%08x", data)); cmmu->SetSSR(data); - return 0; + break; case SAR: cmmu->putlogf(2, lstr("SAR <- $%08x", data)); cmmu->SetSAR(data); - return 0; + break; case SCTR: cmmu->SetSCTR(data); - return 0; + break; case PFSR: cmmu->SetPFSR(data); - return 0; + break; case PFAR: cmmu->SetPFAR(data); - return 0; + break; case SAPR: cmmu->SetSAPR(data); - return 0; + break; case UAPR: cmmu->SetUAPR(data); - return 0; + break; case BWP0 ... BWP7: n = (offset - BWP0) / 4; assert(n < 8); cmmu->SetBWP(n, data); - return 0; - - case CDP0 ... CDP3: - case CTP0 ... CTP3: break; case CSSP: cmmu->SetCSSP(data); - return 0; + break; + case CDP0 ... CDP3: + case CTP0 ... CTP3: default: + putlog(0, "Write $%08x <- $%08x (NOT IMPLEMENTED)", addr, data); + VMPANIC("not impl"); break; } - putlog(0, "Write $%08x <- $%08x (NOT IMPLEMENTED)", addr, data); - VMPANIC("not impl"); + + // wait? return 0; } @@ -278,7 +280,7 @@ CMMUDevice::Peek32(uint32 addr) const return 0xffffffff; } -uint64 +busdata CMMUDevice::Peek8(uint32 addr) { uint32 data = Peek32(addr & ~3U);