--- nono/hd64180/hd647180io.cpp 2026/04/29 17:05:30 1.1.1.2 +++ nono/hd64180/hd647180io.cpp 2026/04/29 17:06:01 1.1.1.4 @@ -10,6 +10,7 @@ #include "mpu64180.h" #include "hd647180.h" +#include "hd647180asci.h" #include "pio.h" #include "scheduler.h" #include "ssg.h" @@ -37,28 +38,36 @@ MPU64180Device::ReadInternalIO(uint32 of switch (offset) { case 0x00: // IO_CNTLA0 + data = asci->ReadCNTLA(0); + break; case 0x01: // IO_CNTLA1 - data = 0x10; -#if defined(ENABLE_SERIAL_LOG) - putlog(0, "%s -> $%02x (NOT IMPLEMENTED)", - IOName(offset).c_str(), data); -#endif - return data; + data = asci->ReadCNTLA(1); + break; case 0x02: // IO_CNTLB0 + data = asci->ReadCNTLB(0); + break; case 0x03: // IO_CNTLB1 + data = asci->ReadCNTLB(1); break; case 0x04: // IO_STAT0 + data = asci->ReadSTAT(0); + break; case 0x05: // IO_STAT1 - data = 0x02; -#if defined(ENABLE_SERIAL_LOG) - putlog(0, "%s -> $%02x (NOT IMPLEMENTED)", - IOName(offset).c_str(), data); -#endif - return data; + data = asci->ReadSTAT(1); + break; case 0x06: // IO_TDR0 + data = asci->ReadTDR(0); + break; case 0x07: // IO_TDR1 - case 0x08: // IO_TSR0 - case 0x09: // IO_TSR1 + data = asci->ReadTDR(1); + break; + case 0x08: // IO_RDR0 + data = asci->ReadRDR(0); + break; + case 0x09: // IO_RDR1 + data = asci->ReadRDR(1); + break; + case 0x0a: // IO_CNTR case 0x0b: // IO_TRDR break; @@ -303,20 +312,26 @@ MPU64180Device::WriteInternalIO(uint32 o { switch (offset) { case 0x00: // IO_CNTLA0 + return asci->WriteCNTLA(0, data); case 0x01: // IO_CNTLA1 -#if defined(USE_XPSERIAL) - putlog(0, "%s <- $%02x (NOT IMPLEMENTED)", - IOName(offset).c_str(), data); -#endif - return 0; + return asci->WriteCNTLA(1, data); case 0x02: // IO_CNTLB0 + return asci->WriteCNTLB(0, data); case 0x03: // IO_CNTLB1 + return asci->WriteCNTLB(1, data); case 0x04: // IO_STAT0 + return asci->WriteSTAT(0, data); case 0x05: // IO_STAT1 + return asci->WriteSTAT(1, data); case 0x06: // IO_TDR0 + return asci->WriteTDR(0, data); case 0x07: // IO_TDR1 - case 0x08: // IO_TSR0 - case 0x09: // IO_TSR1 + return asci->WriteTDR(1, data); + case 0x08: // IO_RDR0 + return asci->WriteRDR(0, data); + case 0x09: // IO_RDR1 + return asci->WriteRDR(1, data); + case 0x0a: // IO_CNTR case 0x0b: // IO_TRDR break; @@ -364,7 +379,6 @@ MPU64180Device::WriteInternalIO(uint32 o break; case 0x32: // IO_DCNTL return WriteDCNTL(data); - break; case 0x33: // IO_IL return WriteIL(data); @@ -713,15 +727,26 @@ MPU64180Device::PeekInternalIO(uint32 of { switch (offset) { case 0x00: // IO_CNTLA0 + return asci->PeekCNTLA(0); case 0x01: // IO_CNTLA1 + return asci->PeekCNTLA(1); case 0x02: // IO_CNTLB0 + return asci->PeekCNTLB(0); case 0x03: // IO_CNTLB1 + return asci->PeekCNTLB(1); case 0x04: // IO_STAT0 + return asci->PeekSTAT(0); case 0x05: // IO_STAT1 + return asci->PeekSTAT(1); case 0x06: // IO_TDR0 + return asci->PeekTDR(0); case 0x07: // IO_TDR1 - case 0x08: // IO_TSR0 - case 0x09: // IO_TSR1 + return asci->PeekTDR(1); + case 0x08: // IO_RDR0 + return asci->PeekRDR(0); + case 0x09: // IO_RDR1 + return asci->PeekRDR(1); + case 0x0a: // IO_CNTR case 0x0b: // IO_TRDR break; @@ -906,7 +931,7 @@ MPU64180Device::PeekFRC() const // そこから 10φ ごとに1ずつ減っていく。 // そのため、リセット時の時刻を覚えておき、経過時間から計算する。 uint64 time = scheduler->GetVirtTime() - timer_epoch; - return 0xff - (uint8)(time / (clock_nsec * 10)); + return 0xff - (uint8)(time / (clock_tsec * 10)); } } @@ -1019,8 +1044,8 @@ MPU64180Device::ionames = { "STAT1", // 05 "TDR0", // 06 "TDR1", // 07 - "TSR0", // 08 - "TSR1", // 09 + "RDR0", // 08 + "RDR1", // 09 "CNTR", // 0a "TRDR", // 0b "TMDR0L", // 0c