sotn-decomp/config/splat.pspeu.tt_000.yaml

50 lines
1.3 KiB
YAML
Raw Normal View History

Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
options:
platform: psp
Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
basename: tt_000
base_path: ..
build_path: build/pspeu
target_path: disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin
asm_path: asm/pspeu/servant/tt_000
asset_path: assets/servant/tt_000
src_path: src/servant/tt_000
ld_script_path: build/pspeu/tt_000.ld
compiler: GCC
symbol_addrs_path:
- config/symbols.pspeu.txt
- config/symbols.pspeu.tt_000.txt
undefined_funcs_auto_path: config/undefined_funcs_auto.pspeu.tt_000.txt
undefined_syms_auto_path: config/undefined_syms_auto.pspeu.tt_000.txt
find_file_boundaries: yes
use_legacy_include_asm: no
migrate_rodata_to_functions: yes
Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
asm_jtbl_label_macro: jlabel
section_order:
- ".text"
- ".data"
- ".rodata"
- ".bss"
Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
ld_bss_is_noload: True
disasm_unknown: True
asm_inc_header: |
.set noat /* allow manual use of $at */
.set noreorder /* don't insert nops after branches */
.include "macro.inc"
sha1: c8c34ac1d46b31e2e5336df271aa2409f44c9d01
Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
segments:
- [0x0, bin, mwo_header]
Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
- name: tt_000
type: code
start: 0x00000080
vram: 0x092E7680
bss_size: 0x500
Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
align: 128
subalign: 8
Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
subsegments:
- [0x80, c, 10E8]
- [0x48C8, c, 45E4]
Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
- [0x4C80, data]
- [0x5E00, .rodata, 10E8]
- {type: bss, vram: 0x092ed480}
Add TT_000 overlay from PSP (#1113) TT_000 is the first overlay from PlayStation 1 that we are now able to compile from the source and produce a 1:1 binary. This lead me to start exploring the same overlay from the game Castlevania: Dracula X Chronicles, which contains a PSP re-build of Symphony of the Night. This PR adds all the infrastructure to add the same flow for a PSP matching decomp. Use `export VERSION=pspeu` and then the usual `sotn` command to splat the overlay, build it and check if it matches. Running `make extract_disk` should not be necessary as the same ISO used from `VERSION=hd` is also used for `pspeu`, so you will probably have it extracted already. Some important notes about the PSP build: * The whole PSP build seems to be compiled with `-O0`, which makes it much easier to decompile * Having ŧhe PSX, PSP and Saturn builds will allow to easily cross-reference the code and reduce fake matches * `disks/pspeu/PSP_GAME/USRDIR/res/ps/hdbin/tt_000.bin` is the HD PSX build * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PSPBIN/tt_000.bin` has the same code from the HD build, but for PSP * `disks/pspeu/PSP_GAME/USRDIR/res/ps/PACK_E/TP00.BIN` is the same as above, but it packs both overlay and graphics. This is the file the PSP game seems to actually use * The PSP build uses the Metrowerk CodeWarrior's C compiler, which is very different from the GCC one used on PSX. * Thanks to @mkst lead, we found a way to still use the GNU assembler and linker * MWCC uses [wibo](https://github.com/decompals/WiBo/), a think compatibility layer to run Windows CLI tools on Linux. It is much more lightweight than Wine. * MWCC does not support the `INCLUDE_ASM` dialect, so the custom pre-processor `tools/mwcpp` had to be created * The exact MWCC compiler version is unknown, but I suspect it is `build 147` * I am not yet sure of any implications for using GNU AS and GNU LD instead of the MW correspondent tools * Not all the functions can be correctly disassembled, spimdisasm will just produce a bunch of `.word 0x________` due to the in-progress effort of adding the Allegrex-specific opcodes support --- TO-DO list before marking the PR as ready: - [X] Add PSP build to the CI - [x] Add progress reporting to the PSP build - [x] Integrate source file from `src/servant/tt_000_psp` to `src/servant/tt_000` to promote the psp build as first-citizen --- TO-DO in a follow-up PR: * Figure out what `header` is: can we extract it as assembly code? or maybe as custom re-compilable asset via splat? Is it a MW stuff or a Castlevania-specific file? * Get rid of the last line in `Makefile.psp.mk`
2024-04-21 01:18:10 +00:00
- [0x5E80]