UpDATE^3: I FINALLY got the RVHE working with a two-way NATed UDP conversation with a host over the Internet. Well, OK, it seems to work half the time, it is unclear to me if this is an issue related to NAT or not, hopefully I can do some Etherealing tonight to double check.
SO: You have to, by hand, specify the RVHE gateway. No, DHCP won't set it. For example:
AND: You also have to, by hand, specify the RVHE gateway MAC address. No, DHCP won't set it. For example:
This kind of annoys me, because it means Touch won't be automagically plug-and-play without hooking up a serial connected terminal and setting the gateway IP and MAC. But at least I can prototype with it.
AND: The RVHE initially sets the UDP time-to-live (TTL) value to zero. This means if your packet will be dropped by the first router it hits.
Undocumented, it turns out the TTL is set by the byte at the packet header address plus 10 bytes. However, too high a TTL will break the packet header checksum routine (which also means your packets won't make it). So I suggest keeping the TTL at 70 (decimal) which should get you across the longest Internet connection, but doesn't appear to break the packet header checksum routine.
Where the 70 is the TTL.
AND: Let's not forget that the RVHE only receives UDP packets that start with the password in PASS0,PASS1,PASS2,PASS3, then "AB" (which is not documented). The password defaults to "RVHE". If instread you add "AA", it will only work with "autoanswer" (which is documented).
For example (from a host with Python):
So here is an entire program to send and receive packets:
12 IF D>0 THEN GOTO 10
15 PRINT "IP:",IP0,IP1,IP2,IP3
60 PAUSE 1000
85 PRINT "SENDING..."
86 PRINT SECONDS
95 GOTO 60
and in Bank 1:
1000 PRINT "INTERRUPT"
1020 PRINT "BANK= ";B
1050 PRINT BYTE(E),BYTE(E+1),BYTE(E+2),BYTE(E+3),BYTE(E+4)