Introduction

Introduction

The Little Computer is a family of Instruction Set Architecture (ISA) based on the Von Neumann architecture, created by Yale N. Patt and Sanjay J. Patel to teach their students about computer architecture.

The processors in this group are extremely simple and they all feature a very RISC instruction set; they all have a 16-bit address bus and a 16-bit data bus, except for the latest architecture of the series – the LC-3b – which has an 8-bit data bus.

The most famous ISA of this family is without a doubt the LC-3, the third iteration of the architecture: on this specific ISA people made a subreddit, a Wikipedia page, an online emulator and it’s the easiest to find online using a search engine.

Why am I doing this?

The goal of this project is to make more people know about this family of ISAs, which I believe is ideal for learning about computer architecture, operating systems and programming languages.

Obviously, the focus will be on the last two iteration of the series, the LC-3 and LC-3b, as they are the most recent, the most comprehensive, and, in my opinion, the most interesting.

Roadmap

👷🏻 Writing of the Documentation

The first step is to create a comprehensive documentation with a lot of sources.

There isn’t much information available about these architectures, so it is essential to refer to the original books and save what can be found online using the WayBack Machine.

◻️ Creation of a Developement Suite

Once the documentation is complete, we can use it to create simple command-line tools, such as an emulator and an assembler.

◻️ Developement of a GUI Learning Environment

After developing a basic developement suite, we can create a graphical learning environment that can replace the outdated software created by the original authors.

It would be great to create an environment where users can both write assembly and execute it, rather than having two separate apps.

💪🏻 Physical CPU with an FPGA

Inspired by Ben Eater’s series on the 6502, we could take the program and load it into an EEPROM to be executed by a physical version of our CPUs, maybe on a breadboard!

It would be interesting to create a small custom motherboard with some sort of I/O interface to enable our computer to communicate with the outside world.

💪🏻 Development of an LLVM Backend

Let’s access more modern programming languages such as C and Rust!

💪🏻 Creation of a small UNIX-like Operating System

💪🏻 Software Porting

DOOM, MS-BASIC, Tetris… the more, the better!

Licenses

This project is entirely open source!

This documentation is distributed under the Creative Commons Attribution-NonCommercial-ShareAlike 4.0 license and the source code is distributed under the GNU Affero General Public License v3.0. Feel free to take my work, study it, modify it, improve it and redistribute it ;)

If you feel generous, please open a PR on the project’s GitHub page so that everyone can benefit from your contributions.