Toy emulator written in C
Go to file
2018-02-21 18:04:07 +01:00
doc Add link to the paper. 2018-01-15 19:26:06 +01:00
src improve ASCII-Art 2018-02-21 18:04:07 +01:00
.gitignore Change the program name and rework spelling 2017-10-04 23:59:35 +02:00
LICENSE Add LICENSE file 2018-01-15 19:38:56 +01:00
makefile Compile statically and optimize for size 2018-02-21 17:55:46 +01:00
README.md Improve parsing possibility of program output 2018-02-04 14:39:42 +01:00

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)

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.