--- nono/vm/goldfish_tty.cpp 2026/04/29 17:05:25 1.1.1.1 +++ nono/vm/goldfish_tty.cpp 2026/04/29 17:05:38 1.1.1.3 @@ -40,6 +40,7 @@ #include "goldfish_pic.h" #include "hostcom.h" #include "mainbus.h" +#include "mpu.h" #include "scheduler.h" // コンストラクタ @@ -82,10 +83,6 @@ GFTTYDevice::SetLogLevel(int loglevel_) bool GFTTYDevice::Init() { - if (inherited::Init() == false) { - return false; - } - mainbus = GetMainbusDevice(); gfpic = GetGFPICDevice(1); @@ -106,35 +103,34 @@ GFTTYDevice::ResetHard(bool poweron) } busdata -GFTTYDevice::Read32(uint32 addr) +GFTTYDevice::ReadPort(uint32 offset) { - uint32 offset = addr & 0xfff; busdata data; switch (offset) { case BYTES_READY: - data = rxq.size(); - putlog(2, "BYTES_READ -> $%08x", data.Data()); + data = GetREADY(); + putlog(2, "BYTES_READY -> $%08x", data.Data()); break; case VERSION: - data = 1; + data = GFTTYVersion; putlog(2, "VERSION -> $%08x", data.Data()); break; default: - putlog(1, "Read $%08x.L", addr); + putlog(1, "Read $%08x.L", mpu->GetPaddr()); data.SetBusErr(); break; } + data |= BusData::Size4; return data; } busdata -GFTTYDevice::Write32(uint32 addr, uint32 data) +GFTTYDevice::WritePort(uint32 offset, uint32 data) { - uint32 offset = addr & 0xfff; busdata r; switch (offset) { @@ -158,17 +154,33 @@ GFTTYDevice::Write32(uint32 addr, uint32 break; default: - putlog(1, "Write $%08x.L", addr); + putlog(1, "Write $%08x.L", mpu->GetPaddr()); r.SetBusErr(); break; } + + r |= BusData::Size4; return r; } busdata -GFTTYDevice::Peek8(uint32 addr) +GFTTYDevice::PeekPort(uint32 offset) +{ + switch (offset) { + case BYTES_READY: + return GetREADY(); + case VERSION: + return GFTTYVersion; + default: + return BusData::BusErr; + } +} + +// 着信しているバイト数を返す。 +uint32 +GFTTYDevice::GetREADY() const { - return busdata::BusErr; + return rxq.size(); } void @@ -194,7 +206,7 @@ GFTTYDevice::Command(uint32 cmd) uint32 addr = dma_ptr; uint32 end = addr + dma_len; for (; addr < end; addr++) { - busdata data = mainbus->HVRead8(addr); + busdata data = mainbus->HVRead1(addr); if (data.IsBusErr()) { putlog(1, "WRITE_BUFFER: BusError at $%08x", addr); break; @@ -213,7 +225,7 @@ GFTTYDevice::Command(uint32 cmd) for (uint32 end = addr + len; addr < end; addr++) { uint32 data = rxq.front(); rxq.pop_front(); - busdata bd = mainbus->HVWrite8(addr, data); + busdata bd = mainbus->HVWrite1(addr, data); if (bd.IsBusErr()) { putlog(1, "READ_BUFFER: BusError at $%08x", addr); break;