supSMSASM
A tool to make Gecko code from ASM for SMS
This tool only runs on Windows currently.
Installation
First, install devkitPro.
Then, use pip to install supSMSASM:
pip install supSMSASM
Usage
This tool can make C0, C2, and Fixed-Location-C2 code from ASM code. See Supported Code Type for more information.
With all files prepared, use the following command to generate the Gecko code:
supSMSASM {*.s} [JP|JPA]
The generated code will be copied to your clipboard.
Symbols
Symbols defined in ldscript/ can be used in *.s and *.ld.
Supported Code Type
C0
Simply write your ASM code in *.s and use supSMSASM to convert it into Gecko code.
C2
You will need the following two files:
*.s: ASM source code*.ld: LD script for defining the entry points of C2. You need to define a symbol$$and set the value to0.
To define a C2 entry,
define a symbol with $C2$ prepending to the symbol defined in *.s file.
For example, to make 2 C2 codes, first write the body of the code in your xxx.s file:
SomeC2Code:
# ...
AnotherC2Code:
# ...
Then, in your xxx.ld file, define the entry points:
/* The following line is required for C2 code type */
$$ = 0;
$C2$SomeC2Code = 0x80345678;
$C2$AnotherC2Code = 0x80DEFABC;
Finally, use supGeckoCode xxx.s to generate Gecko code.
The result will be like:
C2345678 XXXXXXXX
... (instructions in SomeC2Code)
C2DEFABC XXXXXXXX
... (instructions in AnotherC2Code)
Note that you can't branch to absolute address with bl or b directly
since the location of the code is unknown.
You will need to set the destination to register and use blr, bctr etc. instead.
Fixed-Location-C2
To solve the problem that C2 code type can't branch to absolute address directly,
you can use 06 to place the code into a fixed location
and then use 04 to replace the instruction with b or bl to the code.
You will need the following two files (same as C2):
*.s: ASM source code*.ld: LD script for defining the entry points and the address to place the code
To define a entry,
define a symbol with $b$ or $bl$ prepending to the symbol defined in *.s file.
This will replace the instruction at the given address with b or bl to the the symbol.
For example, to make 2 Fixed-Location-C2 codes, first write the body of the code in your xxx.s file:
SomeCodeWithB:
b $b$SomeCodeWithB+4
AnotherCodeWithBL:
# ...
blr
Then, in your xxx.ld file, define the entry points:
/* The following line defines the address to place the code.
It will be 0x817F9800 if you don't specify */
$$ = 0x817F9800;
$b$SomeCodeWithB = 0x80345678;
$bl$AnotherCodeWithBL = 0x80DEFABC;
Finally, use supGeckoCode xxx.s to generate Gecko code.
The result will be like:
04345678 494B4188 <-- b from 80345678 to SomeCodeWithB
04DEFABC 48A09D49 <-- bl from 80DEFABC to AnotherCodeWithBL
077F9800 XXXXXXXX
... (instructions in SomeCodeWithB and AnotherCodeWithBL)
Note that unlike C2, you have to explicitly do b or blr back to the original program.
In addition, just like C2, you have to put the original instruction manually if needed.
Metadata
Release files for supSMSASM 0.1.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| supSMSASM-0.1.1.tar.gz | 2.0 MB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| supSMSASM-0.1.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 4.1 MB
Release files / supSMSASM-0.1.1.tar.gz
| Download URL | supSMSASM-0.1.1.tar.gz |
|---|---|
| Size | 2.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
54db68b021933cbdd81b94b6fdd78890c067f9773b854026230498b8bffd1266
|
|
BLAKE2b-256 checksum How to use checksums |
81319a97d8b55a5d9f0a222dd80561ce87ad181c002efb3f801ff8afc85306d2
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.6
|
Release files / supSMSASM-0.1.1-py3-none-any.whl
| Download URL | supSMSASM-0.1.1-py3-none-any.whl |
|---|---|
| Size | 2.1 MB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ae155e8b346e5fc35cd39def4599dfd0e03d3c2a20ab2d0822cbbbd6852da878
|
|
BLAKE2b-256 checksum How to use checksums |
5d9190d5a23a991ffc8790bddca80cabdd3891364f9b7219d394d62122dcfe1a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.10.6
|