--- nono/vm/rtl8019as.cpp 2026/04/29 17:05:51 1.1.1.7 +++ nono/vm/rtl8019as.cpp 2026/04/29 17:06:01 1.1.1.8 @@ -51,12 +51,12 @@ RTL8019ASDevice::RTL8019ASDevice(uint n, SetName(string_format("RTL8019AS#%u", n)); ClearAlias(); AddAlias(string_format("RTL8019AS%u", n)); - AddAlias(string_format("Eth%u", n)); + AddAlias(string_format("Net%u", n)); intr_vector = vector_; monitor = gMonitorManager->Regist(ID_MONITOR_RTL8019AS(n), this); - monitor->func = ToMonitorCallback(&RTL8019ASDevice::MonitorUpdate); + monitor->SetCallback(&RTL8019ASDevice::MonitorScreen); monitor->SetSize(71, 19); } @@ -309,7 +309,7 @@ RTL8019ASDevice::Peek1(uint32 addr) } void -RTL8019ASDevice::MonitorUpdate(Monitor *, TextScreen& screen) +RTL8019ASDevice::MonitorScreen(Monitor *, TextScreen& screen) { uint32 val; const int x = 6; @@ -546,7 +546,7 @@ RTL8019ASDevice::MonitorUpdate(Monitor * screen.Print(x2, y++, "CNTR2 = $%02x", PeekCNTR(2)); } -// レジスタをビットごとに表示する。MonitorUpdate の下請け。 +// レジスタをビットごとに表示する。MonitorScreen の下請け。 // "-" で始まっていたら Disable 色にし、次の文字から表示。 void RTL8019ASDevice::MonitorReg(TextScreen& screen, @@ -2028,7 +2028,7 @@ RTL8019ASDevice::ChangeState(State newst break; case State::Stop: - if (tx_in_progress || rx_packet.length != 0) { + if (tx_in_progress || rx_packet.Length() != 0) { // 処理中があれば、処理が終わるのを待つ。 // (送信または受信処理完了時に Stop にする) newstate = State::StopInProgress; @@ -2085,9 +2085,9 @@ RTL8019ASDevice::TXEvent(Event *ev) { // 今回処理する分 uint count = std::min((uint)transmit_byte_count, 256u); - if (count == 0 && tx_packet.length != 0) { + if (count == 0 && tx_packet.Length() != 0) { // 前回でコピーが完了していればここで送信。 - putlog(3, "TXEvent Send %u bytes", tx_packet.length); + putlog(3, "TXEvent Send %u bytes", tx_packet.Length()); hostnet->Tx(tx_packet); // 送信完了。 @@ -2119,7 +2119,7 @@ RTL8019ASDevice::TXEvent(Event *ev) // 転送にかかった時間を模しておく。 // 時間は適当。10Mbps なので 1バイトあたり 1usec とする。 - tx_event->time = count * 1_usec; + tx_event->time = usec_to_tsec(count); scheduler->StartEvent(tx_event); } @@ -2149,7 +2149,7 @@ RTL8019ASDevice::RXEvent(Event *ev) { uint remain; - if (rx_packet.length == 0) { + if (rx_packet.Length() == 0) { // パケットが空の時に呼ばれたら、 // ホストキューから1パケット取り出してみる。 if (hostnet->Rx(&rx_packet) == false) { @@ -2182,7 +2182,7 @@ RTL8019ASDevice::RXEvent(Event *ev) } } - assert(rx_packet.length != 0); + assert(rx_packet.Length() != 0); remain = rx_packet.GetRemain(); if (remain != 0) { // 実際に書き込む前に、これから書き込むページ(local_addr) が @@ -2203,7 +2203,7 @@ RTL8019ASDevice::RXEvent(Event *ev) goto discard; } - if (remain == rx_packet.length) { + if (remain == rx_packet.Length()) { // 初回処理 RXHead(); } @@ -2228,7 +2228,7 @@ void RTL8019ASDevice::RXHead() { // 先に、このパケットの次のページ位置を求めて覚えておく。 - next_page_addr = local_addr + 4 + rx_packet.length; + next_page_addr = local_addr + 4 + rx_packet.Length(); next_page_addr = roundup(next_page_addr, 256); if (next_page_addr >= pstop_addr) { next_page_addr = pstart_addr + (next_page_addr - pstop_addr); @@ -2267,7 +2267,7 @@ RTL8019ASDevice::RXCopy(Event *ev, uint // 転送にかかった時間を模しておく。 // 時間は適当。10Mbps なので 1バイトあたり 1usec とする。 - ev->time = count * 1_usec; + ev->time = usec_to_tsec(count); scheduler->RestartEvent(ev); } @@ -2279,11 +2279,12 @@ void RTL8019ASDevice::RXDone(Event *ev) { // 前回でコピーが完了していればここで通知。 - putlog(3, "RXDone Received %u bytes", rx_packet.length); + uint length = rx_packet.Length(); + putlog(3, "RXDone Received %u bytes", length); // 受信ヘッダに書き込む前に RSR を更新 rsr |= RTL8019::RSR_PRX; - if ((rx_packet[0] & 0x01)) { + if ((rx_packet.Peek(0) & 0x01)) { rsr |= RTL8019::RSR_PHY; } // 念のためエラービットをクリア (DP83901A.pdf) @@ -2310,8 +2311,8 @@ RTL8019ASDevice::RXDone(Event *ev) uint16 addr = current_page_addr; WriteRAM(addr++, rsr); WriteRAM(addr++, next_page_addr >> 8); - WriteRAM(addr++, rx_packet.length & 0xff); - WriteRAM(addr++, rx_packet.length >> 8); + WriteRAM(addr++, length & 0xff); + WriteRAM(addr++, length >> 8); // CURR を次受信ページに更新。残り転送バイトが 0 になった時点で // local_addr は次ページ先頭に繰り上げてある。 @@ -2328,7 +2329,7 @@ RTL8019ASDevice::RXDone(Event *ev) ChangeState(State::Stop); } else { // そうでなければ、次の受信を試す。 - // (rx_packet.length == 0 で RXEvent() を呼ぶとパケット受信となる) + // (rx_packet.Length() == 0 で RXEvent() を呼ぶとパケット受信となる) // どのくらいか待つ? 値は適当 ev->time = 100_usec; @@ -2432,7 +2433,7 @@ RTL8019ASDevice::RXLedEvent(Event *ev) // 点灯中だったら // - 受信中なら次は 100msec 消灯 // - 受信中でなければここで終わり - if (rx_packet.length != 0) { + if (rx_packet.Length() != 0) { rx_led = false; ev->time = 100_msec; scheduler->RestartEvent(ev);