docs/content/docs/introduction.md
Nicola Belluti 0ae6028c18
All checks were successful
Build and Publish / build (push) Successful in 44s
Reworded
2025-01-22 16:37:33 +01:00

106 lines
3.6 KiB
Markdown

+++
title = "Introduction"
weight = 100
+++
The *Little Computer* is a family of *Instruction Set Architecture* (ISA) based
on the Von Neumann architecture, created by [Yale N.
Patt](https://users.ece.utexas.edu/~patt/) and [Sanjay J.
Patel](https://sjp.ece.illinois.edu/) to teach their students about computer
architecture.
The processors in this group are extremely simple and they all feature a
*very* [RISC](https://en.wikipedia.org/wiki/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](https://reddit.com/r/lc3), a [Wikipedia
page](https://en.wikipedia.org/wiki/Little_Computer_3), an [online
emulator](https://wchargin.com/lc3web/) 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
{{% steps %}}
### 👷🏻 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](https://web.archive.org/).
### ◻️ 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](https://eater.net/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!
{{% /steps %}}
## Licenses
This project is entirely open source!
This documentation is distributed under the [Creative Commons
Attribution-NonCommercial-ShareAlike
4.0](https://creativecommons.org/licenses/by-nc-sa/4.0/) license and the source
code is distributed under the [GNU Affero General Public License
v3.0](https://choosealicense.com/licenses/agpl-3.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.
<br>
{{< hextra/feature-grid cols=2 >}}
{{< hextra/feature-card
title="Little Emulator"
icon="github"
subtitle="Check out the project's code!"
link="https://github.com/little-emulator"
>}}
{{< /hextra/feature-grid >}}