--- nono/m680x0/m68030mmu.cpp 2026/04/29 17:05:35 1.1.1.12 +++ nono/m680x0/m68030mmu.cpp 2026/04/29 17:05:48 1.1.1.14 @@ -339,7 +339,6 @@ MPU68030Device::SetTC(uint32 data) // TC:E が変更されていればスイッチ更新 mmu_enable_changed(); return true; - } // TC レジスタへの書き込み値を m68030TC クラスにセットする。 @@ -392,9 +391,9 @@ m68030TC::MakeMask() // +--------+--------+--------+--------+ // lmask = 00000000 11111111 11100000 00000000 // pgmask = 00000000 00000000 00011111 11111111 - lmask = (1 << (tia + tib + tic + tid)) - 1; + lmask = (1U << (tia + tib + tic + tid)) - 1; lmask <<= ps; - pgmask = (1 << ps) - 1; + pgmask = (1U << ps) - 1; // アドレスを (IS,) TIA 〜 TID に分解。 // @@ -411,7 +410,7 @@ m68030TC::MakeMask() for (int i = TID; i >= TIA; i--) { if (tix[i] > 0) { shift[i] = sh; - mask[i] = (1 << tix[i]) - 1; + mask[i] = (1U << tix[i]) - 1; sh += tix[i]; } } @@ -654,7 +653,7 @@ m68030ATCTable::MakeHash(const m68030ATC if (__predict_true(ps4k == 0)) { hash[addr4k] = idx; } else if (ps4k > 0) { - for (int i = 0; i < (1 << ps4k); i++) { + for (int i = 0; i < (1U << ps4k); i++) { hash[addr4k + i] = idx; } } else { @@ -902,7 +901,7 @@ m68030MMU::search(int level, busaddr lad case DT_VALID4: // 有効4バイト case DT_VALID8: // 有効8バイト m_lastsize = m_descsize; - m_descsize = 1 << dt; + m_descsize = 1U << dt; break; } } @@ -951,7 +950,7 @@ m68030MMU::search(int level, busaddr lad case DT_VALID4: // 有効4バイト case DT_VALID8: // 有効8バイト m_lastsize = m_descsize; - m_descsize = 1 << dt; + m_descsize = 1U << dt; if (__predict_false(x == TID || cpu->mmu_tc.tix[x + 1] == 0)) { // 間接 @@ -1666,6 +1665,7 @@ MPU68030Device::mmu_op_ptest() mmu_op_illg2(); return; } + CYCLE(22); // laddr は IS と PS のところを落としたもの。 // ssw_laddr のアドレスは IS を落とさないもの (PSは不問)。 @@ -1711,6 +1711,7 @@ MPU68030Device::mmu_op_ptest() } } else { // レベル 1-7 ならテーブルサーチを実行。 + CYCLE(88); m68030MMU mmu(this, loglevel); mmu.m_ptest = true;