A collection of learning projects that I'm working on with the goal of acquiring a better understanding of how computers work at the lowest level.
My ultimate plan is to build an 8bit breadboard computer. Most of the things here are heavily inspired by Ben Eater's 8bit computer.
The current plan is roughly as follows:
- build a VM that can run the same programs as Ben's computer - DONE
- build a hardware emulator for Ben's computer - IN PROGRESS
- come up with & implement some sort of improvement to Ben's architecture (most likely expand the available memory
- design the computer in some sort of circuit design&simulate software (most likely in Logisim or Digital)
- build the computer on a real breadboard
- explore PCBs and FPGAs
Considering I am learning as I go I expect the above to change.
As mentioned the goal is to learn as much as I can about how computers work on the lowest level. Ultimately I want to have a physical computer of my own. It will be based on existing architectures, but with some improvements or modifications of my own so I can call it my own.
This repository contains all the source code I will write for these projects and any other files I deem interesting and/or necessary for understanding of what's going on.
The main programming language I'm using is Go, that is simply because I'm working with it most at the moment and I feel comfortable enough using it. There are several programs in this repository, each is contained in its own folder and contains a README that explains how to use it. There is an overview of all of them below.
Contained in the vm
folder. An 8bit Virtual Machine that virtualises a Hopper computer.
Contained in the emulator
folder. An 8bit emulator that emulates a Hopper computer.
Contained in the assembler
folder. A simple assembler that assembles .hop files into binary files
that can be run with the VM or the emulator.
At the moment Hopper uses the same architecture as Ben Eater's 8bit computer. In the future this won't be the case and I will provide a detailed document explaining it at that point.
The easiest way to play around with Hopper is to clone this repository and then refer to each binary's README for instructions on how to run it.
A lot of the code is very simplistic and lacks error handling. This is on purpose. The project is not meant to be used for anything serious. It is purely a learning tool.