udpstream: reboot works on the real unit (88 s), and correct the earlier call

Issued while the payload owned the LANCE: the reply arrived, control went to
0x3F200040, the screen went black -- and the OS was back 88 s later.  Port 771
reopened on its own, the unit answered ping, and a VRAM screenshot shows the
Terminal Manager with the right MAC/IP/LAT name and the clean-boot
"Ethernet Port Error - 24" banner.  A taken-over unit can therefore hand
itself back without a power cycle.

An earlier reading of the same run reported "black and hung, needs a power
cycle".  That was a single observation taken inside the ~90 s POST window.
The black screen is the reset path reprogramming the board/video window
(0xC00000B0, 0xC0000100) and not re-enabling the display until POST ends.

vtcmd.py reboot now says how long it takes and warns not to power cycle
during it, instead of refusing to run.
This commit is contained in:
arti committed 2026-10-30 17:01:25 +02:00
1 parent 0563cb08e8
commit 41e21b6494
2 files changed
+39 -4

No files matched your search

+35 -4
View File
@@ -4691,7 +4691,38 @@ the state a payload leaves behind, and at real power-on `SP` is undefined
anyway, which is the condition we reproduce.
MAME evidence: after the reply, the PC leaves the payload (`0x018Cxxxx`) for ROM
(`0x3FB43E40` at the next sample) and the payload stops answering. What is **not**
shown yet is that the unit comes back *without a power cycle* — in MAME the OS
was never down, so a warm restart is indistinguishable from the OS continuing.
That test needs the real machine and is the reason the command exists.
(`0x3FB43E40` at the next sample) and the payload stops answering.
### 72.3 It works on the real machine — and a correction
`reboot` was issued on the unit at **16:58:45** while the payload owned the LANCE.
The reply came back (`control -> bit 0x3f200040`, status 0), the payload stopped
answering, and the screen went black.
**That is POST, not a hang.** Port 771 reopened **88 s** later, the unit answered
ping, and a VRAM screenshot (`dwt/screenshot.py --real`) shows the machine fully
back:
```
Terminal Manager V2.2 Copyright (C) 1991 Digital Equipment Corporation
Messages: Debug connection from IP host 100.103.255.254
Ethernet Address 08-00-2B-16-4B-5A IP 100.103.100.103
LAT Host Name LAT_08002B164B5A Memory Remaining: 4M
```
with the documented `Ethernet Port Error - 24` clean-boot banner (section 65).
So a taken-over unit **can hand itself back without a power cycle**, which was
the point of the command.
**Correction, recorded on purpose.** An earlier reading of this same run called
it "black and hung, needs a power cycle", because the observation was taken
inside the ~90 s POST window. That conclusion was wrong, and it is the exact
mistake this project's own rule 3 warns about — one sample, taken early, reported
as a property. The screen being black is normal: the reset path reprograms the
video window (`0xC00000B0`, `0xC0000100` in the trace above) and does not
re-enable the display until POST is done.
`vtcmd.py reboot` therefore prints the expected ~90 s and warns not to power
cycle during it. `jump` and `reboot` both transmit their reply and wait for the
descriptor to complete before transferring control, so the host always gets its
acknowledgement first.
+4
View File
@@ -190,6 +190,10 @@ def main():
return 0
if a.cmd in ("jump", "reboot"):
if a.cmd == "reboot":
print("rebooting: the screen goes black while POST runs; the OS is")
print(" back in about 90 s (measured 88 s) and rdebug :771 returns")
print(" on its own. Do not power cycle it during that window.")
cmd = 4 if a.cmd == "jump" else 5
status, data = request(sock, a.iface, cmd, a.addr, 0, a.timeout)
if status is None: