Crates.io | spimdisasm |
lib.rs | spimdisasm |
version | 2.0.0-alpha.1 |
created_at | 2025-08-07 23:30:56.253414+00 |
updated_at | 2025-08-07 23:30:56.253414+00 |
description | MIPS disassembler |
homepage | |
repository | https://github.com/Decompollaborate/spimdisasm |
max_upload_size | |
id | 1786007 |
size | 1,404,541 |
spimdisasm (whole name is lowercase) is a matching MIPS disassembler API with built-in instruction analysis.
Currently supports the instruction set for MIPS I, II, III and IV.
Mainly focused on supporting binaries from videogame platforms like the Nintendo 64, PlayStation 1, PlayStation 2, and PlayStation Portable.
A matching disassembler generates assembly that can be assembled back into the same original binary it was produced from, performing a clean round-trip.
no_std
support, but does require the Rust alloc
crate..text
, .data
, .rodata
and .bss
disassembly..text
, .data
,
.rodata
and .bss
).%hi
/%lo
relocs) with high success rate.RO_
and
B_
for .rodata
and .bss
sections) or its type (STR_
, FLT_
and DBL_
for string, floats and doubles respectively).SN64
/PSYQ
:
div
/divu
fix: tweaks a bit the produced div
, divu
and break
instructions.The current version of spimdisasm requires Rust 1.83.0 or greater.
The current policy is that this may be bumped in minor spimdisasm updates.
spimdisasm is available on crates.io and can be included in your Cargo enabled project like this:
[dependencies]
spimdisasm = "2.0.0-alpha.1"
There are a few compilation features. Currently none of them are enabled by default.
std
: Turns on std
(or turn off no_std
, depending on how you prefer it).
This currently doesn't do much.
std
feature on dependencies.hash_tables
: Toggles the internal implementation of some unordered maps
to use HashMap
s instead of BTreeMap
s, allowing for possible (unmeasured)
performance improvements.
std
feature.The other features are meant for internal use only.
This library follows Semantic Versioning. We try to always keep backwards compatibility, so no breaking changes should happen until a major release (i.e. jumping from 1.X.X to 2.0.0).
To see what changed on each release check either the CHANGELOG.md file or check the releases page on Github. You can also use this link to check the latest release.