Commit Graph

30 Commits

Author SHA1 Message Date
Philippe Symons
0f8236575a Fix a couple of compile errors on latest-release branch
- Fix make clean by adding -f flag when removing output.json

- Fix broken compress_lz10.sh script: it had a check to avoid compressing when the
  input bin file hasn't changed. But the -nt operator also returns false if the output
  file doesn't exist.

- Fix compilation error on conflicting u32 typedef: libtonc defines one and so does data-generator.
  We shouldn't redefine it if the one from libtonc exists. The one in data-generator exists for compiling
  the tool for pc.

- Fix Dockerfile. For some reason the Dockerfile was now failing because Ubuntu manages the python pip
  packages. I fixed it with the --break-system-packages shortcut. It should be fine.
2025-11-27 20:27:35 +01:00
The Gears of Progress
b6be0aedeb Enabling release build 2025-10-12 17:46:59 -04:00
The Gears of Progress
ba1a075701 Adding PCCS 2025-10-12 15:08:33 -04:00
The Gears of Progress
4a612713ee Modifying build process to ignore unmodified files 2025-08-06 23:08:14 -04:00
The Gears of Progress
ba9e30e8d0 Fixing a few bugs before merge 2025-07-28 16:18:51 -04:00
Philippe Symons
47cd143de6 Replace ZX0 by the builtin LZ10 compression.
LZ10 decompression is builtin to the GBA's bios, so we don't need ZX0. It's also significantly faster
(618 usec instead of 2311 usec in my personal benchmark code for decompression of the same data)

And it seems like by doing so, we saved 1 KB as well!

So, seems like replacing ZX0 is the right move.

The reason I didn't initially is because I misunderstood the documentation. I assumed LZ77UnCompWram could only uncompress into EWRAM, not IWRAM.
But it turns out it can do both.

And using standardized tools is usually better than using a custom implementation.

The only downside of this right now, is that we can no longer stream text tables through a smaller buffer than the entire decompressed size.

Anyway, things seem to work fine, so bye bye ZX0. It's been fun.
2025-07-18 16:19:34 +02:00
Philippe Symons
5e7118c0c7 Compress the gb_rom_values and gba_rom_values tables with ZX0. 2025-06-27 16:04:04 +02:00
The Gears of Progress
9e488ae2af Fixing Windows Environment 2025-06-24 16:35:32 -04:00
Philippe Symons
26fd1e2dd3 Add compression for the text data, output stack usage .su files and rework script_array
Add a binary table format and convert the text entries into this format in text_helper/main.py. It then gets compressed with zx0.

The new text_data_table and streamed_data_table classes exist to read the various entries from this binary table. streamed_data_table specifically
exists to use a decompression buffer that is smaller than the actual binary table. But it requires a decompression buffer that is
still larger than ZX0_DEFAULT_WINDOW_SIZE (default: 2048 bytes) and will only be able to decompress in
chunks of (<decompression_buffer_size> - <ZX0_DEFAULT_WINDOW_SIZE>) bytes

Try to keep the binary text tables sufficiently small though, because since zx0 doesn't actually support random access,
getting to the last entry is significantly more expensive than reading the first one. And unless you use streamed_data_table,
it also requires <uncompressed_size> bytes of stack space, therefore IWRAM to decompress them.

I also had to rework script_array because it can no longer reference the strings directly. Instead we now reference the DIA_* "enum" values.
We also no longer store an array of script_obj instances, because these were getting stored in IWRAM since they're non-const global variables
originally. Instead we now have const arrays of script_obj_params structs, which should end up in .rodata -> therefore EWRAM.

Right now, script_obj only supports the PTGB text table (originally the dialogue array). But if the need arises to support other tables as well,
I'd consider adding a separate enum to script_obj_params to indicate the specific table.

The compilation process will also output .su files in the build folder from now on. These files indicate the stack frame size for every function in
every compilation unit, so be sure to check them from time to time. Note that they will only show the stack consumption for that specific function.
So to get the worst case stack consumption, you need to manually add all the functions in a certain stack flow.
2025-05-21 12:21:06 +02:00
Philippe Symons
4c93ff869c Optimize the MOVESETS table for compression + eliminate 4 KB "handles" buffer from
libsysbase_libsysbase_a-handle_manager.o

So, I optimized the MOVESETS table to only store the "overriding" bits in the movesets of the evolutions
in relation to their base forms. That only improved compression slightly (about 300 bytes)

I also eliminated 4 KB of IWRAM usage by libsysbase_libsysbase_a-handle_manager.o because of the "handles"
buffer. We're not using it and we REALLY need our IWRAM. (and it also reduces the rom size with 4KB too!)
2025-04-29 22:22:38 +02:00
Philippe Symons
652f781454 More optimization: move code to IWRAM.
We can now decompress a 512 byte charset in 1 ms. (well, 1.370 ms to be exact)
2025-04-28 12:34:19 +02:00
Philippe Symons
0b5bd11680 More speed optimization
Although the fact that I'm now using -O2 for zx0_decompressor will probably make the binary size larger
2025-04-27 01:03:25 +02:00
Philippe Symons
532a095d77 Implement zx0 compression
Compress data tables with the ZX0 compression algorithm
2025-04-24 21:14:48 +02:00
Philippe Symons
9268cbd42e Reduce binary size by eliminating libstdc++
This commit removes all references to things in the libstdc++ library to remove a decent chunk of bloat.

This means every std::to_string() call, std::string and std::vector. (as well as iostream related stuff).

I replaced those with my own versions ptgb::to_string() and ptgb::vector. Especially the latter is not exactly the same,
but close enough.

I also replaced operator new and delete with my own implementation to avoid pulling in everything related to exceptions
from libstdc++

Another problem was the fact that libtonc uses siscanf, which pulls in everything related to the scanf family of functions
and locale support. The worst part of that was that it included a 13KB "categories" symbol from libc_a-categories.o,
which was pulled in because of the locale support integrated into newlibc's siscanf() function. To fix that, I created a
custom, extremely restricted implementation of siscanf. libtonc only used this function to parse at most 2 integers from a
string anyway.
2025-04-09 20:04:08 +02:00
The Gears of Progress
1a68b30c8b
Merge pull request #36 from risingPhil/feature/load-without-multiboot
Proof Of Concept: Load PokeTransporterGB WITHOUT multiboot
2025-04-06 17:10:41 -04:00
Philippe Symons
7c1fed707e Don't forget to mkdir loader/data 2025-03-24 15:27:19 +01:00
Philippe Symons
e10058c7d9 Proof of concept: add a loader that embeds the multiboot rom and allows to load it from a flashcart 2025-03-24 13:49:37 +01:00
easyaspi314
e4ef25e20e Compress the graphics (mostly), fix potential vram memcpy issue
This greatly decreases the ROM size, from 245 KB to 198 KB with no visual
changes (that I am aware of)

Changes:
- Enable compression on every graphic but the Pokemon sprites (which are
  too large for the GBA to decompress).
- Change grit from emitting .s files to .c files so GCC can strip unused
  palettes and maps
- Fix the empty tiles
- Trim down the font to skip 00-1F and 80-FF which were all zeroes
  - needs a slight workaround because the Pokemon name display was printing
    an invisible FF byte
- Switch memcpy to tonccpy which is vram safe
- Limit palette sizes.

Signed-off-by: easyaspi314 <6258309+easyaspi314@users.noreply.github.com>
2025-01-17 19:32:48 -05:00
The Gears of Progress
e3c5898683 Fixing contest hall data bug 2024-09-25 14:51:20 -04:00
The Gears of Progress
be25471bbc Optimizing size 2024-09-25 12:47:13 -04:00
The Gears of Progress
1ec09842ad Updating tons of graphics 2024-08-19 14:47:29 -04:00
Remnants of Forgotten Disney
3784db8344 Finishing touches 2023-12-04 15:36:47 -06:00
Remnants of Forgotten Disney
eb87ab3c03 Inital implementation of Save.C 2023-12-03 14:22:04 -06:00
Starport75
5b3e46c5a7 Audio stuff 2023-08-12 20:04:45 -05:00
Starport75
e154f72007 Removed libugba 2023-08-10 17:22:46 -05:00
Starport75
19f346ba42 Back to TONC 2023-06-09 18:31:19 -05:00
Starport75
973b24f538 Changing from TONC to LIBGBA 2023-06-06 21:38:14 -05:00
Starport75
7db3eea80c Beginning Link Cable Work 2023-05-04 19:07:33 -05:00
Starport75
0da61e514e Adding the flash library 2023-04-16 14:32:23 -05:00
Starport75
dbc46b2e3c
Initial commit 2023-04-11 10:35:49 -05:00