Rather than implement a LOGO interpreter I wanted to do it a slightly different way to learn some useful stuff along the way, so I decided to implement robots as a program running on a virtual CPU. I designed an instruction set and corresponding assembly language, wrote a processing engine that could run multiple robot programs at once, wrote an assembler to go from assembly to compiled robots. Next on my list was a compiler that would do LOGO -> robot assembly.
There was a strong ARM/RISC influence to the instruction set/assembly language as I'd been using Acorn Archimedes machines at college in the early 90's.
I then built a control system on top of the game engine that would run all of the robots against each other in all combinations and provide a league table of which robot came out best. The end goal was to stick it all on a website and allow people to submit their own robots and see where they came in the league table. They'd also be a discussion forum on programming tips/tricks, and for people to write compilers that would take other languages as produce appropriate assembly language.
I definitely learned a lot whilst doing it first time. One of the assignments in my first year at University (Comp Sci) was to design an instruction set for a basic CPU that would be able to be programmed to perform a certain bunch of tasks. It's quite easy when you've got programming experience in Z80, 6502, 68000, x86 and ARM, and you've designed/implemented at least one of your own already.
Other things I remember that were useful were writing my own PRNG (there was an instruction to get a random number) so that I could have individual PRNGs for each robot (and the game engine) all derived from a single 'game' seed number which made each game (with random starting positions) deterministic and repeatable.
Creating a two-stage assembler (thanks to years of typing "FOR loop% = 0 TO 3 STEP 3", "[ OPT %loop", etc), compiler design (for LOGO -> assembly), maths for doing intersection of two lines, intersection of a line and a circle, integer instructions, floating point instructions (and implementing this in a portable way), etc.
In '94 I'd hacked both an X GUI and a linux SVGAlib interface onto it so you could watch the games play out. Later on I'd even came up with a dissertation proposal that used it as a fitness function for robots created by genetic algorithms but decided against it after discussion with the tutor (no less than Dr Noel Sharkey who later sat as a judge on the UK TV version of Robot Wars).
I may finish it one day, and 10 people may remember the game and be interested in writing robots for it, but that bit doesn't matter one bit. It's my side project and I kind of enjoy doing it (or even just thinking about it) probably more than the feeling I'd get if it was finished and done.
Nothing is uploaded at the moment (I'll start to add things once I've cleaned it up and sorted it out) but I've created a github repository for it https://github.com/alexkus/robotarena if anyone wants to watch it and keep an eye on the (slow) progress.