--- nono/vm/romemu_news.cpp 2026/04/29 17:05:28 1.1.1.3 +++ nono/vm/romemu_news.cpp 2026/04/29 17:05:59 1.1.1.7 @@ -32,23 +32,18 @@ // +- IPLROM0Device (X680x0 のブートページ切り替え用プロキシ) #include "romemu_news.h" +#include "mainapp.h" #include "mainbus.h" #include "mainram.h" #include "memorystream.h" #include "mpu680x0.h" #include "newsfb.h" +#include "power.h" // コンストラクタ NewsROMEmuDevice::NewsROMEmuDevice() : inherited(OBJ_PROM) { - // 適当 - uint devlen = 4096; - imagebuf.reset(new uint8 [devlen]); - memset(&imagebuf[0], 0, devlen); - mem = &imagebuf[0]; - - mask = devlen - 1; } // デストラクタ @@ -60,7 +55,8 @@ NewsROMEmuDevice::~NewsROMEmuDevice() bool NewsROMEmuDevice::Init() { - if (inherited::Init() == false) { + // ROM 領域を用意。サイズは適当。 + if (AllocROM(2048, 0) == false) { return false; } @@ -145,9 +141,10 @@ NewsROMEmuDevice::ROM_Init() // アドレスをこの Read アクセスの読み出し値として返す。 LoadInfo info(gMainApp.exec_file); - if (mainram->LoadExec(&info) == false) { - // XXX どうすべ - PANIC("** Couldn't load specified host program"); + if (BootLoader::LoadExec(mainram, &info) == false) { + // エラーメッセージは表示済み。 + auto power = GetPowerDevice(); + power->PushPowerButton(); return -1; } putmsg(1, "Host program loaded. Entry point = $%08x", info.entry); @@ -170,7 +167,7 @@ NewsROMEmuDevice::ROM_Init() // 下位28ビット(7桁) は ROM から渡されるようだ。 // %d7 は boothowto。 reg.D[2] = info.sym; - reg.D[4] = mainram->GetSize(); + reg.D[4] = (uint32)mainram->GetSize(); reg.D[6] = 0x50000000; reg.D[7] = 0;