I connected my RC2014 to the internet

304 views
Skip to first unread message

Grant Colegate

unread,
Dec 15, 2025, 9:38:45 PM12/15/25
to RC2014-Z80
I've bridged the RC2014 to the internet through a WiFi-to-SLIP gateway running on the wifi module and a TCP/IP stack running natively on CP/M.

You can view a page describing it all served by my RC2014 here: http://kobol.thelanbox.com.au (if its on).

The RC2014 isn't just responding to HTTP over serial, I've implement a TCP/IP stack and HTTPD to serve up files from the compact flash. Just the right kind of pointless fun :D

Grant Colegate

unread,
Dec 15, 2025, 9:58:14 PM12/15/25
to RC2014-Z80
I didn't realise port 80 was blocked. My bad. Use this link: http://kobol.thelanbox.com.au:8080

Ed Brindley

unread,
Dec 16, 2025, 6:42:05 AM12/16/25
to RC2014-Z80
Fantastic work!

Ed Silky

unread,
Dec 16, 2025, 1:00:54 PM12/16/25
to rc201...@googlegroups.com
I concur, excellent job! And the page looks nice too. Close to something you would have seen in the '90s.

--
You received this message because you are subscribed to the Google Groups "RC2014-Z80" group.
To unsubscribe from this group and stop receiving emails from it, send an email to rc2014-z80+...@googlegroups.com.
To view this discussion, visit https://groups.google.com/d/msgid/rc2014-z80/74b80d95-70a9-40d3-a8b9-316618e4f8e9n%40googlegroups.com.

Martin Giese

unread,
Dec 16, 2025, 1:36:45 PM12/16/25
to RC2014-Z80
Nice, well done :-)

It really does look almost like a web page from the 90ies.  The wavy Uncode emoji didn’t exist at that time though.  If you replaced that by a sizeable GIF animation that hogs most of the bandwidth, then you’d really make us all feel 30 years younger ;-)

Martin  

Mark Pruden

unread,
Dec 16, 2025, 11:10:43 PM12/16/25
to RC2014-Z80
Amazing

Grant Colegate

unread,
Dec 16, 2025, 11:19:33 PM12/16/25
to RC2014-Z80
Thanks folks!

Ironed out some kinks and now it's running much better. Still has times where the ping-pong of the slip gateway desyncs but it's not too bad. Cannot complain about 2KB/s!

Benchmarking kobol.thelanbox.com.au (be patient).....done


Server Software:
Server Hostname:        kobol.thelanbox.com.au
Server Port:            8080

Document Path:          /
Document Length:        3200 bytes

Concurrency Level:      1
Time taken for tests:   16.203 seconds
Complete requests:      10
Failed requests:        0
Total transferred:      32660 bytes
HTML transferred:       32000 bytes
Requests per second:    0.62 [#/sec] (mean)
Time per request:       1620.256 [ms] (mean)
Time per request:       1620.256 [ms] (mean, across all concurrent requests)
Transfer rate:          1.97 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:      103  107   1.4    107     109
Processing:  1486 1513  27.1   1503    1565
Waiting:      220  222   1.7    222     225
Total:       1592 1620  26.4   1610    1673

Phillip Stevens

unread,
Dec 17, 2025, 12:08:43 AM12/17/25
to RC2014-Z80
On Wednesday, 17 December 2025, Grant Colegate wrote:
Ironed out some kinks and now it's running much better. Still has times where the ping-pong of the slip gateway desyncs but it's not too bad. Cannot complain about 2KB/s!

Looks very nice!

There's some code by Adam Dunkels, that implements IP for micro controller 8-bit devices (called uIP, unsurprisingly).

He built some additional apps that might be useful to have a look at, like NTP, DHCP, SMTP, and TELNET for example, to add additional capabilities to your implementation.
It might be useful to set the correct Internet time on the RC2014 (with NTP) when your server first boots up.

Cheers, Phillip

Grant Colegate

unread,
Dec 17, 2025, 7:59:43 AM12/17/25
to RC2014-Z80
I've added a jpeg that progressively loads. It really does feel like the 90s now XD

Spencer Owen

unread,
Dec 17, 2025, 8:21:59 AM12/17/25
to rc201...@googlegroups.com

This is absolutely awesome. It is a little bit slow, but I will put that down to the NBN in Australia :-)

Apologies if it got a load of traffic over the last couple of hours. That would be my fault for sharing the link on Mastodon. Everybody on there loves it!

Spencer

Grant Colegate

unread,
Dec 17, 2025, 8:30:06 AM12/17/25
to RC2014-Z80
Glad you like it! We should really remove the 1ms character delay from the NBN ;)

All the traffic forced me to debug some issues with port reuse among other things. 

Bruce Skelly

unread,
Dec 17, 2025, 1:31:16 PM12/17/25
to RC2014-Z80
Simply awesom.

Ed Silky

unread,
Dec 17, 2025, 10:33:16 PM12/17/25
to rc201...@googlegroups.com

asmagi...@gmail.com

unread,
Dec 18, 2025, 5:25:59 AM12/18/25
to RC2014-Z80
Impressive! Takes me back... add some modem handshake noises (probably too big to be reasonable, though) and it would be like being there!

Grant Colegate

unread,
Dec 22, 2025, 9:37:15 AM12/22/25
to RC2014-Z80
Debugging all the random hangs and slip desyncs in this has been fun. I've managed to reduce latency significantly and got peak transfer up to 2.8KB/s.

Taking advantage of C/PM's read buffer of 60 bytes was a great win. It allows me to burst the TCP/IP headers at 115200bps before backing off with a byte delay. This means SYN/ACK/FIN etc are all sent at full speed.

I think I could get more speed out of it by supporting packets larger than the internet minimum MTU to reduce overhead at the expense of RAM.

Concurrent connections have gone from possible to reliable which is awesome!

Benchmarking kobol.thelanbox.com.au (be patient).....done

Server Software:
Server Hostname:        kobol.thelanbox.com.au
Server Port:            8080

Document Path:          /
Document Length:        3328 bytes

Concurrency Level:      4
Time taken for tests:   39.332 seconds
Complete requests:      25
Failed requests:        0
Total transferred:      84850 bytes
HTML transferred:       83200 bytes
Requests per second:    0.64 [#/sec] (mean)
Time per request:       6293.148 [ms] (mean)
Time per request:       1573.287 [ms] (mean, across all concurrent requests)
Transfer rate:          2.11 [Kbytes/sec] received


Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:       54  514 139.1    500     690
Processing:  2421 5556 682.8   5730    5821
Waiting:      337  776 133.3    794     951
Total:       3107 6069 678.9   6271    6281


Alan Cox

unread,
Dec 22, 2025, 10:37:49 AM12/22/25
to rc201...@googlegroups.com
If you are willing to get fancier the way Apple solved the similar problem for Localtalk was to send a short header (which fits in the UART internal buffer), then when the receiver see it it acks it and the receiver spins on the uart for a short while waiting for the packet to slam into it at high speed, then goes back to normal interrupt behaviour. If a packet doesn't turn up it times out.


Ed Silky

unread,
Dec 22, 2025, 1:30:49 PM12/22/25
to rc201...@googlegroups.com
Hi Grant,
It's great that you got this running and have made improvements.

In general, I'm not a fan of poling, but I agree with Alan, doing short stints of poling when data really is expected to arrive in a burst can help speed things up.

-Ed

Grant Colegate

unread,
Dec 22, 2025, 8:17:11 PM12/22/25
to RC2014-Z80
That's a great idea! I'm currently hooking into bdos which has made integration simple but has meant I lack a significant amount of control over the serial interface. Maybe disabling interrupts and then interacting with the serial port directly would be possible? Sounds like a fun rabbit hole to dive into!

Phillip Stevens

unread,
Dec 23, 2025, 8:48:59 AM12/23/25
to RC2014-Z80
On Tuesday, 23 December 2025, Grant Colegate wrote:
That's a great idea! I'm currently hooking into bdos which has made integration simple but has meant I lack a significant amount of control over the serial interface. Maybe disabling interrupts and then interacting with the serial port directly would be possible? Sounds like a fun rabbit hole to dive into!

I'm not sure whether you moved on from the punch and reader ports you mentioned using the stdio C print functions in z88dk, and are already using the CP/M BDOS directly?

Anyway, in case it is useful and you aren't doing it already, you can also use BDOS C calls directly from z88dk too. There are also BIOS C calls, to get you even closer to metal.
Using these options you might get enough improvement, without needing to rewrite your own BIOS serial interfaces.

The default RC2014 PRO CP/M serial is polling on the transmit side and interrupt based on receive. So there's only a little that can be improved, and then you want to dig deep into implementing Alan's suggestion for targeted receive polling.

Hope this helps,
Merry Christmas
Phillip

Bill Shen

unread,
Dec 23, 2025, 9:18:16 AM12/23/25
to RC2014-Z80
Another approach first mentioned by Phillip Stevens is ‘turbo’ to 14.7mhz,   https://groups.google.com/g/rc2014-z80/c/2Krf2KmV7yk/RC2014 is conservatively designed so its clock can be reliably doubled.  The last entry of the topic is my simple modifications to the clock module to achieve the turbo function.
Bill

Reply all
Reply to author
Forward
0 new messages