|
|
1.1 root 1: //
2: // nono
1.1.1.3 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
1.1.1.8 root 7: //
8: // LUNA システムクロック
9: //
10:
1.1 root 11: #pragma once
12:
1.1.1.9 root 13: #include "device.h"
1.1.1.8 root 14: #include "event.h"
1.1 root 15:
1.1.1.9 root 16: class InterruptDevice;
17:
1.1.1.7 root 18: class SysClkDevice : public IODevice
1.1 root 19: {
1.1.1.3 root 20: using inherited = IODevice;
1.1 root 21: public:
22: SysClkDevice();
1.1.1.10 root 23: ~SysClkDevice() override;
1.1 root 24:
1.1.1.3 root 25: bool Init() override;
1.1.1.8 root 26: void ResetHard(bool poweron) override;
1.1 root 27:
1.1.1.11 root 28: uint GetFreq() const { return freq; }
1.1.1.10 root 29:
1.1.1.2 root 30: protected:
31: // BusIO インタフェース
32: static const uint32 NPORT = 1;
1.1.1.11 root 33: busdata ReadPort(uint32 offset);
34: busdata WritePort(uint32 offset, uint32 data);
35: busdata PeekPort(uint32 offset);
36: bool PokePort(uint32 offset, uint32 data);
1.1 root 37:
38: private:
39: // イベントコールバック
1.1.1.4 root 40: void Callback(Event& ev);
1.1.1.7 root 41:
42: DECLARE_MONITOR_CALLBACK(MonitorUpdate);
1.1 root 43:
1.1.1.2 root 44: // 割り込み状態をレジスタイメージにして返す
45: uint8 GetInt() const;
46:
1.1.1.10 root 47: // 割り込み信号線の状態を変える。
48: void ChangeInterrupt();
49:
1.1 root 50: // システムクロック割り込み有りなら true。
1.1.1.4 root 51: bool sysint {};
1.1 root 52:
53: // 割り込みイベント
1.1.1.7 root 54: Event event { this };
55:
1.1.1.10 root 56: // システムクロック周波数 [Hz]
57: uint freq {};
58:
1.1.1.7 root 59: // 本来のイベント間隔。機種によって異なる。
1.1.1.10 root 60: uint64 period {};
1.1.1.7 root 61:
62: // システムクロックが刻んでいる時刻
63: uint64 stime {};
64:
65: // システムクロックを実時間に同期する場合 true
66: bool sync_rt {};
67:
1.1.1.9 root 68: InterruptDevice *interrupt {};
69:
1.1.1.12! root 70: Monitor *monitor {};
1.1 root 71: };
1.1.1.5 root 72:
1.1.1.9 root 73: static inline SysClkDevice *GetSysClkDevice() {
74: return Object::GetObject<SysClkDevice>(OBJ_SYSCLK);
75: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.