Bootable programming environment with lisp and x86. Hand-written in assembly.

About bootstrap-os


This code will work on any x86 CPU made between 2020 and 1981 with EGA support. So any modern x86 PC with BIOS support. I believe the earliest machine it would work on is the original 1981 IBM PC with a 1984 EGA card expansion.

It works on real hardware as well as qemu for emulation and debugging.

Comes with library code to create your own assembly projects that work on real hardware, as well as a reference manuals downloader script and I even added pdf bookmarks to an old IBM BIOS manual PDF.

Check out the Github for more: https://github.com/fsmv/bootstrap-os

Read more
Filters

Recent Activity

I have a todo list I'm slowly working on to call a new release finally with the lisp interpreter. It's nearly done except for finishing tests and a tutorial text file I'm going to embed. I'm also going to embed the hex editor I already wrote and let you just jump to arbitrary memory locations from lisp for bootstrappability.

I'll make an improved version of lisp in a later release. Another release will be finishing the assembler which I actually started before lisp. I've also wanted to do a bit of file saving and loading at some point and other nice to have features.

I got slightly distracted in a good way though. I've obtained an IBM 5150 Personal Computer. It's the first machine that has 16 bit x86 and BIOS which lasted from 1981 to 2020 officially. I'm going to run bootstrap-os on it and show that I have compatibility back to 1981.

I ran my bootable x86 assembly lisp interpreter test suite on my phone in termux. Randomly thought it might be possible and honestly I'm surprised. I think it's actually possible to do the display too but I haven't gotten it working yet.

I got GitHub actions working today. Somehow it was possible to run my hand written 8086 assembly lisp interpreter test suite and pipe out the status and output text to the website.

I also have a very nice debugger setup from before. It's amazing to have such nice tools for such low level code.

This is totally usable for other bootable projects to work on real hardware too.

Originally I planned for this project to be an assembler, then I made the hex editor first because it was simpler. I got a gap buffer text editor working, and most of an x86 assembler then life got in the way. I had only officially released the hex editor.

A while later I read Paul Graham's essay on writing lisp in lisp (https://paulgraham.com/rootsoflisp.html you have to download and read the postscript file) and I became interested in the idea of it. I realized it's the perfect thing to use if I want a high level language in bootstrap-os, it's much simpler than C (there's a 100 lines (!) of code in C implementation of lisp that helped me a lot https://github.com/Robert-van-Engelen/tinylisp), and actually the lisp interpreter is even simpler than the x86 assembler.

So I ended up trying to implement lisp in x86 in one weekend and actually got pretty close to getting it done but ended up having to finish it up a little while later.

I never ended up actually releasing it yet because I hadn't gotten it to a very nice place with full error messages etc and it took a long time thinking about what is actually the most minimum set of things required in a lisp implementation. I read McCarthy's paper and thought about it a lot and ended up with what I have almost done now.

Today I'm working on putting together a full release with the lisp text editor and the hex editor integrated as one binary. I also decided to write a test suite since I didn't want to spend the time to test it and not write down the work.

So I've got a pretty good sized todo list but hopefully I can get a release done relatively soon!

Attached is a demonstration of defining numbers even though the interpreter doesn't support integers at all!