--- nono/vm/nereid.cpp 2026/04/29 17:05:33 1.1.1.4 +++ nono/vm/nereid.cpp 2026/04/29 17:05:43 1.1.1.5 @@ -83,7 +83,14 @@ NereidDevice::Create() bool enable = gConfig->Find(name).AsInt(); 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) { @@ -303,17 +310,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; }