|
|
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.10! root 29: int GetFreq() const { return freq; }
! 30:
1.1.1.2 root 31: protected:
32: // BusIO インタフェース
33: static const uint32 NPORT = 1;
1.1.1.10! root 34: busdata Read(uint32 offset);
! 35: busdata Write(uint32 offset, uint32 data);
! 36: busdata Peek(uint32 offset);
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.7 root 70: Monitor monitor { this };
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.