--- nono/m88xx0/m88200.cpp 2026/04/29 17:04:41 1.1.1.3 +++ nono/m88xx0/m88200.cpp 2026/04/29 17:04:49 1.1.1.6 @@ -8,7 +8,6 @@ #include "m88100.h" #include "m88200.h" -#include "mystring.h" // static 変数 m88200 *m88200::mbus_master = NULL; @@ -790,7 +789,7 @@ m88200::MBusWrite(uint32 paddr, uint32 d } // MBus に xmem トランザクションを行う。 -// paddr は size によって 1, 2, 4 バイト境界に整列していること。 +// paddr は size によって 1, 4 バイト境界に整列していること (2バイトはない)。 // MBus Acquire された状態で呼び出すこと。 // 成功すれば読み込めた値を返す。 // バスエラーが起きれば fault_code、fault_addr をセットして (uint64)-1 を返す。 @@ -837,6 +836,7 @@ m88200::load(uint32 addr) acc_laddr = addr; acc_read = true; if (Translate() == false) { + putlog(2, "Translation BusError %c:$%08x", (acc_super ? 'S' : 'U'), acc_laddr); return (uint64)-1; } if ((acc_stat & DESC_CI)) { @@ -844,10 +844,14 @@ m88200::load(uint32 addr) MBusAcquire(); data = MBusRead(acc_paddrH + acc_paddrL, bits / 8); MBusRelease(); + if ((int64)data < 0) { + putlog(2, "MBus BusError %c:$%08x", (acc_super ? 'S' : 'U'), acc_laddr); + } return data; } else { data = CacheRead(acc_paddrH); if ((int64)data < 0) { + putlog(2, "Cache BusError %c:$%08x", (acc_super ? 'S' : 'U'), acc_laddr); return data; } @@ -969,12 +973,6 @@ m88200::xmem_8(uint32 addr, uint32 data) } uint64 -m88200::xmem_16(uint32 addr, uint32 data) -{ - return xmem<16>(addr, data); -} - -uint64 m88200::xmem_32(uint32 addr, uint32 data) { return xmem<32>(addr, data); @@ -1628,7 +1626,7 @@ m88200::ReadLine(m88200CacheSet& set, in // 実機の Burst Read は取扱説明書によると 320ns (8 サイクル) で完了 // するようなので、その差 4 をあらかじめ引いておく。 // 途中でバスエラーが起きたらとかそこまでは考慮しない。 - AddCycle((uint64)-4); + AddCycle(-4); // タグを更新 set.tag[line] = tagaddr; @@ -1663,7 +1661,7 @@ m88200::CopyBackLine(m88200CacheSet& set // 実機の Burst Write は取扱説明書によると 280ns (7サイクル) で完了する // ようなので、その差 1 をあらかじめて引いておく。 // 途中でバスエラーが起きたらとかそこまでは考慮しない。 - AddCycle((uint64)-1); + AddCycle(-1); addr = set.tag[line] | (set.setidx << 4); for (int i = 0; i < 4; i++) { @@ -1942,7 +1940,7 @@ m88200::CacheXmem(uint32 paddr, uint32 d // サイクルを加算する (VM から使う) void -m88200::AddCycle(uint64 cycle) +m88200::AddCycle(int32 cycle) { parent->AddCycle(cycle); }