Skip to content

jesse-wei/SAPsim

Repository files navigation

Python 3.9+ badge PyPI version badge tests GitHub action badge codecov badge documentation badge

SAPsim

Simulation of SAP (Simple-As-Possible computer) programs from COMP 311 (Computer Organization) @ UNC.

SAPsim demo

Install

pip install SAPsim

If you get the error pip not found, use pip3 instead1. Similarly, for later commands that use python, you'll need to use python3 instead.

Python 3.9+ is required.

Usage

In a .csv file, write a SAP program in this format (use these exact column names):

Screenshot of ex1.csv in VSCode Edit CSV

ex1.csv

In a Python shell, import SAPsim and use SAPsim.run to run the program.

python
>>> from SAPsim import run
>>> run("ex1.csv")                  # Run ex1.csv at full speed (default)
┌──────┬────────┬───────────────┬───────┬───────┐
│ PCAddrInstructionDecHex   │
├──────┼────────┼───────────────┼───────┼───────┤
│      │      0LDA 14300x1e  │
│      │      1SUB 13610x3d  │
│      │      2JZ 61340x86  │
│      │      3LDI 0800x50  │
│      │      4STA 15790x4f  │
│      │      5HLT 02400xf0  │
│      │      6LDI 1810x51  │
│      │      7STA 15790x4f  │
│ >8HLT 02400xf0  │
│      │     13NOP 330x03  │
│      │     14NOP 330x03  │
│      │     15NOP 110x01  │
└──────┴────────┴───────────────┴───────┴───────┘
┌───────┬───┐
│ PC8 │
│ Reg A1 │
│ Reg B3 │
│ FlagC1 │
│ FlagZ1 │
└───────┴───┘
>>> run("ex1.csv", debug=True)      # Run in debug (step) mode
Initial state of simulation of ex1.csv
...
Debug mode: press Enter to execute next instruction ( > ).
...

SAPsim running in Python terminal

Debug mode: There is a debug (step) mode that runs one instruction at a time, as shown above. By default, the program is run at full speed.

I recommend editing the CSV in VSCode or Excel. If you use VSCode, I recommend the extensions Edit CSV (Excel-like editing) and Rainbow CSV (adds color to columns).

Lastly, here's a blank template that includes only the column names and addresses 0-15 and two commented example programs.

SAP instruction set

SAP instruction set

All instructions are supported.

Settings

To customize table appearance, use table_format. Options.

>>> run("ex1.csv", table_format="outline")
+------+--------+---------------+-------+-------+
| PC   |   Addr | Instruction   |   Dec | Hex   |
+======+========+===============+=======+=======+
|      |      0 | LDA 14        |    30 | 0x1e  |
|      |      1 | SUB 13        |    61 | 0x3d  |
|      |      2 | JZ 6          |   134 | 0x86  |
|      |      3 | LDI 0         |    80 | 0x50  |
|      |      4 | STA 15        |    79 | 0x4f  |
|      |      5 | HLT 0         |   240 | 0xf0  |
|      |      6 | LDI 1         |    81 | 0x51  |
|      |      7 | STA 15        |    79 | 0x4f  |
| >    |      8 | HLT 0         |   240 | 0xf0  |
|      |     13 | NOP 3         |     3 | 0x03  |
|      |     14 | NOP 3         |     3 | 0x03  |
|      |     15 | NOP 1         |     1 | 0x01  |
+------+--------+---------------+-------+-------+
+-------+---+
| PC    | 8 |
| Reg A | 1 |
| Reg B | 3 |
| FlagC | 1 |
| FlagZ | 1 |
+-------+---+

To modify values in the SAP program without editing the CSV, use the change keyword argument. For example, run("ex1.csv", change={14: 4, 13: 2}) would change the byte at address 14 to 4 and at 13 to 2 before execution.

Rules

It's easy to just mimic the example programs, but if you need it, here are the rules for SAPsim programs.

Documentation

https://SAPsim.readthedocs.io

Footnotes

  1. Consider aliasing pip to pip3 and similar for python. Also consider using pyenv. Relevant XKCD

Releases

No releases published

Packages

No packages published