Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/iafisher/hera-py
Toolkit for the Haverford Educational RISC Architecture (HERA) assembly language
https://github.com/iafisher/hera-py
assembler assembly-language haverford interpreter
Last synced: 25 days ago
JSON representation
Toolkit for the Haverford Educational RISC Architecture (HERA) assembly language
- Host: GitHub
- URL: https://github.com/iafisher/hera-py
- Owner: iafisher
- License: mit
- Created: 2018-11-05T02:56:33.000Z (about 6 years ago)
- Default Branch: master
- Last Pushed: 2021-09-30T23:35:41.000Z (about 3 years ago)
- Last Synced: 2024-09-30T06:06:44.931Z (about 1 month ago)
- Topics: assembler, assembly-language, haverford, interpreter
- Language: Python
- Homepage: https://iafisher.com/projects/hera
- Size: 896 KB
- Stars: 6
- Watchers: 2
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# hera-py
[![Coverage Status](https://coveralls.io/repos/github/iafisher/hera-py/badge.svg?branch=master)](https://coveralls.io/github/iafisher/hera-py?branch=master)
[![PyPI](https://img.shields.io/pypi/v/hera-py.svg?label=version)](https://pypi.org/project/hera-py/)A toolkit for the [Haverford Educational RISC Architecture](http://cs.haverford.edu/resources/hera) (HERA) assembly language, comprising an interpreter, a debugger, an assembler, and a disassembler.
## Installation
You can install hera-py with pip:```
$ pip3 install hera-py
```## Usage
After installation, use the `hera` command to run a HERA program:```
$ hera main.hera
```Enter the interactive debugger with the `debug` subcommand:
```
$ hera debug main.hera
```Assemble a HERA program into machine code:
```
$ hera assemble main.hera
```Disassemble machine code back into the human-readable HERA syntax:
```
$ hera disassemble main.hera.lcode
```You can also preprocess a HERA program without running it, to see how pseudo-instructions and labels are resolved to HERA code:
```
$ hera preprocess main.hera
```## Comparison with HERA-C and Hassem
HERA-C is the current HERA interpreter used at Haverford. It is implemented as a shell-script wrapper around a set of C++ macros that expand HERA instructions into C++ code, which is then compiled by g++.hera-py improves on HERA-C in the following areas:
- Includes a purpose-built HERA debugger
- Concise and accurate error messages
- Ease of use
- Cross-platform and easy to install
- Configurable with command-line options
- Does not create temporary files
- Command name has six fewer letters than `HERA-C-Run`hera-py also supports several features that HERA-C does not:
- Setting registers to the value of a label
- Detecting stack overflow
- Multi-precision multiplication
- Relative branching by a fixed integer value (e.g., `BRR(10)`)
- Branching by the value of a register (e.g., `SET(R1, 20); BR(R1)`)
- Detecting invalid relative branchesHERA-C has a few features that hera-py does not:
- C-style #define macros (and more generally the ability to embed arbitrary C++ code in HERA programs)Small to medium-sized programs generally run faster with hera-py than with HERA-C, while very large programs are typically faster with HERA-C.
Hassem is the current HERA assembler used at Haverford. hera-py has better error messages than Hassem, allows the user greater control of output (e.g., with the `--stdout` flag), and fixes some Hassem bugs.
## Acknowledgements
Thank you to [Christopher Villalta](https://github.com/csvillalta) for valuable feedback on early iterations of this project.