--- nono/m680x0/m68030.h 2026/04/29 17:04:37 1.1.1.4 +++ nono/m680x0/m68030.h 2026/04/29 17:04:40 1.1.1.5 @@ -161,17 +161,17 @@ class m68kcpu final { public: m68kreg reg {}; - uint32 ppc = 0; // 現在実行中の命令の先頭アドレス - uint16 ir = 0; - uint16 ir2 = 0; + uint32 ppc {}; // 現在実行中の命令の先頭アドレス + uint16 ir {}; + uint16 ir2 {}; uint32 save_pd[8] {}; // -(An) を保存 uint32 save_pi[8] {}; // (An)+ を保存 - uint8 flag_pd = 0; // -(An) のどのレジスタを保存したか - uint8 flag_pi = 0; // (An)+ のどのレジスタを保存したか + uint8 flag_pd {}; // -(An) のどのレジスタを保存したか + uint8 flag_pi {}; // (An)+ のどのレジスタを保存したか // MMU 状態 - bool mmu_enable = false; + bool mmu_enable {}; // SRP void SetSRP(uint32, uint32); uint64 GetSRP() const { return reg.srp.q; } @@ -192,17 +192,17 @@ class m68kcpu final { void SetMMUSR(uint16); uint16 GetMMUSR() const { return reg.mmusr; } // MMU work - m68030TT mmu_tt[2]; + m68030TT mmu_tt[2] {}; uint8 mmu_tt_quick[256] {}; - m68030TC mmu_tc; + m68030TC mmu_tc {}; m68030ATC atc {this}; private: void mmu_enable_changed(); public: - int has_fpu = 0; // 0:FPUなし、1:68881、2:68882(?) - bool fpu_dirty = false; + int has_fpu {}; // 0:FPUなし、1:68881、2:68882(?) + bool fpu_dirty {}; struct fpemu fe {}; std::atomic atomic_reqflag {}; // 外部ループ & リクエストフラグ @@ -232,7 +232,7 @@ class m68kcpu final { // Level 0 1 2 3 4 5 6 7 // // intrmtx 取ってからアクセスすること。 - uint8 intr_mask = 0; + uint8 intr_mask {}; // 割り込み要求は別スレッドから呼ばれる場合もあるので // (自スレッドから呼び出した関数の向こうから呼ばれる場合もあることに注意) @@ -241,10 +241,10 @@ class m68kcpu final { // に通知する (この通知そのものは atomic なので特に保護しなくてもよい)。 std::mutex intrmtx {}; - uint64 total_cycle = 0; // 積算実行サイクル数 - int32 cycle_cache = 0; // キャッシュケースの所用サイクル数 - int32 cycle_nocache = 0; // ノーキャッシュケースの時の *追加分* - uint64 inst_count = 0; // 命令実行数 + uint64 total_cycle {}; // 積算実行サイクル数 + int32 cycle_cache {}; // キャッシュケースの所用サイクル数 + int32 cycle_nocache {}; // ノーキャッシュケースの時の *追加分* + uint64 inst_count {}; // 命令実行数 // ブランチ履歴 (例外履歴を含む) BranchHistory_m680x0 brhist {}; @@ -257,20 +257,20 @@ class m68kcpu final { // 手抜きのためリセットベクタ取得アドレスを知っている。 // リセット時のためだけにデバイス側に細工を入れるのは実行時の // オーバーヘッドが大きそうなので。 - uint32 reset_vector = 0; + uint32 reset_vector {}; // A-Line, F-Line 命令エミュレーションのコールバックとユーザ引数。 // ユーザ引数には関与しないので呼び出し側が自由に指定してよい。 // コールバック側で処理完了したら true を返す。 // デフォルトの処理(すなわちm68k例外)にする場合は false を返す。 - bool (*aline_callback)(m68kcpu *, void *) = NULL; - void *aline_arg = NULL; - bool (*fline_callback)(m68kcpu *, void *) = NULL; - void *fline_arg = NULL; + bool (*aline_callback)(m68kcpu *, void *) {}; + void *aline_arg {}; + bool (*fline_callback)(m68kcpu *, void *) {}; + void *fline_arg {}; // ダブルバスフォールトのコールバックとユーザ引数。 - void (*halt_callback)(void *) = NULL; - void *halt_arg = NULL; + void (*halt_callback)(void *) {}; + void *halt_arg {}; }; #define RegD(n) (cpu->reg.da[(n)]) @@ -307,6 +307,7 @@ extern m68kcpu *m68030_init(uint32 reset extern uint32 m68030_run(m68kcpu *cpu, uint64 request); extern void m68030_exception_reset(m68kcpu *cpu); extern void m68030_interrupt(m68kcpu *cpu, int level, int vector); +extern const char *m68030_get_exception_name(int vector); // 外部で定義されるコールバック extern void m68030_reset_inst(m68kcpu *cpu);