--- nono/m680x0/m68030bitfield.h 2026/04/29 17:05:15 1.1 +++ nono/m680x0/m68030bitfield.h 2026/04/29 17:05:27 1.1.1.2 @@ -12,7 +12,7 @@ class acc_bf { public: - acc_bf(MPU680x0Device *); + explicit acc_bf(MPU680x0Device *); // デストラクタは無し。 void LoadReg(uint n); // Dn から値を読み込む @@ -35,31 +35,11 @@ class acc_bf void StoreReg(uint n); // 値を Dn に書き出す void StoreMem(); // 値をメモリに書き出す - // 32ビットの val を count ビット左ローテートした値を返す。 - // count は 0..31。 - // 実際には count==0 の時 (val>>32) となりこれは未定義動作なのだが - // ぶっちゃけこの形式はローテート命令一発に変換されると知っているので - // とりあえず放置しておく。C++20 になったら std::rotl() を検討。 - NO_SANITIZE("undefined") - uint32 ROL32(uint32 val, uint count) { - return (val << count) | (val >> (32 - count)); - } - - // 32ビットの val を count ビット右ローテートした値を返す。 - // count は 0..31。 - // 実際には count==0 の時 (val>>32) となりこれは未定義動作なのだが - // ぶっちゃけこの形式はローテート命令一発に変換されると知っているので - // とりあえず放置しておく。C++20 になったら std::rotr() を検討。 - NO_SANITIZE("undefined") - uint32 ROR32(uint32 val, uint count) { - return (val >> count) | (val << (32 - count)); - } - MPU680x0Device *cpu {}; uint32 mask {}; // 32ビット左詰めマスク uint32 ea {}; // オフセット計算後の EA int32 local_offset {}; // 内部(32bit or 8bit 内)オフセット - int bytes {}; // アクセスバイト数 + uint bytes {}; // アクセスバイト数 uint64 buf {}; // 40ビットのメモリバッファ };