SArch32 (StupidArch32) is a custom Instruction Set Architecture (ISA), that was created as purely educational project with no intentions to synthetise a real hardware.
The SArch32 is a 32-bit architecture with 16 registers (12 general purpose, stack pointer, return address, flags, program counter), 32-bit memory bus, supporting several classic peripherals.
This repositor contains a core project (containing all ISA-related definitions), assembler project and emulator project.
Feature | Support | Note |
---|---|---|
Basic ISA | ✅ | |
Assembler | ✅ | |
Memory bus | ✅ | |
Emulator core | ✅ | |
Peripheral mappings | ✅ | |
Extended debugger | ⏳ | Supports stepping, run/pause |
Debugger support for instruction decoder | ❌ | |
Memory dump | ❌ | |
Modular emulator | ❌ | |
Configuration | ✅ | |
ISA documentation | ❌ | |
CPU exceptions | ✅ | |
Interrupts | ⏳ | Base support, untested |
CPU modes | ❌ | System and user mode |
Paging | ❌ | |
FPU coprocessor | ❌ |
Legend: ✅ - full support, ⏳ - partial support, ❌ - not yet implemented
Feature | Support | Note |
---|---|---|
300x200 emulated monochromatic display | ✅ | video memory mapped to bus |
GPIO controller | ✅ | |
Timer | ✅ | |
UART | ✅ | |
DMA | ❌ | |
PCM/Audio controller | ❌ | |
PWM | ❌ | |
SPI | ❌ | |
I2C | ❌ | |
VirtIO | ❌ |
Legend: ✅ - full support, ⏳ - partial support, ❌ - not yet implemented
The core project defines three main modules:
- ISA - all related to instructions parsing, generating and executing
- Machine - a support for machine emulation
- SObjFile - custom object file format definitions (loaders and parsers)
The assembler project defines a simple assembler program, that assembles all input files, performs linkage and generates the memory object file (SObjFile).
Algorithms used and module decompositions are not the most effective ones. The design is chosen to be as simple as possible for the readers, so that they can understand the underlying principles of such software/hardware design.
The emulator project defines a simple emulator, that creates a machine object and uses a Qt 5 libraries to display a simple GUI.
This software is distributed under the MIT license. Please, see attached LICENSE file for more information.