--- nono/vm/tas.cpp 2026/04/29 17:04:48 1.1.1.2 +++ nono/vm/tas.cpp 2026/04/29 17:04:53 1.1.1.4 @@ -22,21 +22,30 @@ TASDevice::~TASDevice() { } -// XXX: RMW サイクルが発行される前提のレジスタなので、 -// CPU / バス 側に RMW を実装しなければならない。 +// リセット +void +TASDevice::ResetHard() +{ + // 初期値は 0 らしい (LUNA88K PROM 1.20 がそう期待している)。 + // いつリセットされるかは分からないけど、さすがにリセットされるだろう。 + tas = 0; +} + +// XXX: RMW サイクルが発行される前提のレジスタだが +// まだ CPU から RMW サイクルを示す信号線が出ていない。 uint64 -TASDevice::Read(uint32 addr) +TASDevice::Read(uint32 offset) { putlog(2, "読み込み 0x%02x", (uint8)tas); return tas; } uint64 -TASDevice::Write(uint32 addr, uint32 data) +TASDevice::Write(uint32 offset, uint32 data) { - // bit7 のみ有効 - // LUNA-I では B 接続なので、各バイトの bit7 に相当。 + // data は bit7 のみ有効。data の bit7 は + // LUNA-I では B 接続なので、各バイトの bit7 に相当、 // LUNA88K では BFFF 接続なので bit31 に相当。 // 最上位ビット以外のビットは「不定」。 tas = data; @@ -44,20 +53,8 @@ TASDevice::Write(uint32 addr, uint32 dat return 0; } -#if 0 -// RMW はこんな感じ? -uint64 -TASDevice::ReadWrite(uint32 addr, uint32 data) -{ - uint8 rv; - rv = tas.exchange(data); - putlog(1, "TAS RMW 0x%02 to 0x%02", rv, data); - return rv; -} -#endif - uint64 -TASDevice::Peek(uint32 addr) +TASDevice::Peek(uint32 offset) { return tas; }