Annotation of nono/vm/newsctlr.h, revision 1.1

1.1     ! root        1: //
        !             2: // nono
        !             3: // Copyright (C) 2022 nono project
        !             4: // Licensed under nono-license.txt
        !             5: //
        !             6: 
        !             7: //
        !             8: // NEWS の各種制御ポート(?)
        !             9: //
        !            10: 
        !            11: #pragma once
        !            12: 
        !            13: #include "device.h"
        !            14: #include "event.h"
        !            15: #include <array>
        !            16: 
        !            17: class DipswDevice;
        !            18: class NewsInterrupt;
        !            19: 
        !            20: class NewsCtlrDevice : public IODevice
        !            21: {
        !            22:        using inherited = IODevice;
        !            23: 
        !            24:  public:
        !            25:        // LED 種別
        !            26:        static const uint LED_GREEN             = 0x01;
        !            27:        static const uint LED_ORANGE    = 0x02;
        !            28: 
        !            29:  public:
        !            30:        NewsCtlrDevice();
        !            31:        ~NewsCtlrDevice() override;
        !            32: 
        !            33:        bool Init() override;
        !            34:        void ResetHard(bool poweron) override;
        !            35: 
        !            36:        uint64 Read8(uint32 addr) override;
        !            37:        uint64 Write8(uint32 addr, uint32 data) override;
        !            38:        uint64 Peek8(uint32 addr) override;
        !            39: 
        !            40:        int GetLED() const { return led; }
        !            41: 
        !            42:  private:
        !            43:        uint8 GetIDROM(uint32 addr) const;
        !            44:        uint8 GetDIPSW() const;
        !            45:        void WriteLED(uint32 data);
        !            46:        void WriteTimer(uint32 data);
        !            47:        void TimerCallback(Event&);
        !            48:        void ChangeInterrupt();
        !            49: 
        !            50:        // 割り込みコントローラ
        !            51:        NewsInterrupt *interrupt {};
        !            52: 
        !            53:        // 256 x 4bit ROM (ここではデータをバイト単位で保持する)
        !            54:        std::array<uint8, 128> oidrom {};
        !            55: 
        !            56:        int led {};
        !            57:        // タイマー
        !            58:        bool timer_intr {};
        !            59:        bool timer_enable {};
        !            60: 
        !            61:        DipswDevice *dipsw {};
        !            62: 
        !            63:        Event timer_event { this };
        !            64: };
        !            65: 
        !            66: static inline NewsCtlrDevice *GetNewsCtlrDevice() {
        !            67:        return Object::GetObject<NewsCtlrDevice>(OBJ_NEWSCTLR);
        !            68: }

unix.superglobalmegacorp.com

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