--- nono/vm/ram_partial.cpp 2026/04/29 17:04:50 1.1 +++ nono/vm/ram_partial.cpp 2026/04/29 17:05:10 1.1.1.3 @@ -4,37 +4,43 @@ // Licensed under nono-license.txt // -#include "ram_partial.h" -#include "ram.h" - // -// LUNA* の RAM のうち 16MB に満たないブロックを担当する人。 +// LUNA* の RAM のうち 16MB に満たないメモリブロックを担当する人 // + // devtable[] は1エントリで 16MB の空間を担当するが LUNA-I のメインメモリは // 4MB、8MB、12MB と 16MB 未満の構成があり得る。また 16MB 以上にメモリを -// 増設する場合でも ROM の容量チェックが末尾に Null デバイスの番兵を必要と +// 増設する場合でも ROM の容量チェックが末尾に NopIODevice の番兵を必要と // するため、ここを 16MB 単位での増減にしていると、最大搭載量は 256MB では // なく 240MB になってしまう。中途半端な上に分かりづらいので 255MB まで // 使いたい。そうするとこのデバイスは単に任意のアドレスから 16MB に満たない // 1ブロックを担当する人であればよくて、それを devtable[] のどこに割り当てる // かは VM::Init() 側が決めればよい。 // -// なおこのデバイス自身は RAM を持たず、バックエンドの gRAM (と NullDevice) +// なおこのデバイス自身は RAM を持たず、バックエンドの gRAM (と NopIODevice) // への切り替えスイッチなだけ (XIOSpace のような立場)。 // また、X68030 の場合は XIOSpace がすでに同様の処理を (8KB 単位で) 行って -// いるのと、そもそも RAM がないところは Null ではなく BusError という違いも +// いるのと、そもそも RAM がないところは NopIO ではなく BusError という違いも // あるのでここでは担当しない。 -std::unique_ptr gPartialRAM; +#include "ram_partial.h" +#include "ram.h" + +// グローバル参照用 +PartialRAMDevice *gPartialRAM; // コンストラクタ PartialRAMDevice::PartialRAMDevice() + : inherited("PartialRAM") { + // こいつはプロキシだし今の所ログも出力しないので、指定できる必要ない。 + ClearAlias(); } // デストラクタ PartialRAMDevice::~PartialRAMDevice() { + gPartialRAM = NULL; } bool @@ -47,8 +53,8 @@ PartialRAMDevice::Init() ram_size = gRAM->GetSize(); // ショートカット - ramdev = gRAM.get(); - nulldev = gNull.get(); + ramdev = gRAM; + nopdev = gNopIO; return true; } @@ -60,7 +66,7 @@ PartialRAMDevice::SearchDevice(uint32 ad return ramdev; } else { // メモリのないところをアクセスした時のウェイトは無視 - return nulldev; + return nopdev; } }