|
|
1.1 root 1: //
2: // nono
1.1.1.2 root 3: // Copyright (C) 2020 nono project
4: // Licensed under nono-license.txt
1.1 root 5: //
6:
1.1.1.8 root 7: //
8: // ROM の基本クラス
9: //
10:
1.1 root 11: #pragma once
12:
13: #include "device.h"
14:
1.1.1.6 root 15: class ROMDevice : public IODevice
1.1 root 16: {
1.1.1.2 root 17: using inherited = IODevice;
1.1 root 18: public:
1.1.1.12 root 19: explicit ROMDevice(uint objid_);
1.1.1.11 root 20: ~ROMDevice() override;
1.1 root 21:
1.1.1.12 root 22: busdata Read(busaddr addr) override;
23: busdata Write(busaddr addr, uint32 data) override;
24: busdata Peek1(uint32 addr) override;
1.1 root 25:
1.1.1.9 root 26: // ファイル名を取得。なければ NULL。
27: const char *GetFilename() const;
28:
1.1.1.11 root 29: // アクセスウェイト [clock] を取得/設定
30: void SetWait(uint32 wait_);
1.1.1.3 root 31:
1.1 root 32: protected:
1.1.1.13! root 33: bool AllocROM(uint len, uint8 fill);
1.1.1.12 root 34: bool LoadROM(const char *name, uint size);
1.1 root 35:
1.1.1.12 root 36: // Read()/Peek1() がアクセスするメモリ領域をさすポインタ。
1.1.1.9 root 37: const uint8 *mem {};
1.1.1.7 root 38:
39: // アクセスマスク。
40: // LUNA の PROM のように、この ROM の折り返しミラーが見える構造なら
41: // このアクセスマスクを設定すること。
42: // X680x0 の各 ROM などはミラーが不要なのでコンストラクタで初期化される
43: // 0xffffffff のままでよい。
1.1.1.3 root 44: uint32 mask {};
1.1 root 45:
1.1.1.7 root 46: // ファイル名
1.1.1.2 root 47: std::string filename {};
1.1 root 48:
1.1.1.7 root 49: // イメージ
50: // (ファイルから読み込んだ内容、あるいは自分で作ったバッファ)
51: std::unique_ptr<uint8[]> imagebuf {};
52:
53: // ライトアクセス時の動作 (Write*() の戻り値)。
54: // 派生クラスが指定すること。
1.1.1.11 root 55: busdata write_op {};
1.1.1.3 root 56:
57: // アクセスウェイト
1.1.1.11 root 58: busdata wait {};
1.1 root 59: };
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.