Title | toysim (ArchC functional simulator for the Princeton TOY machine) |
Author | Nikolaos Kavvadias 2010, 2011, 2012, 2013, 2014 |
Contact | nikos@nkavvadias.com |
Website | http://www.nkavvadias.com |
Release Date | 02 December 2014 |
Version | 0.0.4 |
Rev. history | |
v0.0.4 | 2014-12-02 Added project logo in README. |
v0.0.3 | 2014-11-02 Documentation corrections. |
v0.0.2 | 2014-10-30 Project cleaned-up and updated for Github. |
v0.0.1 | 2010-12-11 First public version. |
This is the ArchC (http://www.archc.org) functional simulator model for the Princeton TOY processor. The Princeton TOY machine is a 16-bit educational RISC processor with only two orthogonal encodings. A description of the basic ISA is available in the form of the TOY reference card.
This model has the system call emulation functions implemented, so it is a good idea to turn on the ABI option. It should be noted that this capability is currently untested.
The toysim distribution includes the following files:
/toysim | Top-level directory |
AUTHORS | List of toysim authors. |
LICENSE | The modified BSD license governs toysim. |
README.html | HTML version of README. |
README.pdf | PDF version of README. |
README.rst | This file. |
VERSION | Current version of the project sources. |
defines_gdb | Macro definitions for GDB integration. |
modifiers | Instruction encoding and decoding modifiers. |
rst2docs.sh | Bash script for generating the HTML and PDF versions of the documentation (README). |
run_tools.sh | Script for automating the build of the simulator and the associated binary utilities (binutils) port. |
toy.ac | Register, memory and cache model for TOY. |
toy_gdb_funcs.cpp | GDB support for the TOY simulator. |
toy_isa.ac | Instruction encodings and assembly formats. |
toy_isa.cpp | Instruction behaviors. |
toy_syscall.cpp | OS call emulation support for TOY (untested). |
toysim.png | PNG image for the toysim project logo. |
/tests | Tests subdirectory |
run-tests.sh | Run a selected benchmark. |
/fibo | Fibonacci series benchmark directory |
Makefile | Makefile for building the benchmark. |
ac_start.s | Startup file (prior main()) for TOY. |
fibo.asm | Fibonacci benchmark using the alternative Princeton TOY assembly syntax (defined for the ArchC model). |
/popcount | Population count benchmark directory |
Makefile | Makefile for building the benchmark. |
popcount.asm | Population count benchmark using the original assembly syntax (needs to be converted). |
To generate the interpreted simulator, the acsim executable is ran:
$ acsim toy.ac [-g -abi -gdb] # (create the simulator) $ make -f Makefile.archc # (compile) $ ./toy.x --load=<file-path> [args] # (run an application)
To generate the compiled application simulator, the accsim executable is ran:
$ accsim toy.ac <file-path> # (create specialized simulator) $ make -f Makefile.archc # (compile) $ ./toy.x [args] # (run the application)
The [args] are optional arguments for the application.
There are two formats recognized for application <file-path>:
In order to generate the binary utilities port (binutils port), the acbingen.sh driver script must be used. This should be called as follows:
$ acbingen.sh -atoy -i`pwd`/../toysim-tools/ toy.ac
for generating the binutils port executables. This includes the following tools:
The assembly instruction syntax followed by the ArchC-based simulator for TOY is quite different than the original syntax. The following table summarizes the differences of the two syntax variations.
Original syntax | ArchC-compatible syntax |
R[d] <- imm8 | lda rd, imm8 |
R[d] <- mem[imm8] | ld rd, imm8 |
R[d] -> mem[imm8] | st rd, imm8 |
R[d] <- mem[R[t]] | ldi rd, rt |
mem[R[t]] <- R[d] | sti rd, rt |
R[d] <- R[s] + R[t] | add rd, rs, rt |
R[d] <- R[s] - R[t] | sub rd, rs, rt |
R[d] <- R[s] & R[t] | and rd, rs, rt |
R[d] <- R[s] ^ R[t] | xor rd, rs, rt |
R[d] <- R[s] << R[t] | shl rd, rs, rt |
R[d] <- R[s] >> R[t] | shr rd, rs, rt |
R[d] <- pc; pc <- imm8 | jal rd, imm8 |
pc <- R[d] | jr rd |
if (R[d] == 0) pc <- imm8 | jz rd, imm8 |
if (R[d] > 0) pc <- imm8 | jp rd, imm8 |
pc <- pc | halt |
Supported pseudo-instructions include:
You may contact me at: