--- nono/vm/nereid.cpp 2026/04/29 17:05:21 1.1.1.1 +++ nono/vm/nereid.cpp 2026/04/29 17:05:25 1.1.1.2 @@ -51,7 +51,6 @@ #include "bankram.h" #include "config.h" #include "rtl8019as.h" -#include "x68kio.h" // // Nereid 空間担当デバイス @@ -117,7 +116,7 @@ NereidDevice::Decoder(uint32 addr) const return (addr >> 8) & 0x1f; } -uint64 +busdata NereidDevice::Read8(uint32 addr) { putlog(2, "Read $%06x.B", addr); @@ -128,10 +127,10 @@ NereidDevice::Read8(uint32 addr) return boards[i]->Read8(addr); } } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata NereidDevice::Read16(uint32 addr) { putlog(2, "Read $%06x.W", addr); @@ -142,10 +141,10 @@ NereidDevice::Read16(uint32 addr) return boards[i]->Read16(addr); } } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata NereidDevice::Write8(uint32 addr, uint32 data) { putlog(2, "Write $%06x.B", addr); @@ -156,10 +155,10 @@ NereidDevice::Write8(uint32 addr, uint32 return boards[i]->Write8(addr, data); } } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata NereidDevice::Write16(uint32 addr, uint32 data) { putlog(2, "Write $%06x.W", addr); @@ -170,10 +169,10 @@ NereidDevice::Write16(uint32 addr, uint3 return boards[i]->Write16(addr, data); } } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata NereidDevice::Peek8(uint32 addr) { uint32 cs = Decoder(addr); @@ -183,7 +182,7 @@ NereidDevice::Peek8(uint32 addr) return boards[i]->Peek8(addr); } } - return (uint64)-1; + return busdata::BusErr; } void @@ -336,11 +335,7 @@ NereidBoardDevice::Create() bank.reset(new BankRAMDevice(OBJ_BANKRAM(id), 0)); } else { bank.reset(new BankRAMDevice(OBJ_BANKRAM(id), ramsize_MB)); - - // メモリウィンドウ領域の登録はバンクメモリが有効な場合のみ行う。 - uint32 addr = 0xee0000 + id * 0x10000; - auto *x68kio = GetX68kIODevice(); - x68kio->AddDevice(bank.get(), addr, 0x01'0000); + // I/O 空間への登録は X68kIO 側から行っている。 } return true; } @@ -351,7 +346,7 @@ NereidBoardDevice::Decoder(uint32 addr) return addr & 0xff; } -uint64 +busdata NereidBoardDevice::Read8(uint32 addr) { uint32 offset = Decoder(addr); @@ -366,14 +361,14 @@ NereidBoardDevice::Read8(uint32 addr) } else if (offset == 0xf1) { return GetCtrl(); } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata NereidBoardDevice::Read16(uint32 addr) { uint32 offset = Decoder(addr); - uint64 data; + uint32 data; if (offset < 0x40) { if ((bool)net) { @@ -382,12 +377,13 @@ NereidBoardDevice::Read16(uint32 addr) } else if (offset == 0xf0) { data = GetPage() << 8; data |= GetCtrl(); + // XXX wait? return data; } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata NereidBoardDevice::Write8(uint32 addr, uint32 data) { uint32 offset = Decoder(addr); @@ -404,10 +400,10 @@ NereidBoardDevice::Write8(uint32 addr, u SetCtrl(data); return 0; } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata NereidBoardDevice::Write16(uint32 addr, uint32 data) { uint32 offset = Decoder(addr); @@ -421,10 +417,10 @@ NereidBoardDevice::Write16(uint32 addr, SetCtrl(data & 0xff); return 0; } - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata NereidBoardDevice::Peek8(uint32 addr) { uint32 offset = Decoder(addr); @@ -439,7 +435,7 @@ NereidBoardDevice::Peek8(uint32 addr) } else if (offset == 0xf1) { return GetCtrl(); } - return (uint64)-1; + return busdata::BusErr; } // バンクページ選択レジスタの値を取得。