From e1d9a8def3eca6d736cc8ba212e4f4a5c1f73404 Mon Sep 17 00:00:00 2001 From: Mateusz Faderewski Date: Sun, 10 Dec 2023 23:35:39 +0100 Subject: [PATCH] compress bootloader background even further --- sw/bootloader/src/display.c | 20 +++++++++----------- sw/bootloader/tools/asset_converter.py | 4 ++-- 2 files changed, 11 insertions(+), 13 deletions(-) diff --git a/sw/bootloader/src/display.c b/sw/bootloader/src/display.c index 0ef803b..e627569 100644 --- a/sw/bootloader/src/display.c +++ b/sw/bootloader/src/display.c @@ -68,24 +68,22 @@ static const vi_regs_t vi_config[] = {{ static void display_decompress_background (uint32_t *background) { - uint32_t pixel_count = ((*background++) / sizeof(uint32_t)); - uint32_t pixels_painted = 0; - uint8_t *background_data = (uint8_t *) (background); uint32_t *framebuffer = (uint32_t *) (display_framebuffer); + int pixel_count = (int) ((*background++) / 3); + int pixels_painted = 0; + while (pixels_painted < pixel_count) { - int pixel_repeat = ((background_data[0]) + 1); - uint32_t pixel_value = ( - ((background_data[1]) << 24) | - ((background_data[2]) << 16) | - ((background_data[3]) << 8) | - (background_data[4]) - ); + uint32_t pixel = *background++; + + int pixel_repeat = (((pixel >> 24) & 0xFF) + 1); + uint32_t pixel_value = (((pixel << 8) & 0xFFFFFF00) | 0xFF); + for (int i = 0; i < pixel_repeat; i++) { cpu_io_write(framebuffer++, pixel_value); } + pixels_painted += pixel_repeat; - background_data += 5; } } diff --git a/sw/bootloader/tools/asset_converter.py b/sw/bootloader/tools/asset_converter.py index 622273e..8cd7788 100644 --- a/sw/bootloader/tools/asset_converter.py +++ b/sw/bootloader/tools/asset_converter.py @@ -47,10 +47,10 @@ if __name__ == '__main__': try: source_asset = Image.open(asset_input) - converted_asset = source_asset.convert('RGBA').tobytes() + converted_asset = source_asset.convert('RGB').tobytes() if (asset_compress): - converted_asset = compress(converted_asset) + converted_asset = compress(converted_asset, step_size=3) final_asset = open(asset_output, 'wb') final_asset.write(converted_asset)