This project adds Internet connectivity to a 1980s BBC Micro using the Arduino MKR1000 with WiFi.
The BBC Micro can search the bbcmicro.co.uk archive for games disc images and loads them from direct from the web.
There is still more to do, but Chuckie Egg, Frak, Repton, Pac-Man, Knight Lore, Jetset Willy tested OK so far. :)
I got my first Arduino MKR1000 recently and noticed it fitted nicely into the 'ashtray' hole poked to the side of my BBC Micro keyboard (the hole has been there since the '80s...). So, I thought I'd try connecting them.
This project builds on Acorn community efforts to implement BBC Micro file system host in an Arduino. HostFS is very powerful - in this case it enables the Arduino to execute filesystem commands for the BBC Micro.
There are hundreds of games on bbcmicro.co.uk stored as Acorn DFS disc images (.SSD). The project enabled the BBC to support two new commands, *SEARCH and *MOUNT, that allow the BBC Micro to search for and mount any of these images as a virtual 'floppy disc'.
When the BBC Micro issues a *LOAD, it sends a request to the Arduino. By using an HTTP range request, the Arduino can load specific memory regions of the disc image from the web server - and relay them to the BBC Micro.
The Arduino needs to connect to your WiFi access point. You will need to define the SSID and password in the secrets.h file
In ArduinoHost.ino either edit the IP address, gateway and DNS defined in the code or remove them to enable DHCP client. Look in ArduinoHost.ino for this line:
//Edit this section for static IP, remove for DHCP
Edit as required, compile and upload to the Arduino MKR1000.
BBC Micro ROM
In our project, the BBC Micro becomes a file system client to the Arduino. In other words, every disc command you type in the BBC will sent to the Arduino to handle. This opens up a lot of possibilities!
The BBC micro has an internal PSU so mains voltages are present. Be sure to switch of the machine and be careful when working on it. I've found the BBC micro to be a robust machine, but any modifications or additions you make are at your own risk!
Connecting the Arduino to the BBC Micro
The Arduino is then connected to the BBC User Port for a UPURS connection- this gives us 115200 baud serial.
All signals be level shifted: 5v at the BBC and 3.3v at the Arduino - we do this with the bi-directional level shifter. On the BBC side, the ROM assumes RX and TX levels are inverted. We use an external hex inverter (SN74ACT14N) so the Arduino is presented with standard 115200 baud serial.
So you will be connecting your Arduino to a breadboard, and the breadboard to the BBC Micro User Port - for how to put the breadboard together see the Hardware Section.
With the BBC Micro powered on
- You should see HostFS:UPURS on boot up. If not, hit <break>+U
- Search bbcmicro.co.uk (limited number of results returned at the moment)
> *SEARCH ARCADI
- Select a disc image number to mount from the search results.
> *MOUNT 3
- Run game!
*SAVE currently sends BBC memory region to the Arduino serial montior.
So when in MODE 7, typing
> *SAVE A 7c00 8000
will send BBC screen to the Arduino console
This was my first MKR1000 project, and I'm pretty happy with the start!
But there's still lots to do. Lots of tidy-up, debugging and optimization still required. And many TubeHost functions still need to be implemented.
(And yes you can instead download games onto an SD card from a PC, and buy an MMC add-on for the beeb, but where's the fun in that!)
Email, web-browsing... teletext browsing!? There are a lot of possibilities...
Hopefully this project inspires more development in this area. :-)