--- nono/vm/nereid.cpp 2026/04/29 17:05:33 1.1.1.4 +++ nono/vm/nereid.cpp 2026/04/29 17:06:01 1.1.1.6 @@ -64,7 +64,7 @@ NereidDevice::NereidDevice() : inherited(OBJ_NEREID) { monitor = gMonitorManager->Regist(ID_MONITOR_NEREID, this); - monitor->func = ToMonitorCallback(&NereidDevice::MonitorUpdate); + monitor->SetCallback(&NereidDevice::MonitorScreen); monitor->SetSize(41, 9); } @@ -80,10 +80,17 @@ NereidDevice::Create() // ボードの有無は nereid%u-enable だけで決まる。 for (int i = 0; i < 2; i++) { std::string name = string_format("nereid%u-enable", i); - bool enable = gConfig->Find(name).AsInt(); + bool enable = gConfig->Find(name).AsBool(); if (enable) { - boards[i].reset(new NereidBoardDevice(i)); + try { + boards[i].reset(new NereidBoardDevice(i)); + } catch (...) { } + if ((bool)boards[i] == false) { + warnx("Failt to initialize NereidBoardDevice(%u) at %s", + i, __method__); + return false; + } // 配置場所 if (i == 0) { @@ -164,7 +171,7 @@ NereidDevice::Peek1(uint32 addr) } void -NereidDevice::MonitorUpdate(Monitor *, TextScreen& screen) +NereidDevice::MonitorScreen(Monitor *, TextScreen& screen) { int y; @@ -276,8 +283,7 @@ NereidBoardDevice::Create() std::string netname = string_format("nereid%u-net", id); std::string ramname = string_format("nereid%u-ram-size", id); - const ConfigItem inet = gConfig->Find(netname); - bool net_enable = inet.AsInt(); + bool net_enable = gConfig->Find(netname).AsBool(); const ConfigItem iramsize = gConfig->Find(ramname); ramsize_MB = iramsize.AsInt(); @@ -303,17 +309,30 @@ NereidBoardDevice::Create() } else { vector = 0xf8; } - net.reset(new RTL8019ASDevice(id, vector)); + try { + net.reset(new RTL8019ASDevice(id, vector)); + } catch (...) { } + if ((bool)net == false) { + warnx("Failed to initialize RTL8019ASDevice(%u) at %s", + id, __method__); + return false; + } } // バンクメモリは (DIPSW によって) 有効/無効どちらであっても // BankRAMDevice インスタンスの生成自体は行う。 // ページレジスタは存在している(はずの)ため。 - if (ramsize_MB <= 0) { - bank.reset(new BankRAMDevice(OBJ_BANKRAM(id), 0)); - } else { - bank.reset(new BankRAMDevice(OBJ_BANKRAM(id), ramsize_MB)); - // I/O 空間への登録は X68kIO 側から行っている。 + try { + if (ramsize_MB <= 0) { + bank.reset(new BankRAMDevice(OBJ_BANKRAM(id), 0)); + } else { + bank.reset(new BankRAMDevice(OBJ_BANKRAM(id), ramsize_MB)); + // I/O 空間への登録は X68kIO 側から行っている。 + } + } catch (...) { } + if ((bool)bank == false) { + warnx("Failed to initialize BankRAMDevice(%u) at %s", id, __method__); + return false; } return true; }