From e51c7b94cfc19a0da0ecb8435c6560c8260b3ef3 Mon Sep 17 00:00:00 2001 From: Arti Zirk Date: Fri, 30 Oct 2026 16:24:06 +0200 Subject: [PATCH] NETWORK_REPORT: the broadcast payload works on the real VT1200 (TX 5, RX 5) Panel read off the unit after loading lance_bcast.coff with the host sending 0x88B5 broadcasts: TXD=5, RXF=5, ET=0x88B5, CSR0=0x0073 (STRT|TXON|RXON|INEA) and REST=0x0073. First exchange with a real peer using only our own driver code. Two display bugs found by reading it: the glyph table had no 'X' (so TXD/RXF printed as 'T D'/'R F') and the three MAC words were drawn on top of each other. Both fixed: X added, MAC on three rows, REST moved to y=878. --- harness/mame/NETWORK_REPORT.md | 43 +++++++++++++++++++++++ harness/udpstream/build/lance_bcast.coff | Bin 6301 -> 6471 bytes harness/udpstream/lance_bcast.c | 13 ++++--- 3 files changed, 52 insertions(+), 4 deletions(-) diff --git a/harness/mame/NETWORK_REPORT.md b/harness/mame/NETWORK_REPORT.md index bd80a6c..e71c0ff 100644 --- a/harness/mame/NETWORK_REPORT.md +++ b/harness/mame/NETWORK_REPORT.md @@ -4436,3 +4436,46 @@ transmissions. * Practical consequence: a payload can now speak any Ethernet protocol it wants (ARP, IP, a custom one) without the OS's stack, which is the foundation for a wire-based loader or a faster frame path than the OS's ~20 datagrams/s. + +## 67. Same payload on the real VT1200: send and receive both work + +`harness/udpstream/lance_bcast.coff` was loaded on the unit with +`dwt/loader/hostload.py`, while the host sent `0x88B5` broadcasts at it from its +own NIC. The panel reads (some glyphs were missing at the time, see 67.2): + +``` +T D 0005 -> TXD = 5 frames transmitted +R F 0005 -> RXF = 5 frames received +ET 88B4/88B5 -> last ethertype: our own 0x88B5 broadcasts +MAC … -> last source MAC (row overlapped, see 67.2) +CSR0 0073 -> INIT|STRT|TXON|RXON|INEA: the chip is running +REST 0073 -> hand-back unchanged +``` +plus five progress dots, i.e. the payload ran to the end. + +### 67.1 What it shows + +* **Transmit works on real silicon**: five descriptors armed by our code + completed. (`TXD` should be 6; one frame did not complete inside the payload's + wait window on the real chip, so the count is 5 — the same wait works in MAME + because the model services the demand immediately.) +* **Receive works on real silicon**: `RXF = 5` — five frames sent by the host + were delivered into our RX ring, and the early-stop threshold is exactly five, + which is why the number is 5 rather than "many". The recorded ethertype is + `0x88B5`, i.e. the frames the host was sending. +* `CSR0 = 0x0073` is a healthy chip (`STRT`, `TXON`, `RXON`, `INEA`), so the test + left it running. + +This is the first time the payload has exchanged packets with a real peer, and it +does so with no ROM code: our init block, our rings, our descriptors, our +`TDMD` kicks. + +### 67.2 Two display bugs found by reading the real panel + +| symptom | cause | +|---|---| +| `T D` / `R F` instead of `TXD` / `RXF` | the glyph table had no **`X`** — `gi()` mapped it to an empty slot, so the letter simply did not draw | +| MAC row a smear of overlapping text | the three 4-digit MAC groups were drawn at x=312/384/456, but each group is 192 px wide, so they were painted on top of each other | + +Both are fixed: `X` added, and the MAC is now one word per row (`MAC0`/`MAC1`/ +`MAC2`) with `REST` moved to y 878. diff --git a/harness/udpstream/build/lance_bcast.coff b/harness/udpstream/build/lance_bcast.coff index 6fc934ace9c441df1200a9611c7e95896f9112d7..c9df1b515f55b5d28b1790581d42486d2b42de68 100644 GIT binary patch delta 1475 zcmaJ>Pe>F|82{dAuFu%b)>{8yF>TUG7VS{>2V6XKGVzvBI=ikTTC2P4E>V$8&>@sz zQs1oz1hLF)oe(;dhbaONZ7K*IW0A#ENSChG_hxpcF_#^9@6G&v-|zc=-wgA;XkS0C zOhY9+|5CWU8vr;10L@TAs>wR&IzI4g3P4;?34ls;T_vH6d@o}XHU_X|KL6W9ybTRS zGf_ObhA+RW@qu=LwDF_^QQwTpHV) z&(S{i=}6t`Lr)hG@|T!V{eT}=X$wCFX`j&B!PcnAk010jKlZIBu|`ySJ5;hc-|E*` zE6;mUW6Q@iwnMk74bn3!c`ZIi+d*U97}bqYDn=A&gc?M1BI5O!!Nu>=Y2-H?UcI3) z%vQszVI2y@+*c=R);&#nCx^4!2IQzFaH0cg$s6fn1OBE9Hl0U0dw}M$0u7^AZ8k?Y zOl}07N?yH_W&Hsq(#1n|X%a&=Fl6sQh*ec2Hf~qtc;0N#hZBaZO&Wo&G4zjhbF8DTfI6`7b42|AysxekCiOk zj#bGY!*>++SLpAy2n~DosDa<-+jYsCzowE1ed;kL@hy7txJzDmcB^y6M6xC__#gjh z$>Eif0lgFbWfQbb4wUEp$+En7`Eij~N;}+Ia~zg582(zGPio~G$TvT+478Ba2Er|_ z4%o%Om1c1P;Jy2wcMS%n1zL&0J_Z^Eae;jg1O;73EQr{t`m+lEMtp1tAVp&_Ihm34 zWd}*g(IE+^%UcH-lH<|)66i|~G8T=;6ER7D?I3A6F2^uW)!f=!R%OerY9S02sXl$LAV0}j^Qq)kDYD0#p>FICI=N{10Ez0 zR@1o&(rEo`ORDrH3PFVk#=4+?KrF?RlwQ25@9cJ`se~--&dl$5=KWxqX&ifa)Vz;+ zQ0>FU)sr!Vh7dx7$cF>Cf#?z};Hj1nvggYfp)#gRWt=SNHwup8G0>g$&Lb;J|u(AYAhH}*y%F*B{ZcYu^>DBMSb^kzW zl>2Jm>ZnO937jN@EvANA3bP{vX-{r}T-zn{Z5u>^aMoOttU1~h#J8qKS-dx9wiIsp zNpfIW1Iy+vi<>o$J?>?7xgvORyBe2M!9TU}7O6sxFysjPcn3}yK3>OGZ#3*OFaByI zn#5*u#|Jhyb_-&=-1C<4-+Fi-`m;iQrzlbUn}m`&{&H3g(KGNv$vr#E0(-`Up9&K25kMTH#;R6cjtb5{2T zT7!4p0)}zt0+ivl4%m;_i9Pl_Ld$GO?vv;e%g7^xl(ZinKKBlzJnc{V~?nlv%1dHFA9=1X7YgOf*{6JzMxO5^qC;}f;J0R h4>bGnVB!eBHQfH%uNukeSQnQM+uxsn+k~b1<$o0