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

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

unix.superglobalmegacorp.com

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