For the last few weeks, I have been working on an app idea that I had been thinking about for a long time. Ever since I started going on multi-day hikes, I have been looking for a good solution to plan hikes in advance and navigate while doing them.
A while back, I decided to implement a self-hosted Forth interpreter/compiler for the ZI-28, my Z80-based computer. The previous version of the software consisted of a simple operating system written in assembly, with applications and games written in C. There were some things I was unhappy about. Writing the OS in assembly was slow and error-prone. Writing the applications in C was much faster and easier in comparison, but it required the use of z88dk, a big software suite that was difficult to set up and went against my goal of the whole project.
LLL is my first proper attempt at designing and implementing a useful and modern programming language. To give me some direction, I leaned heavily on the excellent Crafting Interpreters book by Robert Nystrom. I did however make some of my own choices when it came to language design and implementation. I also chose to implement the interpreter in Rust, which presented me with some additional challenges due to my limited knowledge of that language, but also allowed me to learn a lot of new things about it.
After writing my first small flutter app, I had a few ideas for more ambitious apps. Before tackling a big project however, I wanted to gain some more experience in state management and with building and connecting to a backend. The initial idea was to create a simple todo app with the tasks stored on a remote server.
Brainfuck is one of the most famous esoteric programming languages. It consists of only eight simple commands. While this makes it very difficult to write useful programs, it also means that writing an interpreter is very easy compared to regular languages.
The ZI-28 is my most ambitious project to date. My goal was to design and build an 8-bit computer that was usable for simple programs and games, and which could be easily expanded with hardware modules. Since I didn’t know a lot about the inner workings of a computer when I started the project in 2016, a lot of the design decisions were made as I went along. As a result, the computer will never be more than a one-off, and I would do a lot of things differently if I ever decided to design another computer.
In autumn of 2014, I wanted to develop a small electronic product to use as a christmas gift. I decided on an electronic dice with LEDs as the dots. With the push of a button, the LEDs play an animation to emulate the roll of a dice, before displaying a random number.
During my apprenticeship I once had to make a counter with a seven segment display made of individual 5 mm LEDs. This display inspired me to make a digital clock with four of those digits.
This is an implementation of Simon, a game where four lights blink in a sequence which has to be remembered and re-entered.