Skip to content

Latest commit

 

History

History
66 lines (46 loc) · 2.44 KB

README.md

File metadata and controls

66 lines (46 loc) · 2.44 KB

Es wird ja fleißig gearbeitet und viel programmiert, aber es müsste mal wieder einer einen gescheiten Gedanken haben. - abgeändert, ursprünglich von Rudolf Virchow

Koopman TOY CPU Interpreter

This is a CPU interpreter, based on the specification of Phil Koopmans paper: Microcoded Versus Hard-wired Control.
For more details, have a look at /doc or press toy_cpu -h (for help) or toy_cpu -a (for cpu architecture overview)

Image of main window on linux Image of main window on Windows

Build

The project can be built by using make.
You do not have to pay attention to external dependencies. This is standard C99 code.

Usage

Transfer the RAM content to the machine via a text file.
The program call is: toy_cpu SOURCE.toy
The following is the specification for a 16 BIT machine word. With it, you can create the RAM content.
(Do not forget: this is a pure John von Neumann architecture, data and program are in the same memory)

OP_Code 0 (0000b):	   STORE<12 BIT ADDRESS>
OP_Code 1 (0001b):	   LOAD	<12 BIT ADDRESS>
OP_Code 2 (0010b):	   JMPZ	<12 BIT ADDRESS>
OP_Code 3 (0011b):	   ADD	<12 BIT ADDRESS>
OP_Code 4 (0100b):	   SUB	<12 BIT ADDRESS>
OP_Code 5 (0101b):	   OR	<12 BIT ADDRESS>
OP_Code 6 (0110b):	   AND	<12 BIT ADDRESS>
OP_Code 7 (0111b):	   XOR	<12 BIT ADDRESS>
OP_Code 8 (1000b):	   NOT	<12 BIT undefined>
OP_Code 9 (1001b):	   INC	<12 BIT undefined>
OP_Code 10 (1010b):	   DEC	<12 BIT undefined>
OP_Code 11 (1011b):	   ZERO	<12 BIT undefined>
OP_Code 12 (1100b):	   NOP	<12 BIT undefined>
OP_Code 13 (1101b):	   NOP	<12 BIT undefined>
OP_Code 14 (1110b):	   NOP	<12 BIT undefined>
OP_Code 15 (1111b):	   NOP	<12 BIT undefined>



BIT |15 14 13 12|11 10 9 8 7 6 5 4 3 2 1 0|
	---------------------------------------
	|  OP-CODE  |		ADDRESS	          |
	---------------------------------------

This machine has the following registers:

  • 16 BIT Instruction Register (4 BIT OP, 12 BIT Addr)
  • 16 BIT Accumulator
  • 12 BIT Program Counter

Example: 0001000000001010 at RAM position 0
0001 means: LOAD the content of ADDRESS 000000001010 into the ACCU

Licence

This program by Michael Krause is licenced under the terms of the GPLv3.