Annotation of nono/wx/wxpagetablemonitor.h, revision 1.1.1.1

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2025 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
                      7: //
                      8: // ページテーブルモニター
                      9: //
                     10: 
                     11: #pragma once
                     12: 
                     13: #include "wxsubwindow.h"
                     14: #include <array>
                     15: 
                     16: class MainbusDevice;
                     17: class MPU68030Device;
                     18: class MPU68040Device;
                     19: class WXScrollBar;
                     20: class WXTextPanel;
                     21: 
                     22: // ページテーブル1段分の構造
                     23: class PageTable
                     24: {
                     25:  public:
                     26:        PageTable(wxWindow *parent, int lv_, int width);
                     27: 
                     28:        // パラメータをクリアする。
                     29:        void Clear();
                     30: 
                     31:        // 指定位置のアドレスを返す。
                     32:        uint32 GetAddr(int) const;
                     33:        // カーソル位置のアドレスを返す。
                     34:        uint32 GetAddr() const { return GetAddr(cursor); }
                     35: 
                     36:        // 表示開始位置を返す。
                     37:        int ViewTop() const;
                     38: 
                     39:        // コントロールの表示状態を制御する。
                     40:        void Show(bool enable = true);
                     41:        void Hide() {
                     42:                Show(false);
                     43:        }
                     44: 
                     45:        WXTextScreen *screen {};
                     46:        WXScrollBar *vscroll {};
                     47:        int lv {};                      // このテーブルの段数 (TIA なら 0)
                     48: 
                     49:        // このテーブルの見出し (1行目)
                     50:        wxString title {};
                     51: 
                     52:        // このテーブルのヘッダ (表の <TH>)
                     53:        wxString head {};
                     54: 
                     55:        // このテーブルのベースアドレス。0xffffffff なら無効。
                     56:        uint32 base {};
                     57:        // この段のアドレスマスク。
                     58:        uint32 mask {};
                     59: 
                     60:        // この段のビット位置と長さ。ビット位置は下から数える。
                     61:        // TIA が 10 ビットなら bitlen=10, bitpos=22 (= 32 - 10)。
                     62:        int bitpos {};
                     63:        int bitlen {};
                     64: 
                     65:        // この段のエントリ数。
                     66:        int count {};
                     67:        // カーソル位置。
                     68:        int cursor {};
                     69: };
                     70: 
                     71: class WXPageTableWindow : public WXSubWindow
                     72: {
                     73:        using inherited = WXSubWindow;
                     74: 
                     75:  public:
                     76:        WXPageTableWindow(wxWindow *parent, const wxString& name);
                     77:        ~WXPageTableWindow() override;
                     78: 
                     79:        bool GetMySizeHints(wxSize *, wxSize *, wxSize *, wxSize *) override;
                     80:        bool Layout() override;
                     81: 
                     82:  protected:
                     83:        void ConnectTableEvents();
                     84: 
                     85:        void OnTimer(wxTimerEvent&);
                     86:        void OnRPChanged(wxCommandEvent&);
                     87:        void OnLeftDClick(wxMouseEvent&);
                     88:        void OnMouseWheel(wxMouseEvent&);
                     89: 
                     90:        void SetRate(int hz);
                     91: 
                     92:        virtual void Reconfig(uint32) = 0;
                     93:        virtual void DoRefresh() = 0;
                     94: 
                     95:        // 全段の最大の行数
                     96:        int max_rows {};
                     97: 
                     98:        bool show_urp {};
                     99: 
                    100:        wxPanel *ctrlpanel {};
                    101:        wxRadioButton *radio_srp {};
                    102:        wxRadioButton *radio_urp {};
                    103:        WXTextScreen *stat {};
                    104:        WXTextPanel *bgpanel {};                // テーブル領域全部の下敷き。
                    105:        std::vector<PageTable> table {};
                    106: 
                    107:        // 現在有効なテーブル数。Reconfig() で決まる。
                    108:        // table の要素を増減させるのは大変なので。
                    109:        int table_count {};
                    110: 
                    111:        // 現在の TC の値。
                    112:        // 68030 は 32bit、68040 は 16bit というところだけ違う。
                    113:        uint32 tc_value {};
                    114: 
                    115:        enum {
                    116:                TC_ENABLE = 0,  // TC.E が有効
                    117:                TC_DISABLE,             // 構成可能で TC.E が無効
                    118:                TC_NOT_CONFIG,  // 構成不能 (68030)
                    119:        } tc_status {};
                    120: 
                    121:        wxTimer timer {};
                    122: 
                    123:        MainbusDevice *mainbus {};
                    124: 
                    125:        wxDECLARE_EVENT_TABLE();
                    126: };
                    127: 
                    128: class WXPageTable68030Window : public WXPageTableWindow
                    129: {
                    130:        using inherited = WXPageTableWindow;
                    131:  public:
                    132:        WXPageTable68030Window(wxWindow *, const wxString& name);
                    133:        ~WXPageTable68030Window() override;
                    134: 
                    135:        void Reconfig(uint32) override;
                    136:        void DoRefresh() override;
                    137: 
                    138:  private:
                    139:        MPU68030Device *mpu {};
                    140: };
                    141: 
                    142: class WXPageTable68040Window : public WXPageTableWindow
                    143: {
                    144:        using inherited = WXPageTableWindow;
                    145:  public:
                    146:        WXPageTable68040Window(wxWindow *, const wxString& name);
                    147:        ~WXPageTable68040Window() override;
                    148: 
                    149:        void Reconfig(uint32) override;
                    150:        void DoRefresh() override;
                    151: 
                    152:  private:
                    153:        bool ps4k;
                    154: 
                    155:        MPU68040Device *mpu {};
                    156: };

unix.superglobalmegacorp.com

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