Annotation of nono/vm/sysctlr.h, revision 1.1.1.9

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
1.1.1.6   root        7: //
1.1.1.7   root        8: // LUNA-88K のシステムコントローラのような何か
1.1.1.6   root        9: //
1.1       root       10: 
                     11: #pragma once
                     12: 
1.1.1.3   root       13: #include "interrupt.h"
1.1       root       14: 
1.1.1.7   root       15: class MPU88xx0Device;
                     16: 
1.1.1.4   root       17: class SysCtlrDevice : public InterruptDevice
1.1       root       18: {
1.1.1.3   root       19:        using inherited = InterruptDevice;
                     20: 
                     21:        // 割り込みマップ                            76543210
                     22:        static const uint32 IntmapNMI           = 0x80000000;
                     23:        static const uint32 IntmapSysClk        = 0x08000000;
                     24:        static const uint32 IntmapSIO           = 0x00800000;
1.1.1.9 ! root       25:        static const uint32 IntmapXPHigh        = 0x00400000;
1.1.1.3   root       26:        static const uint32 IntmapLance         = 0x00080000;
                     27:        static const uint32 IntmapSPC           = 0x00008000;
1.1.1.9 ! root       28:        static const uint32 IntmapXPLow         = 0x00000080;
        !            29:        static const uint32 IntmapSoft          = 0x00000040;
1.1.1.3   root       30: 
1.1       root       31:  public:
                     32:        SysCtlrDevice();
1.1.1.9 ! root       33:        ~SysCtlrDevice() override;
1.1.1.3   root       34: 
1.1.1.7   root       35:        bool Init() override;
1.1.1.6   root       36:        void ResetHard(bool poweron) override;
1.1       root       37: 
1.1.1.9 ! root       38:        busdata Read32(uint32 addr) override;
        !            39:        busdata Write32(uint32 addr, uint32 data) override;
        !            40:        busdata Peek8(uint32 addr) override;
1.1       root       41: 
1.1.1.3   root       42:        // InterruptDevice インタフェース
1.1.1.9 ! root       43:        busdata InterruptAcknowledge(int lv) override;
1.1.1.3   root       44: 
1.1       root       45:  private:
1.1.1.3   root       46:        // 割り込み状態を更新
1.1.1.5   root       47:        void ChangeInterrupt() override;
1.1.1.3   root       48: 
                     49:        // マスク設定レジスタの書き込み値から内部用マスクを作成
                     50:        static uint32 MakeIntMask(uint32 data, int n);
                     51: 
1.1.1.4   root       52:        DECLARE_MONITOR_CALLBACK(MonitorUpdate);
                     53: 
1.1.1.3   root       54:        // CPU ごとのパラメータ
                     55:        struct {
                     56:                // 割り込みマスク (設定値)
                     57:                // 書き込み時の値をそのまま保持しておくので bit31-26 のみ有効。他は %0。
                     58:                uint32 maskval;
                     59: 
                     60:                // 内部用 intmap に対する割り込みマスク
                     61:                uint32 intmask;
                     62: 
                     63:                // 現在の最高位の割り込みレベル
                     64:                int ipl;
1.1.1.9 ! root       65: 
        !            66:                // ソフトウェア割り込みの Intmap (アサート中なら IntmapSoft)
        !            67:                uint32 softint;
        !            68: 
        !            69:                // ソフトウェア割り込み回数
        !            70:                uint64 softint_count;
1.1.1.3   root       71:        } cpu[4] {};
1.1.1.4   root       72: 
1.1.1.7   root       73:        MPU88xx0Device *mpu88xx0 {};
                     74: 
1.1.1.4   root       75:        Monitor monitor { this };
1.1       root       76: };
                     77: 
1.1.1.7   root       78: // 参照はここではなく GetInterruptDevice() を使用する
                     79: // (LUNA-88K ではこれがメインの割り込みコントローラなので)

unix.superglobalmegacorp.com

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