|
|
1.1 root 1: //
2: // nono
3: // Copyright (C) 2017 [email protected]
4: //
5:
1.1.1.2 ! root 6: // MPU 共通部
! 7:
1.1 root 8: #pragma once
9:
10: #include "device.h"
11:
12: class MPUDevice : public Device
13: {
14: typedef Device inherited;
15: public:
1.1.1.2 ! root 16: MPUDevice();
1.1 root 17: virtual ~MPUDevice();
18:
19: // MPU を request サイクル分実行する
1.1.1.2 ! root 20: virtual uint32 Run(uint64 request) = 0;
1.1 root 21:
1.1.1.2 ! root 22: // 基準サイクル数を取得
! 23: virtual uint64 total_cycle() const = 0;
1.1 root 24:
25: // MPU の処理をこの命令で中断させる。
26: // スケジューラのイベントリストに追加が発生した時に VM 側から
27: // MPU へ処理の中断を指示する。
1.1.1.2 ! root 28: virtual void Release() = 0;
1.1 root 29:
1.1.1.2 ! root 30: // 現在実行中の命令の PC を取得
! 31: virtual uint32 GetPPC() const = 0;
1.1 root 32:
1.1.1.2 ! root 33: // 現在アクセス中の論理アドレス、物理アドレスを取得。
! 34: // Laddr == Paddr が MMU オフなのか PA=VA で運用中なのかの区別は
! 35: // ここでは付かない。
! 36: virtual uint32 GetLaddr() const = 0;
! 37: virtual uint32 GetPaddr() const = 0;
1.1 root 38:
1.1.1.2 ! root 39: // 割り込み発生を MPU に通知 (オートベクタ)
! 40: virtual void Interrupt(int level) = 0;
1.1 root 41: };
42:
1.1.1.2 ! root 43: #include "mpu680x0.h"
! 44: #include "mpu88xx0.h"
1.1 root 45:
1.1.1.2 ! root 46: extern std::unique_ptr<MPUDevice> gMPU;
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.