--- nono/vm/fuserom.cpp 2026/04/29 17:05:17 1.1.1.7 +++ nono/vm/fuserom.cpp 2026/04/29 17:05:37 1.1.1.11 @@ -49,53 +49,64 @@ FuseROMDevice::~FuseROMDevice() bool FuseROMDevice::Init() { - if (inherited::Init() == false) { - return false; - } - uint8 checksum = 0; - memset(src, 0, sizeof(src)); // XXX 未調査 + // XXX 初期値は未調査 // src に元データを用意する。 if (gMainApp.IsLUNA88K()) { // LUNA-88K なら先頭が MAC アドレス - macaddr_t macaddr; - if (EthernetDevice::GetConfigMacAddr(&macaddr, false) == false) { + MacAddr macaddr; + if (EthernetDevice::GetConfigMacAddr(0, &macaddr, false) == false) { // エラーメッセージは表示済み return false; } putmsg(1, "macaddr=%s", macaddr.ToString(':').c_str()); - strcpy((char *)src, "ENADDR="); - strcpy((char *)src + 7, macaddr.ToString().c_str()); + strlcpy((char *)&src[0], "ENADDR=", src.size()); + strlcpy((char *)&src[7], macaddr.ToString().c_str(), src.size() - 7); } else { // LUNA-88K2 なら先頭が機種名 (MAC アドレスは NVRAM にある) のようだ。 } // 最終バイトはチェックバイト (Mach の kernel/luna88k/autoconf.c より) - for (int i = 0; i < sizeof(src) - 1; i++) { + for (int i = 0; i < src.size() - 1; i++) { checksum ^= src[i]; } - src[sizeof(src) - 1] = checksum; + src[src.size() - 1] = checksum; return true; } -uint64 -FuseROMDevice::Read(uint32 offset) +busdata +FuseROMDevice::ReadPort(uint32 offset) +{ + busdata data = GetByte(offset); + data |= BusData::Size1; + return data; +} + +busdata +FuseROMDevice::WritePort(uint32 offset, uint32 data) { - return Peek(offset); + return BusData::Size1; } -uint64 -FuseROMDevice::Write(uint32 offset, uint32 data) +// ReadPort() からも呼ばれる +busdata +FuseROMDevice::PeekPort(uint32 offset) +{ + return GetByte(offset); +} + +bool +FuseROMDevice::PokePort(uint32 offset, uint32 data) { - return 0; + return false; } -// Read() からも呼ばれる -uint64 -FuseROMDevice::Peek(uint32 offset) +// offset の位置の値を返す +uint8 +FuseROMDevice::GetByte(uint32 offset) const { uint8 data; if ((offset & 1) == 0) {