--- nono/vm/device.cpp 2026/04/29 17:05:11 1.1.1.8 +++ nono/vm/device.cpp 2026/04/29 17:05:25 1.1.1.10 @@ -17,8 +17,8 @@ // // コンストラクタ -Device::Device(const std::string& objname_) - : inherited(objname_) +Device::Device(int objid_) + : inherited(objid_) { } @@ -36,6 +36,9 @@ Device::Create() bool Device::Init() { + mpu = GetMPUDevice(); + scheduler = GetScheduler(); + return true; } @@ -65,13 +68,13 @@ Device::putlogn(const char *fmt, ...) co uint64 vt; int len; - vt = gScheduler->GetVirtTime(); + vt = scheduler->GetVirtTime(); len = snprintf(buf, sizeof(buf), "%4d.%03d'%03d'%03d %08x %s ", (int)(vt / 1000 / 1000 / 1000), (int)((vt / 1000 / 1000) % 1000), (int)((vt / 1000) % 1000), (int)(vt % 1000), - gMPU->GetPPC(), + mpu->GetPPC(), GetName().c_str()); va_start(ap, fmt); @@ -87,11 +90,9 @@ Device::putlogn(const char *fmt, ...) co // // コンストラクタ -IODevice::IODevice(const std::string& objname_) - : inherited(objname_) +IODevice::IODevice(int objid_) + : inherited(objid_) { - devaddr = 0; - devlen = 0; } // デストラクタ @@ -99,31 +100,42 @@ IODevice::~IODevice() { } -uint64 +// 初期化 +bool +IODevice::Init() +{ + if (inherited::Init() == false) { + return false; + } + + return true; +} + +busdata IODevice::Read8(uint32 addr) { return 0xff; } -uint64 +busdata IODevice::Read16(uint32 addr) { return (Read8(addr) << 8) | Read8(addr + 1); } -uint64 +busdata IODevice::Read32(uint32 addr) { return (Read16(addr) << 16) | Read16(addr + 2); } -uint64 +busdata IODevice::Write8(uint32 addr, uint32 data) { return 0; } -uint64 +busdata IODevice::Write16(uint32 addr, uint32 data) { int64 berr; @@ -137,7 +149,7 @@ IODevice::Write16(uint32 addr, uint32 da return 0; } -uint64 +busdata IODevice::Write32(uint32 addr, uint32 data) { int64 berr; @@ -151,82 +163,88 @@ IODevice::Write32(uint32 addr, uint32 da return 0; } -uint64 +busdata IODevice::Peek8(uint32 addr) { return 0xff; } +bool +IODevice::Poke8(uint32 addr, uint32 data) +{ + return false; +} + +bool +IODevice::Poke(uint32 addr, uint32 data) +{ + return false; +} + // // バスエラー // -// グローバル参照用 -BusErrDevice *gBusErr; - // コンストラクタ BusErrDevice::BusErrDevice() - : inherited("(BusErr)") + : inherited(OBJ_BUSERR) { ClearAlias(); AddAlias("BusErr"); - - devaddr = -1; // XXX どうしたもんか } // デストラクタ BusErrDevice::~BusErrDevice() { - gBusErr = NULL; } -uint64 +busdata BusErrDevice::Read8(uint32 addr) { putlog(1, "$%08x.b", addr); - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata BusErrDevice::Read16(uint32 addr) { putlog(1, "$%08x.w", addr); - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata BusErrDevice::Read32(uint32 addr) { putlog(1, "$%08x.l", addr); - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata BusErrDevice::Write8(uint32 addr, uint32 data) { putlog(1, "$%08x.b <- %02X", addr, data); - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata BusErrDevice::Write16(uint32 addr, uint32 data) { putlog(1, "$%08x.w <- %04X", addr, data); - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata BusErrDevice::Write32(uint32 addr, uint32 data) { putlog(1, "$%08x.l <- %08X", addr, data); - return (uint64)-1; + return busdata::BusErr; } -uint64 +busdata BusErrDevice::Peek8(uint32 addr) { - return (uint64)-1; + return busdata::BusErr; } @@ -234,12 +252,9 @@ BusErrDevice::Peek8(uint32 addr) // 何もしないデバイス // -// グローバル参照用 -NopIODevice *gNopIO; - // コンストラクタ NopIODevice::NopIODevice() - : inherited("(NopIO)") + : inherited(OBJ_NOPIO) { ClearAlias(); AddAlias("NopIO"); @@ -248,52 +263,51 @@ NopIODevice::NopIODevice() // デストラクタ NopIODevice::~NopIODevice() { - gNopIO = NULL; } -uint64 +busdata NopIODevice::Read8(uint32 addr) { putlog(1, "$%08x.b", addr); return 0xff; } -uint64 +busdata NopIODevice::Read16(uint32 addr) { putlog(1, "$%08x.w", addr); return 0xffff; } -uint64 +busdata NopIODevice::Read32(uint32 addr) { putlog(1, "$%08x.l", addr); return 0xffffffff; } -uint64 +busdata NopIODevice::Write8(uint32 addr, uint32 data) { putlog(1, "$%08x.b <- $%02x", addr, data); return 0; } -uint64 +busdata NopIODevice::Write16(uint32 addr, uint32 data) { putlog(1, "$%08x.w <- $%04x", addr, data); return 0; } -uint64 +busdata NopIODevice::Write32(uint32 addr, uint32 data) { putlog(1, "$%08x.l <- $%08x", addr, data); return 0; } -uint64 +busdata NopIODevice::Peek8(uint32 addr) { return 0xff;