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