|
|
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: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.