commit
a95d053a37
34 changed files with 6335 additions and 0 deletions
@ -0,0 +1,147 @@ |
||||
ddr5thmix-solo-src/build |
||||
ddr5thmix-solo-src/build_soloio |
||||
ddr5thmix-solo-src/tools/build/* |
||||
ddr5thmix-solo-src/tools/py/*.c* |
||||
ddr5thmix-solo-src/tools/py/*.html |
||||
ddr5thmix-solo-src/data_raw |
||||
!ddr5thmix-solo-src/data_raw/deleteme.txt |
||||
ddr5thmix-solo-src/data_source |
||||
!ddr5thmix-solo-src/data_source/deleteme.txt |
||||
ddr5thmix-solo-src/data_modified_raw |
||||
ddr5thmix-solo-src/\#* |
||||
ddr5thmix-solo-src/stepx_*.sh |
||||
|
||||
|
||||
*.iso |
||||
*.zip |
||||
|
||||
|
||||
# Byte-compiled / optimized / DLL files |
||||
__pycache__/ |
||||
*.py[cod] |
||||
*$py.class |
||||
|
||||
# C extensions |
||||
*.so |
||||
|
||||
# Distribution / packaging |
||||
.Python |
||||
build/ |
||||
develop-eggs/ |
||||
dist/ |
||||
downloads/ |
||||
eggs/ |
||||
.eggs/ |
||||
lib/ |
||||
lib64/ |
||||
parts/ |
||||
sdist/ |
||||
var/ |
||||
wheels/ |
||||
pip-wheel-metadata/ |
||||
share/python-wheels/ |
||||
*.egg-info/ |
||||
.installed.cfg |
||||
*.egg |
||||
MANIFEST |
||||
|
||||
# PyInstaller |
||||
# Usually these files are written by a python script from a template |
||||
# before PyInstaller builds the exe, so as to inject date/other infos into it. |
||||
*.manifest |
||||
*.spec |
||||
|
||||
# Installer logs |
||||
pip-log.txt |
||||
pip-delete-this-directory.txt |
||||
|
||||
# Unit test / coverage reports |
||||
htmlcov/ |
||||
.tox/ |
||||
.nox/ |
||||
.coverage |
||||
.coverage.* |
||||
.cache |
||||
nosetests.xml |
||||
coverage.xml |
||||
*.cover |
||||
*.py,cover |
||||
.hypothesis/ |
||||
.pytest_cache/ |
||||
|
||||
# Translations |
||||
*.mo |
||||
*.pot |
||||
|
||||
# Django stuff: |
||||
*.log |
||||
local_settings.py |
||||
db.sqlite3 |
||||
db.sqlite3-journal |
||||
|
||||
# Flask stuff: |
||||
instance/ |
||||
.webassets-cache |
||||
|
||||
# Scrapy stuff: |
||||
.scrapy |
||||
|
||||
# Sphinx documentation |
||||
docs/_build/ |
||||
|
||||
# PyBuilder |
||||
target/ |
||||
|
||||
# Jupyter Notebook |
||||
.ipynb_checkpoints |
||||
|
||||
# IPython |
||||
profile_default/ |
||||
ipython_config.py |
||||
|
||||
# pyenv |
||||
.python-version |
||||
|
||||
# pipenv |
||||
# According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. |
||||
# However, in case of collaboration, if having platform-specific dependencies or dependencies |
||||
# having no cross-platform support, pipenv may install dependencies that don't work, or not |
||||
# install all needed dependencies. |
||||
#Pipfile.lock |
||||
|
||||
# PEP 582; used by e.g. github.com/David-OConnor/pyflow |
||||
__pypackages__/ |
||||
|
||||
# Celery stuff |
||||
celerybeat-schedule |
||||
celerybeat.pid |
||||
|
||||
# SageMath parsed files |
||||
*.sage.py |
||||
|
||||
# Environments |
||||
.env |
||||
.venv |
||||
env/ |
||||
venv/ |
||||
ENV/ |
||||
env.bak/ |
||||
venv.bak/ |
||||
|
||||
# Spyder project settings |
||||
.spyderproject |
||||
.spyproject |
||||
|
||||
# Rope project settings |
||||
.ropeproject |
||||
|
||||
# mkdocs documentation |
||||
/site |
||||
|
||||
# mypy |
||||
.mypy_cache/ |
||||
.dmypy.json |
||||
dmypy.json |
||||
|
||||
# Pyre type checker |
||||
.pyre/ |
@ -0,0 +1,44 @@ |
||||
# Dance Dance Revolution 5th Mix Solo |
||||
This is an UNOFFICIAL patch for the System 573/arcade version of Dance Dance Revolution 5th Mix. |
||||
|
||||
The game contains left over code that supports 6 panel gameplay and a large number of songs have 6 panel charts left over from 4th Mix Plus. This project is an attempt to restore that functionality as well as make improvements to the UI to bring it closer to what a real 5th Mix Solo might have felt like. |
||||
|
||||
All source code is included. |
||||
|
||||
|
||||
## KNOWN BUGS/ISSUES |
||||
- Lights are not mapped correctly on solo cabinet (probably won't fix but I will accept a working PR) |
||||
- Edits are bugged in 6 panel mode (won't fix) |
||||
|
||||
## Instructions |
||||
Note: **YOU MUST PROVIDE YOUR OWN DATA!** |
||||
|
||||
[Microsoft Visual Studio 2015 x86 Redistributable](https://www.microsoft.com/en-US/download/details.aspx?id=48145) is required for tools to work properly. |
||||
|
||||
1. Extract the contents of your Dance Dance Revolution 5th Mix CD to the `data_source` folder. You should have a `DAT` folder, `GAME.DAT`, `CARD.DAT`, and `PSX.EXE` file in this folder. |
||||
2. Run `step1_extract.bat` (`step1_extract.sh` if you are on *nix) to generate the `data_raw` folder. |
||||
3. Run `step2_make.bat` or `step2_make_soloio.bat` (`step2_make.sh` or `step2_make_soloio.sh` if you are on *nix) to build the `ddr5thsolo.iso`/`ddr5thsolo_soloio.iso` files. If you are using a real Solo machine then use `step2_make_soloio.bat`. If you are using MAME or an otherwise non-Solo machine then use `step2_make.bat`. |
||||
|
||||
Additionally, if you are building this for MAME, you must use `chdman` (included with MAME) to build the required CHD. |
||||
1. Generate CHD using `chdman.exe createcd -i ddr5thsolo.iso -o a27jaa02.chd -c none` (`-c none` is requested because the compression can throw timing off in MAME). |
||||
2. Overwrite `roms/ddr5m/a27jaa02.chd` in your MAME folder with the newly generated `a27jaa02.chd`. |
||||
3. Delete `nvram/ddr5m` in order to force reinstallation when you boot `ddr5m` next in MAME. |
||||
4. You must run MAME from the command line instead of through the normal MAME UI to bypass hash check errors |
||||
|
||||
If you wish to extract the CD bin/cue from a CHD file, use `chdman.exe extractcd -i a27jaa02.chd -o a27jaa02.cue`. |
||||
|
||||
## Additional Instructions (*NIX ONLY) |
||||
If you are building using *nix, you must compile the required Cython modules: |
||||
1. `cd tools/py` |
||||
2. `python3 -m pip install -r requirements.txt` |
||||
2. `python3 setup.py build_ext --inplace` |
||||
|
||||
|
||||
## Notes |
||||
- Dipswitch 1 can be toggled on/off to enable/disable autoplay (even on real hardware) |
||||
- There are various flags in [src/main.asm](https://github.com/987123879113/sys573mods/blob/main/ddr5thmix-solo-src/src/main.asm) that can be modified such as `FORCE_UNLOCK`, `SOLO_MODE`, `AUTOPLAY_ENABLED`, `AUTOPLAY_TIMING`, `DISABLE_ANNOUNCER`, and `DISABLE_CHEERING`. |
||||
|
||||
## Thanks |
||||
- @WannyTiggah for the edited title screen and icon edits |
||||
- @SakamotoNeko13 for the edited 4PANEL/6PANEL graphics on the style select screen |
||||
- @dragonminded for testing with a real Solo cabinet |
Binary file not shown.
Binary file not shown.
@ -0,0 +1,58 @@ |
||||
[ |
||||
{ |
||||
"flag_loc": 1, |
||||
"flag_comp": 1, |
||||
"flag_enc": 1, |
||||
"filename": "data/mdb/mdb.bin", |
||||
"patch": "mdb.diff", |
||||
"patch_format": "bsdiff4" |
||||
}, |
||||
{ |
||||
"flag_loc": 0, |
||||
"flag_comp": 1, |
||||
"flag_enc": 0, |
||||
"filename": "data/gpct/select/sslob_25.cmt", |
||||
"patch": "sslob_25.diff", |
||||
"patch_format": "bsdiff4" |
||||
}, |
||||
{ |
||||
"flag_loc": 0, |
||||
"flag_comp": 1, |
||||
"flag_enc": 0, |
||||
"filename": "data/gpct/select/sslop_25.cmt", |
||||
"patch": "sslop_25.diff", |
||||
"patch_format": "bsdiff4" |
||||
}, |
||||
{ |
||||
"flag_loc": 0, |
||||
"flag_comp": 1, |
||||
"flag_enc": 0, |
||||
"filename": "data/lang/japa/sstxt_25.cmt", |
||||
"patch": "sstxt_25.diff", |
||||
"patch_format": "bsdiff4" |
||||
}, |
||||
{ |
||||
"flag_loc": 0, |
||||
"flag_comp": 1, |
||||
"flag_enc": 0, |
||||
"filename": "data/gpct/select/cslbk_16.cmt", |
||||
"patch": "cslbk_16.diff", |
||||
"patch_format": "bsdiff4" |
||||
}, |
||||
{ |
||||
"flag_loc": 0, |
||||
"flag_comp": 1, |
||||
"flag_enc": 0, |
||||
"filename": "data/lang/japa/title_25.cmt", |
||||
"patch": "title_25.diff", |
||||
"patch_format": "bsdiff4" |
||||
}, |
||||
{ |
||||
"flag_loc": 0, |
||||
"flag_comp": 1, |
||||
"flag_enc": 0, |
||||
"filename": "data/gpct/select/selic_25.cmt", |
||||
"patch": "selic_25.diff", |
||||
"patch_format": "bsdiff4" |
||||
} |
||||
] |
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -0,0 +1,34 @@ |
||||
.org 0x80012860 |
||||
CheckAutoplayDipswitch: |
||||
lb v0, 0x1f400004 |
||||
nop |
||||
|
||||
andi v0, 1 |
||||
beq v0, 0, _CheckAutoplayDipswitchEnd |
||||
nop |
||||
|
||||
lb v0, 0x20(s3) |
||||
nop |
||||
|
||||
_CheckAutoplayDipswitchEnd: |
||||
j CheckAutoplayDipswitchEnd |
||||
nop |
||||
|
||||
.org 0x8007f7f8 |
||||
; Enable autoplay |
||||
j CheckAutoplayDipswitch |
||||
nop |
||||
CheckAutoplayDipswitchEnd: |
||||
.org 0x8007f914 |
||||
; Disable random drops |
||||
nop |
||||
.org 0x8007f8a8 |
||||
; Disable randomness of timing |
||||
li v0, 0 |
||||
nop |
||||
nop |
||||
.org 0x8007f8f4 |
||||
; Change allowable timing window of autoplay |
||||
; Default is 16 which will result in a mix of perfect and marvelous judgements |
||||
; 2 may possibly be a bit tight on real hardware, but MAX 300 is a pain and you get 1 or 2 goods at the end with a value of 4 |
||||
slti v0, s2, AUTOPLAY_TIMING |
@ -0,0 +1,85 @@ |
||||
.psx |
||||
.open "build/GAME.DAT", 0x80010000 - 0x60000 - 0x800 |
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||
; Force full unlocks (songs and characters) |
||||
; 0 = Off |
||||
; 1 = On |
||||
.definelabel FORCE_UNLOCK, 1 |
||||
|
||||
; Transforms 5th Mix into 5th Mix Solo |
||||
; 0 = Off |
||||
; 1 = On |
||||
.definelabel SOLO_MODE, 1 |
||||
|
||||
; Use solo cabinet I/O |
||||
; Still experimental so may not work properly on real hardware |
||||
; 0 = Off |
||||
; 1 = On |
||||
; Can be defined in the ASM directly but it's easier for the build scripts to pass "-definelabel SOLO_IO 1" to armips |
||||
;.definelabel SOLO_IO, 1 |
||||
|
||||
; Autoplay Enabled |
||||
; When this option is enabled, dipswitch 1 can be used to toggle autoplay |
||||
; 0 = Off |
||||
; 1 = On |
||||
.definelabel AUTOPLAY_ENABLED, 1 |
||||
|
||||
; Autoplay Timing Window |
||||
; Default value is 16 which results in mixture of perfect and marvelous judgement. |
||||
; Anything tigther than 2 will cause notes to be missed. |
||||
.definelabel AUTOPLAY_TIMING, 2 |
||||
|
||||
; Disable announcer comments during song |
||||
; 0 = Off |
||||
; 1 = On |
||||
.definelabel DISABLE_ANNOUNCER, 0 |
||||
|
||||
; Disable cheering during song |
||||
; 0 = Off |
||||
; 1 = On |
||||
.definelabel DISABLE_CHEERING, 0 |
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||
|
||||
|
||||
.if DISABLE_ANNOUNCER == 1 |
||||
.org 0x80080c50 |
||||
; Disable random announcer comments |
||||
nop |
||||
.org 0x80080204 |
||||
; Disable combo is continuing |
||||
nop |
||||
.endif |
||||
|
||||
|
||||
.if DISABLE_CHEERING == 1 |
||||
.org 0x80080de8 |
||||
; Disable cheering |
||||
nop |
||||
.endif |
||||
|
||||
|
||||
.if FORCE_UNLOCK == 1 |
||||
.org 0x8009bea0 |
||||
li v0, 0xffffffff |
||||
jr ra |
||||
nop |
||||
.endif |
||||
|
||||
|
||||
.if AUTOPLAY_ENABLED == 1 |
||||
.include "src/autoplay.asm" |
||||
.endif |
||||
|
||||
|
||||
.if SOLO_MODE == 1 |
||||
.include "src/solo.asm" |
||||
.endif |
||||
|
||||
|
||||
.ifdef SOLO_IO |
||||
.include "src/solo_io.asm" |
||||
.endif |
||||
|
||||
|
||||
.close |
@ -0,0 +1,347 @@ |
||||
; TODO: Remap solo scores to save as doubles? |
||||
|
||||
.org 0x8002b8e0 |
||||
is_1p_panel_left_pressed: |
||||
.org 0x8002b904 |
||||
is_1p_panel_right_pressed: |
||||
.org 0x8002b808 |
||||
is_1p_start_pressed: |
||||
.org 0x80041744 |
||||
draw_text: |
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||
; Custom code area |
||||
|
||||
.org 0x80038ce4 |
||||
SoloRatingPatch: |
||||
li v1, 2 |
||||
move v0, a0 |
||||
|
||||
bne a1, v1, SoloRatingNormalPath |
||||
nop |
||||
|
||||
j SoloRatingNormalRead |
||||
addi v0, 0x04 |
||||
|
||||
SoloRatingNormalPath: |
||||
sll v0, a1, 0x2 |
||||
addu v0, a0, v0 |
||||
|
||||
SoloRatingNormalRead: |
||||
lh v0, 0x10(v0) |
||||
sll v1, a2, 0x2 |
||||
|
||||
j SoloRatingPatchEnd |
||||
nop |
||||
|
||||
InputTestMenu: |
||||
; Up-Left |
||||
clear a0 |
||||
li a2,-0x1e |
||||
li v0, UpLeftText |
||||
sw s1,0x10(sp) |
||||
sw v0,0x14(sp) |
||||
lw a1,0x0(s0) |
||||
jal draw_text |
||||
li a3,0x1000 |
||||
|
||||
li a2,-0x1e |
||||
li a3,0x1000 |
||||
lw a0,0x120(sp) |
||||
nop |
||||
srl a0,a0,16 |
||||
andi a0,a0,0x0001 |
||||
sltu a0,zero,a0 |
||||
li v0,0x80012d2c |
||||
sll a1,a0,4 |
||||
add v0, a1 |
||||
lw a1,0x0(s0) |
||||
sw s1,0x10(sp) |
||||
sw v0,0x14(sp) |
||||
sll a0,a0,0x1 |
||||
addiu a1,a1,0x48 |
||||
jal draw_text |
||||
nop |
||||
|
||||
; Up-Right |
||||
clear a0 |
||||
li a2,-0x16 |
||||
li v0, UpRightText |
||||
sw s1,0x10(sp) |
||||
sw v0,0x14(sp) |
||||
lw a1,0x0(s0) |
||||
jal draw_text |
||||
li a3,0x1000 |
||||
|
||||
li a2,-0x16 |
||||
li a3,0x1000 |
||||
lw a0,0x120(sp) |
||||
nop |
||||
srl a0,a0,16 |
||||
andi a0,a0,0x0002 |
||||
sltu a0,zero,a0 |
||||
li v0,0x80012d2c |
||||
sll a1,a0,4 |
||||
add v0, a1 |
||||
lw a1,0x0(s0) |
||||
sw s1,0x10(sp) |
||||
sw v0,0x14(sp) |
||||
sltu a0,zero,a0 |
||||
sll a0,a0,0x1 |
||||
jal draw_text |
||||
addiu a1,a1,0x48 |
||||
|
||||
jal 0x80029728 |
||||
nop |
||||
|
||||
j InputTestMenuEnd |
||||
nop |
||||
|
||||
UpLeftText: |
||||
.asciiz "UP-LEFT" |
||||
UpRightText: |
||||
.asciiz "UP-RIGHT" |
||||
|
||||
|
||||
; End custom code area |
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||
|
||||
.org 0x8001c174 |
||||
this_machine_is_solo: |
||||
; Always return 1 to enable solo machine mode |
||||
li v0, 1 |
||||
|
||||
|
||||
.org 0x800909ec |
||||
; Allow for selecting 6 panel mode on style select screen |
||||
nop |
||||
|
||||
|
||||
.org 0x8009b400 |
||||
nop |
||||
j SoloRatingPatch |
||||
nop |
||||
nop |
||||
SoloRatingPatchEnd: |
||||
|
||||
|
||||
.org 0x8002b898 |
||||
; Disable 2nd player start button during style select screen |
||||
jr ra |
||||
clear v0 |
||||
|
||||
|
||||
; Use small stage number at top during gameplay |
||||
.org 0x800571b0 |
||||
b 0x800571cc |
||||
|
||||
|
||||
; Reposition arrows to be centered and evenly spaced around smaller stage number |
||||
.org 0x80014110 |
||||
.dh 0xffac - 7 |
||||
.dh 0xffe1 - 2 |
||||
.dh 0xffff |
||||
.dh 0x0034 + 5 |
||||
.dh 0xffc7 - 5 |
||||
.dh 0xff5f |
||||
.dh 0x0019 + 3 |
||||
.dh 0xff5f |
||||
.org 0x80014120 |
||||
.dh 0xffc2 - 3 |
||||
.dh 0xffe1 - 2 |
||||
.dh 0xffff |
||||
.dh 0x001e + 1 |
||||
|
||||
|
||||
; Change graphics for 4 panel and 6 panel mode on style select screen |
||||
.org 0x80016144 |
||||
; 4 Panel/Single |
||||
.dh 0x0001 ; 4 Panel/Single flag |
||||
.dh 0x002c + 0x63 ; Layer absolute x |
||||
.dh 0x00fb ; Layer absolute y |
||||
.dh 0x001c ; Character relative x |
||||
.dh 0x0033 ; Character relative y |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.db 0x04 ; Stages bubble design + tail direction |
||||
.db 0x78 ; More bubble relative y?? |
||||
.dh 0xffbe ; Bubble relative x |
||||
.dh 0x000e ; Bubble relative y |
||||
; 6 Panel |
||||
.dh 0x000a ; 6 Panel |
||||
.dh 0x00cd + 0x63 |
||||
.dh 0x00c0 |
||||
.dh 0x001c |
||||
.dh 0x0051 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.db 0x03 |
||||
.db 0x5a |
||||
.dh 0x0056 |
||||
.dh 0x0008 |
||||
; Disable last entry |
||||
.dh 0 ; Disabled |
||||
.dh 0xff00 ; Send off to outer space |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
.db 0 |
||||
.db 0 |
||||
.dh 0 |
||||
.dh 0 |
||||
|
||||
; Fix solo mode graphic going dim |
||||
.org 0x800900dc |
||||
nop |
||||
|
||||
; Don't show "insert more coins to select other modes" message |
||||
.org 0x8008e9e0 |
||||
nop |
||||
|
||||
; Don't show secondary description text |
||||
.org 0x8008e994 |
||||
j 0x8008ea04 |
||||
|
||||
; Force 6 panel description when 4 panel isn't selected |
||||
.org 0x8008e944 |
||||
li v1, 0x0a |
||||
.org 0x8008e96c |
||||
li t1, 0x02 |
||||
|
||||
; Load "DOUBLE" text instead of "SINGLE" for 6 panel mode |
||||
.org 0x8008e76c |
||||
li v1, 0x0a |
||||
|
||||
; Center bottom text on style select screen |
||||
.org 0x80084398 |
||||
addiu s0, s0, -0xa0 |
||||
|
||||
; Disable right player side text during free play mode |
||||
.org 0x80084438 |
||||
nop |
||||
|
||||
; Make the character select screen show all 14 characters instead of 7 for 1P |
||||
.org 0x80091ed4 |
||||
li v0, 0x0e |
||||
|
||||
; Don't show "NOT ATTEND" image on 2P side |
||||
.org 0x80091564 |
||||
b 0x80091dc0 |
||||
|
||||
; Change character update region width |
||||
; 2P characters leave the white glow when moving the cursor on the background because |
||||
; that region isn't being updated |
||||
.org 0x80092268 |
||||
li s7, 0x240 |
||||
.org 0x80092398 |
||||
li s8, 0x240 |
||||
|
||||
; Don't draw 2P side character name |
||||
.org 0x80090ed8 |
||||
addiu a2, v0, 0xcb |
||||
li t1, 0 |
||||
|
||||
; Disable static image when character not selected |
||||
.org 0x800910c8 |
||||
li s8, 0x180 |
||||
|
||||
; Remove black border triangles from character image area for 2P side |
||||
.org 0x80090fcc |
||||
li s8, 0x180 |
||||
|
||||
; Use 2P select icon instead of 1P icon at top of screen (required for image edits) |
||||
.org 0x80083d04 |
||||
li v0, 0x0a |
||||
.org 0x80083d10 |
||||
addiu v1, v1, 3 |
||||
|
||||
|
||||
; Fix I/O test menu exit key combo |
||||
.org 0x8003c314 |
||||
jal is_1p_panel_left_pressed |
||||
.org 0x8003c324 |
||||
jal is_1p_panel_right_pressed |
||||
clear a0 |
||||
|
||||
.org 0x80012db8 |
||||
.asciiz " HOLD 1P LEFT +" |
||||
.org 0x80012dd0 |
||||
.asciiz "PRESS 1P RIGHT = EXIT" |
||||
|
||||
; Fix start button during free player |
||||
.org 0x8001f984 |
||||
jal is_1p_start_pressed |
||||
.org 0x8001f994 |
||||
jal is_1p_start_pressed |
||||
|
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||
; I/O Test Menu |
||||
.org 0x8003bf08 |
||||
j InputTestMenu |
||||
InputTestMenuEnd: |
||||
|
||||
|
||||
; Fix centering of text |
||||
.org 0x8003bad4 |
||||
li v0, -0x60 |
||||
.org 0x8003badc |
||||
li v0, 0x30 |
||||
|
||||
|
||||
.org 0x8003c00c |
||||
; Don't display 2P side buttons |
||||
nop |
||||
|
||||
.org 0x8003bf14 |
||||
; Select L Text |
||||
li a2, 0xfffffff2 |
||||
.org 0x8003bf34 |
||||
; Select L ON/OFF |
||||
li a2, 0xfffffff2 |
||||
|
||||
.org 0x8003bf64 |
||||
; Select R Text |
||||
li a2, 0xfffffffa |
||||
.org 0x8003bf84 |
||||
; Select R ON/OFF |
||||
li a2, 0xfffffffa |
||||
|
||||
.org 0x8003bfbc |
||||
; Start Text |
||||
li a2, 0x02 |
||||
.org 0x8003bfdc |
||||
; Start ON/OFF |
||||
li a2, 0x02 |
||||
|
||||
.org 0x8003c140 |
||||
; Service Switch Text |
||||
li a2, 0x12 |
||||
.org 0x8003c164 |
||||
; Service Switch Text |
||||
li a2, 0x12 |
||||
|
||||
.org 0x8003c194 |
||||
; Coin Mech ON/OFF |
||||
li a2, 0x1a |
||||
.org 0x8003c1b4 |
||||
; Coin Mech ON/OFF |
||||
li a2, 0x1a |
||||
|
||||
.org 0x8003c1f4 |
||||
; Coin Mech ON/OFF |
||||
li a2, 0x2a |
||||
.org 0x8003c244 |
||||
; Coin Mech ON/OFF |
||||
li a2, 0x2a |
@ -0,0 +1,44 @@ |
||||
|
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||
; Custom code area |
||||
; Shares a very close space to the code location used in solo.asm |
||||
; so be careful that the two don't collide. |
||||
|
||||
.org 0x80038e44 |
||||
PanelIoFix: |
||||
nor a1, zero, a1 |
||||
nor a2, zero, a2 |
||||
nor v0, zero, v0 |
||||
|
||||
; This masks out unwanted inputs |
||||
andi a1, 0xffff8f1f |
||||
|
||||
; This converts the select l/r button inputs |
||||
andi v1, a2, 0x200 |
||||
sll v1, 4 |
||||
or a1, v1 |
||||
xor a2, v1 |
||||
|
||||
andi v1, v0, 0x200 |
||||
sll v1, 5 |
||||
or a1, v1 |
||||
xor v0, v1 |
||||
|
||||
; Had to reuse v1 to not mess up any other registers, so read the value again |
||||
lhu v1, 0x1f400004 |
||||
nop |
||||
nor v1, zero, v1 |
||||
|
||||
j PanelIoFixEnd |
||||
nop |
||||
|
||||
; End custom code area |
||||
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
||||
|
||||
.org 0x800b0424 |
||||
j PanelIoFix |
||||
nop |
||||
nop |
||||
nop |
||||
nop |
||||
PanelIoFixEnd: |
@ -0,0 +1,5 @@ |
||||
if not exist data_raw mkdir data_raw |
||||
|
||||
tools\sys573tool.exe --mode dump --input data_source --output data_raw --key DDR5 --type ddr --input-filenames tools\ddr5th_filenames.json |
||||
|
||||
pause |
@ -0,0 +1,4 @@ |
||||
#!/bin/bash |
||||
|
||||
mkdir -p data_raw |
||||
python3 tools/py/dump_sys573_gamefs.py --input data_source --output data_raw --key DDR5 --type ddr --input-filenames tools/ddr5th_filenames.json |
@ -0,0 +1,11 @@ |
||||
if not exist build mkdir build |
||||
|
||||
xcopy /Y /E /H /C data_source\* build |
||||
if exist build\deleteme.txt del build\deleteme.txt |
||||
|
||||
tools\sys573tool.exe --mode build --input data_raw --input-modified-list data_modified\modified.json --base data_source --key DDR5 --output build --patch-dir data_modified |
||||
tools\thirdparty\armips.exe src\main.asm |
||||
tools\sys573tool.exe --mode checksum --input build\GAME.DAT build\CARD.DAT --output build |
||||
tools\thirdparty\mkisofs.exe -d -o ddr5thsolo.iso "build" |
||||
|
||||
pause |
@ -0,0 +1,15 @@ |
||||
#!/bin/bash |
||||
|
||||
mkdir -p build |
||||
|
||||
cp -r data_source/* build |
||||
rm -f build/deleteme.txt |
||||
|
||||
python3 tools/py/build_sys573_gamefs.py --input data_raw --input-modified-list data_modified/modified.json --base data_source --key DDR5 --output build --patch-dir data_modified |
||||
|
||||
armips src/main.asm |
||||
|
||||
python3 tools/py/calc_checksum.py --input build/GAME.DAT build/CARD.DAT --output build |
||||
|
||||
mkisofs -d -o ddr5thsolo.iso "build" |
||||
|
@ -0,0 +1,11 @@ |
||||
if not exist build mkdir build |
||||
|
||||
xcopy /Y /E /H /C data_source\* build |
||||
if exist build\deleteme.txt del build\deleteme.txt |
||||
|
||||
tools\sys573tool.exe --mode build --input data_raw --input-modified-list data_modified\modified.json --base data_source --key DDR5 --output build --patch-dir data_modified |
||||
tools\thirdparty\armips.exe -definelabel SOLO_IO 1 src\main.asm |
||||
tools\sys573tool.exe --mode checksum --input build\GAME.DAT build\CARD.DAT --output build |
||||
tools\thirdparty\mkisofs.exe -d -o ddr5thsolo_soloio.iso "build" |
||||
|
||||
pause |
@ -0,0 +1,14 @@ |
||||
#!/bin/bash |
||||
|
||||
mkdir -p build |
||||
|
||||
cp -r data_source/* build |
||||
rm -f build/deleteme.txt |
||||
|
||||
python3 tools/py/build_sys573_gamefs.py --input data_raw --input-modified-list data_modified/modified.json --base data_source --key DDR5 --output build --patch-dir data_modified |
||||
|
||||
armips -definelabel SOLO_IO 1 src/main.asm |
||||
|
||||
python3 tools/py/calc_checksum.py --input build/GAME.DAT build/CARD.DAT --output build |
||||
|
||||
mkisofs -d -o ddr5thsolo_soloio.iso "build" |
@ -0,0 +1,674 @@ |
||||
[ |
||||
"boot/checksum.dat", |
||||
"boot/config.dat", |
||||
"boot/psx.bin", |
||||
"data/bpct/blue/aba_blue.cmt", |
||||
"data/bpct/blue/bba_blue.cmt", |
||||
"data/bpct/blue/c8c_blue.cmt", |
||||
"data/bpct/blue/d8c_blue.cmt", |
||||
"data/bpct/blue/eba_blue.cmt", |
||||
"data/bpct/blue/f9a_blue.cmt", |
||||
"data/bpct/blue/g99_blue.cmt", |
||||
"data/bpct/blue/h97_blue.cmt", |
||||
"data/bpct/blue/i87_blue.cmt", |
||||
"data/bpct/blue/jd7_blue.cmt", |
||||
"data/bpct/gren/a11_gren.cmt", |
||||
"data/bpct/gren/b42_gren.cmt", |
||||
"data/bpct/gren/c87_gren.cmt", |
||||
"data/bpct/gren/d87_gren.cmt", |
||||
"data/bpct/gren/eba_gren.cmt", |
||||
"data/bpct/gren/f99_gren.cmt", |
||||
"data/bpct/gren/g99_gren.cmt", |
||||
"data/bpct/gren/h97_gren.cmt", |
||||
"data/bpct/gren/i87_gren.cmt", |
||||
"data/bpct/gren/j9c_gren.cmt", |
||||
"data/bpct/redd/a87_redd.cmt", |
||||
"data/bpct/redd/b8c_redd.cmt", |
||||
"data/bpct/redd/cd6_redd.cmt", |
||||
"data/bpct/redd/dd6_redd.cmt", |
||||
"data/bpct/redd/eba_redd.cmt", |
||||
"data/bpct/redd/f99_redd.cmt", |
||||
"data/bpct/redd/g99_redd.cmt", |
||||
"data/bpct/redd/h97_redd.cmt", |
||||
"data/bpct/redd/i97_redd.cmt", |
||||
"data/bpct/redd/jd7_redd.cmt", |
||||
"data/bpct/yelo/a87_yelo.cmt", |
||||
"data/bpct/yelo/b8c_yelo.cmt", |
||||
"data/bpct/yelo/cd6_yelo.cmt", |
||||
"data/bpct/yelo/dd6_yelo.cmt", |
||||
"data/bpct/yelo/eba_yelo.cmt", |
||||
"data/bpct/yelo/f99_yelo.cmt", |
||||
"data/bpct/yelo/g99_yelo.cmt", |
||||
"data/bpct/yelo/h97_yelo.cmt", |
||||
"data/bpct/yelo/i97_yelo.cmt", |
||||
"data/bpct/yelo/jd7_yelo.cmt", |
||||
"data/chara/chara.lst", |
||||
"data/chara/chara.pos", |
||||
"data/chara/inst_d/inst_d.cmt", |
||||
"data/chara/inst_d/inst_d.lst", |
||||
"data/chara/inst_d/inst_d.pos", |
||||
"data/chara/inst_d/inst_d.tmd", |
||||
"data/chara/inst_s/inst_s.cmt", |
||||
"data/chara/inst_s/inst_s.lst", |
||||
"data/chara/inst_s/inst_s.pos", |
||||
"data/chara/inst_s/inst_s.tmd", |
||||
"data/fpga/fpga_mp3.bin", |
||||
"data/gpct/dance/arroe_16.cmt", |
||||
"data/gpct/dance/dangr_16.cmt", |
||||
"data/gpct/dance/endgs_25.cmt", |
||||
"data/gpct/dance/gauge_25.cmt", |
||||
"data/gpct/dance/gaugw_25.cmt", |
||||
"data/gpct/dance/gmob_25.cmt", |
||||
"data/gpct/dance/gover_25.cmt", |
||||
"data/gpct/dance/gread_25.cmt", |
||||
"data/gpct/dance/hgove_25.cmt", |
||||
"data/gpct/dance/mfrm_25.cmt", |
||||
"data/gpct/demo/btile_25.cmt", |
||||
"data/gpct/demo/cgchk_25.cmt", |
||||
"data/gpct/demo/endin_25.cmt", |
||||
"data/gpct/demo/endob_25.cmt", |
||||
"data/gpct/demo/insb1_16.cmt", |
||||
"data/gpct/demo/insb2_16.cmt", |
||||
"data/gpct/demo/insb3_16.cmt", |
||||
"data/gpct/demo/inst4_16.cmt", |
||||
"data/gpct/demo/inst5_16.cmt", |
||||
"data/gpct/demo/klogo_16.cmt", |
||||
"data/gpct/demo/obk_16.cmt", |
||||
"data/gpct/demo/oobj_25.cmt", |
||||
"data/gpct/demo/padv_16.cmt", |
||||
"data/gpct/demo/scrbk_16.cmt", |
||||
"data/gpct/demo/scrob_25.cmt", |
||||
"data/gpct/result/rslbk_16.cmt", |
||||
"data/gpct/result/rsldl_25.cmt", |
||||
"data/gpct/result/rslob_25.cmt", |
||||
"data/gpct/select/albm0_25.cmt", |
||||
"data/gpct/select/albm1_25.cmt", |
||||
"data/gpct/select/chr01_25.cmt", |
||||
"data/gpct/select/chr02_25.cmt", |
||||
"data/gpct/select/chr03_25.cmt", |
||||
"data/gpct/select/chr04_25.cmt", |
||||
"data/gpct/select/chr05_25.cmt", |
||||
"data/gpct/select/chr06_25.cmt", |
||||
"data/gpct/select/chr07_25.cmt", |
||||
"data/gpct/select/chr08_25.cmt", |
||||
"data/gpct/select/chr09_25.cmt", |
||||
"data/gpct/select/chr10_25.cmt", |
||||
"data/gpct/select/chr11_25.cmt", |
||||
"data/gpct/select/chr12_25.cmt", |
||||
"data/gpct/select/chr13_25.cmt", |
||||
"data/gpct/select/chr14_25.cmt", |
||||
"data/gpct/select/chrna_25.cmt", |
||||
"data/gpct/select/cslbk_16.cmt", |
||||
"data/gpct/select/cslic_25.cmt", |
||||
"data/gpct/select/cslob_25.cmt", |
||||
"data/gpct/select/msbpm_16.cmt", |
||||
"data/gpct/select/mslal_16.cmt", |
||||
"data/gpct/select/mslbk_16.cmt", |
||||
"data/gpct/select/mslob_25.cmt", |
||||
"data/gpct/select/mslta_25.cmt", |
||||
"data/gpct/select/msltt_16.cmt", |
||||
"data/gpct/select/selcm_16.cmt", |
||||
"data/gpct/select/seldw_16.cmt", |
||||
"data/gpct/select/selic_25.cmt", |
||||
"data/gpct/select/seltr_16.cmt", |
||||
"data/gpct/select/selup_16.cmt", |
||||
"data/gpct/select/sslbk_16.cmt", |
||||
"data/gpct/select/ssldf_mm.cmt", |
||||
"data/gpct/select/ssldm_mm.cmt", |
||||
"data/gpct/select/sslob_25.cmt", |
||||
"data/gpct/select/sslop_25.cmt", |
||||
"data/lang/japa/blogo_16.cmt", |
||||
"data/lang/japa/botan_25.cmt", |
||||
"data/lang/japa/caut_25.cmt", |
||||
"data/lang/japa/cstxt_25.cmt", |
||||
"data/lang/japa/hbota_25.cmt", |
||||
"data/lang/japa/hjoin_25.cmt", |
||||
"data/lang/japa/hlink_25.cmt", |
||||
"data/lang/japa/hmcme_16.cmt", |
||||
"data/lang/japa/inst0_16.cmt", |
||||
"data/lang/japa/inst1_16.cmt", |
||||
"data/lang/japa/inst2_16.cmt", |
||||
"data/lang/japa/inst3_16.cmt", |
||||
"data/lang/japa/lhowt_25.cmt", |
||||
"data/lang/japa/ljoin_25.cmt", |
||||
"data/lang/japa/mcmes_16.cmt", |
||||
"data/lang/japa/mstxt_25.cmt", |
||||
"data/lang/japa/oblog_16.cmt", |
||||
"data/lang/japa/ocd_25.cmt", |
||||
"data/lang/japa/oklog_16.cmt", |
||||
"data/lang/japa/otitl_25.cmt", |
||||
"data/lang/japa/otosh_25.cmt", |
||||
"data/lang/japa/owarn_16.cmt", |
||||
"data/lang/japa/showt_25.cmt", |
||||
"data/lang/japa/ssjoi_25.cmt", |
||||
"data/lang/japa/sstxt_25.cmt", |
||||
"data/lang/japa/title_25.cmt", |
||||
"data/lang/japa/warn_16.cmt", |
||||
"data/mdb/abso/abso_bk.cmt", |
||||
"data/mdb/abso/abso_nm.cmt", |
||||
"data/mdb/abso/abso_ta.cmt", |
||||
"data/mdb/abso/all.csq", |
||||
"data/mdb/abys/abys_bk.cmt", |
||||
"data/mdb/abys/abys_nm.cmt", |
||||
"data/mdb/abys/abys_ta.cmt", |
||||
"data/mdb/abys/all.csq", |
||||
"data/mdb/adre/adre_bk.cmt", |
||||
"data/mdb/adre/adre_nm.cmt", |
||||
"data/mdb/adre/adre_ta.cmt", |
||||
"data/mdb/adre/all.csq", |
||||
"data/mdb/agai/agai_bk.cmt", |
||||
"data/mdb/agai/agai_nm.cmt", |
||||
"data/mdb/agai/agai_ta.cmt", |
||||
"data/mdb/agai/all.csq", |
||||
"data/mdb/alla/all.csq", |
||||
"data/mdb/alla/alla_bk.cmt", |
||||
"data/mdb/alla/alla_nm.cmt", |
||||
"data/mdb/alla/alla_ta.cmt", |
||||
"data/mdb/baby/all.csq", |
||||
"data/mdb/baby/baby_bk.cmt", |
||||
"data/mdb/baby/baby_nm.cmt", |
||||
"data/mdb/baby/baby_ta.cmt", |
||||
"data/mdb/beto/all.csq", |
||||
"data/mdb/beto/beto_bk.cmt", |
||||
"data/mdb/beto/beto_nm.cmt", |
||||
"data/mdb/beto/beto_ta.cmt", |
||||
"data/mdb/bfor/all.csq", |
||||
"data/mdb/bfor/bfor_bk.cmt", |
||||
"data/mdb/bfor/bfor_nm.cmt", |
||||
"data/mdb/bfor/bfor_ta.cmt", |
||||
"data/mdb/bril/all.csq", |
||||
"data/mdb/bril/bril_bk.cmt", |
||||
"data/mdb/bril/bril_nm.cmt", |
||||
"data/mdb/bril/bril_ta.cmt", |
||||
"data/mdb/brok/all.csq", |
||||
"data/mdb/brok/brok_bk.cmt", |
||||
"data/mdb/brok/brok_nm.cmt", |
||||
"data/mdb/brok/brok_ta.cmt", |
||||
"data/mdb/bumb/all.csq", |
||||
"data/mdb/bumb/bumb_bk.cmt", |
||||
"data/mdb/bumb/bumb_nm.cmt", |
||||
"data/mdb/bumb/bumb_ta.cmt", |
||||
"data/mdb/burn/all.csq", |
||||
"data/mdb/burn/burn_bk.cmt", |
||||
"data/mdb/burn/burn_nm.cmt", |
||||
"data/mdb/burn/burn_ta.cmt", |
||||
"data/mdb/butt/all.csq", |
||||
"data/mdb/butt/butt_bk.cmt", |
||||
"data/mdb/butt/butt_nm.cmt", |
||||
"data/mdb/butt/butt_ta.cmt", |
||||
"data/mdb/cafe/all.csq", |
||||
"data/mdb/cafe/cafe_bk.cmt", |
||||
"data/mdb/cafe/cafe_nm.cmt", |
||||
"data/mdb/cafe/cafe_ta.cmt", |
||||
"data/mdb/capt/all.csq", |
||||
"data/mdb/capt/capt_bk.cmt", |
||||
"data/mdb/capt/capt_nm.cmt", |
||||
"data/mdb/capt/capt_ta.cmt", |
||||
"data/mdb/cats/all.csq", |
||||
"data/mdb/cats/cats_bk.cmt", |
||||
"data/mdb/cats/cats_nm.cmt", |
||||
"data/mdb/cats/cats_ta.cmt", |
||||
"data/mdb/clim/all.csq", |
||||
"data/mdb/clim/clim_bk.cmt", |
||||
"data/mdb/clim/clim_nm.cmt", |
||||
"data/mdb/clim/clim_ta.cmt", |
||||
"data/mdb/cong/all.csq", |
||||
"data/mdb/cong/cong_bk.cmt", |
||||
"data/mdb/cong/cong_nm.cmt", |
||||
"data/mdb/cong/cong_ta.cmt", |
||||
"data/mdb/cube/all.csq", |
||||
"data/mdb/cube/cube_bk.cmt", |
||||
"data/mdb/cube/cube_nm.cmt", |
||||
"data/mdb/cube/cube_ta.cmt", |
||||
"data/mdb/damd/all.csq", |
||||
"data/mdb/damd/damd_bk.cmt", |
||||
"data/mdb/damd/damd_nm.cmt", |
||||
"data/mdb/damd/damd_ta.cmt", |
||||
"data/mdb/dead/all.csq", |
||||
"data/mdb/dead/dead_bk.cmt", |
||||
"data/mdb/dead/dead_nm.cmt", |
||||
"data/mdb/dead/dead_ta.cmt", |
||||
"data/mdb/dive/all.csq", |
||||
"data/mdb/dive/dive_bk.cmt", |
||||
"data/mdb/dive/dive_nm.cmt", |
||||
"data/mdb/dive/dive_ta.cmt", |
||||
"data/mdb/dluv/all.csq", |
||||
"data/mdb/dluv/dluv_bk.cmt", |
||||
"data/mdb/dluv/dluv_nm.cmt", |
||||
"data/mdb/dluv/dluv_ta.cmt", |
||||
"data/mdb/dome/all.csq", |
||||
"data/mdb/dome/dome_bk.cmt", |
||||
"data/mdb/dome/dome_nm.cmt", |
||||
"data/mdb/dome/dome_ta.cmt", |
||||
"data/mdb/drop/all.csq", |
||||
"data/mdb/drop/drop_bk.cmt", |
||||
"data/mdb/drop/drop_nm.cmt", |
||||
"data/mdb/drop/drop_ta.cmt", |
||||
"data/mdb/dubi/all.csq", |
||||
"data/mdb/dubi/dubi_bk.cmt", |
||||
"data/mdb/dubi/dubi_nm.cmt", |
||||
"data/mdb/dubi/dubi_ta.cmt", |
||||
"data/mdb/dxyy/all.csq", |
||||
"data/mdb/dxyy/dxyy_bk.cmt", |
||||
"data/mdb/dxyy/dxyy_nm.cmt", |
||||
"data/mdb/dxyy/dxyy_ta.cmt", |
||||
"data/mdb/dyna/all.csq", |
||||
"data/mdb/dyna/dyna_bk.cmt", |
||||
"data/mdb/dyna/dyna_nm.cmt", |
||||
"data/mdb/dyna/dyna_ta.cmt", |
||||
"data/mdb/eaty/all.csq", |
||||
"data/mdb/eaty/eaty_bk.cmt", |
||||
"data/mdb/eaty/eaty_nm.cmt", |
||||
"data/mdb/eaty/eaty_ta.cmt", |
||||
"data/mdb/ecst/all.csq", |
||||
"data/mdb/ecst/ecst_bk.cmt", |
||||
"data/mdb/ecst/ecst_nm.cmt", |
||||
"data/mdb/ecst/ecst_ta.cmt", |
||||
"data/mdb/elec/all.csq", |
||||
"data/mdb/elec/elec_bk.cmt", |
||||
"data/mdb/elec/elec_nm.cmt", |
||||
"data/mdb/elec/elec_ta.cmt", |
||||
"data/mdb/endo/all.csq", |
||||
"data/mdb/endo/endo_bk.cmt", |
||||
"data/mdb/endo/endo_nm.cmt", |
||||
"data/mdb/endo/endo_ta.cmt", |
||||
"data/mdb/eran/all.csq", |
||||
"data/mdb/eran/eran_bk.cmt", |
||||
"data/mdb/eran/eran_nm.cmt", |
||||
"data/mdb/eran/eran_ta.cmt", |
||||
"data/mdb/estm/all.csq", |
||||
"data/mdb/estm/estm_bk.cmt", |
||||
"data/mdb/estm/estm_nm.cmt", |
||||
"data/mdb/estm/estm_ta.cmt", |
||||
"data/mdb/ever/all.csq", |
||||
"data/mdb/ever/ever_bk.cmt", |
||||
"data/mdb/ever/ever_nm.cmt", |
||||
"data/mdb/ever/ever_ta.cmt", |
||||
"data/mdb/feal/all.csq", |
||||
"data/mdb/feal/feal_bk.cmt", |
||||
"data/mdb/feal/feal_nm.cmt", |
||||
"data/mdb/feal/feal_ta.cmt", |
||||
"data/mdb/gain/all.csq", |
||||
"data/mdb/gain/gain_bk.cmt", |
||||
"data/mdb/gain/gain_nm.cmt", |
||||
"data/mdb/gain/gain_ta.cmt", |
||||
"data/mdb/getm/all.csq", |
||||
"data/mdb/getm/getm_bk.cmt", |
||||
"data/mdb/getm/getm_nm.cmt", |
||||
"data/mdb/getm/getm_ta.cmt", |
||||
"data/mdb/gher/all.csq", |
||||
"data/mdb/gher/gher_bk.cmt", |
||||
"data/mdb/gher/gher_nm.cmt", |
||||
"data/mdb/gher/gher_ta.cmt", |
||||
"data/mdb/gimm/all.csq", |
||||
"data/mdb/gimm/gimm_bk.cmt", |
||||
"data/mdb/gimm/gimm_nm.cmt", |
||||
"data/mdb/gimm/gimm_ta.cmt", |
||||
"data/mdb/gotc/all.csq", |
||||
"data/mdb/gotc/gotc_bk.cmt", |
||||
"data/mdb/gotc/gotc_nm.cmt", |
||||
"data/mdb/gotc/gotc_ta.cmt", |
||||
"data/mdb/hboo/all.csq", |
||||
"data/mdb/hboo/hboo_bk.cmt", |
||||
"data/mdb/hboo/hboo_nm.cmt", |
||||
"data/mdb/hboo/hboo_ta.cmt", |
||||
"data/mdb/hboy/all.csq", |
||||
"data/mdb/hboy/hboy_bk.cmt", |
||||
"data/mdb/hboy/hboy_nm.cmt", |
||||
"data/mdb/hboy/hboy_ta.cmt", |
||||
"data/mdb/hdam/all.csq", |
||||
"data/mdb/hdam/hdam_bk.cmt", |
||||
"data/mdb/hdam/hdam_nm.cmt", |
||||
"data/mdb/hdam/hdam_ta.cmt", |
||||
"data/mdb/heat/all.csq", |
||||
"data/mdb/heat/heat_bk.cmt", |
||||
"data/mdb/heat/heat_nm.cmt", |
||||
"data/mdb/heat/heat_ta.cmt", |
||||
"data/mdb/hhav/all.csq", |
||||
"data/mdb/hhav/hhav_bk.cmt", |
||||
"data/mdb/hhav/hhav_nm.cmt", |
||||
"data/mdb/hhav/hhav_ta.cmt", |
||||
"data/mdb/hher/all.csq", |
||||
"data/mdb/hher/hher_bk.cmt", |
||||
"data/mdb/hher/hher_nm.cmt", |
||||
"data/mdb/hher/hher_ta.cmt", |
||||
"data/mdb/hify/all.csq", |
||||
"data/mdb/hify/hify_bk.cmt", |
||||
"data/mdb/hify/hify_nm.cmt", |
||||
"data/mdb/hify/hify_ta.cmt", |
||||
"data/mdb/hotl/all.csq", |
||||
"data/mdb/hotl/hotl_bk.cmt", |
||||
"data/mdb/hotl/hotl_nm.cmt", |
||||
"data/mdb/hotl/hotl_ta.cmt", |
||||
"data/mdb/hypn/all.csq", |
||||
"data/mdb/hypn/hypn_bk.cmt", |
||||
"data/mdb/hypn/hypn_nm.cmt", |
||||
"data/mdb/hypn/hypn_ta.cmt", |
||||
"data/mdb/hyst/all.csq", |
||||
"data/mdb/hyst/hyst_bk.cmt", |
||||
"data/mdb/hyst/hyst_nm.cmt", |
||||
"data/mdb/hyst/hyst_ta.cmt", |
||||
"data/mdb/ibel/all.csq", |
||||
"data/mdb/ibel/ibel_bk.cmt", |
||||
"data/mdb/ibel/ibel_nm.cmt", |
||||
"data/mdb/ibel/ibel_ta.cmt", |
||||
"data/mdb/ifyo/all.csq", |
||||
"data/mdb/ifyo/ifyo_bk.cmt", |
||||
"data/mdb/ifyo/ifyo_nm.cmt", |
||||
"data/mdb/ifyo/ifyo_ta.cmt", |
||||
"data/mdb/inse/all.csq", |
||||
"data/mdb/inse/inse_bk.cmt", |
||||
"data/mdb/inse/inse_nm.cmt", |
||||
"data/mdb/inse/inse_ta.cmt", |
||||
"data/mdb/iton/all.csq", |
||||
"data/mdb/iton/iton_bk.cmt", |
||||
"data/mdb/iton/iton_nm.cmt", |
||||
"data/mdb/iton/iton_ta.cmt", |
||||
"data/mdb/iwas/all.csq", |
||||
"data/mdb/iwas/iwas_bk.cmt", |
||||
"data/mdb/iwas/iwas_nm.cmt", |
||||
"data/mdb/iwas/iwas_ta.cmt", |
||||
"data/mdb/kher/all.csq", |
||||
"data/mdb/kher/kher_bk.cmt", |
||||
"data/mdb/kher/kher_nm.cmt", |
||||
"data/mdb/kher/kher_ta.cmt", |
||||
"data/mdb/kick/all.csq", |
||||
"data/mdb/kick/kick_bk.cmt", |
||||
"data/mdb/kick/kick_nm.cmt", |
||||
"data/mdb/kick/kick_ta.cmt", |
||||
"data/mdb/kyhi/all.csq", |
||||
"data/mdb/kyhi/kyhi_bk.cmt", |
||||
"data/mdb/kyhi/kyhi_nm.cmt", |
||||
"data/mdb/kyhi/kyhi_ta.cmt", |
||||
"data/mdb/lase/all.csq", |
||||
"data/mdb/lase/lase_bk.cmt", |
||||
"data/mdb/lase/lase_nm.cmt", |
||||
"data/mdb/lase/lase_ta.cmt", |
||||
"data/mdb/lbfo/all.csq", |
||||
"data/mdb/lbfo/lbfo_bk.cmt", |
||||
"data/mdb/lbfo/lbfo_nm.cmt", |
||||
"data/mdb/lbfo/lbfo_ta.cmt", |
||||
"data/mdb/lcan/all.csq", |
||||
"data/mdb/lcan/lcan_bk.cmt", |
||||
"data/mdb/lcan/lcan_nm.cmt", |
||||
"data/mdb/lcan/lcan_ta.cmt", |
||||
"data/mdb/ldyn/all.csq", |
||||
"data/mdb/ldyn/ldyn_bk.cmt", |
||||
"data/mdb/ldyn/ldyn_nm.cmt", |
||||
"data/mdb/ldyn/ldyn_ta.cmt", |
||||
"data/mdb/lead/all.csq", |
||||
"data/mdb/lead/lead_bk.cmt", |
||||
"data/mdb/lead/lead_nm.cmt", |
||||
"data/mdb/lead/lead_ta.cmt", |
||||
"data/mdb/letb/all.csq", |
||||
"data/mdb/letb/letb_bk.cmt", |
||||
"data/mdb/letb/letb_nm.cmt", |
||||
"data/mdb/letb/letb_ta.cmt", |
||||
"data/mdb/lety/all.csq", |
||||
"data/mdb/lety/lety_bk.cmt", |
||||
"data/mdb/lety/lety_nm.cmt", |
||||
"data/mdb/lety/lety_ta.cmt", |
||||
"data/mdb/lupi/all.csq", |
||||
"data/mdb/lupi/lupi_bk.cmt", |
||||
"data/mdb/lupi/lupi_nm.cmt", |
||||
"data/mdb/lupi/lupi_ta.cmt", |
||||
"data/mdb/mats/all.csq", |
||||
"data/mdb/mats/mats_bk.cmt", |
||||
"data/mdb/mats/mats_nm.cmt", |
||||
"data/mdb/mats/mats_ta.cmt", |
||||
"data/mdb/mdb.bin", |
||||
"data/mdb/moon/all.csq", |
||||
"data/mdb/moon/moon_bk.cmt", |
||||
"data/mdb/moon/moon_nm.cmt", |
||||
"data/mdb/moon/moon_ta.cmt", |
||||
"data/mdb/movi/all.csq", |
||||
"data/mdb/movi/movi_bk.cmt", |
||||
"data/mdb/movi/movi_nm.cmt", |
||||
"data/mdb/movi/movi_ta.cmt", |
||||
"data/mdb/mrtt/all.csq", |
||||
"data/mdb/mrtt/mrtt_bk.cmt", |
||||
"data/mdb/mrtt/mrtt_nm.cmt", |
||||
"data/mdb/mrtt/mrtt_ta.cmt", |
||||
"data/mdb/musi/all.csq", |
||||
"data/mdb/musi/musi_bk.cmt", |
||||
"data/mdb/musi/musi_nm.cmt", |
||||
"data/mdb/musi/musi_ta.cmt", |
||||
"data/mdb/myge/all.csq", |
||||
"data/mdb/myge/myge_bk.cmt", |
||||
"data/mdb/myge/myge_nm.cmt", |
||||
"data/mdb/myge/myge_ta.cmt", |
||||
"data/mdb/naha/all.csq", |
||||
"data/mdb/naha/naha_bk.cmt", |
||||
"data/mdb/naha/naha_nm.cmt", |
||||
"data/mdb/naha/naha_ta.cmt", |
||||
"data/mdb/nana/all.csq", |
||||
"data/mdb/nana/nana_bk.cmt", |
||||
"data/mdb/nana/nana_nm.cmt", |
||||
"data/mdb/nana/nana_ta.cmt", |
||||
"data/mdb/neve/all.csq", |
||||
"data/mdb/neve/neve_bk.cmt", |
||||
"data/mdb/neve/neve_nm.cmt", |
||||
"data/mdb/neve/neve_ta.cmt", |
||||
"data/mdb/nigh/all.csq", |
||||
"data/mdb/nigh/nigh_bk.cmt", |
||||
"data/mdb/nigh/nigh_nm.cmt", |
||||
"data/mdb/nigh/nigh_ta.cmt", |
||||
"data/mdb/ninz/all.csq", |
||||
"data/mdb/ninz/ninz_bk.cmt", |
||||
"data/mdb/ninz/ninz_nm.cmt", |
||||
"data/mdb/ninz/ninz_ta.cmt", |
||||
"data/mdb/nite/all.csq", |
||||
"data/mdb/nite/nite_bk.cmt", |
||||
"data/mdb/nite/nite_nm.cmt", |
||||
"data/mdb/nite/nite_ta.cmt", |
||||
"data/mdb/noli/all.csq", |
||||
"data/mdb/noli/noli_bk.cmt", |
||||
"data/mdb/noli/noli_nm.cmt", |
||||
"data/mdb/noli/noli_ta.cmt", |
||||
"data/mdb/olic/all.csq", |
||||
"data/mdb/olic/olic_bk.cmt", |
||||
"data/mdb/olic/olic_nm.cmt", |
||||
"data/mdb/olic/olic_ta.cmt", |
||||
"data/mdb/onda/all.csq", |
||||
"data/mdb/onda/onda_bk.cmt", |
||||
"data/mdb/onda/onda_nm.cmt", |
||||
"data/mdb/onda/onda_ta.cmt", |
||||
"data/mdb/ones/all.csq", |
||||
"data/mdb/ones/ones_bk.cmt", |
||||
"data/mdb/ones/ones_nm.cmt", |
||||
"data/mdb/ones/ones_ta.cmt", |
||||
"data/mdb/onet/all.csq", |
||||
"data/mdb/onet/onet_bk.cmt", |
||||
"data/mdb/onet/onet_nm.cmt", |
||||
"data/mdb/onet/onet_ta.cmt", |
||||
"data/mdb/only/all.csq", |
||||
"data/mdb/only/only_bk.cmt", |
||||
"data/mdb/only/only_nm.cmt", |
||||
"data/mdb/only/only_ta.cmt", |
||||
"data/mdb/onts/all.csq", |
||||
"data/mdb/onts/onts_bk.cmt", |
||||
"data/mdb/onts/onts_nm.cmt", |
||||
"data/mdb/onts/onts_ta.cmt", |
||||
"data/mdb/oops/all.csq", |
||||
"data/mdb/oops/oops_bk.cmt", |
||||
"data/mdb/oops/oops_nm.cmt", |
||||
"data/mdb/oops/oops_ta.cmt", |
||||
"data/mdb/oose/all.csq", |
||||
"data/mdb/oose/oose_bk.cmt", |
||||
"data/mdb/oose/oose_nm.cmt", |
||||
"data/mdb/oose/oose_ta.cmt", |
||||
"data/mdb/pafr/all.csq", |
||||
"data/mdb/pafr/pafr_bk.cmt", |
||||
"data/mdb/pafr/pafr_nm.cmt", |
||||
"data/mdb/pafr/pafr_ta.cmt", |
||||
"data/mdb/para2/all.csq", |
||||
"data/mdb/para2/para2_bk.cmt", |
||||
"data/mdb/para2/para2_nm.cmt", |
||||
"data/mdb/para2/para2_ta.cmt", |
||||
"data/mdb/peta/all.csq", |
||||
"data/mdb/peta/peta_bk.cmt", |
||||
"data/mdb/peta/peta_nm.cmt", |
||||
"data/mdb/peta/peta_ta.cmt", |
||||
"data/mdb/peti/all.csq", |
||||
"data/mdb/peti/peti_bk.cmt", |
||||
"data/mdb/peti/peti_nm.cmt", |
||||
"data/mdb/peti/peti_ta.cmt", |
||||
"data/mdb/pevo/all.csq", |
||||
"data/mdb/pevo/pevo_bk.cmt", |
||||
"data/mdb/pevo/pevo_nm.cmt", |
||||
"data/mdb/pevo/pevo_ta.cmt", |
||||
"data/mdb/pink/all.csq", |
||||
"data/mdb/pink/pink_bk.cmt", |
||||
"data/mdb/pink/pink_nm.cmt", |
||||
"data/mdb/pink/pink_ta.cmt", |
||||
"data/mdb/ponp/all.csq", |
||||
"data/mdb/ponp/ponp_bk.cmt", |
||||
"data/mdb/ponp/ponp_nm.cmt", |
||||
"data/mdb/ponp/ponp_ta.cmt", |
||||
"data/mdb/radi/all.csq", |
||||
"data/mdb/radi/radi_bk.cmt", |
||||
"data/mdb/radi/radi_nm.cmt", |
||||
"data/mdb/radi/radi_ta.cmt", |
||||
"data/mdb/reme/all.csq", |
||||
"data/mdb/reme/reme_bk.cmt", |
||||
"data/mdb/reme/reme_nm.cmt", |
||||
"data/mdb/reme/reme_ta.cmt", |
||||
"data/mdb/rhyt/all.csq", |
||||
"data/mdb/rhyt/rhyt_bk.cmt", |
||||
"data/mdb/rhyt/rhyt_nm.cmt", |
||||
"data/mdb/rhyt/rhyt_ta.cmt", |
||||
"data/mdb/righ/all.csq", |
||||
"data/mdb/righ/righ_bk.cmt", |
||||
"data/mdb/righ/righ_nm.cmt", |
||||
"data/mdb/righ/righ_ta.cmt", |
||||
"data/mdb/roma/all.csq", |
||||
"data/mdb/roma/roma_bk.cmt", |
||||
"data/mdb/roma/roma_nm.cmt", |
||||
"data/mdb/roma/roma_ta.cmt", |
||||
"data/mdb/sana/all.csq", |
||||
"data/mdb/sana/sana_bk.cmt", |
||||
"data/mdb/sana/sana_nm.cmt", |
||||
"data/mdb/sana/sana_ta.cmt", |
||||
"data/mdb/seve/all.csq", |
||||
"data/mdb/seve/seve_bk.cmt", |
||||
"data/mdb/seve/seve_nm.cmt", |
||||
"data/mdb/seve/seve_ta.cmt", |
||||
"data/mdb/sexy/all.csq", |
||||
"data/mdb/sexy/sexy_bk.cmt", |
||||
"data/mdb/sexy/sexy_nm.cmt", |
||||
"data/mdb/sexy/sexy_ta.cmt", |
||||
"data/mdb/shak/all.csq", |
||||
"data/mdb/shak/shak_bk.cmt", |
||||
"data/mdb/shak/shak_nm.cmt", |
||||
"data/mdb/shak/shak_ta.cmt", |
||||
"data/mdb/shoo/all.csq", |
||||
"data/mdb/shoo/shoo_bk.cmt", |
||||
"data/mdb/shoo/shoo_nm.cmt", |
||||
"data/mdb/shoo/shoo_ta.cmt", |
||||
"data/mdb/sprs/all.csq", |
||||
"data/mdb/sprs/sprs_bk.cmt", |
||||
"data/mdb/sprs/sprs_nm.cmt", |
||||
"data/mdb/sprs/sprs_ta.cmt", |
||||
"data/mdb/stil/all.csq", |
||||
"data/mdb/stil/stil_bk.cmt", |
||||
"data/mdb/stil/stil_nm.cmt", |
||||
"data/mdb/stil/stil_ta.cmt", |
||||
"data/mdb/stom/all.csq", |
||||
"data/mdb/stom/stom_bk.cmt", |
||||
"data/mdb/stom/stom_nm.cmt", |
||||
"data/mdb/stom/stom_ta.cmt", |
||||
"data/mdb/stop/all.csq", |
||||
"data/mdb/stop/stop_bk.cmt", |
||||
"data/mdb/stop/stop_nm.cmt", |
||||
"data/mdb/stop/stop_ta.cmt", |
||||
"data/mdb/summ/all.csq", |
||||
"data/mdb/summ/summ_bk.cmt", |
||||
"data/mdb/summ/summ_nm.cmt", |
||||
"data/mdb/summ/summ_ta.cmt", |
||||
"data/mdb/sync/all.csq", |
||||
"data/mdb/sync/sync_bk.cmt", |
||||
"data/mdb/sync/sync_nm.cmt", |
||||
"data/mdb/sync/sync_ta.cmt", |
||||
"data/mdb/talk/all.csq", |
||||
"data/mdb/talk/talk_bk.cmt", |
||||
"data/mdb/talk/talk_nm.cmt", |
||||
"data/mdb/talk/talk_ta.cmt", |
||||
"data/mdb/teng/all.csq", |
||||
"data/mdb/teng/teng_bk.cmt", |
||||
"data/mdb/teng/teng_nm.cmt", |
||||
"data/mdb/teng/teng_ta.cmt", |
||||
"data/mdb/tequ/all.csq", |
||||
"data/mdb/tequ/tequ_bk.cmt", |
||||
"data/mdb/tequ/tequ_nm.cmt", |
||||
"data/mdb/tequ/tequ_ta.cmt", |
||||
"data/mdb/them/all.csq", |
||||
"data/mdb/them/them_bk.cmt", |
||||
"data/mdb/them/them_nm.cmt", |
||||
"data/mdb/them/them_ta.cmt", |
||||
"data/mdb/trib/all.csq", |
||||
"data/mdb/trib/trib_bk.cmt", |
||||
"data/mdb/trib/trib_nm.cmt", |
||||
"data/mdb/trib/trib_ta.cmt", |
||||
"data/mdb/twis/all.csq", |
||||
"data/mdb/twis/twis_bk.cmt", |
||||
"data/mdb/twis/twis_nm.cmt", |
||||
"data/mdb/twis/twis_ta.cmt", |
||||
"data/mdb/walk/all.csq", |
||||
"data/mdb/walk/walk_bk.cmt", |
||||
"data/mdb/walk/walk_nm.cmt", |
||||
"data/mdb/walk/walk_ta.cmt", |
||||
"data/mdb/wild/all.csq", |
||||
"data/mdb/wild/wild_bk.cmt", |
||||
"data/mdb/wild/wild_nm.cmt", |
||||
"data/mdb/wild/wild_ta.cmt", |
||||
"data/mdb/xana/all.csq", |
||||
"data/mdb/xana/xana_bk.cmt", |
||||
"data/mdb/xana/xana_nm.cmt", |
||||
"data/mdb/xana/xana_ta.cmt", |
||||
"data/mdb/youn/all.csq", |
||||
"data/mdb/youn/youn_bk.cmt", |
||||
"data/mdb/youn/youn_nm.cmt", |
||||
"data/mdb/youn/youn_ta.cmt", |
||||
"data/mdb/your/all.csq", |
||||
"data/mdb/your/your_bk.cmt", |
||||
"data/mdb/your/your_nm.cmt", |
||||
"data/mdb/your/your_ta.cmt", |
||||
"data/motion/capoera1/capoera1.cmm", |
||||
"data/motion/hiphop1/hiphop1.cmm", |
||||
"data/motion/hiphop2/hiphop2.cmm", |
||||
"data/motion/hopping1/hopping1.cmm", |
||||
"data/motion/inst/inst.cmm", |
||||
"data/motion/jazz1/jazz1.cmm", |
||||
"data/motion/jazz2/jazz2.cmm", |
||||
"data/motion/lock1/lock1.cmm", |
||||
"data/motion/mhouse1/mhouse1.cmm", |
||||
"data/motion/n31/n31.cmm", |
||||
"data/motion/normal/normal.cmm", |
||||
"data/motion/sino_/sino_.cmm", |
||||
"data/motion/soul1/soul1.cmm", |
||||
"data/motion/soul2/soul2.cmm", |
||||
"data/motion/thouse2/thouse2.cmm", |
||||
"data/motion/thouse3/thouse3.cmm", |
||||
"data/motion/y11/y11.cmm", |
||||
"data/motion/y31/y31.cmm", |
||||
"data/mp3/mp3_tab.bin", |
||||
"data/tex/rembind.bin", |
||||
"data/tex/subbind.bin", |
||||
"data/tim/arrow/arros_25.cmt", |
||||
"data/tim/arrow/arrow_16.cmt", |
||||
"data/tim/nfont/ac0808.cmt", |
||||
"data/tim/nfont/ac1112.cmt", |
||||
"data/tim/nfont/ac1616.cmt", |
||||
"data/tim/nfont/nm1220.cmt", |
||||
"data/tim/nfont/nm2020.cmt", |
||||
"data/tim/nfont/nm2422.cmt", |
||||
"data/tim/nfont/nm3222.cmt", |
||||
"data/tim/nfont/sc1216.cmt", |
||||
"data/tim/wfont/acxx12.cmt", |
||||
"data/tim/wfont/acxx16.cmt", |
||||
"data/tim/wfont/acxx20.cmt", |
||||
"data/tim/wfont/nmxx32.cmt", |
||||
"data/tim/wfont/rexx16.cmt", |
||||
"data/tim/wfont/wfont_w.bin", |
||||
"soft/s573/aout.exe" |
||||
] |
@ -0,0 +1,429 @@ |
||||
import argparse |
||||
import copy |
||||
import ctypes |
||||
import glob |
||||
import hashlib |
||||
import json |
||||
import os |
||||
import pathlib |
||||
import struct |
||||
import string |
||||
|
||||
import comp573 |
||||
import sum573 |
||||
|
||||
|
||||
def rebuild_checksum_table(cards): |
||||
card_sizes = [len(x) // 0x8000 for x in cards] |
||||
|
||||
CHUNK_SIZE = 0x20000 |
||||
LAST_CHUNK_OFFSET = len(cards[0]) - CHUNK_SIZE |
||||
LAST_CHUNK_CHECKSUM_OFFSET = LAST_CHUNK_OFFSET + 0x10 |
||||
|
||||
# Set entire checksum.dat section to zero |
||||