Simple 4-bit virtual computer
Switch branches/tags
Nothing to show
Clone or download
Fetching latest commit…
Cannot retrieve the latest commit at this time.
Permalink
Failed to load latest commit information.
doc
src
.gitignore
LICENSE
README.md
makefile
run

README.md

Comp

Simple 4-bit/1 Hz virtual computer for learning purposes

screenshot

For quick start see HOW TO RUN.

Memory

instructions - 4 bits
  |  +-- addresses - 4 bits
  v  v
----***-  <- 0  ----
--*-**-*  <- 1  ---*
---***--  <- 2  --*-
---*****  <- 3  --**
----***-  <- 4  -*--
---***-*  <- 5  -*-*
----**--  <- 6  -**-
---****-  <- 7  -***
-***---*  <- 8  *---
-*--****  <- 9  *--*
--------  <- 10 *-*-
--------  <- 11 *-**
--------  <- 12 **--
-------*  <- 13 **-*
-------*  <- 14 ***-
<OUTPUT>  <- 15 ****
  • Execution starts at the first address (0).
  • Execution stops when program reaches last address (15).
  • Whatever gets written to the last address is sent to the printer.
  • When reading from the last address (15), we get a random byte value.
  • CPU has one 8 bit register.

Instruction set

  • READ ---- - Copies the value at the specified address into register.
  • WRITE ---* - Copies value of the register to the specified address.
  • ADD --*- - Adds value at the specified address to the value of the register, and writes result to the register. If the result is bigger than the maximum possible value (255 = ********) then 255 gets written.
  • SUBTRACT --** - Subtracts value at the speicfied address from the value of the register, and writes result to the register. If the result is smaller than 0 then 0 gets written.
  • JUMP -*-- - Changes the value of the program counter to the specified address, meaning that in the next cycle execution will continue at that address.
  • IF MAX -*-* - Jumps to the specified address if register has value 255 = ********.
  • IF MIN -**- - Jumps to the specified address if register has value 0 = --------.
  • SHIFT R -*** - Moves every bit of the register one spot to the right. This way rightmost bit gets lost, and a leftmost becomes '-'. This is the only instruction that doesn't use the address part, making the last four bits irrelevant.
  • Any instruction that is not defined above is interpreted as READ ---- instruction.

How to run on…

Windows

  • Install Tiny Core Linux on VirtualBox using this instructions.
  • Run the UNIX commands.

UNIX

$ git clone https://github.com/gto76/comp-cpp.git
$ cd comp-cpp
$ ./run

Other versions

  • Mark II, model with separate address space for code and data, and with more instructions. Programs can be saved and loaded and it can run without the interface (instead of a printer, it then uses stdout). Also input can be piped in.

screenshot