@emard thanks for i2c info. I think my 12F board is skriptarnica from the early 2019 run, so I will check. My 85F is a blue Wattenrott.
My current ping time is 600ms, but I think I have a reasonable chance to get that down to 300ms. This is better than the Arpanet backbone from 1980, which had 1 second ping times (although "ping" did not exist yet). However, back then on a LAN ping times of about 50ms were achieved, using dedicated boards, that often had their own buffer memory and DMA circuits.
I'm thinking about using a ENC28J60 PMOD. This is available in a 28 pin 0.1" pin-through-hole package for a future retro board and the TI990 chips have a "cru" I/O bus that is pretty similar to SPI. Another route could be to run the ESP32 PPP link at 115K2 or something like that and use a sram (bram) buffer. I am too fond of the self-contained aspect of the ESP32 solution to let it go easily.
Is select/poll necessary? I thought that the original game just placed stdin into raw + nonblocking mode, which I think was tested to work. Output is to an ansi screen and is from a practical point of view not blocking the game's event loop. Is there more work to do other than debugging the game?
Of course we need the wrappers for select and poll at some time, but for this game I think it is not needed.
./tetris > /dev/tty1