Finally, you can write your web sites in ZX Spectrum BASIC, using my new project, ZX Spectrum BASIC CGI server .
How it works
Here’s what happens when a request comes in:
- Apache HTTPD receives the request, and runs the CGI script that does the magic.
- The CGI script (written in Bash) generates some BASIC code that provides the HTTP meta-vars (e.g. PATH_INFO for the path of the request) as DATA statements and wraps some other boilerplate around the code of the .basic file asked for in the request, and writes out another .basic file which is ready to be executed.
- Then it uses BAS2TAP (my mirror here) to create an audio tape file representing the program.
- Next it launches the Fuse spectrum emulator (inside an Xvfb wrapper to make it think it has a display), telling it to load from the audio tape and run the program.
- The program runs, and writes its HTTP responses to the Spectrum printer using LPRINT statements.
- Fuse uses very basic OCR to understand what characters are printed, and writes them into a text file.
- The CGI script monitors the output file, waiting for a line containing an end marker (“ENDSPECTRUMBASIC”). When it finds it, it kills the emulator (since it can’t made to auto-exit, I think).
- The CGI script sends the contents of the output file (minus the end marker) back to Apache, which returns it as a response.
Originally designed to demonstrate how Docker can help isolate other services from “interesting” dependencies, this became a bit of a labour of love.
I’ll never stop being grateful to the designers of the ZX Spectrum, or the authors of “Further Programming for the ZX Spectrum”.