Annotation of nono/vm/mpu680x0.h, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2017 [email protected]
                      4: //
                      5: 
                      6: // MPU (m680x0)
                      7: 
                      8: #pragma once
                      9: 
                     10: #include "mpu.h"
                     11: #include "m68030.h"
                     12: 
                     13: class MPU680x0Device : public MPUDevice
                     14: {
                     15:        typedef MPUDevice inherited;
                     16:  public:
                     17:        MPU680x0Device(uint32);
                     18:        virtual ~MPU680x0Device();
                     19: 
                     20:        virtual bool Init();
                     21:        virtual void ResetHard();
                     22: 
                     23:        virtual uint32 Run(uint64 request);
                     24: 
                     25:        virtual bool MonitorUpdate();
                     26: 
                     27: 
                     28:        // 現在の PPC を取得
                     29:        virtual uint32 GetPPC() const { return RegPPC; }
                     30: 
                     31:        // 現在アクセス中の論理アドレス、物理アドレスを取得。
                     32:        virtual uint32 GetLaddr() const { return cpu->bus.laddr; }
                     33:        virtual uint32 GetPaddr() const { return cpu->bus.paddr; }
                     34: 
                     35:        // 割り込み発生を MPU に通知 (オートベクタ)
                     36:        virtual void Interrupt(int level);
                     37: 
                     38:        // 割り込み発生を MPU に通知 (ベクタ)
                     39:        void Interrupt(int level, int vector);
                     40: 
                     41:        // MPU の処理をこの命令で中断させる。
                     42:        // スケジューラのイベントリストに追加が発生した時に VM 側から
                     43:        // MPU へ処理の中断を指示する。
                     44:        virtual void Release() { cpu->atomic_reqflag |= CPU_REQ_RELEASE; }
                     45: 
                     46:        // 基準サイクル数を取得
                     47:        virtual uint64 total_cycle() const { return cpu->total_cycle; }
                     48: 
                     49:        // A-Line, F-Line 命令エミュレーションのコールバックを指定する。
                     50:        // (Human68k エミュレーションで使用)
                     51:        void SetALineCallback(bool (*callback)(m68kcpu*, void*), void *arg);
                     52:        void SetFLineCallback(bool (*callback)(m68kcpu*, void*), void *arg);
                     53: 
                     54:        // FPU を持っているか
                     55:        bool HaveFPU() const {
                     56:                return cpu->has_fpu;
                     57:        }
                     58: 
                     59:        // CPU コアを取得 (主にデバッグ用途)
                     60:        m68kcpu *GetCPU() const {
                     61:                return cpu;
                     62:        }
                     63: 
                     64:  private:
                     65:        m68kcpu *cpu = NULL;
                     66: };
                     67: 
                     68: // ATC モニタ
                     69: class MPUATC : public Object
                     70: {
                     71:  public:
                     72:        MPUATC(m68kcpu *cpu);
                     73:        virtual ~MPUATC() { }
                     74: 
                     75:        virtual bool MonitorUpdate();
                     76: 
                     77:  private:
                     78:        m68kcpu *cpu = NULL;
                     79: };
                     80: 
                     81: // ブランチ履歴モニタ
                     82: class MPUBrHist : public Object
                     83: {
                     84:  public:
                     85:        MPUBrHist(m68kcpu *cpu);
                     86:        virtual ~MPUBrHist() { }
                     87: 
                     88:        virtual bool MonitorUpdate();
                     89: 
                     90:  private:
                     91:        m68kcpu *cpu = NULL;
                     92: };
                     93: 
                     94: extern std::unique_ptr<MPUATC> gMPUATC;
                     95: extern std::unique_ptr<MPUBrHist> gMPUBrHist;
                     96: 
                     97: #define gMPU680x0      (dynamic_cast<MPU680x0Device *>(gMPU.get()))

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.