# MPACT-Sim - Retargetable Instruction Set Simulator Infrastructure

MPACT-Sim is a toolkit that reduces the effort to create instruction set
simulators, and make the resulting simulators easy to change and extend.

This repository contains the C++ code for MPACT-Sim, tools and library support
for making it simple to create easily retargetable simulators for a wide range
of instruction set architectures.

The toolkit consists of three major components. The first is the isa and binary
decoder generators, that take in descriptors of the isa and the binary encoding
of instructions and produce C++ code used in writing a decoder. The second is
the generic classes that implement the instruction objects, registers, and other
simulated state objects, and the code necessary to manipulate them, as well as
supporting writing the semantics of the instructions. Lastly, there are utility
classes that make it easier to put together a finished simulator, including
memory classes and an ELF loader.

## Building

### Bazel

MPACT-Sim utilizes the [Bazel](https://bazel.build/) build system. The easiest
way to install bazel is to use
[Bazelisk](https://github.com/bazelbuild/bazelisk), a wrapper for Bazel that
automates selecting and downloading the right version of bazel. Use `brew
install bazelisk` on macOS, `choco install bazelisk` on Windows, and on linux,
download the Bazelisk binary, add it to your `PATH`, then alias bazel to the
bazelisk binary.

You need to use bazel version >= 7.0 to build this project.

### Java

MPACT-Sim depends on Java, so a reasonable JRE has to be installed. For macOS,
run `brew install java`, on linux `sudo apt install default-jre`, and on Windows
follow the appropriate instructions at [java.com](https://java.com).

### Build and Test

To build the mpact-sim libraries, use the command `bazel build ...:all` from the
top level directory. To run the tests, use the command `bazel test ...:all`

## Directory Listing

*   mpact/sim/decoder <br />
    This directory contains the code that implements the tools
    that parse `.isa` and `.bin_fmt` files, which define the
    instructions and instruction encodings of an ISA, and generate C++
    code for the instruction decoder for an MPACT-Sim simulator.

    The tools are built automatically and the process is largely invisible when
    using bazel with the appropriate build targets - see the tests in
    mpact/sim/decoder/test for examples.

*   mpact/sim/decoder/vscode <br />
    This directory contains files necessary to build syntax highlighting
    extensions for VS Code for `.isa` and `.bin_fmt` files. Look in the
    mpact/sim/decoder/vscode/README.md file for directions.

*   mpact/sim/generic <br />
    This directory contains all the generic classes provided for use
    in writing MPACT-Sim instruction set simulators.

*   mpact/sim/util <br />
    This directory contains code for a generic ELF program loader, and
    for a set of classes that can be used to implement memories used in
    an instruction set simulator.
