Trying out BASIC
A little while ago, Usborne released some of their classic 80s programming books for free. While it may not a have been a complete collection, it's still pretty cool to be able to experience such an elegant piece of computer science history.
The books were aimed at teaching kids to program in the Beginner's All-purpose Symbolic Instruction Code (BASIC) programming language. It's a high level general purpose language that aimed to lower the barrier to entry to other languages at the time like FORTRAN.
Since quite a number of readers were so fond of these books, I wanted to get a sense of what they experienced exploring the material. This motivated me to completely ignore the disclaimer on Usborne's website -
These books were written for 1980s computers such as the ZX Spectrum and BBC Micro. The programs will not run on modern computers...
and give BASIC a try by reading and entering some of the examples given in the books.
The first step was getting a basic interpreter or compiler. This was not as straight forward as one would assume because there are many flavors/dialects of Basic. Some of the books even had to provide short basic conversion charts to help readers write BASIC code compliant with their platform.
- Chipmunk Basic
- Free Basic - I ended up going with this
- Brandy Basic
I ended up going forward with FreeBasic not for any reason in particular other than it just seemed like the best one to go with. Installing the tools was simple enough.
By referencing instructions in their installation guide, I wrote a small vagrant script which provisions a VM, installs the needed dependencies as well as downloads and Installs the compiler
Vagrant.configure(2) do |config| config.vm.box = "ubuntu/trusty64" config.vm.provision "shell", inline: <<-SHELL sudo apt-get update sudo apt-get --assume-yes install gcc libncurses5-dev libffi-dev libgl1-mesa-dev libx11-dev libxext-dev libxrender-dev libxrandr-dev libxpm-dev wget "http://downloads.sourceforge.net/project/fbc/Binaries%20-%20Linux/FreeBASIC-1.05.0-linux-x86_64.tar.gz" tar zxf FreeBASIC-1.05.0-linux-x86_64.tar.gz cd FreeBASIC-1.05.0-linux-x86_64 sudo ./install.sh -i SHELL end
Programming in BASIC
It's pretty simple enough getting started.
You write your code in a
*.basfile, compile by invoking
fbcon said file, then run the generated executable to see the output.
Interestingly, unlike most modern programming languages, BASIC is not case sensitive meaning that the
PRINT "B: Do you feel in charge?" print "D: ... I paid you a small fortune!" Print "B: And this give you...power over me?"
As expected, there were issues running examples used in the book straight out of the box. Using the default settings, some commands like
$ suffixes didn't work.
Using the default settings, some commands like
$suffixes didn't work.
This meant that this examples such as this wouldn't compile
LET B = 365 LET D$ = "DAYS IN THE YEAR" LET L$ = "EXCEPT LEAP YEAR" PRINT B PRINT D$ PRINT L$ END
but instead return an error message similar to the following
HelloWorld.bas(1) error 145: Only valid in -lang deprecated or fblite or qb, found 'LET' in 'LET B = 365'
To resolve this we will have to compile using the
fblite language dialect using the
$ fbc -lang fblite HELLO.bas
Once compiled, you can run the program using the generated executable.
$ ./HELLO 365 DAYS IN THE YEAR EXCEPT LEAP YEAR
After playing with it for a while, a good chunk of the code works. However, there are still a couple of compatibility issues. For example,
PRINT TAB(15, 9)
doesn't compile since there is no tab function that allows a row offset to be specified.
PRINT TAB(15); "Hello World" > Hello World
In conclusion, I guess part of the appeal is figuring out ways of porting over and adapting ideas learned from the text over to your own platform- Guaranteed to be hours of fun :)
Footnotes and References
See this Reddit thread for instructions on how to download them all at once ↩︎
Discussion on HackerNews and r/programming ↩︎
These links worked as of the time of this writing, The previous direct download links were removed and replaced with Google Drive links. ↩︎
This is not nor does it pretend to be a complete list. ↩︎