Annotation of nono/vm/sysclk.h, revision 1.1.1.10

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: }

unix.superglobalmegacorp.com

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