Annotation of nono/debugger/debugger_memory.h, revision 1.1.1.3

1.1       root        1: //
                      2: // nono
                      3: // Copyright (C) 2020 nono project
                      4: // Licensed under nono-license.txt
                      5: //
                      6: 
1.1.1.2   root        7: //
                      8: // デバッガのメモリアクセスヘルパー(?)
                      9: //
1.1       root       10: 
                     11: #pragma once
                     12: 
1.1.1.3 ! root       13: #include "debugger_defs.h"
        !            14: #include "saddr.h"
1.1       root       15: 
1.1.1.3 ! root       16: class IOContainerDevice;
1.1       root       17: 
                     18: class DebuggerMemoryStream
                     19: {
                     20:  public:
1.1.1.3 ! root       21:        // コンストラクタ (全部入り)
1.1       root       22:        DebuggerMemoryStream(const DebuggerMD *md_, const saddr_t& laddr_,
                     23:                MemoryMode access_mode, MMULookupMode lookup_mode);
1.1.1.3 ! root       24: 
        !            25:        // コンストラクタ (物理アドレス指定)
        !            26:        DebuggerMemoryStream(const DebuggerMD *md_, const saddr_t& laddr_)
        !            27:                : DebuggerMemoryStream(md_, laddr_,
        !            28:                        MemoryMode::Physical, MMULookupMode::None)      // 移譲
1.1       root       29:        {
                     30:        }
1.1.1.3 ! root       31:        // コンストラクタ (論理アドレスとテーブルサーチモード指定)
        !            32:        DebuggerMemoryStream(const DebuggerMD *md_, const saddr_t& laddr_,
        !            33:                        MMULookupMode lookup_mode)
        !            34:                : DebuggerMemoryStream(md_, laddr_,
        !            35:                        MemoryMode::Logical, lookup_mode)        // 移譲
1.1       root       36:        {
                     37:        }
                     38: 
                     39:        // 現在のアドレスを表示用に整形して str に代入する。
                     40:        // アドレス変換でバスエラーが起きたら false を返す。
                     41:        bool FormatAddr(std::string& str);
                     42: 
                     43:        // アドレスをリセットする。
                     44:        void ResetAddr(uint32 newaddr);
                     45: 
1.1.1.3 ! root       46:        // アドレスを n 進める(戻す)。
        !            47:        void Offset(int n);
        !            48: 
        !            49:        // 以下 Peek*()/Read*() はいずれも読み込んだデータを返す。
1.1       root       50:        // (uint64)-1 ならアクセスの結果バスエラー。
                     51:        // (uint64)-2 ならアドレス変換でバスエラー。
                     52: 
1.1.1.3 ! root       53:        // laddr から指定バイト数を右詰めで読み込むが、アドレスは進めない。
        !            54:        // 命令ワード読み込み用なので bytes は 1, 2, 4 を想定。
        !            55:        uint64 Peek(int bytes);
        !            56: 
        !            57:        // laddr から指定バイト数を右詰めで読み込んで、アドレスを進める。
        !            58:        // 命令ワード読み込み用なので bytes は 1, 2, 4 を想定。
        !            59:        uint64 Read(int bytes);
1.1       root       60: 
                     61:        // laddr から1バイト読み込んで、アドレスを進める。
1.1.1.3 ! root       62:        uint64 Read8();
1.1       root       63: 
                     64:  public:
                     65:        saddr_t laddr {};               // (論理)アドレス
                     66:        uint32 paddr {};                // 物理アドレス
                     67: 
                     68:  private:
1.1.1.3 ! root       69:        // アクセスするバス
        !            70:        IOContainerDevice *bus {};
        !            71: 
        !            72:        int lcol;                                       // 論理アドレス幅の16進桁数
        !            73:        int pcol;                                       // 物理アドレス幅の16進桁数
1.1       root       74: 
1.1.1.3 ! root       75:        bool translate {};                      // アドレス変換が必要なら true
        !            76:        bool lookup {};                         // MMU テーブルサーチを行うなら true
        !            77:        bool pageover {};                       // 256バイト境界をまたいだら true
        !            78:        const DebuggerMD *md {};        // アドレス変換に必要
1.1       root       79: };

unix.superglobalmegacorp.com

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