--- nono/vm/device.cpp 2026/04/29 17:04:28 1.1 +++ nono/vm/device.cpp 2026/04/29 17:04:52 1.1.1.6 @@ -1,6 +1,7 @@ // // nono -// Copyright (C) 2017 isaki@NetBSD.org +// Copyright (C) 2020 nono project +// Licensed under nono-license.txt // #include "device.h" @@ -60,12 +61,6 @@ Device::ResetHard() { } -// MPU の RESET 命令によるリセット -void -Device::ResetSoft() -{ -} - // // IODevice @@ -112,7 +107,7 @@ IODevice::Write16(uint32 addr, uint32 da { int64 berr; - berr = Write8(addr, data >> 8) ; + berr = Write8(addr, data >> 8); if (berr < 0) return berr; berr = Write8(addr + 1, data & 0xff); @@ -138,7 +133,7 @@ IODevice::Write32(uint32 addr, uint32 da uint64 IODevice::Peek8(uint32 addr) { - return 0; + return 0xff; } @@ -146,9 +141,12 @@ IODevice::Peek8(uint32 addr) // バスエラー // +std::unique_ptr gBusErr; + // コンストラクタ BusErrDevice::BusErrDevice() { + logname = "buserr"; devname = "(BusErr)"; devaddr = -1; // XXX どうしたもんか } @@ -160,36 +158,42 @@ BusErrDevice::~BusErrDevice() uint64 BusErrDevice::Read8(uint32 addr) { + putlog(1, "$%08x.b", addr); return (uint64)-1; } uint64 BusErrDevice::Read16(uint32 addr) { + putlog(1, "$%08x.w", addr); return (uint64)-1; } uint64 BusErrDevice::Read32(uint32 addr) { + putlog(1, "$%08x.l", addr); return (uint64)-1; } uint64 BusErrDevice::Write8(uint32 addr, uint32 data) { + putlog(1, "$%08x.b <- %02X", addr, data); return (uint64)-1; } uint64 BusErrDevice::Write16(uint32 addr, uint32 data) { + putlog(1, "$%08x.w <- %04X", addr, data); return (uint64)-1; } uint64 BusErrDevice::Write32(uint32 addr, uint32 data) { + putlog(1, "$%08x.l <- %08X", addr, data); return (uint64)-1; } @@ -204,9 +208,12 @@ BusErrDevice::Peek8(uint32 addr) // 何もしないデバイス // +std::unique_ptr gNull; + // コンストラクタ NullDevice::NullDevice() { + logname = "null"; devname = "(Null)"; } @@ -217,12 +224,42 @@ NullDevice::~NullDevice() uint64 NullDevice::Read8(uint32 addr) { + putlog(1, "$%08x.b", addr); return 0xff; } uint64 +NullDevice::Read16(uint32 addr) +{ + putlog(1, "$%08x.w", addr); + return 0xffff; +} + +uint64 +NullDevice::Read32(uint32 addr) +{ + putlog(1, "$%08x.l", addr); + return 0xffffffff; +} + +uint64 NullDevice::Write8(uint32 addr, uint32 data) { + putlog(1, "$%08x.b <- $%02x", addr, data); + return 0; +} + +uint64 +NullDevice::Write16(uint32 addr, uint32 data) +{ + putlog(1, "$%08x.w <- $%04x", addr, data); + return 0; +} + +uint64 +NullDevice::Write32(uint32 addr, uint32 data) +{ + putlog(1, "$%08x.l <- $%08x", addr, data); return 0; }