Archived
1
0
Fork 0

[v0.0.1] rename tool, update README

This commit is contained in:
sup39 2022-10-14 20:44:43 +09:00
parent 3f66f46ff3
commit 571ffde3c5
9 changed files with 117 additions and 18 deletions

View file

@ -1,2 +1,2 @@
include src/supGeckoASM/include/*
include src/supGeckoASM/ldscript/*
include src/supSMSASM/include/*
include src/supSMSASM/ldscript/*

114
README.md
View file

@ -1,16 +1,114 @@
# supGeckoASM
A tool to make gecko code from ASM
# supSMSASM
A tool to make Gecko code from ASM for SMS
## Supported code type
This tool only runs on Windows currently.
## Installation
First, install [devkitPro](https://github.com/devkitPro/installer/releases).
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](#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/](src/supSMSASM/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 to `0`.
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:
```asm
SomeC2Code:
# ...
AnotherC2Code:
# ...
```
Then, in your `xxx.ld` file, define the entry points:
```ld
/* The following line is required for C2 code type */
$$ = 0;
$C2$.xxx = ...;
$C2$SomeC2Code = 0x80345678;
$C2$AnotherC2Code = 0x80DEFABC;
```
### 06
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:
```asm
SomeCodeWithB:
b $b$SomeCodeWithB+4
AnotherCodeWithBL:
# ...
blr
```
Then, in your `xxx.ld` file, define the entry points:
```ld
$$ = ...;
$b$.xxx = ...;
$bl$.yyy = ...;
/* 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.

View file

@ -1,15 +1,15 @@
[metadata]
name = supGeckoASM
version = 0.0.1a2
name = supSMSASM
version = 0.0.1
author = sup39
author_email = sms@sup39.dev
description = A tool to make gecko code from ASM
description = A tool to make Gecko code from ASM for SMS
long_description = file: README.md
long_description_content_type = text/markdown
url = https://github.com/sup39/supGeckoASM
url = https://github.com/sup39/supSMSASM
license = MIT
project_urls =
Bug Tracker = https://github.com/sup39/supGeckoASM/issues
Bug Tracker = https://github.com/sup39/supSMSASM/issues
classifiers =
Programming Language :: Python :: 3
License :: OSI Approved :: MIT License
@ -27,4 +27,4 @@ where = src
[options.entry_points]
console_scripts =
supGeckoASM = supGeckoASM.cli:main
supSMSASM = supSMSASM.cli:main

View file

@ -18,6 +18,8 @@ def pbcopy(content):
win32clipboard.SetClipboardText(content)
win32clipboard.CloseClipboard()
logger = logging.getLogger('supGeckoCode')
def normalize_dolver(s):
if re.match(r'^(?:JP?|N(?:TSC)?[-_]?J)(?:1\.?0|\.0)?$|^1\.0$', s):
return 'NTSC-J_1.0'
@ -97,7 +99,7 @@ def asm2gecko(fnIn, dolver):
if sec == '.text':
asmSymbs[name] = addr
else:
if name == '$$' and int(addr) == 0:
if name == '$$' and int(addr, 16) == 0:
isC2 = True
m = re.match(r'\$(bl?|C2)\$(.*)', name)
if m is None: continue
@ -185,7 +187,6 @@ def asm2gecko(fnIn, dolver):
def main():
logging.basicConfig()
logger = logging.getLogger('supGeckoCode')
# check required bin
for exe in ['powerpc-eabi-as', 'powerpc-eabi-ld', 'powerpc-eabi-objdump', 'powerpc-eabi-objcopy']: